UNPKG

coffeerest-api-frontend-ng-admin

Version:
84 lines (78 loc) 2.87 kB
// Generated by CoffeeScript 1.9.3 (function() { var clone, jsfront, mustache; clone = function(obj) { return JSON.parse(JSON.stringify(obj)); }; mustache = require('mustache'); jsfront = require('jsonschema-frontend'); module.exports = function(server, model, lib, urlprefix) { var me; me = {}; me.init = function(uimodel) { var i, jscode, k, len, menuitem, path, ref, ref1, resource, slug, v; path = __dirname + '/src/mustache'; me.uimodel = uimodel = jsfront.parse(uimodel); uimodel.js = require('fs').readFileSync(__dirname + "/node_modules/ng-admin/build/ng-admin.min.js").toString(); jscode = []; jscode.push("var admin = nga.application('" + uimodel.menu.title + "')"); jscode.push(" .baseApiUrl('" + uimodel.model.host + "');"); jscode.push("var entity = {};"); ref = uimodel.resources; for (k in ref) { resource = ref[k]; slug = k.split("/"); jscode.push("entity." + slug[1] + " = nga.entity('" + slug[1] + "');"); } ref1 = uimodel.menu.items; for (i = 0, len = ref1.length; i < len; i++) { menuitem = ref1[i]; jsfront.render(path + "/menuitem.js", menuitem, jscode); } for (k in jscode) { v = jscode[k]; jscode[k] = " " + v; } uimodel.jsconfig = jscode.join("\n") + ";\n"; uimodel.css = require('fs').readFileSync(__dirname + "/node_modules/ng-admin/build/ng-admin.min.css").toString(); return uimodel.html = require('fs').readFileSync(__dirname + "/src/mustache/index.html").toString(); }; me.generateHTML = function() { return mustache.render(me.uimodel.html, me.uimodel); }; lib.events.on('beforeStart', function(data, next) { var ref, ref1, url; server = data.server; model = data.model; lib = data.lib; me.init(lib.uimodel); urlprefix = data.urlprefix; if (((ref = model.frontend) != null ? (ref1 = ref['ng-admin']) != null ? ref1.url : void 0 : void 0) != null) { url = model.frontend['ng-admin'].url; } if (url && (model.resources[url] == null)) { console.log("registering REST resource: " + url); (function(urlprefix, model, me) { model.resources[url] = { get: { description: "renders html of admin screen" } }; return server.get(url, function(req, res, next) { var body; body = me.generateHTML(); res.writeHead(200, { 'Content-Length': Buffer.byteLength(body), 'Content-Type': 'text/html' }); res.write(body); res.end(); return next(); }); })(urlprefix, model, me); } return next(); }); return me; }; }).call(this);