UNPKG

4.49 kBJavaScriptView Raw
1void (function(){var _ion_runtime_ArrayExpression_ = function(module,exports,require){'use strict';
2var ion = require('../'), DynamicExpression = require('./DynamicExpression');
3var ArrayExpression = ion.defineClass({
4 name: 'ArrayExpression',
5 constructor: function ArrayExpression() {
6 ArrayExpression.super.apply(this, arguments);
7 if (!(this.elements != null)) {
8 throw new Error('elements is required');
9 }
10 if (!(this.context != null)) {
11 throw new Error('context is required');
12 }
13 },
14 properties: {
15 observeElements: false,
16 notifyIfActive: function () {
17 if (this.isActive) {
18 this.notify();
19 }
20 },
21 setArgumentValue: function (key, value) {
22 if (this.argumentValues[key] !== value) {
23 if (this.observeElements) {
24 ion.unobserve(this.argumentValues[key], this.itemObserver);
25 }
26 this.argumentValues[key] = value;
27 if (this.observeElements) {
28 ion.observe(value, this.itemObserver = this.itemObserver != null ? this.itemObserver : ion.bind(function () {
29 this.notifyIfActive();
30 }, this));
31 }
32 this.notifyIfActive();
33 }
34 },
35 activate: function () {
36 if (!(this.argumentValues != null)) {
37 var _ref = [];
38 {
39 var _ref2 = this.elements;
40 for (var _i = 0; _i < _ref2.length; _i++) {
41 var item = _ref2[_i];
42 _ref.push(this.context.createRuntime(item));
43 }
44 }
45 this.expressions = _ref;
46 this.argumentValues = [];
47 this.expressionWatchers = [];
48 for (var key = 0; key < this.expressions.length; key++) {
49 this.expressionWatchers[key] = this.setArgumentValue.bind(this, key);
50 }
51 }
52 {
53 var _ref3 = this.expressions;
54 for (var _i2 = 0; _i2 < _ref3.length; _i2++) {
55 var key = _i2;
56 var expression = _ref3[_i2];
57 expression.watch(this.expressionWatchers[key]);
58 }
59 }
60 ArrayExpression.super.prototype.activate.apply(this, arguments);
61 this.setValue(this.argumentValues);
62 },
63 deactivate: function () {
64 {
65 var _ref4 = this.expressions;
66 for (var _i3 = 0; _i3 < _ref4.length; _i3++) {
67 var key = _i3;
68 var expression = _ref4[_i3];
69 expression.unwatch(this.expressionWatchers[key]);
70 }
71 }
72 ArrayExpression.super.prototype.deactivate.apply(this, arguments);
73 }
74 },
75 test: function () {
76 var Context = require('./Context');
77 var e = new ArrayExpression({
78 context: new Context(),
79 elements: [
80 {
81 type: 'Literal',
82 value: 1
83 },
84 {
85 type: 'Literal',
86 value: 2
87 }
88 ]
89 });
90 var result = void 0;
91 function watcher(value) {
92 result = value;
93 }
94 e.watch(watcher);
95 if (!(JSON.stringify(result) === '[1,2]'))
96 throw new Error('Assertion Failed: (JSON.stringify(result) is "[1,2]")');
97 }
98 }, DynamicExpression);
99module.exports = exports = ArrayExpression;
100 }
101 if (typeof require === 'function') {
102 if (require.register)
103 require.register('ion/runtime/ArrayExpression',_ion_runtime_ArrayExpression_);
104 else
105 _ion_runtime_ArrayExpression_.call(this, module, exports, require);
106 }
107 else {
108 _ion_runtime_ArrayExpression_.call(this);
109 }
110}).call(this)
111//# sourceMappingURL=./ArrayExpression.map
\No newline at end of file