X-Git-Url: http://git.ieval.ro/?a=blobdiff_plain;f=lib%2FPlack%2FApp%2FGruntmaster%2FHTML.pm;h=a21b6cc933da5393d48e6e67a4ddf84a6397d0ca;hb=13bd614386ed048bdab35805369d796de1d6ad6d;hp=1eb6d988d05d081d98b173b1ec8d9867cc0ef5a5;hpb=93ed6f8465757803a8307da3b2c097297ecec715;p=plack-app-gruntmaster.git diff --git a/lib/Plack/App/Gruntmaster/HTML.pm b/lib/Plack/App/Gruntmaster/HTML.pm index 1eb6d98..a21b6cc 100644 --- a/lib/Plack/App/Gruntmaster/HTML.pm +++ b/lib/Plack/App/Gruntmaster/HTML.pm @@ -42,6 +42,14 @@ sub HTML::Element::namedlink { $self->replace_content($name); } +my %page_cache; +for () { + my ($tmpl, $lang) = m,tmpl/(\w+)\.(\w+),; + my $builder = HTML::Seamstress->new; + $builder->ignore_unknown(0); + $page_cache{$tmpl, $lang} = $builder->parse_file($_); +} + sub render { my ($tmpl, $lang, %args) = @_; $lang //= 'en'; @@ -59,16 +67,14 @@ sub render_article { sub _render { my ($tmpl, $lang, %args) = @_; - my $builder = HTML::Seamstress->new; - $builder->ignore_unknown(0); - my $tree = $builder->parse_file("tmpl/$tmpl.$lang"); + my $tree = $page_cache{$tmpl, $lang}->clone or die "No such template/language combination: $tmpl/$lang\n"; $tree = $tree->guts unless $tmpl eq 'skel'; $tree->defmap(smap => \%args); my $process = __PACKAGE__->can("process_$tmpl"); $process->($tree, %args) if $process; $_->detach for $tree->look_down(static => $args{static} ? 'no' : 'yes'); $_->attr('static', undef) for $tree->look_down(sub {$_[0]->attr('static')}); - $_->attr('smap', undef) for $tree->look_down(sub {$_[0]->attr('defmap')}); + $_->attr('smap', undef) for $tree->look_down(sub {$_[0]->attr('smap')}); $tree->as_HTML; } @@ -260,6 +266,10 @@ sub process_log { $elem->find('a')->edit_href(sub{s/$/&$str/}) if $str; } $tree->fclass('current')->replace_content("Page $args{current_page} of $args{last_page}"); + + my @detach; + push @detach, $args{args}{$_} ? $tree->fclass($_) : () for qw/problem contest owner/; + $_->detach for @detach; } sub process_st { @@ -295,3 +305,6 @@ sub process_ed { my @pb = map { @{$args{$_} // []} } qw/beginner easy medium hard/; $tree->fclass('well')->iter3(\@pb, $iter); } + +1; +__END__