refactored meta and link tag generation to template (yay frontend processing!)

cache busters now always added in template, instead of throughout code
This commit is contained in:
Julian Lam
2014-01-30 09:20:43 -05:00
parent 1a55f9217d
commit fb2b54b314
4 changed files with 19 additions and 53 deletions

View File

@@ -153,43 +153,6 @@
} }
return result; return result;
}, },
buildMetaTags: function(tagsArr) {
var tags = '',
tag;
for (var x = 0, numTags = tagsArr.length; x < numTags; x++) {
if (tags.length > 0) {
tags += "\n\t";
}
tag = '<meta';
var y;
for (y in tagsArr[x]) {
tag += ' ' + y + '="' + tagsArr[x][y] + '"';
}
tag += ' />';
tags += tag;
}
return tags;
},
buildLinkTags: function(tagsArr) {
var tags = '',
tag;
for (var x = 0, numTags = tagsArr.length; x < numTags; x++) {
if (tags.length > 0) tags += "\n\t";
tag = '<link';
var y;
for (y in tagsArr[x]) {
tag += ' ' + y + '="' + tagsArr[x][y] + '"';
}
tag += ' />';
tags += tag;
}
return tags;
},
isRelativeUrl: function(url) { isRelativeUrl: function(url) {
var firstChar = url.slice(0, 1); var firstChar = url.slice(0, 1);

View File

@@ -2,12 +2,15 @@
<html> <html>
<head> <head>
<title>{browserTitle}</title> <title>{browserTitle}</title>
{meta_tags} <!-- BEGIN metaTags -->
<link rel="icon" type="image/x-icon" href="{brand:favicon}" /> <meta<!-- IF metaTags.name --> name="{metaTags.name}"<!-- ENDIF metaTags.name --><!-- IF metaTags.property --> property="{metaTags.property}"<!-- ENDIF metaTags.property --><!-- IF metaTags.content --> content="{metaTags.content}"<!-- ENDIF metaTags.content --> />
<!-- END metaTags -->
<link rel="stylesheet" href="{relative_path}/vendor/fontawesome/css/font-awesome.min.css"> <link rel="stylesheet" href="{relative_path}/vendor/fontawesome/css/font-awesome.min.css">
<link rel="stylesheet" type="text/css" href="{relative_path}/css/theme.css?{cache-buster}" /> <link rel="stylesheet" type="text/css" href="{relative_path}/css/theme.css?{cache-buster}" />
<!-- IF bootswatchCSS --><link href="{bootswatchCSS}" rel="stylesheet" media="screen"><!-- ENDIF bootswatchCSS --> <!-- IF bootswatchCSS --><link href="{bootswatchCSS}" rel="stylesheet" media="screen"><!-- ENDIF bootswatchCSS -->
{link_tags} <!-- BEGIN linkTags -->
<link<!-- IF linkTags.link --> link="{linkTags.link}"<!-- ENDIF linkTags.link --><!-- IF linkTags.rel --> rel="{linkTags.rel}"<!-- ENDIF linkTags.rel --><!-- IF linkTags.href --> href="{linkTags.href}"<!-- ENDIF linkTags.href --> />
<!-- END linkTags -->
<!-- BEGIN pluginCSS --> <!-- BEGIN pluginCSS -->
<link rel="stylesheet" href="{pluginCSS.path}?{cache-buster}"> <link rel="stylesheet" href="{pluginCSS.path}?{cache-buster}">
<!-- END pluginCSS --> <!-- END pluginCSS -->

View File

@@ -287,21 +287,16 @@ var fs = require('fs'),
}, function (err, results) { }, function (err, results) {
if (results.minFile > results.mtime) { if (results.minFile > results.mtime) {
winston.info('No changes to client-side libraries -- skipping minification'); winston.info('No changes to client-side libraries -- skipping minification');
callback(null, [path.relative(path.join(__dirname, '../public'), Meta.js.minFile) + (meta.config['cache-buster'] ? '?v=' + meta.config['cache-buster'] : '')]); callback(null, [path.relative(path.join(__dirname, '../public'), Meta.js.minFile)]);
} else { } else {
Meta.js.minify(function () { Meta.js.minify(function () {
callback(null, [ callback(null, [
path.relative(path.join(__dirname, '../public'), Meta.js.minFile) + (meta.config['cache-buster'] ? '?v=' + meta.config['cache-buster'] : '') path.relative(path.join(__dirname, '../public'), Meta.js.minFile)
]); ]);
}); });
} }
}); });
} else { } else {
if (meta.config['cache-buster']) {
scripts = scripts.map(function(script) {
return script + '?v=' + meta.config['cache-buster'];
});
}
callback(null, scripts); callback(null, scripts);
} }
}); });

View File

@@ -94,13 +94,11 @@ module.exports.server = server;
}], }],
templateValues = { templateValues = {
bootswatchCSS: meta.config['theme:src'], bootswatchCSS: meta.config['theme:src'],
pluginCSS: plugins.cssFiles.map(function(file) { return { path: nconf.get('relative_path') + file.replace(/\\/g, '/') + (meta.config['cache-buster'] ? '?v=' + meta.config['cache-buster'] : '') }; }), pluginCSS: plugins.cssFiles.map(function(file) { return { path: nconf.get('relative_path') + file.replace(/\\/g, '/') }; }),
title: meta.config.title || '', title: meta.config.title || '',
description: meta.config.description || '', description: meta.config.description || '',
'brand:logo': meta.config['brand:logo'] || '', 'brand:logo': meta.config['brand:logo'] || '',
'brand:logo:display': meta.config['brand:logo']?'':'hide', 'brand:logo:display': meta.config['brand:logo']?'':'hide',
'brand:favicon': meta.config['brand:favicon'] || nconf.get('relative_path') + '/favicon.ico',
browserTitle: meta.config.browserTitle || 'NodeBB',
csrf: options.res.locals.csrf_token, csrf: options.res.locals.csrf_token,
relative_path: nconf.get('relative_path'), relative_path: nconf.get('relative_path'),
clientScripts: clientScripts, clientScripts: clientScripts,
@@ -119,13 +117,20 @@ module.exports.server = server;
var uid = '0'; var uid = '0';
// Meta Tags // Meta Tags
templateValues.meta_tags = utils.buildMetaTags(defaultMetaTags.concat(options.metaTags || []).map(function(tag) { templateValues.metaTags = defaultMetaTags.concat(options.metaTags || []).map(function(tag) {
tag.content = tag.content.replace(/[&<>'"]/g, function(tag) { tag.content = tag.content.replace(/[&<>'"]/g, function(tag) {
return escapeList[tag] || tag; return escapeList[tag] || tag;
}); });
return tag; return tag;
})); });
templateValues.link_tags = utils.buildLinkTags(defaultLinkTags.concat(options.linkTags || []));
// Link Tags
templateValues.linkTags = defaultLinkTags.concat(options.linkTags || []);
templateValues.linkTags.push({
rel: "icon",
type: "image/x-icon",
href: meta.config['brand:favicon'] || nconf.get('relative_path') + '/favicon.ico'
});
if(options.req.user && options.req.user.uid) { if(options.req.user && options.req.user.uid) {
uid = options.req.user.uid; uid = options.req.user.uid;