}
sub render_article {
- my ($art, $lang) = @_;
+ my ($art, $lang, %args) = @_;
$lang //= 'en';
my $title = read_file "a/$art.$lang.title";
my $meat = read_file "a/$art.$lang";
- _render('skel', $lang, title => $title , meat => $meat)
+ _render('skel', $lang, title => $title , meat => $meat, %args)
}
sub _render {
$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')});
$tree->as_HTML;
}
$tree->fid('owner')->edit_href(sub{s/owner_id/$args{owner}/});
$tree->fid('job_log')->edit_href(sub{s/problem_id/$args{id}/});
$tree->fid('solution')->edit_href(sub{s/problem_id/$args{id}/});
- $tree->fid('job_log')->edit_href(sub{$_ .= "&private=$args{private}"}) if $args{private};
$tree->content_handler(
statement => literal $args{statement},
level => ucfirst $args{level},
$score->attr('data-value' => $args{value});
$tree->fid('countdown')->attr('data-stop' => $args{contest_stop});
} else {
+ $tree->fid('job_log')->edit_href(sub{$_ .= "&private=$args{private}"}) if $args{private};
$tree->fid('solution')->detach unless $args{solution};
$_->detach for $tree->fclass('rc'); # requires contest
$tree->fid('solution_modal')->fclass('modal-body')->replace_content(literal $args{solution});
$tree->fid('nosubmit')->detach;
$tree->look_down(name => 'problem')->attr(value => $args{id});
my $contest = $tree->look_down(name => 'contest');
- $contest->attr(value => $args{contest}) if $args{contest};
- $contest->detach unless $args{contest}
+ $contest->attr(value => $args{args}{contest}) if $args{args}{contest};
+ $contest->detach unless $args{args}{contest}
} else {
$tree->fid('nosubmit')->find('a')->edit_href(sub{s/id/$args{id}/});
$tree->fid('submit')->detach
my ($data, $tr) = @_;
$tr->fclass('id')->namedlink($data->{id});
$tr->fclass('problem')->namedlink($data->{problem}, $data->{problem_name});
- $tr->fclass('problem')->find('a')->edit_href(sub{$_ .= "?contest=$args{contest}"}) if $args{contest};
+ $tr->fclass('problem')->find('a')->edit_href(sub{$_ .= "?contest=$args{args}{contest}"}) if $args{args}{contest};
$tr->fclass('contest')->namedlink($data->{contest}, $data->{contest_name}) if $data->{contest};
$tr->fclass('contest')->replace_content('None') unless $data->{contest};
$tr->fclass('date')->replace_content(ftime $data->{date});
- $tr->fclass('source')->namedlink("$data->{id}.$data->{extension}", sprintf "%.2fKB %s", $data->{size}/1024, $data->{format});
+ $tr->fclass('source')->namedlink("$data->{id}.$data->{extension}", sprintf "%.2fKB %s", $data->{size}/1024, Plack::App::Gruntmaster::FORMAT_EXTENSION()->{$data->{format}});
$tr->fclass('owner')->namedlink($data->{owner}, $data->{owner_name});
$tr->fclass('result_text')->replace_content($data->{result_text});
$tr->fclass('result_text')->attr(class => "r$data->{result}");