--- trunk/WebPac.pm 2005/09/11 18:00:46 709 +++ trunk/WebPac.pm 2009/05/25 13:49:51 789 @@ -63,6 +63,10 @@ return $tpl if (! $base_path); + #warn "base_path: $base_path, p: $p, path: $path, tpl: $tpl\n"; + + $p =~ s#/[^/]*$##; + # strip everything to and including base path, leaving only # additional (virtual) path if ($base_path eq "/") { @@ -139,16 +143,37 @@ # my ($pager_prev,$pager_next, $pager_jump) = ('','',''); - my $nav_fmt=qq{ %s }; + sub url_with_params { + my ($q,$text) = @_; + my %param = $q->Vars; + my @p; + foreach my $p ( keys %param ) { + my $v = $param{$p}; + next unless defined $v and length($v) > 0; + if ( $v =~ m{\0} ) { + push @p, $p . '=' . my_unac_string($CHARSET, $_) + foreach (split(/\0/, $v )); + } else { + push @p, $p . '=' . my_unac_string($CHARSET, $v); + } + } + + return + qq{ $text }; + } if ($pager->current_page() > $pager->first_page) { $q->param('PAGER_offset', $pager->current_page - 1); - $pager_prev .= sprintf($nav_fmt,$q->url(-relative=>1, -query=>1),'<<'); + $pager_prev .= url_with_params( $q, '<<'); } if ($pager->previous_set) { $q->param('PAGER_offset', $pager->previous_set); - $pager_prev .= sprintf($nav_fmt,$q->url(-relative=>1, -query=>1),'..'); + $pager_prev .= url_with_params( $q,'..'); } @@ -158,18 +183,18 @@ $pager_jump .= "$p "; } else { $q->param('PAGER_offset', $p); - $pager_jump .= sprintf($nav_fmt,$q->url(-relative=>1, -query=>1),$p); + $pager_jump .= url_with_params($q,$p); } } if ($pager->next_set) { $q->param('PAGER_offset', $pager->next_set); - $pager_next .= sprintf($nav_fmt,$q->url(-relative=>1, -query=>1),'..'); + $pager_next .= url_with_params($q,'..'); } if ($pager->current_page() < $pager->last_page) { $q->param('PAGER_offset', $pager->current_page + 1); - $pager_next .= sprintf($nav_fmt,$q->url(-relative=>1, -query=>1),'>>'); + $pager_next .= url_with_params($q,'>>'); } $tmpl->param('PAGER_PREV', $pager_prev); @@ -282,12 +307,15 @@ $url_params->{"f$i"} = $q->url_param("f$i"); $url_params_persist->{"f$i"} = $q->url_param("f$i") if ($persist); + my @v; + foreach my $v ($q->url_param("v$i")) { # escape quotes so that phrase search work $v =~ s/"/%22/g; - $url_params->{"v$i"} = $v; - $url_params_persist->{"v$i"} = $v if ($persist); + push @v, $v; } + $url_params->{"v$i"} = \@v; + $url_params_persist->{"v$i"} = \@v if ($persist); if ($q->param("e$i")) { $url_params->{"e$i"} = $q->url_param("e$i"); @@ -424,7 +452,16 @@ # URL parametars for search results sub cook_url_params { my $hash = shift || return; - return join("&", map { $_."=".$hash->{$_} } keys %{$hash}); + return join("&", map { + my $var = $_; + if (ref($hash->{$var}) eq 'ARRAY') { + join('&', + map { $var.'='.$_ } @{$hash->{$var}} + ); + } else { + $var."=".$hash->{$var}; + } + } keys %{$hash}); } $tmpl->param('url_params',"?".cook_url_params($url_params));