--- 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));