in security-admin/src/main/webapp/templates/helpers/XAHelpers.js [20:349]
define(function ( require ){
var Handlebars = require('handlebars');
var XAUtil = require('utils/XAUtils');
var localization = require('utils/XALangSupport');
var SessionMgr = require('mgrs/SessionMgr');
var moment = require('moment');
/*
* General guidelines while writing helpers:
*
* - If returning HTML use return new Handlebars.SafeString();
* - If the helper needs optional arguments use the "hash arguments"
* Eg. {{{link . "See more..." story.url class="story"}}}
* NOTE: the first argument after the helper name should be . which will be context in the helper function
* Handlebars.registerHelper('link', function(context, text, url, options) {
* var attrs = [];
*
* for(var prop in options.hash) {
* attrs.push(prop + '="' + options.hash[prop] + '"');
* }
* return new Handlebars.SafeString("<a " + attrs.join(" ") + ">" + text + "</a>");
* });
*
*
* NOTE: Due to some limitations in the require-handlebars-plugin, we cannot have helper that takes zero arguments,
* for such helpers we have to pass a "." as first argument. [https://github.com/SlexAxton/require-handlebars-plugin/issues/72]
*/
var HHelpers = {};
/*
* ACL related helpers
*/
Handlebars.registerHelper("canRead", function(resource, options) {
var roles = _.has(options.hash, 'roles') ? options.hash.roles : undefined;
if(MSAcl.canRead(resource,roles)){
return options.fn(this);
}
});
Handlebars.registerHelper("canCreate", function(resource, options) {
var roles = _.has(options.hash, 'roles') ? options.hash.roles : undefined;
if(MSAcl.canCreate(resource,roles)){
return options.fn(this);
}
});
Handlebars.registerHelper("canUpdate", function(resource, options) {
var roles = _.has(options.hash, 'roles') ? options.hash.roles : undefined;
if(MSAcl.canUpdate(resource,roles)){
return options.fn(this);
}
});
Handlebars.registerHelper("canDelete", function(resource, options) {
var roles = _.has(options.hash, 'roles') ? options.hash.roles : undefined;
if(MSAcl.canDelete(resource,roles)){
return options.fn(this);
}
});
/**
* Convert new line (\n\r) to <br>
* from http://phpjs.org/functions/nl2br:480
*/
HHelpers.nl2br = function(text) {
text = Handlebars.Utils.escapeExpression(text);
var nl2br = (text + '').replace(/([^>\r\n]?)(\r\n|\n\r|\r|\n)/g, '$1' + '<br>' + '$2');
return new Handlebars.SafeString(nl2br);
};
Handlebars.registerHelper('nl2br', HHelpers.nl2br);
/*
* escapeHtmlChar
*/
Handlebars.registerHelper("escapeHtmlChar", function(str) {
return XAUtil.escapeHtmlChar(str);
});
Handlebars.registerHelper("nl2brAndEscapeHtmlChar", function(str) {
return XAUtil.nl2brAndEscapeHtmlChar(str);
});
/*
* required to fetch label for enum value
*/
Handlebars.registerHelper('convertEnumValueToLabel', function(enumName,
enumValue) {
return XAUtil.enumValueToLabel(
XAUtil.getEnum(enumName), enumValue);
});
/*
* required to format date time
*/
Handlebars.registerHelper('convertFormatDateTime', function(cellValue) {
return XAUtil.formatDateTime(cellValue);
});
Handlebars.registerHelper('formatDate', function(val) {
if(!val) return "";
return XAUtil.formatDate(val);
});
Handlebars.registerHelper('formatDateCustom', function(val,format) {
if(!val) return "";
var dateObj = XAUtil.DBToDateObj(val);
return Globalize.format(dateObj,format);
//return Globalize.format((_.isString(val)?new Date(val):val),format);
});
Handlebars.registerHelper('toHumanDate', function(val) {
if(!val) return "";
//return XAUtil.toHumanDate(val);
return localization.formatDate(val, 'f');
});
Handlebars.registerHelper('dateFormat', function(context, block) {
if (window.moment) {
var f = block.hash.format || "MMM Do, YYYY";
return moment(context).format(f);
}else{
return context; // moment plugin not available. return data as is.
}
});
/*
* Truncate the String till n positions
*/
Handlebars.registerHelper('truncStr', function(str, n, useWordBoundary) {
var len = n || 1;
var useWordBn = useWordBoundary || false;
return str.trunc(len, useWordBn);
});
Handlebars.registerHelper('tt', function(str) {
return localization.tt(str);
});
Handlebars.registerHelper('getCopyrightDate', function() {
return new Date().getFullYear().toString();
});
Handlebars.registerHelper('paginate', function(totalCount,pageSize) {
if(typeof pageSize === 'undefined'){
pageSize = 25;
}
var html = '', fromPage = 0, i = 1;
var index = parseInt(totalCount/pageSize);
if(index == 0){
return html;
}
for (; i <= index; i++) {
if(i == 1){
html += '<li class="active" data-page='+fromPage+'><a href="javascript:;">'+i+'</a></li>';
} else {
html += '<li data-page='+fromPage+'><a href="javascript:;">'+i+'</a></li>';
}
fromPage = pageSize * i;
}
if((totalCount - pageSize*index) > 0){
html += '<li data-page='+fromPage+'><a href="javascript:;">'+i+'</a></li>';
}
return html;
});
Handlebars.registerHelper('customPermString', function(permsString,kclass) {
if(permsString == "--")
return permsString;
var permArr = permsString.split(',');
var cl = _.isObject(kclass) ? 'badge badge-info' : kclass;
var tempArr = [];
_.each(permArr, function(val){
tempArr.push('<label class="'+cl+'">'+val+'</label>');
});
return tempArr.join(' ');
});
/*
* Link helper
* @linkType : type of link from XALinks.js
* The options to be passed to XALinks get method :
* @linkOpts : {
* model : model,
* }
* @htmlOpts : {
* class : "myClass"
* }
* {{{a Account null class="myClass" }}}
*
*/
HHelpers.a = function(linkType, linkOpts, htmlOpts) {
var XALinks = require("modules/XALinks");
var linkObj = XALinks.get(linkType, linkOpts);
var attrs = [];
htmlOpts = htmlOpts || {}; // Handle the case if a() is called from outside of Handlebars
for(var prop in htmlOpts.hash) {
attrs.push(prop + '="' + htmlOpts.hash[prop] + '"');
}
attrs.push('href="' + linkObj.href + '"');
attrs.push('title="' + localization.tt(linkObj.title) + '"');
return new Handlebars.SafeString("<a " + attrs.join(" ") + ">" + localization.tt(linkObj.text) + "</a>");
};
Handlebars.registerHelper('a', HHelpers.a);
Handlebars.registerHelper('getImage', function(fileType){
var path = "images/folderIcon.png";
if(fileType == XAEnums.FileType.FILE_FILE.value){
path = "images/file-icon.png";
}
return path;
});
HHelpers.showWeekAbbr = function() {
var html = '';
localization.getDaysOfWeek().forEach(function(v,idx){
if(v){
html += '<option value="'+idx+'">'+v+'</option>';
}
});
return html;
};
Handlebars.registerHelper('showWeekAbbr', HHelpers.showWeekAbbr);
HHelpers.showDays = function() {
var html = '';
for(var i=0,j=1;i<28;i++){
html += '<option value="'+i+'">'+(j++)+'</option>';
}
return html;
};
Handlebars.registerHelper('showDays', HHelpers.showDays);
Handlebars.registerHelper('if_eq', function(context, options) {
if (context == options.hash.compare)
return options.fn(this);
return options.inverse(this);
});
Handlebars.registerHelper('if_gt', function(context, options) {
if (context > options.hash.compare)
return options.fn(this);
return options.inverse(this);
});
Handlebars.registerHelper('avatarHack', function(model) {
return 'styles/images/avatar' + parseInt(((Math.random()*10)%4) + 1,10) + '.png';
});
Handlebars.registerHelper('isSystemAdmin', function(context, options) {
if(SessionMgr.isSystemAdmin())
return options.fn(this);
return options.inverse(this);
});
Handlebars.registerHelper('getAvatar', function(options,size) {
var path;
if(_.has(options,'profileImageGId')){
if(_.isUndefined(size))
path = "service/content/multimedia/image/"+options.profileImageGId;
else
path = "service/content/multimedia/image/"+options.profileImageGId+"/small";
}else{
path = "styles/images/s-avatar.png";
}
return path;
});
Handlebars.registerHelper('ifCond', function (v1, operator, v2, options) {
switch (operator) {
case '==':
return (v1 == v2) ? options.fn(this) : options.inverse(this);
break;
case '===':
return (v1 === v2) ? options.fn(this) : options.inverse(this);
break;
case '<':
return (v1 < v2) ? options.fn(this) : options.inverse(this);
break;
case '<=':
return (v1 <= v2) ? options.fn(this) : options.inverse(this);
break;
case '>':
return (v1 > v2) ? options.fn(this) : options.inverse(this);
break;
case '>=':
return (v1 >= v2) ? options.fn(this) : options.inverse(this);
break;
case '||':
return (v1 || v2) ? options.fn(this) : options.inverse(this);
break;
default:
return options.inverse(this);
break;
}
});
//For Example
/*{{#compare numberone "eq" numbretwo}}
do something
{{else}}
do something else
{{/compare}}
*/
Handlebars.registerHelper( "compare", function( v1, op, v2, options ) {
var c = {
"eq": function( v1, v2 ) {
return v1 == v2;
},
"neq": function( v1, v2 ) {
return v1 != v2;
}
};
if( Object.prototype.hasOwnProperty.call( c, op ) ) {
return c[ op ].call( this, v1, v2 ) ? options.fn( this ) : options.inverse( this );
}
return options.inverse( this );
} );
//For Example
//{{#eachProperty object}}
//{{property}}: {{value}}<br/>
//{{/eachProperty }}
Handlebars.registerHelper('eachProperty', function(context, options) {