ende 0.5.1 → 0.5.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (155) hide show
  1. checksums.yaml +4 -4
  2. data/component.json +2 -2
  3. data/components/indefinido/indemma/master/component.json +27 -17
  4. data/components/indefinido/indemma/master/lib/record/associable.js +74 -75
  5. data/components/indefinido/indemma/master/lib/record/dirtyable.js +40 -0
  6. data/components/indefinido/indemma/master/lib/record/queryable.js +2 -2
  7. data/components/indefinido/indemma/master/lib/record/resource.js +1 -1
  8. data/components/indefinido/indemma/master/lib/record/rest.js +7 -2
  9. data/components/indefinido/indemma/master/lib/record/restfulable.js +37 -10
  10. data/components/indefinido/indemma/master/lib/record/scopable.js +20 -47
  11. data/components/indefinido/indemma/master/lib/record/storable.js +11 -0
  12. data/components/indefinido/indemma/master/lib/record/validatable.js +195 -1068
  13. data/components/indefinido/indemma/master/lib/record.js +1 -1
  14. data/components/indefinido/indemma/master/vendor/stampit.js +568 -242
  15. data/components/indefinido/observable/es6-modules/component.json +39 -0
  16. data/components/indefinido/{indemma/master/components/indefinido-observable → observable/es6-modules}/lib/adapters/rivets.js +3 -1
  17. data/components/indefinido/observable/es6-modules/lib/legacy/notifierable.js +145 -0
  18. data/components/indefinido/observable/es6-modules/lib/legacy/schedulerable.js +114 -0
  19. data/components/indefinido/observable/es6-modules/lib/lookup.js +38 -0
  20. data/components/indefinido/observable/es6-modules/lib/observable/keypath_observer.js +38 -0
  21. data/components/indefinido/observable/es6-modules/lib/observable/observation.js +45 -0
  22. data/components/indefinido/observable/es6-modules/lib/observable/selection.js +57 -0
  23. data/components/indefinido/observable/es6-modules/lib/observable/self_observer.js +38 -0
  24. data/components/indefinido/observable/es6-modules/lib/observable.js +90 -0
  25. data/components/indefinido/observable/es6-modules/lib/platform.js +12 -0
  26. data/components/indefinido/observable/es6-modules/vendor/observe-js/observe.js +1631 -0
  27. data/components/indefinido/{indemma/master/components/indefinido-observable → observable/es6-modules}/vendor/shims/accessors.js +85 -10
  28. data/lib/assets/javascripts/aura/extensions/rivets.js.coffee +1 -1
  29. data/lib/ende/version.rb +1 -1
  30. data/vendor/assets/components/ende_build.js +18379 -26828
  31. metadata +20 -128
  32. data/components/indefinido/indemma/master/.gitignore +0 -17
  33. data/components/indefinido/indemma/master/.ruby-gemset +0 -1
  34. data/components/indefinido/indemma/master/.ruby-version +0 -1
  35. data/components/indefinido/indemma/master/Gemfile +0 -13
  36. data/components/indefinido/indemma/master/Guardfile +0 -39
  37. data/components/indefinido/indemma/master/History.md +0 -0
  38. data/components/indefinido/indemma/master/Readme.md +0 -447
  39. data/components/indefinido/indemma/master/build/build.js +0 -26288
  40. data/components/indefinido/indemma/master/build/development.js +0 -22200
  41. data/components/indefinido/indemma/master/build/release.js +0 -22139
  42. data/components/indefinido/indemma/master/build/test.js +0 -22200
  43. data/components/indefinido/indemma/master/components/chaijs-assertion-error/component.json +0 -18
  44. data/components/indefinido/indemma/master/components/chaijs-assertion-error/index.js +0 -110
  45. data/components/indefinido/indemma/master/components/chaijs-chai/component.json +0 -47
  46. data/components/indefinido/indemma/master/components/chaijs-chai/index.js +0 -1
  47. data/components/indefinido/indemma/master/components/chaijs-chai/lib/chai/assertion.js +0 -130
  48. data/components/indefinido/indemma/master/components/chaijs-chai/lib/chai/core/assertions.js +0 -1270
  49. data/components/indefinido/indemma/master/components/chaijs-chai/lib/chai/interface/assert.js +0 -1080
  50. data/components/indefinido/indemma/master/components/chaijs-chai/lib/chai/interface/expect.js +0 -12
  51. data/components/indefinido/indemma/master/components/chaijs-chai/lib/chai/interface/should.js +0 -76
  52. data/components/indefinido/indemma/master/components/chaijs-chai/lib/chai/utils/addChainableMethod.js +0 -94
  53. data/components/indefinido/indemma/master/components/chaijs-chai/lib/chai/utils/addMethod.js +0 -37
  54. data/components/indefinido/indemma/master/components/chaijs-chai/lib/chai/utils/addProperty.js +0 -40
  55. data/components/indefinido/indemma/master/components/chaijs-chai/lib/chai/utils/eql.js +0 -129
  56. data/components/indefinido/indemma/master/components/chaijs-chai/lib/chai/utils/flag.js +0 -32
  57. data/components/indefinido/indemma/master/components/chaijs-chai/lib/chai/utils/getActual.js +0 -19
  58. data/components/indefinido/indemma/master/components/chaijs-chai/lib/chai/utils/getEnumerableProperties.js +0 -25
  59. data/components/indefinido/indemma/master/components/chaijs-chai/lib/chai/utils/getMessage.js +0 -49
  60. data/components/indefinido/indemma/master/components/chaijs-chai/lib/chai/utils/getName.js +0 -20
  61. data/components/indefinido/indemma/master/components/chaijs-chai/lib/chai/utils/getPathValue.js +0 -102
  62. data/components/indefinido/indemma/master/components/chaijs-chai/lib/chai/utils/getProperties.js +0 -35
  63. data/components/indefinido/indemma/master/components/chaijs-chai/lib/chai/utils/index.js +0 -108
  64. data/components/indefinido/indemma/master/components/chaijs-chai/lib/chai/utils/inspect.js +0 -320
  65. data/components/indefinido/indemma/master/components/chaijs-chai/lib/chai/utils/objDisplay.js +0 -48
  66. data/components/indefinido/indemma/master/components/chaijs-chai/lib/chai/utils/overwriteMethod.js +0 -51
  67. data/components/indefinido/indemma/master/components/chaijs-chai/lib/chai/utils/overwriteProperty.js +0 -54
  68. data/components/indefinido/indemma/master/components/chaijs-chai/lib/chai/utils/test.js +0 -26
  69. data/components/indefinido/indemma/master/components/chaijs-chai/lib/chai/utils/transferFlags.js +0 -44
  70. data/components/indefinido/indemma/master/components/chaijs-chai/lib/chai/utils/type.js +0 -45
  71. data/components/indefinido/indemma/master/components/chaijs-chai/lib/chai.js +0 -80
  72. data/components/indefinido/indemma/master/components/component-bind/component.json +0 -14
  73. data/components/indefinido/indemma/master/components/component-bind/index.js +0 -24
  74. data/components/indefinido/indemma/master/components/component-jquery/component.json +0 -14
  75. data/components/indefinido/indemma/master/components/component-jquery/index.js +0 -9601
  76. data/components/indefinido/indemma/master/components/component-type/component.json +0 -18
  77. data/components/indefinido/indemma/master/components/component-type/index.js +0 -32
  78. data/components/indefinido/indemma/master/components/indefinido-advisable/component.json +0 -21
  79. data/components/indefinido/indemma/master/components/indefinido-advisable/index.js +0 -1
  80. data/components/indefinido/indemma/master/components/indefinido-advisable/lib/advisable.js +0 -60
  81. data/components/indefinido/indemma/master/components/indefinido-observable/component.json +0 -25
  82. data/components/indefinido/indemma/master/components/indefinido-observable/components/cjohansen-sinon/sinon.js +0 -4290
  83. data/components/indefinido/indemma/master/components/indefinido-observable/lib/observable.js +0 -323
  84. data/components/indefinido/indemma/master/components/kapit-observe-utils/component.json +0 -13
  85. data/components/indefinido/indemma/master/components/paulmillr-es6-shim/component.json +0 -17
  86. data/components/indefinido/indemma/master/components/paulmillr-es6-shim/es6-shim.js +0 -996
  87. data/components/indefinido/indemma/master/components/pluma-assimilate/component.json +0 -25
  88. data/components/indefinido/indemma/master/components/pluma-assimilate/dist/assimilate.js +0 -127
  89. data/components/indefinido/indemma/master/karma.conf.js +0 -76
  90. data/components/indefinido/indemma/master/package.json +0 -9
  91. data/components/indefinido/indemma/master/spec/record/associable_spec.js +0 -137
  92. data/components/indefinido/indemma/master/spec/record/persistable_spec.js +0 -36
  93. data/components/indefinido/indemma/master/spec/record/queryable_spec.js +0 -33
  94. data/components/indefinido/indemma/master/spec/record/resource_spec.js +0 -93
  95. data/components/indefinido/indemma/master/spec/record/rest_spec.js +0 -32
  96. data/components/indefinido/indemma/master/spec/record/restfulable_spec.js +0 -300
  97. data/components/indefinido/indemma/master/spec/record/scopable_spec.js +0 -212
  98. data/components/indefinido/indemma/master/spec/record/storable_spec.js +0 -53
  99. data/components/indefinido/indemma/master/spec/record/translationable.js +0 -28
  100. data/components/indefinido/indemma/master/spec/record/validatable_spec.js +0 -111
  101. data/components/indefinido/indemma/master/spec/record/validations/associated_spec.js +0 -43
  102. data/components/indefinido/indemma/master/spec/record/validations/confirmation_spec.js +0 -36
  103. data/components/indefinido/indemma/master/spec/record/validations/cpf_spec.js +0 -35
  104. data/components/indefinido/indemma/master/spec/record/validations/presence_spec.js +0 -28
  105. data/components/indefinido/indemma/master/spec/record/validations/remote_spec.js +0 -87
  106. data/components/indefinido/indemma/master/spec/record/validations/type_spec.js +0 -48
  107. data/components/indefinido/indemma/master/spec/record_spec.js +0 -37
  108. data/components/indefinido/indemma/master/spec/spec_helper.js +0 -11
  109. data/components/indefinido/indemma/master/spec/support/value_objects/phone.js +0 -45
  110. data/components/indefinido/indemma/master/src/lib/extensions/rivets.coffee +0 -17
  111. data/components/indefinido/indemma/master/src/lib/record/associable.coffee +0 -380
  112. data/components/indefinido/indemma/master/src/lib/record/errors.coffee +0 -20
  113. data/components/indefinido/indemma/master/src/lib/record/maid.coffee +0 -16
  114. data/components/indefinido/indemma/master/src/lib/record/persistable.coffee +0 -32
  115. data/components/indefinido/indemma/master/src/lib/record/queryable.coffee +0 -30
  116. data/components/indefinido/indemma/master/src/lib/record/resource.coffee +0 -106
  117. data/components/indefinido/indemma/master/src/lib/record/rest.coffee +0 -28
  118. data/components/indefinido/indemma/master/src/lib/record/restfulable.coffee +0 -447
  119. data/components/indefinido/indemma/master/src/lib/record/scopable.coffee +0 -294
  120. data/components/indefinido/indemma/master/src/lib/record/storable.coffee +0 -46
  121. data/components/indefinido/indemma/master/src/lib/record/translationable.coffee +0 -18
  122. data/components/indefinido/indemma/master/src/lib/record/validatable.coffee +0 -207
  123. data/components/indefinido/indemma/master/src/lib/record/validations/associated.coffee +0 -30
  124. data/components/indefinido/indemma/master/src/lib/record/validations/confirmation.coffee +0 -17
  125. data/components/indefinido/indemma/master/src/lib/record/validations/cpf.coffee +0 -57
  126. data/components/indefinido/indemma/master/src/lib/record/validations/presence.coffee +0 -16
  127. data/components/indefinido/indemma/master/src/lib/record/validations/remote.coffee +0 -61
  128. data/components/indefinido/indemma/master/src/lib/record/validations/type.coffee +0 -31
  129. data/components/indefinido/indemma/master/src/lib/record/validations/validatorable.coffee +0 -5
  130. data/components/indefinido/indemma/master/src/lib/record.coffee +0 -138
  131. data/components/indefinido/indemma/master/src/spec/record/associable_spec.coffee +0 -130
  132. data/components/indefinido/indemma/master/src/spec/record/persistable_spec.coffee +0 -30
  133. data/components/indefinido/indemma/master/src/spec/record/queryable_spec.coffee +0 -27
  134. data/components/indefinido/indemma/master/src/spec/record/resource_spec.coffee +0 -69
  135. data/components/indefinido/indemma/master/src/spec/record/rest_spec.coffee +0 -22
  136. data/components/indefinido/indemma/master/src/spec/record/restfulable_spec.coffee +0 -215
  137. data/components/indefinido/indemma/master/src/spec/record/scopable_spec.coffee +0 -191
  138. data/components/indefinido/indemma/master/src/spec/record/storable_spec.coffee +0 -40
  139. data/components/indefinido/indemma/master/src/spec/record/translationable.coffee +0 -19
  140. data/components/indefinido/indemma/master/src/spec/record/validatable_spec.coffee +0 -100
  141. data/components/indefinido/indemma/master/src/spec/record/validations/associated_spec.coffee +0 -35
  142. data/components/indefinido/indemma/master/src/spec/record/validations/confirmation_spec.coffee +0 -25
  143. data/components/indefinido/indemma/master/src/spec/record/validations/cpf_spec.coffee +0 -28
  144. data/components/indefinido/indemma/master/src/spec/record/validations/presence_spec.coffee +0 -24
  145. data/components/indefinido/indemma/master/src/spec/record/validations/remote_spec.coffee +0 -74
  146. data/components/indefinido/indemma/master/src/spec/record/validations/type_spec.coffee +0 -33
  147. data/components/indefinido/indemma/master/src/spec/record_spec.coffee +0 -23
  148. data/components/indefinido/indemma/master/src/spec/spec_helper.coffee +0 -9
  149. data/components/indefinido/indemma/master/src/spec/support/value_objects/phone.coffee +0 -30
  150. data/components/indefinido/indemma/master/vendor/object/mixin.js +0 -196
  151. data/components/indefinido/indemma/master/vendor/sinon.js +0 -4290
  152. /data/components/indefinido/{indemma/master/components/indefinido-observable → observable/es6-modules}/index.js +0 -0
  153. /data/components/indefinido/{indemma/master/components/indefinido-observable → observable/es6-modules}/vendor/shims/accessors-legacy.js +0 -0
  154. /data/components/indefinido/{indemma/master/components/indefinido-observable → observable/es6-modules}/vendor/shims/array.indexOf.js +0 -0
  155. /data/components/indefinido/{indemma/master/components/indefinido-observable → observable/es6-modules}/vendor/shims/object.create.js +0 -0
