summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/node/hooks/express/minified.js2
-rw-r--r--src/node/hooks/express/static.js3
-rw-r--r--src/node/utils/Minify.js59
-rw-r--r--src/static/pad.html1
4 files changed, 41 insertions, 24 deletions
diff --git a/src/node/hooks/express/minified.js b/src/node/hooks/express/minified.js
index 09a08cae..f8a988d7 100644
--- a/src/node/hooks/express/minified.js
+++ b/src/node/hooks/express/minified.js
@@ -2,5 +2,5 @@ var minify = require('../../utils/Minify');
exports.expressCreateServer = function (hook_name, args, cb) {
//serve minified files
- args.app.get('/minified/:filename', minify.minifyJS);
+ args.app.get(/^\/minified\/(.*)/, minify.minifyJS);
}
diff --git a/src/node/hooks/express/static.js b/src/node/hooks/express/static.js
index 567b4d7d..ade5478a 100644
--- a/src/node/hooks/express/static.js
+++ b/src/node/hooks/express/static.js
@@ -6,7 +6,7 @@ exports.expressCreateServer = function (hook_name, args, cb) {
//serve static files
args.app.get('/static/js/require-kernel.js', function (req, res, next) {
res.header("Content-Type","application/javascript; charset: utf-8");
- res.write(minify.requireDefinition() + "\n require.setLibraryURI('/plugins'); ");
+ res.write(minify.requireDefinition()); // + "\n require.setLibraryURI('/plugins'); ");
res.end();
});
@@ -24,6 +24,7 @@ exports.expressCreateServer = function (hook_name, args, cb) {
}
var filePath = path.normalize(path.join(plugins.plugins[plugin_name].package.path, "static", url));
+
res.sendfile(filePath, { maxAge: exports.maxAge });
});
diff --git a/src/node/utils/Minify.js b/src/node/utils/Minify.js
index 3f983001..87ba7fbc 100644
--- a/src/node/utils/Minify.js
+++ b/src/node/utils/Minify.js
@@ -47,28 +47,30 @@ var tar = JSON.parse(fs.readFileSync(TAR_PATH, 'utf8'));
*/
exports.minifyJS = function(req, res, next)
{
- var jsFilename = req.params['filename'];
+ var jsFilename = req.params[0];
//choose the js files we need
var jsFiles = undefined;
if (Object.prototype.hasOwnProperty.call(tar, jsFilename)) {
jsFiles = tar[jsFilename];
- _handle(req, res, jsFilename, jsFiles)
} else {
- // Not in tar list, but try anyways, if it fails, pass to `next`.
+ /* Not in tar list, but try anyways, if it fails, pass to `next`.
+ Actually try, not check in filesystem here because
+ we don't want to duplicate the require.resolve() handling
+ */
jsFiles = [jsFilename];
- fs.stat(JS_DIR + jsFilename, function (error, stats) {
- if (error || !stats.isFile()) {
- next();
- } else {
- _handle(req, res, jsFilename, jsFiles);
- }
- });
}
+ _handle(req, res, jsFilename, jsFiles, function (err) {
+ console.log("Unable to load minified file " + jsFilename + ": " + err.toString());
+ /* Throw away error and generate a 404, not 500 */
+ next();
+ });
}
-function _handle(req, res, jsFilename, jsFiles) {
+function _handle(req, res, jsFilename, jsFiles, next) {
res.header("Content-Type","text/javascript");
+
+ var cacheName = CACHE_DIR + "/minified_" + jsFilename.replace(/\//g, "_");
//minifying is enabled
if(settings.minify)
@@ -119,7 +121,7 @@ function _handle(req, res, jsFilename, jsFiles) {
function(callback)
{
//check the modification time of the minified js
- fs.stat(CACHE_DIR + "/minified_" + jsFilename, function(err, stats)
+ fs.stat(cacheName, function(err, stats)
{
if(err && err.code != "ENOENT")
{
@@ -147,7 +149,7 @@ function _handle(req, res, jsFilename, jsFiles) {
jsFiles
, function (content) {values.push(content)}
, function (err) {
- if(ERR(err)) return;
+ if(ERR(err, next)) return;
result = values.join('');
callback();
@@ -160,7 +162,7 @@ function _handle(req, res, jsFilename, jsFiles) {
//write the results plain in a file
function(callback)
{
- fs.writeFile(CACHE_DIR + "/minified_" + jsFilename, result, "utf8", callback);
+ fs.writeFile(cacheName, result, "utf8", callback);
},
//write the results compressed in a file
function(callback)
@@ -171,7 +173,7 @@ function _handle(req, res, jsFilename, jsFiles) {
if(ERR(err, callback)) return;
- fs.writeFile(CACHE_DIR + "/minified_" + jsFilename + ".gz", compressedResult, callback);
+ fs.writeFile(cacheName + ".gz", compressedResult, callback);
});
}
],callback);
@@ -189,12 +191,12 @@ function _handle(req, res, jsFilename, jsFiles) {
var pathStr;
if(gzipSupport && os.type().indexOf("Windows") == -1)
{
- pathStr = path.normalize(CACHE_DIR + "/minified_" + jsFilename + ".gz");
+ pathStr = path.normalize(cacheName + ".gz");
res.header('Content-Encoding', 'gzip');
}
else
{
- pathStr = path.normalize(CACHE_DIR + "/minified_" + jsFilename );
+ pathStr = path.normalize(cacheName);
}
res.sendfile(pathStr, { maxAge: server.maxAge });
@@ -207,7 +209,7 @@ function _handle(req, res, jsFilename, jsFiles) {
jsFiles
, function (content) {res.write(content)}
, function (err) {
- if(ERR(err)) return;
+ if(ERR(err, next)) return;
res.end();
});
}
@@ -288,16 +290,28 @@ function tarCode(jsFiles, write, callback) {
write('require.define({');
var initialEntry = true;
async.forEach(jsFiles, function (filename, callback){
+ var path;
+ var srcPath;
+ if (filename.indexOf('plugins/') == 0) {
+ srcPath = filename.substring('plugins/'.length);
+ path = require.resolve(srcPath);
+ } else {
+ srcPath = '/' + filename;
+ path = JS_DIR + filename;
+ }
+
+ srcPath = JSON.stringify(srcPath);
+ var srcPathAbbv = JSON.stringify(srcPath.replace(/\.js$/, ''));
+
if (filename == 'ace.js') {
getAceFile(handleFile);
} else {
- fs.readFile(JS_DIR + filename, "utf8", handleFile);
+ fs.readFile(path, "utf8", handleFile);
}
function handleFile(err, data) {
if(ERR(err, callback)) return;
- var srcPath = JSON.stringify('/' + filename);
- var srcPathAbbv = JSON.stringify('/' + filename.replace(/\.js$/, ''));
+
if (!initialEntry) {
write('\n,');
} else {
@@ -316,7 +330,8 @@ function tarCode(jsFiles, write, callback) {
callback();
}
- }, function () {
+ }, function (err) {
+ if(ERR(err, callback)) return;
write('});\n');
callback();
});
diff --git a/src/static/pad.html b/src/static/pad.html
index 5019391d..0160c60b 100644
--- a/src/static/pad.html
+++ b/src/static/pad.html
@@ -297,6 +297,7 @@
var clientVars = {};
(function () {
require.setRootURI("../minified/");
+ require.setLibraryURI("../minified/plugins/");
require.setGlobalKeyPath("require");
require('ep_etherpad-lite/static/js/pad').init();