UNPKG

lazo-next

Version:

A client-server web framework built on Node.js that allows front-end developers to easily create a 100% SEO compliant, component MVC structured web application with an optimized first page load.

117 lines (93 loc) 3.56 kB
define(['utils/handlebarsEngine'], function (handlebarsEngine) { 'use strict'; var defaultExt = { handlebars: 'hbs', micro: 'mt' }; var defaultTemplateEngineName = 'handlebars', _engines = { handlebars: { extension: 'hbs', handler: handlebarsEngine, exp: 'Handlebars' } }; function resolveEnginePath(engineDef) { if (engineDef.path) { return engineDef.path; } switch (engineDef.name) { case 'micro': return 'underscore'; } } return { getDefaultExt: function (engineName) { return this.getTemplateExt() || defaultExt[engineName]; }, setTemplateExt: function (engineName, ext) { var engineDef = this.getTemplateEngineDef(engineName); if (engineDef) { engineDef.extension = ext; } }, registerTemplateEngine: function (name, extension, handler, path, exp) { return (_engines[name] = { extension: extension, handler: handler, path: path, exp: exp }); }, getTemplateEngine: function (engineName) { var engine = _engines[engineName]; return engine ? engine.handler : undefined; }, getTemplateExt: function (engineName) { var engineDef = this.getTemplateEngineDef(engineName); return engineDef ? engineDef.extension : undefined; }, getTemplateEngineDef: function (engineName) { return _engines[engineName]; }, getDefaultTemplateEngine: function () {; return this.getTemplateEngine(defaultTemplateEngineName); }, getDefaultTemplateEngineName: function () { return defaultTemplateEngineName; }, setDefaultTemplateEngine: function (engineName) { var engine = _engines[engineName]; if (!engine) { throw new Error('Invalid template engine name, ' + engineName); } defaultTemplateEngineName = engineName; }, loadTemplateEngine: function (engineDef, options) { var engine, self = this; options.error = options.error || function (err) { throw err; }; if ((engine = this.getTemplateEngine(engineDef.name))) { options.success(engine); } else { LAZO.require([resolveEnginePath(engineDef)], function (engine) { self.registerTemplateEngine(engineDef.name, engineDef.extension, engineDef.handler(engine), engineDef.exp); options.success(self.getTemplateEngine(engineDef.name)); }, function (err) { options.error(err); }); } }, engHandlerMaker: function (engineName) { switch (engineName) { case 'micro': return function (engine) { return { compile: function (template) { return _.template(template); }, execute: function (compiledTemplate, data) { return compiledTemplate(data); }, engine: _.template }; }; } } }; });