Force script and style refresh by using timestamps in URLs

3col
Vitaliy Filippov 2015-01-19 15:39:57 +03:00
parent 54f37df590
commit 8e4073e13c
13 changed files with 48 additions and 30 deletions

View File

@ -683,6 +683,26 @@ sub create
# built-in filter, please also add a stub filter to t/004template.t.
FILTERS => {
# Timestamped URL to force refresh of JavaScript/CSS
ts_url => sub
{
my ($file) = @_;
my $mtime = (stat(bz_locations()->{libpath}.'/'.$file))[9];
if (!defined $mtime)
{
if ($file =~ /\.css$/so)
{
return 'skins/empty.css';
}
elsif ($file =~ /\.js$/so)
{
return 'js/empty.js';
}
return $file;
}
return "$file?$mtime";
},
# Returns the text with backslashes, single/double quotes,
# and newlines/carriage returns escaped for use in JS strings.
js => sub

0
js/empty.js Normal file
View File

0
skins/empty.css Normal file
View File

View File

@ -14,7 +14,7 @@
<html>
<head>
<title>Log in to [% terms.Bugzilla %]</title>
<script type="text/javascript" src="js/resize-iframe.js"></script>
<script type="text/javascript" src="[% 'js/resize-iframe.js' | ts_url %]"></script>
</head>
<body onload="document.forms['login'].Bugzilla_login.focus()">

View File

@ -55,8 +55,8 @@ Interdiff of #[% oldid %] and #[% newid %] for [% terms.bug %] #[% bugid %]
[% ELSE %]
<html>
<head>
<link href="skins/standard/create_attachment.css" rel="stylesheet" type="text/css" />
<script src="js/attachment.js" type="text/javascript"></script>
<link href="[% 'skins/standard/create_attachment.css' | ts_url %]" rel="stylesheet" type="text/css" />
<script src="[% 'js/attachment.js' | ts_url %]" type="text/javascript"></script>
</head>
<body onload="[% onload FILTER html %]">
[% END %]

View File

@ -3,7 +3,7 @@
<head>
<title>[% title FILTER html %]</title>
<base href="[% urlbase FILTER html %]" [% IF Bugzilla.cgi.param('target') == '_blank' %] target="_blank"[% END %] />
<script type="text/javascript" src="js/resize-iframe.js"></script>
<script type="text/javascript" src="[% 'js/resize-iframe.js' | ts_url %]"></script>
</head>
<body>

View File

@ -30,7 +30,7 @@
[% DEFAULT flag_table_id = "flags" %]
<script type="text/javascript" src="js/flag.js"></script>
<script type="text/javascript" src="[% 'js/flag.js' | ts_url %]"></script>
<table id="[% flag_table_id | html %]" class="flag_table">
[% UNLESS flag_no_header %]

View File

@ -95,7 +95,7 @@
# Always present.
#%]
[% FOREACH style_url = style_urls %]
<link href="[% style_url FILTER html %]"
<link href="[% style_url | ts_url | html %]"
rel="stylesheet"
type="text/css" />
[% END %]
@ -104,7 +104,7 @@
# Use it to import CSS fixes so that Bugzilla looks decent on IE 7
# and below.
#%]
<link href="skins/standard/IE-fixes.css"
<link href="[% 'skins/standard/IE-fixes.css' | ts_url %]"
rel="stylesheet"
type="text/css">
<![endif]-->
@ -117,7 +117,7 @@
# Причём в Bugzilla 4 их указывают в другом порядке, и получается нормально. O_o %]
[% IF 0 # user.settings.skin.is_enabled %]
[% FOREACH style_url = style_urls %]
<link href="[% style_url FILTER html %]"
<link href="[% style_url | ts_url | html %]"
rel="[% 'alternate ' IF user_skin %]stylesheet"
title="[% lc_messages.setting_descs.standard FILTER html %]"
type="text/css" />
@ -127,7 +127,7 @@
# Use it to import CSS fixes so that Bugzilla looks decent on IE 7
# and below.
#%]
<link href="skins/standard/IE-fixes.css"
<link href="[% 'skins/standard/IE-fixes.css' | ts_url | html %]"
rel="[% 'alternate ' IF user_skin %]stylesheet"
title="[% lc_messages.setting_descs.standard FILTER html %]"
type="text/css" />
@ -145,7 +145,7 @@
[% contrib_skin = contrib_skin FILTER url_quote %]
[% IF contrib_skin.match('\.css$') %]
[%# 1st skin variant: single-file stylesheet %]
<link href="[% "skins/contrib/$contrib_skin" %]"
<link href="[% "skins/contrib/$contrib_skin" | ts_url %]"
rel="[% 'alternate ' UNLESS contrib_skin == user_skin %]stylesheet"
title="[% contrib_skin FILTER html %]"
type="text/css" />
@ -153,8 +153,7 @@
[%# 2nd skin variant: stylesheet set %]
[% FOREACH style_url = style_urls %]
[% IF style_url.match('^skins/standard/') %]
<link href="[% style_url.replace('^skins/standard/',
"skins/contrib/$contrib_skin/") %]"
<link href="[% style_url.replace('^skins/standard/', "skins/contrib/$contrib_skin/") | ts_url %]"
rel="[% 'alternate ' UNLESS contrib_skin == user_skin %]stylesheet"
title="[% contrib_skin FILTER html %]"
type="text/css" />
@ -165,7 +164,7 @@
# Use it to import CSS fixes so that Bugzilla looks decent on IE 7
# and below.
#%]
<link href="skins/contrib/[% contrib_skin FILTER html %]/IE-fixes.css"
<link href="[% ('skins/contrib/' _ contrib_skin _ '/IE-fixes.css') | ts_url | html %]"
rel="[% 'alternate ' UNLESS contrib_skin == user_skin %]stylesheet"
title="[% contrib_skin FILTER html %]"
type="text/css" />
@ -187,8 +186,7 @@
#%]
[% FOREACH style_url = style_urls %]
[% IF style_url.match('^skins/standard/') %]
<link href="[% style_url.replace('^skins/standard/', "skins/custom/")
FILTER html %]" rel="stylesheet" type="text/css" />
<link href="[% style_url.replace('^skins/standard/', "skins/custom/") | ts_url | html %]" rel="stylesheet" type="text/css" />
[% END %]
[% END %]
<!--[if lte IE 7]>
@ -196,14 +194,14 @@
# Use it to import CSS fixes so that Bugzilla looks decent on IE 7
# and below.
#%]
<link href="skins/custom/IE-fixes.css"
<link href="[% 'skins/custom/IE-fixes.css' | ts_url %]"
rel="stylesheet"
type="text/css" />
<![endif]-->
<script src="js/util.js" type="text/javascript"></script>
<script src="js/global.js" type="text/javascript"></script>
<script src="js/hinter.js" type="text/javascript"></script>
<script src="[% 'js/util.js' | ts_url %]" type="text/javascript"></script>
<script src="[% 'js/global.js' | ts_url %]" type="text/javascript"></script>
<script src="[% 'js/hinter.js' | ts_url %]" type="text/javascript"></script>
<script type="text/javascript">
<!--
[%# The language selector needs javascript to set its cookie,
@ -236,7 +234,7 @@
[% IF javascript_urls %]
[% FOREACH javascript_url = javascript_urls %]
<script src="[% javascript_url FILTER html %]" type="text/javascript"></script>
<script src="[% javascript_url | ts_url | html %]" type="text/javascript"></script>
[% END %]
[% END %]

View File

@ -38,7 +38,7 @@
<title>[% title FILTER html %]</title>
<base href="[% urlbase FILTER html %]" [% IF Bugzilla.cgi.param('target') == '_blank' %] target="_blank"[% END %] />
<link href="skins/standard/buglist.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="js/resize-iframe.js"></script>
<script type="text/javascript" src="[% 'js/resize-iframe.js' | ts_url %]"></script>
</head>
<body>

View File

@ -12,7 +12,7 @@
<head>
<title>[% title FILTER html %]</title>
<base href="[% urlbase FILTER html %]" [% IF Bugzilla.cgi.param('target') == '_blank' %] target="_blank"[% END %] />
<script type="text/javascript" src="js/resize-iframe.js"></script>
<script type="text/javascript" src="[% 'js/resize-iframe.js' | ts_url %]"></script>
</head>
<body>
[% PROCESS "reports/report-table.html.tmpl" %]

View File

@ -8,9 +8,9 @@
<html>
<head>
<title>Печать SCRUM-карточек[% IF searchname || defaultsavename %][% ": " _ (searchname || defaultsavename) | html %][% END %]</title>
<link rel="stylesheet" type="text/css" media="print" href="skins/standard/print.css" />
<link rel="stylesheet" type="text/css" media="print" href="[% 'skins/standard/print.css' | ts_url %]" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script type="text/javascript" src="js/util.js"></script>
<script type="text/javascript" src="[% 'js/util.js' | ts_url %]"></script>
<style type="text/css">
.dot { border: 1px dashed black; }
.dot { white-space: nowrap; }
@ -184,8 +184,8 @@ var nc = [% t.cols || "0" %];
var idlist = [ [% idlist_js || "" %] ];
//-->
</script>
<script type="text/javascript" src="js/DragDrop.js"></script>
<script type="text/javascript" src="js/scrumcards.js"></script>
<script type="text/javascript" src="[% 'js/DragDrop.js' | ts_url %]"></script>
<script type="text/javascript" src="[% 'js/scrumcards.js' | ts_url %]"></script>
</body>
</html>

View File

@ -123,4 +123,4 @@
<input type="hidden" id="boolean_chart_form_save" />
<div style="clear: both"></div>
<script type="text/javascript" src="js/charts.js"></script>
<script type="text/javascript" src="[% 'js/charts.js' | ts_url %]"></script>

View File

@ -20,10 +20,10 @@
# Gervase Markham <gerv@gerv.net>
#%]
<script type="text/javascript" src="js/query-visibility.js"></script>
<script type="text/javascript" src="js/field.js"></script>
<script type="text/javascript" src="[% 'js/query-visibility.js' | ts_url %]"></script>
<script type="text/javascript" src="[% 'js/field.js' | ts_url %]"></script>
<script type="text/javascript" src="fieldvaluecontrol.cgi?user=[% Bugzilla.user.id %]"></script>
<script type="text/javascript" src="js/query-form.js"></script>
<script type="text/javascript" src="[% 'js/query-form.js' | ts_url %]"></script>
[% SET checkwidths = [] %]