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 @@