X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=WebPac.pm;h=872aec030f68dfd2262b8d91fb62293710b8be71;hb=refs%2Fheads%2Fmaster;hp=d6356a28a13bd0c7d4d8a291d56d0cd58c46ac86;hpb=9861fc1f67f30e7bcd83269be906b6288905bc9a;p=webpac diff --git a/WebPac.pm b/WebPac.pm index d6356a2..872aec0 100644 --- a/WebPac.pm +++ b/WebPac.pm @@ -10,9 +10,10 @@ use DBI; use Config::IniFiles; use Text::Unaccent; use Data::Pageset; +use POSIX qw(locale_h); use lib '..'; -use index_DBI_tag; +use index_DBI_filter; use back2html; @@ -32,11 +33,15 @@ my $UNAC_FILTER =$cfg_global->val('global', 'my_unac_filter'); my $BASE_PATH =$cfg_global->val('webpac', 'base_path'); # for pager my $pages_per_set = $cfg_global->val('webpac', 'pages_per_set') || 10; +my $locale = $cfg_global->val('locale') || 'hr_HR'; Text::Iconv->raise_error(0); # Conversion errors raise exceptions my $from_utf8 = Text::Iconv->new('UTF8', $CHARSET); +setlocale(LC_CTYPE, $locale); +setlocale(LC_COLLATE, $locale); + if ($UNAC_FILTER) { require $UNAC_FILTER; } else { @@ -58,6 +63,10 @@ sub suff2file($$$$) { 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 "/") { @@ -134,37 +143,58 @@ sub make_pager($$$) { # 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,'..'); } foreach my $p (@{$pager->pages_in_set()}) { - next if ($p < 0); + next if ($p <= 0); if($p == $pager->current_page()) { $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); @@ -182,14 +212,18 @@ sub make_pager_vars { my $tmpl = shift @_; my @persist_vars = @_; my $hidden_vars = ''; + my $hidden_search = ''; foreach my $v (@persist_vars) { foreach my $val ($q->param($v)) { next if (! $val || $val eq ''); + $val =~ s/"/"/g; $hidden_vars .= ''."\n"; + $hidden_search .= ''."\n" if ($v ne "rm"); } } $tmpl->param('PAGER_HIDDEN', $hidden_vars); + $tmpl->param('SEARCH_HIDDEN', $hidden_search); $tmpl->param('PAGER_JAVASCRIPT', qq#