+sub in_template {
+ my $q = shift || die "need CGI object!";
+ my $html = shift || die "This page is left unintentionally blank";
+ return $html if (! defined($TEMPLATE));
+
+ my ($dir,$tpl);
+ if ($TEMPLATE =~ m,^(.*?/*)([^/]+)$,) {
+ ($dir,$tpl) = ($1,$2);
+ } else {
+ die "can't parse TEMPLATE path";
+ }
+
+ my $master_tpl = suff2file($BASE_PATH, $q->url(-absolute => 1, -path => 1),$dir,$tpl);
+ if (open(T, $master_tpl)) {
+ my $template_html = join("\n",<T>);
+ close(T);
+ $template_html =~ s/##webpac##/$html/gsi;
+ return $template_html;
+ } else {
+ return "Can't read template '$master_tpl'";
+ }
+}
+
+#--------------------------------------------------------------------------
+
+#
+# make pager navigation and fill template variables
+# compatibile with HTML::Pager
+#
+
+sub make_pager($$$) {
+ my ($q,$tmpl,$pager) = @_;
+
+ #
+ # pager navigation
+ #
+ my ($pager_prev,$pager_next, $pager_jump) = ('','','');
+
+ 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{ <a href="}
+ . $q->url( -relative => 1 )
+ . '?'
+ . join(';', @p)
+ . qq{">$text</a> };
+ }
+
+ if ($pager->current_page() > $pager->first_page) {
+ $q->param('PAGER_offset', $pager->current_page - 1);
+ $pager_prev .= url_with_params( $q, '<<');
+ }
+
+ if ($pager->previous_set) {
+ $q->param('PAGER_offset', $pager->previous_set);
+ $pager_prev .= url_with_params( $q,'..');
+ }
+
+
+ foreach my $p (@{$pager->pages_in_set()}) {
+ next if ($p <= 0);
+ if($p == $pager->current_page()) {
+ $pager_jump .= "<b>$p</b> ";
+ } else {
+ $q->param('PAGER_offset', $p);
+ $pager_jump .= url_with_params($q,$p);
+ }
+ }
+
+ if ($pager->next_set) {
+ $q->param('PAGER_offset', $pager->next_set);
+ $pager_next .= url_with_params($q,'..');
+ }
+
+ if ($pager->current_page() < $pager->last_page) {
+ $q->param('PAGER_offset', $pager->current_page + 1);
+ $pager_next .= url_with_params($q,'>>');
+ }
+
+ $tmpl->param('PAGER_PREV', $pager_prev);
+ $tmpl->param('PAGER_JUMP', $pager_jump);
+ $tmpl->param('PAGER_NEXT', $pager_next);
+
+}
+
+#
+# put persisten variables in template
+#
+
+sub make_pager_vars {
+ my $q = shift @_;
+ 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 .= '<input type="hidden" name="'.$v.'" value="'.$val.'"/>'."\n";
+ $hidden_search .= '<input type="hidden" name="'.$v.'" value="'.$val.'"/>'."\n" if ($v ne "rm");
+ }
+ }
+
+ $tmpl->param('PAGER_HIDDEN', $hidden_vars);
+ $tmpl->param('SEARCH_HIDDEN', $hidden_search);
+ $tmpl->param('PAGER_JAVASCRIPT', qq#
+<SCRIPT LANGUAGE="Javascript">
+<!-- Begin
+ // dummy emulator for HTML::Pager templates
+ function PAGER_set_offset_and_submit() {
+ return true;
+ }
+// End -->
+</script>
+ #);
+}
+
+#--------------------------------------------------------------------------
+