UNPKG

dotnode

Version:

.NET-like MVC framework for Node.js

154 lines (100 loc) 3.84 kB
var ActionResult = require('../models/actionResult'), resultTypes = require('../models/actionResultType'), ViewEngine = require('../views/viewEngine'), ViewOptions = require('../models/viewOptions'), extend = require('xtend'); var Controller = function () { }; // #region properties Controller.prototype.pageOptions = {}; Controller.prototype.viewBag = {}; Controller.prototype.actions = {}; // #endregion // #region private methods // #endregion // #region public methods Controller.prototype.renderView = function (viewPath, model, renderLayout) { var engine = this._viewEngine || new ViewEngine(); if (typeof renderLayout == 'undefined') { renderLayout = false; } var renderingOptions = { viewPath: viewPath, model: model, controllerContext: this.controllerContext, viewOptions: { writeToResponse: false, renderLayout: renderLayout } }; var result = engine.render(renderingOptions); return result; }; Controller.prototype.view = function (viewName, model, options) { var viewParams = this._getViewParams(arguments); return new ActionResult(resultTypes.viewResult, viewParams); }; Controller.prototype.json = function (object) { return new ActionResult(resultTypes.jsonResult, { object: object }); }; Controller.prototype.writeJson = function (json) { this.response.writeHead(200, { 'Content-Type': 'application/json' }); this.response.end(JSON.stringify(json)); }; Controller.prototype.writeView = function (viewPath, model, renderLayout) { if(typeof renderLayout == 'undefined'){ renderLayout = true; } var htmlString = this.renderView(viewPath, model, renderLayout); this.response.writeHead(200, { 'Content-Type': 'text/html' }); this.response.end(htmlString); }; Controller.prototype.requestIsXhr = function () { return this.request.headers["x-requested-with"] === 'XMLHttpRequest'; }; Controller.prototype.getControllerContext = function () { this.controllerContext.pageOptions = this.pageOptions; return this.controllerContext; }; // #endregion // #region private methods Controller.prototype._getViewParams = function (args) { var viewArgs = { viewOptions: {} }; // at least one argument must be defined if (typeof args[0] != 'undefined') { // if all arguments are defined, everthing is ok if (typeof args[1] != 'undefined' && typeof args[2] != undefined) { viewArgs.viewName = args[0]; viewArgs.model = args[1]; viewArgs.viewOptions = args[2]; return viewArgs; } // if only the first two arguments were passed, things get tricky... if (typeof args[1] != 'undefined' && typeof args[2] == 'undefined') { if (args[1] instanceof ViewOptions) { viewArgs.viewName = this.controllerContext.actionName; viewArgs.viewOptions = args[1]; viewArgs.model = args[0]; return viewArgs; } viewArgs.viewName = args[0]; viewArgs.model = args[1]; return viewArgs; } // if only the first argument was passed, then it is the model if (typeof args[1] == 'undefined' && typeof args[2] == 'undefined') { viewArgs.model = args[0]; viewArgs.viewName = this.controllerContext.actionName; } } else { viewArgs.viewName = this.controllerContext.actionName; viewArgs.model = null; } return viewArgs; }; // #endregion module.exports = Controller;