use strict;
use warnings;
use parent qw/Exporter/;
-our @EXPORT_OK = qw/header footer/;
+our @EXPORT_OK = qw/header footer cook_templates reload_templates/;
-my %header_templates = (
+use File::Slurp qw/read_file/;
+
+my %orig_header_templates = (
en => <<'HTML',
<!DOCTYPE html>
<title>TITLE_GOES_HERE</title>
<link rel="stylesheet" href="/gm.css">
-<script src="/jquery-2.0.3.min.js"></script>
-<script src="/view.js"></script>
+<script src="/zepto.var" defer></script>
+<script src="/view.js" defer></script>
+<script src="/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="/">Home</a><li><a href="/log/">View job log</a><li><a href="/submit.var">Submit job</a><li><a href="/pb/">Problem list</a><li><a href="/ct/">Contests</a></ul></nav>
+<nav><ul><li><a href="/learn.var">Learn</a><li><a href="/pb/">Practice</a><li><a href="/ct/">Compete</a><li><a href="/log/">Job log</a></ul></nav>
HTML
);
-my %footer_templates = (
+my %orig_footer_templates = (
en => <<'HTML',
<footer>
HTML
);
+sub patch_templates {
+ my $root = $ENV{GRUNTMASTER_TEMPLATE_ROOT} or return;
+ my ($templates, $name) = @_;
+ my %out = %$templates;
+ for (<$root/$name*>) {
+ m/\.(.+)$/;
+ $out{$1} = read_file $_
+ }
+
+ %out
+}
+
+my %header_templates = patch_templates \%orig_header_templates, 'header';
+my %footer_templates = patch_templates \%orig_footer_templates, 'footer';
+
+sub reload_templates () { $ENV{GRUNTMASTER_RELOAD_TEMPLATES} }
+
sub header{
my ($language, $title) = @_;
+ %header_templates = patch_templates \%orig_header_templates, 'header' if reload_templates;
$header_templates{$language} =~ s/TITLE_GOES_HERE/$title/ger;
}
sub footer{
+ %footer_templates = patch_templates \%orig_footer_templates, 'footer' if reload_templates;
$footer_templates{$_[0]};
}
+sub cook_templates (\%@) {
+ my ($templates, $name, $title) = @_;
+
+ my %out = patch_templates $templates, $name;
+ $out{$_} = header ($_, $title) . $out{$_} for keys %out;
+ $out{$_} .= footer $_ for keys %out;
+
+ %out
+}
+
1;