var debug = require('debug')('ff:tcrud:ui:angular:boot'); module.exports = (function () { var renderCrudController = function (tview, thtmlPrefix, tapiPrefix, tapiPrefix2) { if (tview.tmeta.tmodel.tkeys.length === 0) { throw Error('no model keys in: '+tview.tid); } var keySlug = ''; for (var i = 0; i < tview.tmeta.tmodel.tkeys.length; i++) { var key = tview.tmeta.tmodel.tkeys[i]; keySlug += '$routeParams.'+key; if (i < (tview.tmeta.tmodel.tkeys.length - 1)) { keySlug += '/'; } } var tviewCode = ''; var slugParts = tview.tslug.split('/'); for (var i = 0; i < slugParts.length; i++) { var part = slugParts[i]; part = part.replace(/-/g,''); // TODO use tcode which is already cleaned ? tviewCode += part.substring(0,1).toUpperCase()+part.substring(1); } //debug('tviewCode: $s',tviewCode); return function (req, res, next) { res.set('Content-Type', 'text/javascript'); res.render('node-ff-tcrud/angular/js/crud/controller',{ tview: tview, tviewCode: tviewCode, thtmlPrefix: thtmlPrefix, tapiPrefix: tapiPrefix, tapiPrefix2: tapiPrefix2, ejsRouteParams: keySlug }); }; } var renderCrudTemplate = function (tview,paction) { var ejsKeyRow = ''; var ejsKeyData = ''; for (var i = 0; i < tview.tmeta.tmodel.tkeys.length; i++) { var key = tview.tmeta.tmodel.tkeys[i]; ejsKeyRow += '{{row.'+key+'}}'; ejsKeyData += '{{data.'+key+'}}'; if (i < (tview.tmeta.tmodel.tkeys.length - 1)) { ejsKeyRow += '/'; ejsKeyData += '/'; } } return function (req, res, next) { res.render('node-ff-tcrud/angular/'+paction+'/'+req.params.action,{ tview: tview, ejsKeyRow: ejsKeyRow, ejsKeyData: ejsKeyData }); }; } return function UIAngularCorePlugin() { this.configPlugin = function (ctx) { ctx.key = 'angular'; ctx.description = 'Exports angular ui data.'; ctx.localDir = __dirname; ctx.localConfigTemplate = 'ui-angular.json'; ctx.dependencies.push('uiLibAngular'); ctx.dependencies.push('uiLibFFSpaLoader'); //ctx.dependencies.push('uiLibTopcoat'); ctx.dependencies.push('serverConfigTMenu'); ctx.dependencies.push('uiLibFontFaceOnLoad'); }; this.configServer = function(ctx) { ctx.hostTemplateJS('js/application'); ctx.hostTemplateJS('js/application-font'); ctx.hostTemplateJS('js/application-controller') ctx.hostTemplateJS('js/navigation-service'); ctx.hostTemplateHTML('thtml/application-view',true);; ctx.hostTemplateHTML('thtml/application-top',true); ctx.hostTemplateHTML('thtml/application-top-action',true); ctx.hostTemplateHTML('thtml/application-top-tabs',true); var uiPath = ctx.troot.tmeta.tplugin.angular.tbase; debug('Exported uiPath: %s',uiPath); ctx.server.get('/', ctx.renderRedirect(uiPath)); ctx.server.get(uiPath, ctx.renderTemplate('index','text/html')); ctx.server.get(uiPath+'/*', ctx.renderTemplate('index','text/html')); // must be last; for HTML5 history ctx.registrateMenu({ name: 'Server', icon: 'fa fa-server' },'server'); // move ? }; this.configApi = function(ctx) { var uriPrefix = ctx.createSlugApiTEntityBase(); var thtmlPrefix = uriPrefix + '/' + ctx.tview.tmeta.tplugin.angular.thtml; var tapiPrefix = ctx.createSlugApiTEntityBasePlugin('formatJSON'); // TODO: move to tview ? var tapiPrefix2 = ctx.createSlugApiTEntityBasePlugin('serverConfigTView'); // TODO: move to tview ? ctx.server.get(uriPrefix + '/thtml/crud/:action', renderCrudTemplate(ctx.tview,'thtml/crud/')); ctx.server.get(uriPrefix + '/crud/controller.js', renderCrudController(ctx.tview,thtmlPrefix,tapiPrefix,tapiPrefix2)); //ctx.server.get(uriPrefix + '/service.js', renderCrudService(tview)) ctx.registrateClientJSResource(uriPrefix + '/crud/controller.js'); if (ctx.tview.tmeta.tmenu.tenable && ctx.tview.tmeta.tmenu.tkey !== null && ctx.tview.tmeta.tmenu.titem) { ctx.registrateMenuItem({ name: ctx.tview.tmeta.tmenu.tname, link: ctx.tview.tmeta.tplugin.angular.tbase+'/'+ctx.tview.tslug+'/'+ctx.tview.tlist.tplugin.angular.tslug, enable: ctx.tview.tlist.tenable, roles: ctx.tview.tlist.troles, icon: ctx.tview.tmeta.tmenu.ticon },ctx.tview.tmeta.tmenu.tkey); } }; }; })();