-my %orig_header_templates = (
- en => <<'HTML',
-<!DOCTYPE html>
-<title>TITLE_GOES_HERE</title>
-<link rel="stylesheet" href="/static/gm.css">
-<script src="/static/zepto.var" defer></script>
-<script src="/static/view.js" defer></script>
-<script src="/static/form.js" defer></script>
-<meta charset="utf-8">
-
-<span id="admin"></span>
-<div id="title"><span class="i">i</span><span class="Eval">Eval</span></div>
-<div id="subtitle">TITLE_GOES_HERE</div>
-
-<nav><ul>
-<li><a href="/pb/">Problems</a>
-<li><a href="/ct/">Contests</a>
-<li><a href="/log/">Job log</a></ul></nav>
-
-HTML
-);
-
-my %orig_footer_templates = (
- en => <<'HTML',
-
-<footer>
-Dilmom: Why don't you call your product the Gruntmaster 6000?
-Dilbert: What kind of product do you see when you imagine a Gruntmaster 6000?
-Dilmom: Well, it's a stripped-down version of the Gruntmaster 9000, of course. But it's software-upgradeable.
-</footer>
-HTML
-);
-
-sub patch_templates {
- my $root = $ENV{GRUNTMASTER_TEMPLATE_ROOT} or return %{$_[0]};
- my ($templates, $name) = @_;
- my %out = %$templates;
- for (<$root/$name.*>) {
- m/\.(.+)$/;
- $out{$1} = read_file $_
+ if ($name) {
+ $templates{$caller} = { read_templates $name };
+ $templates{$caller}{$_} = header ($_, $title) . $templates{$caller}{$_} for keys $templates{$caller};
+ $templates{$caller}{$_} .= footer $_ for keys $templates{$caller};