diff options
Diffstat (limited to 'node_modules/montage/core/core.js')
-rwxr-xr-x | node_modules/montage/core/core.js | 600 |
1 files changed, 49 insertions, 551 deletions
diff --git a/node_modules/montage/core/core.js b/node_modules/montage/core/core.js index 8fcf7977..80597dce 100755 --- a/node_modules/montage/core/core.js +++ b/node_modules/montage/core/core.js | |||
@@ -10,7 +10,11 @@ | |||
10 | @requires montage/core/event/binding | 10 | @requires montage/core/event/binding |
11 | @requires montage/core/event/event-manager | 11 | @requires montage/core/event/event-manager |
12 | */ | 12 | */ |
13 | require("core/shim"); | 13 | require("core/shim/object"); |
14 | require("core/shim/array"); | ||
15 | require("core/extras/object"); | ||
16 | require("core/extras/array"); | ||
17 | require("core/extras/string"); | ||
14 | 18 | ||
15 | var ATTRIBUTE_PROPERTIES = "AttributeProperties", | 19 | var ATTRIBUTE_PROPERTIES = "AttributeProperties", |
16 | UNDERSCORE = "_", | 20 | UNDERSCORE = "_", |
@@ -20,32 +24,20 @@ var ATTRIBUTE_PROPERTIES = "AttributeProperties", | |||
20 | SERIALIZABLE = "serializable", | 24 | SERIALIZABLE = "serializable", |
21 | MODIFY = "modify"; | 25 | MODIFY = "modify"; |
22 | 26 | ||
23 | |||
24 | |||
25 | /** | 27 | /** |
26 | @external Object | 28 | @private |
27 | */ | 29 | */ |
30 | var Array_prototype = Array.prototype; | ||
28 | 31 | ||
29 | /* Ecmascript 5 Methods. Should be external as WebKit doesn't need it, and loaded automatically */ | 32 | /** |
30 | if (!Object.create) { | 33 | @private |
31 | Object._creator = function _ObjectCreator() { | 34 | */ |
32 | this.__proto__ = _ObjectCreator.prototype; | 35 | var Object_prototype = Object.prototype; |
33 | }; | ||
34 | Object.create = function(o, properties) { | ||
35 | this._creator.prototype = o || Object.prototype; | ||
36 | //Still needs to add properties.... | ||
37 | return new this._creator; | ||
38 | }; | ||
39 | |||
40 | Object.getPrototypeOf = function(o) { | ||
41 | return o.__proto__; | ||
42 | }; | ||
43 | } | ||
44 | 36 | ||
45 | /** | 37 | /** |
46 | @class module:montage/core/core.Montage | 38 | @class module:montage/core/core.Montage |
47 | */ | 39 | */ |
48 | var M = exports.Montage = Object.create(Object.prototype); | 40 | var Montage = exports.Montage = {}; |
49 | 41 | ||
50 | /** | 42 | /** |
51 | Creates a new Montage object. | 43 | Creates a new Montage object. |
@@ -64,7 +56,7 @@ var M = exports.Montage = Object.create(Object.prototype); | |||
64 | } | 56 | } |
65 | }); | 57 | }); |
66 | */ | 58 | */ |
67 | Object.defineProperty(M, "create", { | 59 | Object.defineProperty(Montage, "create", { |
68 | configurable: true, | 60 | configurable: true, |
69 | value: function(aPrototype, propertyDescriptor) { | 61 | value: function(aPrototype, propertyDescriptor) { |
70 | if (!propertyDescriptor) { | 62 | if (!propertyDescriptor) { |
@@ -82,7 +74,7 @@ Object.defineProperty(M, "create", { | |||
82 | return newObject; | 74 | return newObject; |
83 | } else { | 75 | } else { |
84 | var result = Object.create(aPrototype); | 76 | var result = Object.create(aPrototype); |
85 | M.defineProperties(result, propertyDescriptor); | 77 | Montage.defineProperties(result, propertyDescriptor); |
86 | return result; | 78 | return result; |
87 | } | 79 | } |
88 | } | 80 | } |
@@ -117,7 +109,7 @@ extendedPropertyAttributes.forEach(function(name) { | |||
117 | writable: true | 109 | writable: true |
118 | }); | 110 | }); |
119 | */ | 111 | */ |
120 | Object.defineProperty(M, "defineProperty", { | 112 | Object.defineProperty(Montage, "defineProperty", { |
121 | 113 | ||
122 | value: function(obj, prop, descriptor) { | 114 | value: function(obj, prop, descriptor) { |
123 | var dependencies = descriptor.dependencies; | 115 | var dependencies = descriptor.dependencies; |
@@ -151,7 +143,7 @@ Object.defineProperty(M, "defineProperty", { | |||
151 | independentProperty; | 143 | independentProperty; |
152 | 144 | ||
153 | for (; (independentProperty = dependencies[i]); i++) { | 145 | for (; (independentProperty = dependencies[i]); i++) { |
154 | M.addDependencyToProperty(obj, independentProperty, prop); | 146 | Montage.addDependencyToProperty(obj, independentProperty, prop); |
155 | } | 147 | } |
156 | 148 | ||
157 | } | 149 | } |
@@ -167,14 +159,14 @@ Object.defineProperty(M, "defineProperty", { | |||
167 | 159 | ||
168 | //this is added to enable value properties with [] or Objects that are new for every instance | 160 | //this is added to enable value properties with [] or Objects that are new for every instance |
169 | if (descriptor.distinct === true && typeof descriptor.value === "object") { | 161 | if (descriptor.distinct === true && typeof descriptor.value === "object") { |
170 | (function(internalProperty, value) { | 162 | (function(prop,internalProperty, value, obj) { |
171 | Object.defineProperty(obj, internalProperty, { | 163 | Object.defineProperty(obj, internalProperty, { |
172 | enumerable: false, | 164 | enumerable: false, |
173 | configurable: true, | 165 | configurable: true, |
174 | writable: true, | 166 | writable: true, |
175 | value: null | 167 | value: null |
176 | }); | 168 | }); |
177 | if (value.constructor === Object && Object.getPrototypeOf(value) === Object.prototype) { | 169 | if (value.constructor === Object && Object.getPrototypeOf(value) === Object_prototype) { |
178 | // we have an object literal {...} | 170 | // we have an object literal {...} |
179 | if (Object.keys(value).length !== 0) { | 171 | if (Object.keys(value).length !== 0) { |
180 | Object.defineProperty(obj, prop, { | 172 | Object.defineProperty(obj, prop, { |
@@ -208,7 +200,7 @@ Object.defineProperty(M, "defineProperty", { | |||
208 | }); | 200 | }); |
209 | } | 201 | } |
210 | 202 | ||
211 | } else if ((value.__proto__ || Object.getPrototypeOf(value)) === __cached__arrayProto) { | 203 | } else if ((value.__proto__ || Object.getPrototypeOf(value)) === Array_prototype) { |
212 | // we have an array literal [...] | 204 | // we have an array literal [...] |
213 | if (value.length !== 0) { | 205 | if (value.length !== 0) { |
214 | Object.defineProperty(obj, prop, { | 206 | Object.defineProperty(obj, prop, { |
@@ -236,7 +228,7 @@ Object.defineProperty(M, "defineProperty", { | |||
236 | configurable: true, | 228 | configurable: true, |
237 | get: function() { | 229 | get: function() { |
238 | //Special case for array as isArray fails | 230 | //Special case for array as isArray fails |
239 | //Object.prototype.toString.call(Object.create([].__proto)) !== "[object Array]" | 231 | //Object_prototype.toString.call(Object.create([].__proto)) !== "[object Array]" |
240 | return this[internalProperty] || (this[internalProperty] = []); | 232 | return this[internalProperty] || (this[internalProperty] = []); |
241 | }, | 233 | }, |
242 | set: function(value) { | 234 | set: function(value) { |
@@ -278,7 +270,7 @@ Object.defineProperty(M, "defineProperty", { | |||
278 | } | 270 | } |
279 | }); | 271 | }); |
280 | } | 272 | } |
281 | })(UNDERSCORE + prop, descriptor.value); | 273 | })(prop, UNDERSCORE + prop, descriptor.value, obj); |
282 | 274 | ||
283 | } else { | 275 | } else { |
284 | return Object.defineProperty(obj, prop, descriptor); | 276 | return Object.defineProperty(obj, prop, descriptor); |
@@ -291,11 +283,10 @@ Object.defineProperty(M, "defineProperty", { | |||
291 | @param {Object} obj The object to which the properties are added. | 283 | @param {Object} obj The object to which the properties are added. |
292 | @param {Object} properties An object that contains one or more property descriptor objects. | 284 | @param {Object} properties An object that contains one or more property descriptor objects. |
293 | */ | 285 | */ |
294 | Object.defineProperty(M, "defineProperties", {value: function(obj, properties) { | 286 | Object.defineProperty(Montage, "defineProperties", {value: function(obj, properties) { |
295 | 287 | for (var property in properties) { | |
296 | for (var p in properties) { | 288 | if ("_bindingDescriptors" !== property) { |
297 | if ("_bindingDescriptors" !== p) { | 289 | this.defineProperty(obj, property, properties[property]); |
298 | this.defineProperty(obj, p, properties[p]); | ||
299 | } | 290 | } |
300 | } | 291 | } |
301 | return obj; | 292 | return obj; |
@@ -327,34 +318,6 @@ var _defaultFunctionValueProperty = { | |||
327 | }; | 318 | }; |
328 | 319 | ||
329 | /** | 320 | /** |
330 | @private | ||
331 | */ | ||
332 | var __cached__arrayProto = Array.prototype; | ||
333 | |||
334 | /** | ||
335 | Private collection of dependencies for all dependent keys. The collection here is keyed by the dependent propertyName | ||
336 | The array for each dependent property has all the independent property names that when changed, need to signal a change in the dependent property. | ||
337 | @private | ||
338 | */ | ||
339 | Object.defineProperty(Object.prototype, "_dependenciesForProperty", { | ||
340 | enumerable: false, | ||
341 | writable: true, | ||
342 | value: null | ||
343 | }); | ||
344 | |||
345 | /** | ||
346 | Private collection of listener functions that are for dependent properties to observe their dependency properties for changes. | ||
347 | The collection here is keyed by the dependent propertyName. | ||
348 | @private | ||
349 | */ | ||
350 | Object.defineProperty(Object.prototype, "_dependencyListeners", /** @lends external:Object# */ { | ||
351 | enumerable: false, | ||
352 | writable: true, | ||
353 | value: null | ||
354 | }); | ||
355 | |||
356 | |||
357 | /** | ||
358 | Adds a dependent property to another property's collection of dependencies. | 321 | Adds a dependent property to another property's collection of dependencies. |
359 | When the value of a dependent property changes, it generates a <code>change@independentProperty</code> event. | 322 | When the value of a dependent property changes, it generates a <code>change@independentProperty</code> event. |
360 | @function module:montage/core/core.Montage.addDependencyToProperty | 323 | @function module:montage/core/core.Montage.addDependencyToProperty |
@@ -362,7 +325,7 @@ Object.defineProperty(Object.prototype, "_dependencyListeners", /** @lends exter | |||
362 | @param {String} independentProperty The name of the object's independent property. | 325 | @param {String} independentProperty The name of the object's independent property. |
363 | @param {String} dependentProperty The name of the object's dependent property. | 326 | @param {String} dependentProperty The name of the object's dependent property. |
364 | */ | 327 | */ |
365 | M.defineProperty(M, "addDependencyToProperty", { value: function(obj, independentProperty, dependentProperty) { | 328 | Montage.defineProperty(Montage, "addDependencyToProperty", { value: function(obj, independentProperty, dependentProperty) { |
366 | 329 | ||
367 | // TODO optimize this so we don't keep checking over and over again | 330 | // TODO optimize this so we don't keep checking over and over again |
368 | if (!obj._dependenciesForProperty) { | 331 | if (!obj._dependenciesForProperty) { |
@@ -385,7 +348,7 @@ M.defineProperty(M, "addDependencyToProperty", { value: function(obj, independen | |||
385 | @param {String} independentProperty The name of the object's independent property. | 348 | @param {String} independentProperty The name of t |