blob: 7ef5f25726a22f8232f7e50316f82eb07f22c32f [file] [log] [blame]
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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.
*/
define(['require',
'handlebars',
], function(require, Handlebars, localization) {
/*
* 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 = {};
/**
* 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);
Handlebars.registerHelper('toHumanDate', function(val) {
if (!val) return "";
return val; //localization.formatDate(val, 'f');
});
Handlebars.registerHelper('tt', function(str) {
//return localization.tt(str);
return str;
});
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;
case '>=':
return (v1 >= v2) ? options.fn(this) : options.inverse(this);
break;
case 'isEmpty':
return (_.isEmpty(v1)) ? options.fn(this) : options.inverse(this);
break;
case 'has':
return (_.has(v1, v2)) ? options.fn(this) : options.inverse(this);
break;
default:
return options.inverse(this);
break;
}
//return options.inverse(this);
});
Handlebars.registerHelper('arithmetic', function(val1, operator, val2, options) {
var v1 = parseInt(val1) || 0,
v2 = parseInt(val2) || 0;
switch (operator) {
case '+':
return (v1 + v2);
break;
case '-':
return (v1 - v2);
break;
case '/':
return (v1 / v2);
break;
case '*':
return (v1 * v2);
break;
case '%':
return (v1 % v2);
break;
default:
return 0;
break;
}
});
Handlebars.registerHelper('lookup', function(obj, field, defaulValue) {
return (obj[field] ? obj[field] : (defaulValue ? defaulValue : ""));
});
Handlebars.registerHelper('eachlookup', function(obj, field, options) {
return Handlebars.helpers.each((obj[field] ? obj[field] : null), options);
});
Handlebars.registerHelper('callmyfunction', function(functionObj, param, options) {
var argumentObj = _.extend([], arguments);
argumentObj.shift();
return functionObj.apply(this, argumentObj);
});
return HHelpers;
});