-let modal, backdrop, hiding;
+let modal, hiding;
function show_modal () {
modal.classList.remove('hidden');
- backdrop.classList.remove('hidden');
+ q('.backdrop').classList.remove('hidden');
setTimeout(function (){
document.body.classList.add('modal-open');
}, 20);
$(function() {
modal = q('.modal');
- backdrop = q('.backdrop');
$(modal).on('transitionend', el => {
if(!document.body.classList.contains('modal-open'))
modal.classList.add('hidden');
document.body.classList.add('transition-color');
setTimeout(() => document.body.classList.remove('transition-color'), 1000);
}
+ if(q('html').className == name)
+ return;
q('html').className = name;
localStorage.setItem("theme", name);
$(function() {
response_filter {
my ($r) = @_;
return $r if ref $r ne 'Plack::App::Gruntmaster::Response';
- my $vary = 'X-Static';
- $vary .= ', Authorization' if $privacy eq 'private';
- my @hdrs = ('X-Forever' => 1, 'Cache-Control' => "$privacy, max-age=$r->{maxage}", Vary => $vary);
+ my @hdrs = ('X-Forever' => 1, 'Cache-Control' => "$privacy, max-age=$r->{maxage}");
+ push @hdrs, Vary => 'Authorization' if $privacy eq 'private';
return [200, ['Content-Type' => 'application/json; charset=utf-8', @hdrs], [encode_json $r->{params}]] if $format eq 'json';
- my $ret = render $r->{template}, 'en', title => $r->{title}, %{$r->{params}}, maybe static => $env->{HTTP_X_STATIC};
+ my $ret = render $r->{template}, 'en', title => $r->{title}, %{$r->{params}};
[200, ['Content-Type' => 'text/html; charset=utf-8', @hdrs], [encode 'UTF-8', $ret]]
},
},
sub (/) { redispatch_to '/index' },
sub (/favicon.ico) { redirect '/static/favicon.ico' },
- sub (/:article) { [200, ['Content-Type' => 'text/html; charset=utf-8', 'Cache-Control' => 'public, max-age=3600', 'X-Forever' => 1, Vary => 'X-Static'], [render_article $_{article}, 'en', maybe static => $env->{HTTP_X_STATIC}]] }
+ sub (/:article) { [200, ['Content-Type' => 'text/html; charset=utf-8', 'Cache-Control' => 'public, max-age=3600', 'X-Forever' => 1], [render_article $_{article}, 'en']] }
},
sub (POST) {
$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('smap')});
$tree->as_HTML(undef, undef, $optional_end_tags);
}
$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 {
<a href="/log/?problem=problem_id" id="job_log">Job log</a><br>
<a href="/sol/problem_id" id="solution">Solution</a>
-<h1 static="no">Submit solution</h1>
+<h1>Submit solution</h1>
<div id="nosubmit">
The contest has finished.<br>
To submit solutions to this problem, please visit the problem <a href="/pb/id">outside the contest</a>.
</div>
-<div id="submit" static="no">
+<div id="submit">
<form id="submitform" action="/action/submit" method="POST" enctype="multipart/form-data" role="form">
<input type="hidden" name="problem" value="problem_id">
<input type="hidden" name="contest" value="contest_id">
<li id="nav-ct"><a href="/ct/">Contests</a>
<li id="nav-log"><a href="/log/">Job log</a>
<li id="nav-us"><a href="/us/">Users</a>
-<li id="nav-account" static="no"><a href="/account">Account</a>
+<li id="nav-account"><a href="/account">Account</a>
<li id="nav-about"><a href="/about">About / Help</a>
<li id="nav-contribute"><a href="/contribute">Contribute!</a>
<img id="logo" class="center-block" src="/static/logos/dark.svg#logo-mindcoding" width="600px" height="152px">
<h1 id="title">TITLE</h1>
-<div id="static" class="alert alert-info" static="yes">This is a static version of MindCoding, useful when the <a class="alert-link" href="https://mindcoding.ro/">regular version</a> is overloaded.</div>
<div id="result"></div>