-
Notifications
You must be signed in to change notification settings - Fork 0
/
helpers.js
70 lines (55 loc) · 1.67 KB
/
helpers.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
AntiHelpers = function (options) {
'use strict';
options = options || {};
var helpers = {};
var dependencies = {};
var isReactive = !!options.reactive;
function Proxy (context) {
this.context = context;
}
function Helpers () {
this._helpers = helpers;
this.registerAs = function (prefix) {
Template.registerHelper(prefix, function () {
return new Proxy(this);
});
};
this.define = function (name, helper) {
var original;
if (typeof helper === 'undefined') {
helper = function () {};
}
if (typeof name !== 'string') {
throw new Error('argument "name" must be a string');
}
if (typeof helper !== 'function') {
throw new Error('argument "helper" must be a function');
}
if (helpers.hasOwnProperty(name)) {
console.warn('you are overwriting an existing helper: ' + name);
}
if (isReactive) {
if (!dependencies[name]) {
dependencies[name] = new Tracker.Dependency();
}
// make sure "changed" is not called on the first run
if (helpers.hasOwnProperty(name)) {
dependencies[name].changed();
}
original = helper;
helper = function () {
dependencies[name].depend();
return original.apply(this, arguments);
};
}
// expose the helper to the javascript code ...
helpers[name] = helper;
// ... and to the templates
Proxy.prototype[name] = function () {
return helper.apply(this.context, arguments);
};
};
}
Helpers.prototype = helpers;
return new Helpers();
};