discourse/app/assets/javascripts/discourse-common/lib/helpers.js.es6

62 lines
1.6 KiB
Plaintext
Raw Normal View History

import { get } from 'discourse-common/lib/raw-handlebars';
2016-07-01 05:10:08 +08:00
export function htmlHelper(fn) {
2016-11-26 04:38:45 +08:00
return Ember.Helper.helper(function(...args) {
args = (args.length > 1) ? args[0].concat({ hash: args[args.length-1] }) : args;
return new Handlebars.SafeString(fn.apply(this, args) || '');
});
}
const _helpers = {};
export function registerHelper(name, fn) {
2016-11-26 04:38:45 +08:00
_helpers[name] = Ember.Helper.helper(fn);
}
export function findHelper(name) {
2016-10-29 04:35:32 +08:00
return _helpers[name] || _helpers[name.dasherize()];
}
export function registerHelpers(registry) {
Object.keys(_helpers).forEach(name => {
registry.register(`helper:${name}`, _helpers[name], { singleton: false });
});
}
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) {
2015-04-29 05:05:06 +08:00
const func = function(property, options) {
if (options.types && (options.types[0] === "ID" || options.types[0] === "PathExpression")) {
2014-12-12 02:33:07 +08:00
property = get(this, property, options);
}
2014-12-11 00:34:00 +08:00
return fn.call(this, property, resolveParams(this, options));
2015-04-29 05:05:06 +08:00
};
2016-11-26 04:38:45 +08:00
_helpers[name] = Ember.Helper.extend({
compute: (params, args) => fn(params[0], args)
});
2015-04-29 05:05:06 +08:00
Handlebars.registerHelper(name, func);
2014-12-11 00:34:00 +08:00
}