plugins - filter:scripts.get hook lets a plugin add client-side JS to the header and queue up for minification on production

v1.18.x
psychobunny 11 years ago
parent ff50917c29
commit 5357ad61db

@ -1,5 +1,6 @@
var utils = require('./../public/src/utils.js'), var utils = require('./../public/src/utils.js'),
RDB = require('./redis.js'), RDB = require('./redis.js'),
plugins = require('./plugins'),
async = require('async'), async = require('async'),
path = require('path'), path = require('path'),
fs = require('fs'), fs = require('fs'),
@ -207,44 +208,46 @@ var utils = require('./../public/src/utils.js'),
], ],
minFile: path.join(__dirname, '..', 'public/src/nodebb.min.js'), minFile: path.join(__dirname, '..', 'public/src/nodebb.min.js'),
get: function (callback) { get: function (callback) {
var mtime, plugins.fireHook('filter:scripts.get', this.scripts, function(err, scripts) {
jsPaths = this.scripts.map(function (jsPath) { var mtime,
return path.join(__dirname, '..', '/public', jsPath); jsPaths = scripts.map(function (jsPath) {
}); return path.join(__dirname, '..', '/public', jsPath);
});
if (process.env.NODE_ENV !== 'development') { if (process.env.NODE_ENV !== 'development') {
async.parallel({ async.parallel({
mtime: function (next) { mtime: function (next) {
async.map(jsPaths, fs.stat, function (err, stats) { async.map(jsPaths, fs.stat, function (err, stats) {
async.reduce(stats, 0, function (memo, item, callback) { async.reduce(stats, 0, function (memo, item, callback) {
mtime = +new Date(item.mtime); mtime = +new Date(item.mtime);
callback(null, mtime > memo ? mtime : memo); callback(null, mtime > memo ? mtime : memo);
}, next); }, next);
}); });
}, },
minFile: function (next) { minFile: function (next) {
if (!fs.existsSync(Meta.js.minFile)) { if (!fs.existsSync(Meta.js.minFile)) {
if (process.env.NODE_ENV === 'development') winston.warn('No minified client-side library found'); if (process.env.NODE_ENV === 'development') winston.warn('No minified client-side library found');
return next(null, 0); return next(null, 0);
} }
fs.stat(Meta.js.minFile, function (err, stat) { fs.stat(Meta.js.minFile, function (err, stat) {
next(err, +new Date(stat.mtime)); next(err, +new Date(stat.mtime));
}); });
} }
}, function (err, results) { }, function (err, results) {
if (results.minFile > results.mtime) { if (results.minFile > results.mtime) {
if (process.env.NODE_ENV === 'development') winston.info('No changes to client-side libraries -- skipping minification'); if (process.env.NODE_ENV === 'development') winston.info('No changes to client-side libraries -- skipping minification');
callback(null, [path.relative(path.join(__dirname, '../public'), Meta.js.minFile)]);
} else {
Meta.js.minify(function () {
callback(null, [path.relative(path.join(__dirname, '../public'), Meta.js.minFile)]); callback(null, [path.relative(path.join(__dirname, '../public'), Meta.js.minFile)]);
}); } else {
} Meta.js.minify(function () {
}); callback(null, [path.relative(path.join(__dirname, '../public'), Meta.js.minFile)]);
} else { });
callback(null, this.scripts); }
} });
} else {
callback(null, scripts);
}
});
}, },
minify: function (callback) { minify: function (callback) {
var uglifyjs = require('uglify-js'), var uglifyjs = require('uglify-js'),

Loading…
Cancel
Save