coffeerest-api-frontend-ng-admin
Version:
Put web admin interface-sauce on top of your coffeerest api
84 lines (78 loc) • 2.87 kB
JavaScript
// 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);