This repository has been archived on 2023-03-18. You can view files and clone it, but cannot push or open issues or pull requests.
osr-discourse-src/app/assets/javascripts/discourse/lib/helpers.js.es6
2016-07-11 12:57:05 -04:00

53 lines
1.5 KiB
JavaScript

import { get } from 'discourse/lib/raw-handlebars';
// `Ember.Helper` is only available in versions after 1.12
export function htmlHelper(fn) {
if (Ember.Helper) {
return Ember.Helper.helper(function() {
return new Handlebars.SafeString(fn.apply(this, Array.prototype.slice.call(arguments)) || '');
});
} else {
return Ember.Handlebars.makeBoundHelper(function() {
return new Handlebars.SafeString(fn.apply(this, Array.prototype.slice.call(arguments)) || '');
});
}
}
export function registerHelper(name, fn) {
Ember.HTMLBars._registerHelper(name, fn);
}
function resolveParams(ctx, options) {
let params = {};
const hash = options.hash;
if (hash) {
if (options.hashTypes) {
Object.keys(hash).forEach(function(k) {
const type = options.hashTypes[k];
if (type === "STRING" || type === "StringLiteral") {
params[k] = hash[k];
} else if (type === "ID" || type === "PathExpression") {
params[k] = get(ctx, hash[k], options);
}
});
} else {
params = hash;
}
}
return params;
}
export function registerUnbound(name, fn) {
const func = function(property, options) {
if (options.types && (options.types[0] === "ID" || options.types[0] === "PathExpression")) {
property = get(this, property, options);
}
return fn.call(this, property, resolveParams(this, options));
};
Handlebars.registerHelper(name, func);
Ember.Handlebars.registerHelper(name, func);
}