agneta-platform
Version:
Agneta Platform - Integrate and customize business applications
216 lines (154 loc) • 5.31 kB
JavaScript
/* Copyright 2017 Agneta Network Applications, LLC.
*
* Source file: pages/scripts/helpers/view.js
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
var path = require('path');
var urljoin = require('url-join');
var _ = require('lodash');
module.exports = function(locals) {
var project = locals.project;
project.extend.helper.register('viewBasicData', function(page) {
var data = {};
var site = this.site;
page = page || this.page;
data.title = this.get_title(page);
data.path = page.pathSource;
data.parentPath = page.parentPath;
data.scripts = [];
data.styles = [];
data.languages = [];
//-----------------------------------------------------
// languages
for (var lang_short in site.languages) {
if (page.title && !page.title[lang_short]) {
continue;
}
var lang_full = site.languages[lang_short];
var url = page.pathSource;
url = url.split('/');
url.unshift(lang_short);
url = url.join('/');
url = this.url_for(url);
var linkClass = (lang_short == site.lang) ? 'selected' : '';
data.languages.push({
name: lang_full,
href: url,
linkClass: linkClass
});
}
//----------------------------------------
data.layoutClass = [
'page-' + page.templateSource.split('/')
.join('-')
];
if (page.class) {
data.layoutClass.push(page.class);
}
data.layoutClass = data.layoutClass.join(' ');
//----------------------------------------------------
var templateStyle = this.layout_style(page.templateSource);
if (templateStyle) {
data.styles.push(templateStyle);
}
var sourceStyle = this.layout_style(page.pathSource);
if (sourceStyle) {
data.styles.push(sourceStyle);
}
//----------------------------------------
var templateScript = this.layout_script(page.templateSource);
if (templateScript) {
data.scripts.push(templateScript);
}
var sourceScript = this.layout_script(page.pathSource);
if (sourceScript) {
data.scripts.push(sourceScript);
}
return data;
});
project.extend.helper.register('viewAuthData', function() {
var page = _.extend({}, this.page, {
styles: ['authorization'],
class: 'page-authorization'
});
return this.viewData(page);
});
project.extend.helper.register('viewData', function(page) {
page = page || this.page;
var data = this.viewBasicData(page);
var config = this.config;
var self = this;
data.authorization = page.authorization;
data.keypress = page.keypress;
data.controller = page.controller;
data.menuLock = config.lockSidebar || page.menuLock;
data.extra = this.lngScan(page.viewData);
//----------------------------------------
if (page.toolbar && this.has_template(path.join('partials', page.toolbar))) {
data.toolbar = this.get_path(urljoin('partial', page.toolbar));
}
//----------------------------------------
data.sidebar = this.get_path(urljoin(this.pagePath(page), 'sidebar'));
//----------------------------------------
if (page.angular_libs) {
data.inject = _.map(page.angular_libs, function(value) {
data.scripts.push(value.js);
return value.dep;
});
}
//----------------------------------------
var tmpDependencies = [];
data.dependencies = [];
data.scripts = data.scripts.concat(page.scripts);
data.styles = data.styles.concat(page.styles);
setAssets(data.scripts, '.js');
setAssets(data.styles, '.css');
for (var index in tmpDependencies) {
var value = tmpDependencies[index];
value = _.uniq(value);
data.dependencies.push(value);
}
delete data.scripts;
delete data.styles;
function setAssets(assets, ext) {
for (var y in assets) {
var asset = assets[y];
var priority = 999;
var assetPath = asset;
if (!asset) {
continue;
}
if (_.isObject(asset)) {
assetPath = asset.path;
priority = _.isNumber(asset.priority) ? asset.priority : priority;
}
if (!_.isString(assetPath)) {
console.error(asset);
throw new Error('Could not find asset path');
}
if (assetPath.indexOf(ext) < 0) {
assetPath += ext;
}
assetPath = self.get_asset(assetPath);
if (!assetPath) {
throw new Error(`Could not find asset ${asset}`);
}
var dependencies = tmpDependencies[priority] || [];
dependencies.push(assetPath);
tmpDependencies[priority] = dependencies;
}
}
return JSON.stringify(data);
});
};