define()

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) {