diff --git a/Source/pages/list.php b/Source/pages/list.php index ee1497d..6d12603 100644 --- a/Source/pages/list.php +++ b/Source/pages/list.php @@ -56,25 +56,46 @@ $t_count = $t_stats['changesets']; if ( $t_count > $f_perpage ) { - $t_page = 1; - while( $t_count > 0 ) { - if ( $t_page > 1 && $t_page % 15 != 1 ) { - echo ', '; + + $t_pages = ceil( $t_count / $f_perpage ); + $t_current = $f_offset; + $t_page_set = array(); + + $t_page_link_body = "if ( is_null( \$t ) ) { \$t = \$p; } + return ( is_null( \$p ) ? '...' : ( \$p == $t_current ? \"\$p\" : + '' . \$t . '' ) );"; + $t_page_link = create_function( '$p, $t=null', $t_page_link_body ) or die( 'gah' ); + + if ( $t_pages > 15 ) { + $t_used_page = false; + for( $i = 1; $i <= $t_pages; $i++ ) { + if ( $i <= 3 || $i > $t_pages-3 || + ( $i >= $t_current-4 && $i <= $t_current+4 ) || + $i % 10 == 0) { + + $t_page_set[] = $i; + $t_used_page = true; + } else if ( $t_used_page ) { + $t_page_set[] = null; + $t_used_page = false; + } } - if ( $t_page == $f_offset ) { - echo " $t_page"; - } else { - echo ' ', $t_page, ''; - } - - if ( $t_page % 15 == 0 ) { - echo '
'; - } - - $t_count -= $f_perpage; - $t_page ++; + } else { + $t_page_set = range( 1, $t_pages ); } + + if ( $t_current > 1 ) { + echo $t_page_link( $f_offset-1, '<<' ), '  '; + } + + $t_page_set = map( $t_page_link, $t_page_set ); + echo join( ' ', $t_page_set ); + + if ( $t_current < $t_pages ) { + echo '  ', $t_page_link( $f_offset+1, '>>' ); + } + } ?> diff --git a/Source/pages/search.php b/Source/pages/search.php index 04f420d..3a4a8d7 100644 --- a/Source/pages/search.php +++ b/Source/pages/search.php @@ -47,30 +47,51 @@ - + $f_perpage ) { - $t_page = 1; - while( $t_count > 0 ) { - if ( $t_page > 1 && $t_page % 15 != 1 ) { - echo ', '; + + $t_pages = ceil( $t_count / $f_perpage ); + $t_current = $f_offset; + $t_page_set = array(); + + $t_page_link_body = "if ( is_null( \$t ) ) { \$t = \$p; } + return ( is_null( \$p ) ? '...' : ( \$p == $t_current ? \"\$p\" : + '' . \$t . '' ) );"; + $t_page_link = create_function( '$p, $t=null', $t_page_link_body ) or die( 'gah' ); + + if ( $t_pages > 15 ) { + $t_used_page = false; + for( $i = 1; $i <= $t_pages; $i++ ) { + if ( $i <= 3 || $i > $t_pages-3 || + ( $i >= $t_current-4 && $i <= $t_current+4 ) || + $i % 10 == 0) { + + $t_page_set[] = $i; + $t_used_page = true; + } else if ( $t_used_page ) { + $t_page_set[] = null; + $t_used_page = false; + } } - if ( $t_page == $f_offset ) { - echo " $t_page"; - } else { - echo ' ', $t_page, ''; - } - - if ( $t_page % 15 == 0 ) { - echo '
'; - } - - $t_count -= $f_perpage; - $t_page ++; + } else { + $t_page_set = range( 1, $t_pages ); } + + if ( $t_current > 1 ) { + echo $t_page_link( $f_offset-1, '<<' ), '  '; + } + + $t_page_set = map( $t_page_link, $t_page_set ); + echo join( ' ', $t_page_set ); + + if ( $t_current < $t_pages ) { + echo '  ', $t_page_link( $f_offset+1, '>>' ); + } + } ?>