diff --git a/public/src/templates.js b/public/src/templates.js index 2f2d9ad9fe..e4dbb0f69a 100644 --- a/public/src/templates.js +++ b/public/src/templates.js @@ -385,8 +385,11 @@ } else if (data[d] instanceof Object) { template = parse(data[d], d + '.', template); } else { - checkConditional(namespace + d, data[d]); - checkConditional('!' + namespace + d, !data[d]); + var key = namespace + d, + value = typeof data[d] === 'string' ? data[d].replace(/^\s+|\s+$/g, '') : data[d]; + + checkConditional(key, value); + checkConditional('!' + key, !value); if (blockInfo && blockInfo.iterator) { checkConditional('@first', blockInfo.iterator === 0); @@ -395,7 +398,7 @@ checkConditional('!@last', blockInfo.iterator !== blockInfo.total); } - template = replace(namespace + d, data[d], template); + template = replace(key, value, template); } } } @@ -406,7 +409,8 @@ namespace = ''; } else { // clean up all undefined conditionals - template = template.replace(/(| -->))|()/gi, ''); + template = template.replace(//gi, 'ENDIF -->') + .replace(//gi, ''); } return template; diff --git a/src/meta.js b/src/meta.js index cef411b674..3a1caec33a 100644 --- a/src/meta.js +++ b/src/meta.js @@ -249,10 +249,10 @@ var fs = require('fs'), jsPaths = scripts.map(function (jsPath) { if (jsPath.substring(0, 7) === 'plugins') { var paths = jsPath.split('/'), - pluginID = paths[1]; + mappedPath = paths[1]; - jsPath = jsPath.replace(path.join('plugins', pluginID), ''); - return path.join(plugins.staticDirs[pluginID], jsPath); + jsPath = jsPath.replace(path.join('plugins', mappedPath), ''); + return path.join(plugins.staticDirs[mappedPath], jsPath); } else { return path.join(__dirname, '..', '/public', jsPath); } diff --git a/src/plugins.js b/src/plugins.js index 700b5d7082..d990c3bb40 100644 --- a/src/plugins.js +++ b/src/plugins.js @@ -134,16 +134,41 @@ var fs = require('fs'), }, function(next) { // Static Directories for Plugins - if (pluginData.staticDir) { - staticDir = path.join(pluginPath, pluginData.staticDir); + var realPath, + validMappedPath = /^[\w\-_]+$/; - fs.exists(staticDir, function(exists) { - if (exists) { - Plugins.staticDirs[pluginData.id] = staticDir; - next(); - } else next(); - }); - } else next(); + pluginData.staticDirs = pluginData.staticDirs || {}; + + // Deprecated, to be removed v0.5 + if (pluginData.staticDir) { + winston.warn('[plugins/' + pluginData.id + '] staticDir is deprecated, use staticDirs instead'); + Plugins.staticDirs[pluginData.id] = path.join(pluginPath, pluginData.staticDir); + } + + for(key in pluginData.staticDirs) { + (function(mappedPath) { + if (pluginData.staticDirs.hasOwnProperty(mappedPath)) { + if (Plugins.staticDirs[mappedPath]) { + winston.warn('[plugins/' + pluginData.id + '] Mapped path (' + mappedPath + ') already specified!'); + } else if (!validMappedPath.test(mappedPath)) { + winston.warn('[plugins/' + pluginData.id + '] Invalid mapped path specified: ' + mappedPath + '. Path must adhere to: ' + validMappedPath.toString()); + } else { + realPath = pluginData.staticDirs[mappedPath]; + staticDir = path.join(pluginPath, realPath); + + (function(staticDir) { + fs.exists(staticDir, function(exists) { + if (exists) { + Plugins.staticDirs[mappedPath] = staticDir; + } + }); + }(staticDir)); + } + } + }(key)); + } + + next(); }, function(next) { // CSS Files for plugins @@ -152,9 +177,16 @@ var fs = require('fs'), winston.info('[plugins] Found ' + pluginData.css.length + ' CSS file(s) for plugin ' + pluginData.id); } - Plugins.cssFiles = Plugins.cssFiles.concat(pluginData.css.map(function(file) { - return path.join('/plugins', pluginData.id, file); - })); + if (!pluginData.staticDir) { + Plugins.cssFiles = Plugins.cssFiles.concat(pluginData.css.map(function(file) { + return path.join('/plugins', file); + })); + } else { + winston.warn('[plugins/' + pluginData.id + '] staticDir is deprecated, define CSS files with new staticDirs instead.'); + Plugins.cssFiles = Plugins.cssFiles.concat(pluginData.css.map(function(file) { + return path.join('/plugins', pluginData.id, file); + })); + } next(); } else { diff --git a/src/routes/plugins.js b/src/routes/plugins.js index 6fe7b2c7a6..ee2ba89d14 100644 --- a/src/routes/plugins.js +++ b/src/routes/plugins.js @@ -31,7 +31,6 @@ var nconf = require('nconf'), // Static Assets app.get('/plugins/:id/*', function(req, res) { - var relPath = req._parsedUrl.pathname.replace(nconf.get('relative_path') + '/plugins/' + req.params.id, ''); if (plugins.staticDirs[req.params.id]) {