UNPKG

3.29 kBJavaScriptView Raw
1"use strict";
2/*!
3 * Simple Node Mobile Portal
4 * Copyright(c) 2012-2017 Faisal(admin@simpleportaljs.com)
5 *
6 * MIT Licensed
7 */
8var fs=require("fs"),util=require("./../util"),url=require("url"),ViewService=require("./../service/viewservice"),Routerclass=require("./router");var ViewLoader=module.exports=function(b,d){var a=this;if(d){var c={systemviewdir:d.getServerCorePath("view")};b=util.extendJSON(c,b)}Routerclass.call(a,b,d);b=b||{};a.routerid=b.routerid||"viewloader";a.viewUrl=b.viewUrl||"";a.viewdir=b.viewdir||"view";a.systemviewdir=b.systemviewdir||__dirname+"/../../server/view";a.preferencekey="view";a.routers={};return a};require("util").inherits(ViewLoader,Routerclass);ViewLoader.prototype.loadRouter=function(c,b){var a=this;a.loadViews({viewdir:a.systemviewdir,prefix:"system_"},function(){a.loadViews(c,function(){a.emit("router.loaded");if(b){b()}})})};ViewLoader.prototype.loadViews=function(e,d){var a=this;var c=e&&e.viewdir?e.viewdir:a.viewdir;a.getLogger().info(a.routerid+":loadViews","loading from << "+c);if(!fs.existsSync(c)){if(d){d()}}else{var b=fs.lstatSync(c);if(b.isDirectory()){if(b.isDirectory()){fs.readdirSync(c).forEach(function(f){if(/\.js$/.test(f)){if(f!="index.js"){var h=f.substr(0,f.lastIndexOf("."));var j=fs.realpathSync(c+"/"+h+".js");a.getLogger().debug(a.routerid+":loadViews","loading view -"+h);var i=h;if(e&&e.prefix){i=e.prefix+h}try{if(!a[i]){a.routers.__defineGetter__(i,function(){return require(j)})}}catch(g){delete a.routers[i];a._routererrors[i]={plugin:e.id,error:g};a.getLogger().error(a.routerid+":loadViews",g)}}}})}if(d){d()}}else{if(d){d()}}}};ViewLoader.prototype.call=function(b,a,e,d,f){var j=this;var c=j.routers[b].view[a];if(typeof c=="string"){c=j.routers[b].view[c]}var g=url.parse(e.url,false);var i=g.query;if(i){var h=i.substring(i.indexOf("ajax=")+5);if(h.indexOf("&")!=-1){h=h.substring(0,h.indexOf("&"))}e.ajax=h=="true"}if(c){c(e,d,function(k,l){util.sendServiceResponse(d,k,l)})}else{if(f){f()}}};ViewLoader.prototype.registerViewHandler=function(){var a=this;a.getLogger().info("ViewLoader class : loadViews","Calling view loader registerViewHandler");if(a.routers){for(var b in a.routers){a.urlHandles["GET /"+b]=a.routers[b].urlHandles;if(!a.routers[b].urlHandles.GET&&a.routers[b].urlHandles["/"]){a.routers[b].urlHandles.GET=a.routers[b].urlHandles["/"]}}}};var addViewHandlers=function(a,h,b){var k={};if(a){if(typeof a=="string"||typeof a=="function"){}else{for(var c in a){if(c&&c!=undefined&&a[c]&&typeof a[c]=="object"){if(typeof a=="string"||typeof a=="function"){}else{var j=a[c].urlHandles;var f={};if(j){var g=null;for(var i in j){if(!g){g=i}var m=i;var d;var l=m.indexOf("/:");if(m.indexOf("/:")!=-1){d=m.substring(l+2);var e=d.indexOf("/");if(e!=-1){d=d.substring(0,e);m="/:expression"}m=i.replace("/:"+d,"/:expression")}else{if(m.indexOf("/")==0){m=m}else{m="/"+m}}f[m]=getViewRouter(c,i,b,d)}if(g){f.GET=getViewRouter(c,g,b)}k["/"+c]=f}}}}}}return k};var getViewRouter=function(b,d,c,a){a=a||"pathGroup";return{GET:function(k,g,j,l,e,m){k.params=k.params||{};k.path=k.path||{};if(l){k.params[a]=l;k.params["group"]=l;k.path[a]=l;k.pathGroup=l;var f=2;if(arguments.length>4){for(var h=4;h<arguments.length;h++){k.params["group"+f]=k.path["group"+f]=arguments[h];f++}}}c(b,d,k,g,c)}}};
\No newline at end of file