mirror of
https://github.com/NodeBB/NodeBB.git
synced 2025-11-02 03:55:55 +01:00
plugins can now define a templates directory which gets compiled onload without requiring any hooks
This commit is contained in:
@@ -4,6 +4,7 @@ var templates = require('./../../public/src/templates'),
|
|||||||
translator = require('./../../public/src/translator'),
|
translator = require('./../../public/src/translator'),
|
||||||
utils = require('./../../public/src/utils'),
|
utils = require('./../../public/src/utils'),
|
||||||
meta = require('./../meta'),
|
meta = require('./../meta'),
|
||||||
|
plugins = require('./../plugins'),
|
||||||
db = require('./../database'),
|
db = require('./../database'),
|
||||||
auth = require('./../routes/authentication'),
|
auth = require('./../routes/authentication'),
|
||||||
async = require('async'),
|
async = require('async'),
|
||||||
@@ -81,13 +82,14 @@ function routeCurrentTheme(app, themeData) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function compileTemplates() {
|
function compileTemplates(pluginTemplates) {
|
||||||
var mkdirp = require('mkdirp');
|
var mkdirp = require('mkdirp');
|
||||||
|
|
||||||
winston.info('[themes] Compiling templates');
|
winston.info('[themes] Compiling templates');
|
||||||
|
|
||||||
utils.walk(nconf.get('base_templates_path'), function(err, baseTpls) {
|
utils.walk(nconf.get('base_templates_path'), function(err, baseTpls) {
|
||||||
utils.walk(nconf.get('theme_templates_path'), function (err, themeTpls) {
|
utils.walk(nconf.get('theme_templates_path'), function (err, themeTpls) {
|
||||||
var paths = {};
|
var paths = pluginTemplates;
|
||||||
|
|
||||||
baseTpls = baseTpls.map(function(tpl) { return tpl.replace(nconf.get('base_templates_path'), ''); });
|
baseTpls = baseTpls.map(function(tpl) { return tpl.replace(nconf.get('base_templates_path'), ''); });
|
||||||
themeTpls = themeTpls.map(function(tpl) { return tpl.replace(nconf.get('theme_templates_path'), ''); });
|
themeTpls = themeTpls.map(function(tpl) { return tpl.replace(nconf.get('theme_templates_path'), ''); });
|
||||||
@@ -123,7 +125,7 @@ function compileTemplates() {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function handleErrors(err, req, res, next) {
|
function handleErrors(err, req, res, next) {
|
||||||
@@ -216,7 +218,10 @@ module.exports = function(app, data) {
|
|||||||
|
|
||||||
routeCurrentTheme(app, data.currentThemeData);
|
routeCurrentTheme(app, data.currentThemeData);
|
||||||
routeThemeScreenshots(app, data.themesData);
|
routeThemeScreenshots(app, data.themesData);
|
||||||
compileTemplates();
|
|
||||||
|
plugins.getTemplates(function(err, pluginTemplates) {
|
||||||
|
compileTemplates(pluginTemplates);
|
||||||
|
});
|
||||||
|
|
||||||
app.use(app.router);
|
app.use(app.router);
|
||||||
|
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ var fs = require('fs'),
|
|||||||
|
|
||||||
db = require('./database'),
|
db = require('./database'),
|
||||||
meta = require('./meta'),
|
meta = require('./meta'),
|
||||||
|
utils = require('./../public/src/utils'),
|
||||||
pkg = require('../package.json');
|
pkg = require('../package.json');
|
||||||
|
|
||||||
(function(Plugins) {
|
(function(Plugins) {
|
||||||
@@ -388,7 +389,30 @@ var fs = require('fs'),
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
};
|
||||||
|
|
||||||
|
Plugins.getTemplates = function(callback) {
|
||||||
|
var templates = {};
|
||||||
|
|
||||||
|
Plugins.showInstalled(function(err, plugins) {
|
||||||
|
async.each(plugins, function(plugin, next) {
|
||||||
|
if (plugin.templates && plugin.id) {
|
||||||
|
var templatesPath = path.join(__dirname, '../node_modules', plugin.id, plugin.templates);
|
||||||
|
utils.walk(templatesPath, function(err, pluginTemplates) {
|
||||||
|
pluginTemplates.forEach(function(pluginTemplate) {
|
||||||
|
templates[pluginTemplate.replace(templatesPath, '').substring(1)] = pluginTemplate;
|
||||||
|
});
|
||||||
|
|
||||||
|
next(err);
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
next(false);
|
||||||
|
}
|
||||||
|
}, function(err) {
|
||||||
|
callback(err, templates);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
Plugins.showInstalled = function(callback) {
|
Plugins.showInstalled = function(callback) {
|
||||||
npmPluginPath = path.join(__dirname, '../node_modules');
|
npmPluginPath = path.join(__dirname, '../node_modules');
|
||||||
@@ -456,5 +480,5 @@ var fs = require('fs'),
|
|||||||
], function(err, plugins) {
|
], function(err, plugins) {
|
||||||
callback(err, plugins);
|
callback(err, plugins);
|
||||||
});
|
});
|
||||||
}
|
};
|
||||||
}(exports));
|
}(exports));
|
||||||
|
|||||||
@@ -131,7 +131,7 @@ function getModerators(req, res, next) {
|
|||||||
|
|
||||||
function getTemplatesListing(req, res, next) {
|
function getTemplatesListing(req, res, next) {
|
||||||
utils.walk(nconf.get('views_dir'), function (err, data) {
|
utils.walk(nconf.get('views_dir'), function (err, data) {
|
||||||
data = data.concat(require('./plugins').getCustomTemplates())
|
data = data
|
||||||
.filter(function(value, index, self) {
|
.filter(function(value, index, self) {
|
||||||
return self.indexOf(value) === index;
|
return self.indexOf(value) === index;
|
||||||
}).map(function(el) {
|
}).map(function(el) {
|
||||||
|
|||||||
@@ -183,12 +183,4 @@ module.exports = function(app, middleware, controllers) {
|
|||||||
|
|
||||||
setupPluginRoutes(app);
|
setupPluginRoutes(app);
|
||||||
setupPluginAdminRoutes(app);
|
setupPluginAdminRoutes(app);
|
||||||
|
|
||||||
return {
|
|
||||||
getCustomTemplates: function() {
|
|
||||||
pluginRoutes.templates.map(function(tpl) {
|
|
||||||
return tpl.template;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
Reference in New Issue
Block a user