X-Git-Url: https://git.deb.at/?a=blobdiff_plain;f=lib%2FPackages%2FTemplate.pm;h=1a6aa0cfb558478c647207cf009506d516e76c90;hb=e9e5399ad699b724ed7d236b43f76b3ff85050bd;hp=9912cd704f2acbb023402e35e7dd7cdd07fc6e7a;hpb=2ec757bb58907b15c43548be5601d4f2b8c7caac;p=deb%2Fpackages.git diff --git a/lib/Packages/Template.pm b/lib/Packages/Template.pm index 9912cd7..1a6aa0c 100644 --- a/lib/Packages/Template.pm +++ b/lib/Packages/Template.pm @@ -4,10 +4,13 @@ use strict; use warnings; use Template; -use Locale::gettext; +use URI (); +use HTML::Entities (); +use URI::Escape (); use Benchmark ':hireswallclock'; use Packages::CGI; +use Packages::Config qw( @LANGUAGES ); use Packages::I18N::Locale; use Packages::I18N::Languages; use Packages::I18N::LanguageNames; @@ -19,6 +22,7 @@ use constant COMPILE => 1; sub new { my ($classname, $include, $format, $vars, $options) = @_; + $vars ||= {}; $options ||= {}; my $self = {}; @@ -29,6 +33,26 @@ sub new { year => $timestamp[5]+1900, string => scalar gmtime() .' UTC', }; + $vars->{make_search_url} = sub { return &Packages::CGI::make_search_url(@_) }; + $vars->{make_url} = sub { return &Packages::CGI::make_url(@_) }; + $vars->{g} = sub { my ($f, @a) = @_; return sprintf($f, @a); }; + if ($vars->{cat}) { + $vars->{g} = sub { return Packages::I18N::Locale::g($vars->{cat}, @_) }; + } + $vars->{extract_host} = sub { my $uri_str = $_[0]; + my $uri = URI->new($uri_str); + if ($uri->can('host')) { + my $host = $uri->host; + $host .= ':'.$uri->port if $uri->port != $uri->default_port; + return $host; + } + return $uri_str; + }; + # needed to work around the limitations of the the FILTER syntax + $vars->{html_encode} = sub { return HTML::Entities::encode_entities(@_,'<>&"') }; + $vars->{uri_escape} = sub { return URI::Escape::uri_escape(@_) }; + $vars->{quotemeta} = sub { return quotemeta($_[0]) }; + $vars->{string2id} = sub { return &Packages::CGI::string2id(@_) }; $self->{template} = Template->new( { PRE_PROCESS => [ 'config.tmpl' ], @@ -36,8 +60,9 @@ sub new { VARIABLES => $vars, COMPILE_EXT => '.ttc', %$options, - } ) or fatal_error( sprintf( _g( "Initialization of Template Engine failed: %s" ), $Template::ERROR ) ); + } ) or die sprintf( "Initialization of Template Engine failed: %s", $Template::ERROR ); $self->{format} = $format; + $self->{vars} = $vars; return $self; } @@ -52,15 +77,29 @@ sub error { } sub page { - my ($self, $action, $page_content) = @_; + my ($self, $action, $page_content, $target) = @_; #use Data::Dumper; #die Dumper($self, $action, $page_content); + if ($page_content->{cat}) { + $page_content->{g} = + sub { return Packages::I18N::Locale::g($page_content->{cat}, @_) }; + } + $page_content->{used_langs} ||= \@LANGUAGES; + $page_content->{langs} = languages( $page_content->{po_lang} + || $self->{vars}{po_lang} || 'en', + $page_content->{ddtp_lang} + || $self->{vars}{ddtp_lang} || 'en', + @{$page_content->{used_langs}} ); my $txt; - $self->process("$self->{format}/$action.tmpl", $page_content, \$txt) - or die sprintf( "template error: %s", $self->error ); # too late for reporting on-line - + if ($target) { + $self->process("$self->{format}/$action.tmpl", $page_content, $target) + or die sprintf( "template error: %s", $self->error ); # too late for reporting on-line + } else { + $self->process("$self->{format}/$action.tmpl", $page_content, \$txt) + or die sprintf( "template error: %s", $self->error ); + } return $txt; } @@ -71,35 +110,26 @@ sub error_page { # warn Dumper($page_content); my $txt; - $self->process("$self->{format}/error.tmpl", $page_content, \$txt) - or die sprintf( "template error: %s", $self->error ); # too late for reporting on-line - - return $txt; -} - -sub trailer { - my ($self, $NAME, $LANG, $USED_LANGS, $timediff) = @_; - - my $langs = languages( $LANG, @$USED_LANGS ); - - my $txt; - $self->process("$self->{format}/foot.tmpl", { langs => $langs, name => $NAME, benchmark => $timediff ? timestr($timediff) : '' }, \$txt) + $self->process("html/error.tmpl", $page_content, \$txt) or die sprintf( "template error: %s", $self->error ); # too late for reporting on-line return $txt; } sub languages { - my ( $lang, @used_langs ) = @_; - + my ( $po_lang, $ddtp_lang, @used_langs ) = @_; + my $cat = Packages::I18N::Locale->get_handle($po_lang, 'en'); + my @langs; + my $skip_lang = ($po_lang eq $ddtp_lang) ? $po_lang : ''; if (@used_langs) { - + my @printed_langs = (); foreach (@used_langs) { - next if $_ eq $lang; # Never print the current language - unless (get_selfname($_)) { warn "missing language $_"; next } #DEBUG + next if $_ eq $skip_lang; # Don't print the current language + unless (get_selfname($_)) { warn "missing language selfname $_"; next } #DEBUG + unless (get_language_name($_)) { warn "missing language name $_"; next } #DEBUG push @printed_langs, $_; } return [] unless scalar @printed_langs; @@ -108,13 +138,14 @@ sub languages { foreach my $cur_lang (sort langcmp @printed_langs) { my %lang; $lang{lang} = $cur_lang; - $lang{tooltip} = dgettext( "langs", get_language_name($cur_lang) ); - $lang{selfname} = get_selfname($cur_lang); - $lang{transliteration} = get_transliteration($cur_lang) if defined get_transliteration($cur_lang); + $lang{tooltip} = $cat->g(get_language_name($cur_lang)); + $lang{selfname} = get_selfname($cur_lang); + $lang{transliteration} = get_transliteration($cur_lang) + if defined get_transliteration($cur_lang); push @langs, \%lang; } } - + return \@langs; }