From 580aa66db6f0ac7aed7d4ec1ba61f5655562d574 Mon Sep 17 00:00:00 2001 From: Milan Date: Fri, 18 Nov 2022 22:03:39 +0100 Subject: [PATCH] template.pm: invalidate includes if changed --- lib/calcms/template.pm | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/lib/calcms/template.pm b/lib/calcms/template.pm index 360676e..aff87bc 100644 --- a/lib/calcms/template.pm +++ b/lib/calcms/template.pm @@ -3,6 +3,7 @@ package template; use strict; use warnings; no warnings 'redefine'; +use feature 'state'; use Data::Dumper; use HTML::Template::Compiled(); @@ -11,7 +12,7 @@ use HTML::Template::Compiled::Plugin::XMLEscape(); #use HTML::Template::JIT(); use JSON(); use Cwd(); - +use Digest::MD5 qw(md5_hex); use config(); use params(); use project(); @@ -73,15 +74,20 @@ sub process($$$$) { unless ( defined $params->{extern} ) && ( $params->{extern} eq '1' ); $html_template->param($params); + my $out = $html_template->output(); + my $version = "?v=".substr(md5_hex(join("",(stat "js",stat "css",stat "image"))),0,8); + $out =~ s{(src="js/.*\.js)"}{$1$version"}g; + $out =~ s{(href="css/.*\.css)"}{$1$version"}g; + $out =~ s{(src="image/.*\.svg)"}{$1$version"}g; if ( ( defined $_[1] ) && ( $_[1] eq 'print' ) ) { - print $html_template->output(); + print $out; } else { - $_[1] = $html_template->output(); + $_[1] = $out; } } sub initTemplate($) { - my $filename = shift; + my ($filename) = @_; my $default_escape = 'none'; $default_escape = 'js' if ( $filename =~ /\.js$/ );