Framework for supporting Ember 1.12/1.13 helpers simulataneously

This commit is contained in:
Robin Ward 2016-10-24 13:49:17 -04:00
parent 750338954c
commit bd352385a5
6 changed files with 39 additions and 33 deletions

View File

@ -13,8 +13,24 @@ export function htmlHelper(fn) {
}
}
const _helpers = {};
export function registerHelper(name, fn) {
Ember.HTMLBars._registerHelper(name, fn);
if (Ember.Helper) {
_helpers[name] = Ember.Helper.helper(fn);
} else {
return Ember.HTMLBars._registerHelper(name, fn);
}
}
export function findHelper(name) {
return _helpers[name];
}
export function registerHelpers(registry) {
Object.keys(_helpers).forEach(name => {
registry.register(`helper:${name}`, _helpers[name], { singleton: false });
});
}
function resolveParams(ctx, options) {
@ -39,6 +55,13 @@ function resolveParams(ctx, options) {
}
export function registerUnbound(name, fn) {
if (Ember.Helper) {
_helpers[name] = Ember.Helper.helper(function() {
// TODO: Allow newer ember to use helpers
});
return;
}
const func = function(property, options) {
if (options.types && (options.types[0] === "ID" || options.types[0] === "PathExpression")) {
property = get(this, property, options);

View File

@ -1,5 +1,6 @@
/* global requirejs, require */
import { findHelper } from 'discourse-common/lib/helpers';
/* global requirejs, require */
var classify = Ember.String.classify;
var get = Ember.get;
@ -109,7 +110,9 @@ export function buildResolver(baseName) {
},
resolveHelper(parsedName) {
return this.customResolve(parsedName) || this._super(parsedName);
return findHelper(parsedName.fullNameWithoutType) ||
this.customResolve(parsedName) ||
this._super(parsedName);
},
resolveController(parsedName) {

View File

@ -20,15 +20,7 @@ export function setCustomHTML(key, html) {
_customizations[key] = html;
}
registerHelper('custom-html', function(params, hash, options, env) {
const name = params[0];
const html = getCustomHTML(name);
registerHelper('custom-html', function(params) {
const html = getCustomHTML(params[0]);
if (html) { return html; }
const contextString = params[1];
const target = (env || contextString);
const container = target.container || target.data.view.container;
if (container.lookup('template:' + name)) {
return env.helpers.partial.helperFunction.apply(this, arguments);
}
});

View File

@ -29,17 +29,6 @@
And it will be wired up automatically.
## The block form
If you use the block form of the outlet, its contents will be displayed
if no connectors are found. Example:
```handlebars
{{#plugin-outlet "hello-world"}}
Nobody says hello :'(
{{/plugin-outlet}}
```
## Disabling
If a plugin returns a disabled status, the outlets will not be wired up for it.
@ -174,13 +163,6 @@ registerHelper('plugin-outlet', function(params, hash, options, env) {
});
}
}
} else if (options.isBlock) {
const virtualView = Ember.View.extend({
isVirtual: true,
tagName: hash.tagName || '',
template: options.template
});
env.helpers.view.helperFunction.call(this, [virtualView], hash, options, env);
}
});

View File

@ -1,4 +1,6 @@
export function autoLoadModules() {
import { registerHelpers } from 'discourse-common/lib/helpers';
export function autoLoadModules(container, registry) {
Object.keys(requirejs.entries).forEach(entry => {
if ((/\/helpers\//).test(entry)) {
require(entry, null, null, true);
@ -7,6 +9,7 @@ export function autoLoadModules() {
require(entry, null, null, true);
}
});
registerHelpers(registry);
}
export default {

View File

@ -1,11 +1,14 @@
import { registerHelpers } from 'discourse-common/lib/helpers';
export default {
name: 'load-helpers',
initialize() {
initialize(container, registry) {
Object.keys(requirejs.entries).forEach(entry => {
if ((/\/helpers\//).test(entry)) {
require(entry, null, null, true);
}
});
registerHelpers(registry);
}
};