UNPKG

sgapps-server

Version:
146 lines (136 loc) 2.75 kB
const _faceboxTemplate = require('./facebox-templates.js'); /** * @typedef {object} TemplateManagerRenderOptions */ /** * @class * @name TemplateManagerViewer * @param {object} options * @param {FSLibrary} options._fs */ function TemplateManagerViewer(options) { /** * @memberof TemplateManagerViewer# * @name _facebox * @type {FaceboxTemplate} */; this._facebox = new _faceboxTemplate({ _fs: options._fs }); /** * @memberof TemplateManagerViewer# * @name _debug * @type {boolean} */ let _debug = false; Object.defineProperty( this, '_debug', { get: () => _debug, set: (v) => { _debug = !!v; //@ts-ignore this._facebox._debug = _debug; } } ); /** * @memberof TemplateManagerViewer# * @name _env * @type {Object<string,any>} */; let _env = {}; Object.defineProperty( this, '_env', { get: () => _env, set: (data) => { Object.assign(_env, data); //@ts-ignore this._facebox._env = _env; } } ); /** * @memberof TemplateManagerViewer# * @method renderCode * @param {string} code * @param {Object<string, any>} vars * @param {string} virtualFilePath * @param {function} callback */ this.renderCode = function (code, vars, virtualFilePath, callback) { return this._facebox.renderCode(code, vars, callback, virtualFilePath); }.bind(this); return this; }; /** * @memberof TemplateManagerViewer# * @method render * @param {SGAppsServerResponse} response * @param {TemplateManagerTemplate} view * @param {Object<string,any>} vars * @this TemplateManagerViewer */ TemplateManagerViewer.prototype.render = function( response, view, vars ) { var getStackTrace = function() { var obj = {}; Error.captureStackTrace(obj, getStackTrace); return obj.stack; }; var err; if( view.path.match(/\.(tpl|fbx-tpl)$/) ) { if (view.code) { this._facebox.renderCode( view.code, vars, function( err, html ) { if (err) { if(Array.isArray(err)) { err.forEach(function(v) { throw v; }); } else { throw err; } } response.send(html); }, view.path ); } else { try { this._facebox.renderFile( view.path, vars, function( err, html ) { if (err) { if(Array.isArray(err)) { err.forEach(function(v) { throw v; }); } else { throw err; } } response.send(html); }); } catch (err) { response.sendError(err); } } } else { response.pipeFile( view.path, function (err) { if (!response._flags.finished) { if (err) { response.sendError(err); } else { response.send(''); } } } ); } }; module.exports = TemplateManagerViewer;