]> iEval git - gruntmaster-page.git/blobdiff - lib/Gruntmaster/Page/Common.pm
Centralize template cooking and introduce reloadable templates
[gruntmaster-page.git] / lib / Gruntmaster / Page / Common.pm
index 667dae8d61258c4bc095f1a8b5a1e3f5f06296db..37cdf710fc60e21223a52f01a7b00fe379f262ad 100644 (file)
@@ -4,11 +4,11 @@ use 5.014000;
 use strict;
 use warnings;
 use parent qw/Exporter/;
-our @EXPORT_OK = qw/header footer patch_templates/;
+our @EXPORT_OK = qw/header footer cook_templates reload_templates/;
 
 use File::Slurp qw/read_file/;
 
-my %header_templates = (
+my %orig_header_templates = (
   en => <<'HTML',
 <!DOCTYPE html>
 <title>TITLE_GOES_HERE</title>
@@ -27,7 +27,7 @@ my %header_templates = (
 HTML
 );
 
-my %footer_templates = (
+my %orig_footer_templates = (
   en => <<'HTML',
 
 <footer>
@@ -38,25 +38,42 @@ Dilmom: Well, it's a stripped-down version of the Gruntmaster 9000, of course. B
 HTML
 );
 
-sub patch_templates (\%$){
+sub patch_templates {
        my $root = $ENV{GRUNTMASTER_TEMPLATE_ROOT} or return;
        my ($templates, $name) = @_;
+       my %out = %$templates;
        for (<$root/$name*>) {
                m/\.(.+)$/;
-               $templates->{$1} = read_file $_
+               $out{$1} = read_file $_
        }
+
+       %out
 }
 
-patch_templates %header_templates, 'header';
-patch_templates %footer_templates, 'footer';
+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;
This page took 0.018511 seconds and 4 git commands to generate.