mirror of
https://github.com/discourse/discourse.git
synced 2025-05-25 00:32:52 +08:00
Split out common functions into discourse-common
module
This commit is contained in:
52
app/assets/javascripts/discourse-common/lib/helpers.js.es6
Normal file
52
app/assets/javascripts/discourse-common/lib/helpers.js.es6
Normal file
@ -0,0 +1,52 @@
|
||||
import { get } from 'discourse-common/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);
|
||||
}
|
Reference in New Issue
Block a user