@@ -0,0 +1,39 @@
1
+ {
2
+ "name": "observable",
3
+ "repository": "indefinido/observable",
4
+ "description": "Observable capabilities built upon observable shim.",
5
+ "version": "0.2.1",
6
+ "keywords": [],
7
+ "dependencies": {
8
+ "component/jquery": "*"
9
+ },
10
+ "main": "index.js",
11
+ "development": {
12
+ "dependencies": {
13
+ "chaijs/chai": "*"
14
+ },
15
+ "scripts": [
16
+ "vendor/spec/sinon.js",
17
+ "vendor/spec/sinon/**/*.js"
18
+ ]
19
+ },
20
+ "license": "WTFPL",
21
+ "scripts": [
22
+ "index.js",
23
+ "lib/adapters/rivets.js",
24
+ "lib/legacy/notifierable.js",
25
+ "lib/legacy/schedulerable.js",
26
+ "lib/lookup.js",
27
+ "lib/observable.js",
28
+ "lib/observable/keypath_observer.js",
29
+ "lib/observable/observation.js",
30
+ "lib/observable/selection.js",
31
+ "lib/observable/self_observer.js",
32
+ "lib/platform.js",
33
+ "vendor/observe-js/observe.js",
34
+ "vendor/shims/accessors-legacy.js",
35
+ "vendor/shims/accessors.js",
36
+ "vendor/shims/array.indexOf.js",
37
+ "vendor/shims/object.create.js"
38
+ ]
39
+ }
@@ -3,7 +3,9 @@ exports.adapter = {
3
3
  if (record == null) {
4
4
  throw new TypeError('observable.adapters.rivets.subscribe: No record provided for subscription');
5
5
  }
6
- return record.subscribe(attribute_path, callback);
6
+ if (attribute_path) {
7
+ return record.subscribe(attribute_path, callback);
8
+ }
7
9
  },
