sub ftime ($) { POSIX::strftime '%c', localtime shift }
sub literal ($) {
my ($html) = @_;
- return unless $html;
+ return '' unless $html;
my $b = HTML::TreeBuilder->new;
$b->ignore_unknown(0);
$b->parse($html);
$tr->fclass('name')->namedlink($data->{id}, $data->{name});
$tr->fclass('owner')->namedlink($data->{owner}, $data->{owner_name});
};
+ for (@{$args{ct}}) {
+ my $state = $_->{finished} ? 'finished' : $_->{started} ? 'running' : 'pending';
+ push @{$args{$state} //= []}, $_;
+ }
$args{$_} ? $tree->fid($_)->find('tbody')->find('tr')->iter3($args{$_}, $iter) : $tree->fid($_)->detach for qw/running pending finished/;
}
$div->find('h2')->replace_content(ucfirst $data);
$div->find('tbody')->find('tr')->iter3($args{$data}, $titer);
};
+ push @{$args{$_->{level}} //= []}, $_ for @{$args{pb}};
$tree->fid('beginner')->iter3([grep {$args{$_}} qw/beginner easy medium hard/], $iter);
$tree->fid('open-alert')->detach unless $args{contest};
}
$div->set_child_content(class => 'solution', literal $data->{solution});
$div->fclass('problem')->namedlink($data->{id}, $data->{name});
};
- my @pb = map { @{$args{$_} // []} } qw/beginner easy medium hard/;
+ my @pb = sort { $a->{value} <=> $b->{value} } @{$args{pb}};
$tree->fclass('well')->iter3(\@pb, $iter);
}