From: Dobrica Pavlinusic Date: Wed, 22 Apr 2009 12:51:23 +0000 (+0000) Subject: r1786@llin: dpavlin | 2009-04-22 13:47:56 +0200 X-Git-Url: http://git.rot13.org/?p=webpac2;a=commitdiff_plain;h=04e87d8aeb577c8e6d835493deba7c8bbaa6dc3c r1786@llin: dpavlin | 2009-04-22 13:47:56 +0200 pager tweaks git-svn-id: svn+ssh://mjesec/home/dpavlin/svn/webpac2/trunk@1139 07558da8-63fa-0310-ba24-9fe276d99e06 --- diff --git a/vhost/style.css b/vhost/style.css index 081d18d..317c462 100644 --- a/vhost/style.css +++ b/vhost/style.css @@ -38,9 +38,29 @@ form input[name=search] { } #results ol li { + clear: left; margin-bottom: 1em; } +#results .pager { + clear: left; + text-align: center; +} + +#results .pager a, +#results .pager span { + width: 3em; + float: left; +} + +.pager .current_page { + font-weight: bold; +} + +.pager .skip { + color: #888; +} + pre { border-top: 1px solid #888; clear: left; diff --git a/vhost/webpac2.cgi b/vhost/webpac2.cgi index 7b18776..045297f 100755 --- a/vhost/webpac2.cgi +++ b/vhost/webpac2.cgi @@ -21,7 +21,7 @@ sub dump_yaml { print qq|
# $name\n|, YAML::Dump( @_ ), qq|
|; } -sub show_pages { +sub show_pager { my ($pager,$coderef) = @_; my @show_pages; @@ -34,23 +34,32 @@ sub show_pages { @show_pages = ( $pager->first_page, '', $pager->current_page - $range_around .. $pager->current_page ); } - if ( $pager->current_page + $range_around + 1 >= $pager->last_page ) { + if ( $pager->current_page + $after_current + $range_around + 1 >= $pager->last_page ) { push @show_pages, ( $pager->current_page + 1 .. $pager->last_page ); } else { push @show_pages, ( $pager->current_page + 1 .. $pager->current_page + $after_current + $range_around, '', $pager->last_page ); } - warn "## show_pages = ",dump( @show_pages ); + dump_yaml( 'show_pages', \@show_pages ); - return join( ' ', map { - if ( $_ == $pager->current_page ) { - qq|$_|; - } elsif ( $_ eq '' ) { - qq|...|; - } else { - $coderef->( $_ ); - } - } @show_pages ); + return '' unless $#show_pages; + + my ( $prev, $next ) = ( '<<', '>>' ); + + return + $pager->previous_page ? $coderef->( $pager->previous_page, $prev ) : $prev + , join( ' ', map { + if ( $_ == $pager->current_page ) { + qq|$_|; + } elsif ( $_ eq '' ) { + qq|...|; + } else { + $coderef->( $_ ); + } + } @show_pages ) + , $pager->next_page ? $coderef->( $pager->next_page, $next ) : $next + ; + } my $path = $ENV{PATH_INFO} || 'ecas'; @@ -84,7 +93,7 @@ print ), h1( $db->{name} ), qq|
|, $db->{description}, qq|
|, - start_form, + start_form( -action => self_url( query => 0 ) ), radio_group( -name => 'attr', -values => [ @attr ], @@ -108,14 +117,20 @@ if ( my $search = param('search') ) { ); param( 'entries_per_page', $entries_per_page ) unless param('entries_per_page'); # FIXME not needed? + my $pager = Data::Page->new; + $pager->total_entries( param('current_page') * param('entries_per_page') ); + $pager->$_( param($_) ) foreach ( qw/entries_per_page current_page/ ); + + dump_yaml( 'pager', $pager ); my $cond = Search::Estraier::Condition->new; $cond->set_phrase( $search ); - $cond->set_skip( param('current_page') ); - $cond->set_max( param('entries_per_page') ); + $cond->set_skip( $pager->skipped ); + $cond->set_max( $pager->entries_per_page ); my $nres = $node->search( $cond, 0 ); + $pager->total_entries( $nres->hits ); - my $pager = Data::Page->new( $nres->hits, param('entries_per_page'), param('current_page') ); + dump_yaml( 'cond', $cond ); if ( ! $nres ) { my $no_results = "No results for search '%s'"; @@ -127,14 +142,15 @@ if ( my $search = param('search') ) { print qq|
|, - show_pages( $pager, + join(' ', show_pager( $pager, sub { - my ($page) = @_; + my ($page,$label) = @_; param( 'current_page', $page ); my $url = self_url( -query => 1 ); - qq|$_|; + $label = $page unless defined $label; + qq|$label|; } - ), + )), qq|
| ;