8
10
  unsubscribe: function(record, attribute_path, callback) {
9
11
  if (record == null) {
@@ -0,0 +1,145 @@
1
+ import jQuery from 'jquery';
2
+ var mutations, notifierable, subscribed_getter;
3
+
4
+ notifierable = {
5
+ observe: function(object, keypath, callback) {
6
+ return Object.defineProperty(object, keypath, {
7
+ get: this.getter(object, keypath),
8
+ set: this.setter(object, keypath, callback),
9
+ enumerable: true
10
+ });
11
+ },
12
+ storage_for: function(object) {
13
+ var toJSON;
14
+
15
+ toJSON = void 0;
16
+ Object.defineProperty(object, "observed", {
17
+ configurable: true,
18
+ enumerable: false,
19
+ value: {}
20
+ });
21
+ toJSON = object.json || object.toJSON;
22
+ if (toJSON) {
23
+ return Object.defineProperty(object, "toJSON", {
24
+ enumerable: false,
25
+ value: function() {
26
+ var json;
27
+
28
+ json = void 0;
29
+ json = toJSON.apply(this, arguments);
30
+ return observable.unobserve(_.omit(json, observable.ignores, ["toJSON", "observed"]));
31
+ }
32
+ });
33
+ }
34
+ },
35
+ setter: function(object, keypath, callback) {
36
+ var current, old_setter, setter, thread;
37
+
38
+ setter = lookup.setter.call(object, keypath);
39
+ this.observed[keypath] = lookup.getter.call(object, keypath) && lookup.getter.call(object, keypath)() || object[keypath];
40
+ if (!setter) {
41
+ setter = function(value) {
42
+ return check.call(object, keypath, value) !== false && setter.callback_thread.call(object, value);
43
+ };
44
+ } else if (!setter.callback_thread) {
45
+ old_setter = setter;
46
+ setter = function(value) {
47
+ return check.call(object, keypath, value) !== false && setter.callback_thread.call(object, value);
48
+ };
49
+ setter.callback_thread = old_setter;
50
+ }
51
+ current = setter.callback_thread || $.noop;
52
+ setter.callback_thread = thread = function(value) {
53
+ return current.call(object, value) !== false && callback.call(object, value);
54
+ };
55
+ if (requiresDomElement) {
56
+ this.observed[keypath + "_setter"] = setter;
57
+ }
58
+ return setter;
59
+ },
60
+ getter: subscribed_getter = function(object, keypath) {
61
+ var getter, root_getter;
62
+
63
+ getter = lookup.getter.call(object, keypath) || (root_getter = function() {
64
+ return object.observed[keypath];
65
+ });
66
+ if (requiresDomElement) {
67
+ this.observed[keypath + "_getter"] = getter;
68
+ }
69
+ return getter;
70
+ },
71
+ mutations: function(keypath) {
72
+ var array, setter;
73
+
74
+ setter = lookup.setter.call(this, keypath);
75
+ array = this[keypath];
76
+ if (!setter) {
77
+ this.observe.call(this, keypath, function(new_array) {
78
+ var i, j, type;
79
+
80
+ i = void 0;
81
+ type = void 0;
82
+ j = void 0;
83
+ if ($.type(new_array) !== "array") {
84
+ return;
85
+ }
86
+ if (new_array.object === array.object && new_array.thread === array.thread) {
87
+ return;
88
+ }
89
+ i = new_array.length;
90
+ j = new_array.length;
91
+ new_array.thread = array.thread;
92
+ new_array.object = array.object;
93
+ new_array.key = keypath;
94
+ while (i--) {
95
+ type = $.type(new_array[i]);
96
+ if (!new_array[i].observed && (type === "object" || type === "array")) {
97
+ new_array[i] = observable(new_array[i]);
98
+ }
99
+ }
100
+ new_array.length = j;
101
+ $.extend(new_array, mutations.overrides);
102
+ });
103
+ setter = lookup.setter.call(this, keypath);
104
+ }
105
+ array.thread = setter.callback_thread;
106
+ array.object = this;
107
+ array.key = keypath;
108
+ $.extend(array, mutations.overrides);
109
+ if (!this.observed.mutate) {
110
+ this.observed.mutate = mutations.mutate;
111
+ }
112
+ }
113
+ };
114
+
115
+ mutations = {
116
+ mutate: function(thread, method, array) {
117
+ array.method = method;
118
+ thread.call(this, array);
119
+ this.publish(array.key, array);
120
+ delete array.method;
121
+ },
122
+ overrides: {
123
+ push: function() {
124
+ var i, operation;
125
+
126
+ i = arguments.length;
127
+ operation = void 0;
128
+ while (i--) {
129
+ !arguments[i].observed && $.type(arguments[i]) === "object" && (arguments[i] = observable(arguments[i]));
130
+ }
131
+ operation = Array.prototype.push.apply(this, arguments);
132
+ this.object.observed.mutate.call(this.object, this.thread, "push", this);
133
+ return operation;
134
+ }
135
+ }
136
+ };
137
+
138
+ jQuery("pop shift unshift".split(" ")).each(function(i, method) {
139
+ return mutations.overrides[method] = function() {
140
+ Array.prototype[method].apply(this, arguments);
141
+ return this.object.observed.mutate.call(this.object, this.thread, method, this);
142
+ };
143
+ });
144
+
145
+ export default notifierable;
@@ -0,0 +1,114 @@
1
+ import lookup from '../lookup.js';
2
+ import jQuery from 'jquery';
3
+ var scheduler, schedulerable;
4
+
5
+ scheduler = function(options) {
6
+ var name, timeout, value;
7
+
8
+ if (options == null) {
9
+ options = {};
10
+ }
11
+ timeout = null;
12
+ for (name in options) {
13
+ value = options[name];
14
+ options[name] = {
15
+ value: value
16
+ };
17
+ }
18
+ jQuery.extend(options, {
19
+ keypaths: {
20
+ value: []
21
+ },
22
+ schedule: {
23
+ value: function() {
24
+ var deliver,
25
+ _this = this;
26
+
27
+ deliver = function() {
28
+ return _this.deliver();
29
+ };
30
+ clearTimeout(timeout);
31
+ return timeout = setTimeout(deliver, 20 || options.wait);
32
+ }
33
+ }
34
+ });
35
+ return Object.create(scheduler.methods, options);
36
+ };
37
+
38
+ jQuery.extend(scheduler, {
39
+ methods: {
40
+ property: function(object, keypath) {
41
+ var observer, observers, value;
42
+
43
+ if (this.keypaths.indexOf(keypath) !== -1) {
44
+ return;
45
+ }
46
+ this.keypaths.push(keypath);
47
+ observers = object.observation.observers;
48
+ observer = observers[keypath];
49
+ value = observer.path_.getValueFrom(object);
50
+ Object.defineProperty(object, keypath, {
51
+ get: this.getter(object, keypath),
52
+ set: this.setter(object, keypath),
53
+ enumerable: true,
54
+ configurable: true
55
+ });
56
+ if (value !== observer.path_.getValueFrom(object)) {
57
+ return observer.setValue(value);
58
+ }
59
+ },
60
+ deliver: function() {
61
+ return this.target.observation.deliver();
62
+ },
63
+ setter: function(object, keypath, callback) {
64
+ var current_setter;
65
+
66
+ current_setter = lookup.setter.call(object, keypath);
67
+ if (current_setter) {
68
+ return function(value) {
69
+ current_setter.call(this, value);
70
+ this.observed[keypath] = value;
71
+ return this.observation.scheduler.schedule();
72
+ };
73
+ } else {
74
+ return function(value) {
75
+ this.observed[keypath] = value;
76
+ return this.observation.scheduler.schedule();
77
+ };
78
+ }
79
+ },
80
+ getter: function(object, keypath) {
81
+ var root_getter;
82
+
83
+ return lookup.getter.call(object, keypath) || (root_getter = function() {
84
+ return this.observed[keypath];
85
+ });
86
+ },
87
+ destroy: function() {
88
+ return this.target = null;
89
+ }
90
+ }
91
+ });
92
+
93
+ schedulerable = function(observable) {
94
+ var original;
95
+
96
+ original = observable.methods.subscribe;
97
+ observable.methods.subscribe = function(keypath, callback) {
98
+ original.apply(this, arguments);
99
+ if (typeof keypath !== 'function') {
100
+ return this.observation.scheduler.property(this, keypath);
101
+ }
102
+ };
103
+ return jQuery.extend((function() {
104
+ var object;
105
+
106
+ object = observable.apply(this, arguments);
107
+ object.observation.scheduler = scheduler({
108
+ target: object
109
+ });
110
+ return object;
111
+ }), observable);
112
+ };
113
+
114
+ export default schedulerable;
@@ -0,0 +1,38 @@
1
+ var lookup;
2
+
3
+ lookup = {
4
+ setter: Object.prototype.__lookupSetter__ || function(property) {
5
+ return this.observed && this.observed[property + "_setter"];
6
+ },
7
+ getter: Object.prototype.__lookupGetter__ || function(property) {
8
+ var default_getter;
9
+
10
+ default_getter = void 0;
11
+ return this.observed && this.observed[property + "_getter"] || ((default_getter = $.proxy(lookup.default_getter, this, property)) && (default_getter.is_default = true) && default_getter);
12
+ },
13
+ types: {
14
+ undefined: undefined,
15
+ "null": null,
16
+ "true": true,
17
+ "false": false,
18
+ NaN: NaN
19
+ },
20
+ basic_types: [undefined, null],
21
+ default_getter: function(property) {
22
+ var possible_value;
23
+
24
+ possible_value = this[property];
25
+ if (possible_value && possible_value.hasOwnProperty("toString")) {
26
+ if (possible_value.toString.is_default) {
27
+ return this.observed[property];
28
+ }
29
+ return possible_value.toString.call(this);
30
+ } else if (possible_value in lookup.types) {
31
+ return lookup.types[possible_value];
32
+ } else {
33
+ return possible_value;
34
+ }
35
+ }
36
+ };
37
+
38
+ export default lookup;
@@ -0,0 +1,38 @@
1
+ import {PathObserver} from '../../vendor/observe-js/observe.js';
2
+ import {Callbacks} from 'jquery';
3
+ var KeypathObserver,
4
+ __hasProp = {}.hasOwnProperty,
5
+ __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
6
+
7
+ KeypathObserver = (function(_super) {
8
+ __extends(KeypathObserver, _super);
9
+
10
+ function KeypathObserver(object, keypath) {
11
+ _super.call(this, object, keypath);
12
+ this.callbacks = Callbacks();
13
+ this.open((function() {
14
+ return this.fireWith(object, arguments);
15
+ }), this.callbacks);
16
+ }
17
+
18
+ KeypathObserver.prototype.add = function(callback) {
19
+ return this.callbacks.add(callback);
20
+ };
21
+
22
+ KeypathObserver.prototype.remove = function() {
23
+ var _ref;
24
+
25
+ return (_ref = this.callbacks).remove.apply(_ref, arguments);
26
+ };
27
+
28
+ KeypathObserver.prototype.close = function() {
29
+ KeypathObserver.__super__.close.apply(this, arguments);
30
+ this.callbacks.empty();
31
+ return delete this.callbacks;
32
+ };
33
+
34
+ return KeypathObserver;
35
+
36
+ })(PathObserver);
37
+
38
+ export default KeypathObserver;
@@ -0,0 +1,45 @@
1
+ var observation, observationable;
2
+
3
+ observation = {
4
+ add: function(keypath, callback) {
5
+ return this.observers[keypath].add(callback);
6
+ },
7
+ remove: function(keypath, callback) {
8
+ return this.observers[keypath].remove(callback);
9
+ },
10
+ deliver: function() {
11
+ var keypath, observer, _ref, _results;
12
+
13
+ _ref = this.observers;
14
+ _results = [];
15
+ for (keypath in _ref) {
16
+ observer = _ref[keypath];
17
+ _results.push(observer.deliver());
18
+ }
19
+ return _results;
20
+ },
21
+ mute: function(keypath) {
22
+ this.observers[keypath].close();
23
+ return delete this.observers[keypath];
24
+ },
25
+ destroy: function(keypath) {
26
+ var observer, _ref;
27
+
28
+ _ref = this.observers;
29
+ for (keypath in _ref) {
30
+ observer = _ref[keypath];
31
+ observer.close();
32
+ }
33
+ return delete this.observers;
34
+ }
35
+ };
36
+
37
+ observationable = function(object) {
38
+ return Object.create(observation, {
39
+ observers: {
40
+ value: {}
41
+ }
42
+ });
43
+ };
44
+
45
+ export default observationable;
@@ -0,0 +1,57 @@
1
+ import jQuery from 'jquery';
2
+ var requiresDomElement, selection;
3
+
4
+ requiresDomElement = Object.defineProperty.requiresDomElement;
5
+
6
+ selection = function(observable) {
7
+ if (requiresDomElement) {
8
+ selection.generate_ignores(observable);
9
+ return selection.legacy;
10
+ } else {
11
+ return selection.from_call;
12
+ }
13
+ };
14
+
15
+ selection.legacy = function() {
16
+ var fix, object;
17
+
18
+ object = selection.from_call.apply(this, arguments);
19
+ if (!jQuery.isReady) {
20
+ throw new Error("observable.call: For compatibility reasons, observable can only be called when dom is loaded.");
21
+ }
22
+ if (typeof object.nodeName !== "string") {
23
+ fix = document.createElement("fix");
24
+ document.body.appendChild(fix);
25
+ object = jQuery.extend(fix, object);
26
+ }
27
+ return object;
28
+ };
29
+
30
+ selection.generate_ignores = function(observable) {
31
+ var fix_ignores, ignores, property;
32
+
33
+ ignores = document.createElement("fix");
34
+ fix_ignores = [];
35
+ property = void 0;
36
+ for (property in ignores) {
37
+ fix_ignores.push(property);
38
+ }
39
+ return observable.ignores = fix_ignores;
40
+ };
41
+
42
+ selection.from_call = function(param) {
43
+ var object;
44
+
45
+ if (this === window) {
46
+ object = param || {};
47
+ } else if (this !== window) {
48
+ if (param) {
49
+ throw new TypeError("Two objects provided! Call either with observable.call(object) or observable(object), not with observable.call(param, param)");
50
+ } else {
51
+ object = this;
52
+ }
53
+ }
54
+ return object;
55
+ };
56
+
57
+ export default selection;
@@ -0,0 +1,38 @@
1
+ import {ObjectObserver} from '../../vendor/observe-js/observe.js';
2
+ import {Callbacks} from 'jquery';
3
+ var SelfObserver,
4
+ __hasProp = {}.hasOwnProperty,
5
+ __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
6
+
7
+ SelfObserver = (function(_super) {
8
+ __extends(SelfObserver, _super);
9
+
10
+ function SelfObserver(object) {
11
+ _super.call(this, object);
12
+ this.callbacks = Callbacks();
13
+ this.open((function() {
14
+ return this.fireWith(object, arguments);
15
+ }), this.callbacks);
16
+ }
17
+
18
+ SelfObserver.prototype.add = function(callback) {
19
+ return this.callbacks.add(callback);
20
+ };
21
+
22
+ SelfObserver.prototype.remove = function() {
23
+ var _ref;
24
+
25
+ return (_ref = this.callbacks).remove.apply(_ref, arguments);
26
+ };
27
+
28
+ SelfObserver.prototype.close = function() {
29
+ SelfObserver.__super__.close.apply(this, arguments);
30
+ this.callbacks.empty();
31
+ return delete this.callbacks;
32
+ };
33
+
34
+ return SelfObserver;
35
+
36
+ })(ObjectObserver);
37
+
38
+ export default SelfObserver;
@@ -0,0 +1,90 @@
1
+ import './platform.js';
2
+ import jQuery from 'jquery';
3
+ import observation from './observable/observation.js';
4
+ import selection from './observable/selection.js';
5
+ import KeypathObserver from './observable/keypath_observer.js';
6
+ import SelfObserver from './observable/self_observer.js';
7
+ var observable;
8
+
9
+ observable = function() {
10
+ var object;
11
+
12
+ object = observable.select.apply(this, arguments);
13
+ if (object.observation) {
14
+ return object;
15
+ }
16
+ return jQuery.extend(observable.observe(object), observable.methods);
17
+ };
18
+
19
+ jQuery.extend(observable, {
20
+ select: selection(observable),
21
+ observe: function(object) {
22
+ Object.defineProperty(object, "observation", {
23
+ configurable: true,
24
+ enumerable: false,
25
+ value: observation(object)
26
+ });
27
+ return Object.defineProperty(object, "observed", {
28
+ configurable: true,
29
+ enumerable: false,
30
+ value: {}
31
+ });
32
+ },
33
+ self: function(object) {
34
+ var observer, observers;
35
+
36
+ observers = object.observation.observers;
37
+ return observer = observers.self || (observers.self = new SelfObserver(object));
38
+ },
39
+ keypath: function(object, keypath) {
40
+ var observer, observers;
41
+
42
+ observers = object.observation.observers;
43
+ return observer = observers[keypath] || (observers[keypath] = new KeypathObserver(object, keypath));
44
+ },
45
+ unobserve: function(object) {
46
+ var name;
47
+
48
+ if (!object.observation) {
49
+ return object;
50
+ }
51
+ for (name in observable.methods) {
52
+ delete object[name];
53
+ }
54
+ object.observation.destroy();
55
+ object.observation.scheduler.destroy();
56
+ delete object.observation;
57
+ delete object.observed;
58
+ return object;
59
+ },
60
+ methods: {
61
+ subscribe: function(keypath_or_callback, callback) {
62
+ var observer;
63
+
64
+ switch (arguments.length) {
65
+ case 1:
66
+ observer = observable.self(this);
67
+ return this.observation.add('self', keypath_or_callback);
68
+ case 2:
69
+ observable.keypath(this, keypath_or_callback);
70
+ return this.observation.add(keypath_or_callback, callback);
71
+ }
72
+ },
73
+ unsubscribe: function(keypath, callback) {
74
+ return this.observation[callback ? 'remove' : 'mute'](keypath, callback);
75
+ },
76
+ publish: function(keypath, value) {
77
+ return this[keypath] = value;
78
+ }
79
+ },
80
+ ignores: []
81
+ });
82
+
83
+ if (!Object.observe) {
84
+ import schedulerable from './legacy/schedulerable.js';
85
+ observable = schedulerable(observable);
86
+ }
87
+
88
+ observable.mixin = observable;
89
+
90
+ export default observable;
@@ -0,0 +1,12 @@
1
+ if (!Object.prototype.create) {
2
+ require("../vendor/shims/object.create");
3
+ }
4
+
5
+ if (!Array.prototype.indexOf) {
6
+ require("../vendor/shims/array.indexOf");
7
+ }
8
+
9
+ if (typeof require !== "undefined") {
10
+ require("../vendor/shims/accessors-legacy.js");
11
+ require("../vendor/shims/accessors.js");
12
+ }