dotnode
Version:
.NET-like MVC framework for Node.js
59 lines (39 loc) • 2.03 kB
JavaScript
var TagBuilder = require('../html/tagBuilder'),
fs = require('fs'),
path = require('path'),
json = require('JSON');
var HtmlHelper = function (viewContext) {
this._viewContext = viewContext;
};
// #region public methods
HtmlHelper.prototype.renderRequireJsSetup = function () {
var mainScriptBuilder = new TagBuilder('script'),
configScriptBuilder = new TagBuilder('script');
var configHtml = '';
var requireJsConfigContents = fs.readFileSync(process.cwd() + '/requirejs.config', 'utf8'),
pageOptions = this._viewContext.pageOptions || {};
var requireJsConfig = json.parse(requireJsConfigContents),
requireConfig = {
pageOptions: pageOptions
};
configHtml += 'var ' + requireJsConfig.requireConfigVariable + '=' + json.stringify(requireConfig) + ';';
configHtml += '\n';
configHtml += 'var require=' + json.stringify(requireJsConfig) + ';';
var actionName = this._viewContext.controllerContext.actionName,
controllerName = this._viewContext.controllerContext.controllerName,
areaName = this._viewContext.controllerContext.areaName;
var requireJsSrc = path.normalize(requireJsConfig.baseUrl + '/' + requireJsConfig.requireJsPath + '.js'),
mainScriptSrc = controllerName + '/' + actionName + '.js';
areaName = areaName || 'root';
mainScriptSrc = /*requireJsConfig.baseUrl + */ '/controllers/' + areaName + '/' + mainScriptSrc;
mainScriptSrc = path.normalize(mainScriptSrc);
mainScriptBuilder.setAttribute('data-main', mainScriptSrc);
mainScriptBuilder.setAttribute('src', requireJsSrc);
mainScriptBuilder.setAttribute('type', 'text/javascript');
configScriptBuilder.setAttribute('type', 'text/javascript');
configScriptBuilder.setInnerHtml(configHtml);
var setupHtml = configScriptBuilder.toString() + mainScriptBuilder.toString();
return setupHtml;
};
// #endregion
module.exports = HtmlHelper;