dist/ember-runtime.js in ember-source-1.8.1 vs dist/ember-runtime.js in ember-source-1.9.0.alpha
- old
+ new
@@ -3,11 +3,11 @@
* @copyright Copyright 2011-2014 Tilde Inc. and contributors
* Portions Copyright 2006-2011 Strobe Inc.
* Portions Copyright 2008-2011 Apple Inc. All rights reserved.
* @license Licensed under MIT license
* See https://raw.github.com/emberjs/ember.js/master/LICENSE
- * @version 1.8.1
+ * @version 1.9.0-alpha
*/
(function() {
var define, requireModule, require, requirejs, Ember;
@@ -638,15 +638,14 @@
define("backburner/deferred-action-queues",
["./utils","./queue","exports"],
function(__dependency1__, __dependency2__, __exports__) {
"use strict";
var each = __dependency1__.each;
- var isString = __dependency1__.isString;
var Queue = __dependency2__["default"];
function DeferredActionQueues(queueNames, options) {
- var queues = this.queues = {};
+ var queues = this.queues = Object.create(null);
this.queueNames = queueNames = queueNames || [];
this.options = options;
each(queueNames, function(queueName) {
@@ -661,125 +660,45 @@
DeferredActionQueues.prototype = {
schedule: function(name, target, method, args, onceFlag, stack) {
var queues = this.queues;
var queue = queues[name];
- if (!queue) { noSuchQueue(name); }
+ if (!queue) {
+ noSuchQueue(name);
+ }
if (onceFlag) {
return queue.pushUnique(target, method, args, stack);
} else {
return queue.push(target, method, args, stack);
}
},
- invoke: function(target, method, args, _, _errorRecordedForStack) {
- if (args && args.length > 0) {
- method.apply(target, args);
- } else {
- method.call(target);
- }
- },
-
- invokeWithOnError: function(target, method, args, onError, errorRecordedForStack) {
- try {
- if (args && args.length > 0) {
- method.apply(target, args);
- } else {
- method.call(target);
- }
- } catch(error) {
- onError(error, errorRecordedForStack);
- }
- },
-
flush: function() {
var queues = this.queues;
var queueNames = this.queueNames;
var queueName, queue, queueItems, priorQueueNameIndex;
var queueNameIndex = 0;
var numberOfQueues = queueNames.length;
var options = this.options;
- var onError = options.onError || (options.onErrorTarget && options.onErrorTarget[options.onErrorMethod]);
- var invoke = onError ? this.invokeWithOnError : this.invoke;
while (queueNameIndex < numberOfQueues) {
queueName = queueNames[queueNameIndex];
queue = queues[queueName];
- queueItems = queue._queueBeingFlushed = queue._queue.slice();
- queue._queue = [];
- queue.targetQueues = Object.create(null);
- var queueOptions = queue.options; // TODO: write a test for this
- var before = queueOptions && queueOptions.before;
- var after = queueOptions && queueOptions.after;
- var target, method, args, errorRecordedForStack;
- var queueIndex = 0;
- var numberOfQueueItems = queueItems.length;
+ var numberOfQueueItems = queue._queue.length;
- if (numberOfQueueItems && before) {
- before();
- }
-
- while (queueIndex < numberOfQueueItems) {
- target = queueItems[queueIndex];
- method = queueItems[queueIndex+1];
- args = queueItems[queueIndex+2];
- errorRecordedForStack = queueItems[queueIndex+3]; // Debugging assistance
-
- //
-
- if (isString(method)) {
- method = target[method];
- }
-
- // method could have been nullified / canceled during flush
- if (method) {
- //
- // ** Attention intrepid developer **
- //
- // To find out the stack of this task when it was scheduled onto
- // the run loop, add the following to your app.js:
- //
- // Ember.run.backburner.DEBUG = true; // NOTE: This slows your app, don't leave it on in production.
- //
- // Once that is in place, when you are at a breakpoint and navigate
- // here in the stack explorer, you can look at `errorRecordedForStack.stack`,
- // which will be the captured stack when this job was scheduled.
- //
- invoke(target, method, args, onError, errorRecordedForStack);
- }
-
- queueIndex += 4;
- }
-
- queue._queueBeingFlushed = null;
- if (numberOfQueueItems && after) {
- after();
- }
-
- if ((priorQueueNameIndex = indexOfPriorQueueWithActions(this, queueNameIndex)) !== -1) {
- queueNameIndex = priorQueueNameIndex;
- } else {
+ if (numberOfQueueItems === 0) {
queueNameIndex++;
+ } else {
+ queue.flush(false /* async */);
+ queueNameIndex = 0;
}
}
}
};
- function indexOfPriorQueueWithActions(daq, currentQueueIndex) {
- var queueName, queue;
-
- for (var i = 0, l = currentQueueIndex; i <= l; i++) {
- queueName = daq.queueNames[i];
- queue = daq.queues[queueName];
- if (queue._queue.length) { return i; }
- }
-
- return -1;
- }
-
__exports__["default"] = DeferredActionQueues;
});
define("backburner/platform",
["exports"],
function(__exports__) {
@@ -793,13 +712,15 @@
return !!e;
})();
__exports__.needsIETryCatchFix = needsIETryCatchFix;
});
define("backburner/queue",
- ["exports"],
- function(__exports__) {
+ ["./utils","exports"],
+ function(__dependency1__, __exports__) {
"use strict";
+ var isString = __dependency1__.isString;
+
function Queue(name, options, globalOptions) {
this.name = name;
this.globalOptions = globalOptions || {};
this.options = options;
this._queue = [];
@@ -893,61 +814,94 @@
target: target,
method: method
};
},
- // TODO: remove me, only being used for Ember.run.sync
- flush: function() {
+ invoke: function(target, method, args, _, _errorRecordedForStack) {
+ if (args && args.length > 0) {
+ method.apply(target, args);
+ } else {
+ method.call(target);
+ }
+ },
+
+ invokeWithOnError: function(target, method, args, onError, errorRecordedForStack) {
+ try {
+ if (args && args.length > 0) {
+ method.apply(target, args);
+ } else {
+ method.call(target);
+ }
+ } catch(error) {
+ onError(error, errorRecordedForStack);
+ }
+ },
+
+ flush: function(sync) {
var queue = this._queue;
+ var length = queue.length;
+
+ if (length === 0) {
+ return;
+ }
+
var globalOptions = this.globalOptions;
var options = this.options;
var before = options && options.before;
var after = options && options.after;
- var onError = globalOptions.onError || (globalOptions.onErrorTarget && globalOptions.onErrorTarget[globalOptions.onErrorMethod]);
- var target, method, args, stack, i, l = queue.length;
+ var onError = globalOptions.onError || (globalOptions.onErrorTarget &&
+ globalOptions.onErrorTarget[globalOptions.onErrorMethod]);
+ var target, method, args, errorRecordedForStack;
+ var invoke = onError ? this.invokeWithOnError : this.invoke;
this.targetQueues = Object.create(null);
+ var queueItems = this._queueBeingFlushed = this._queue.slice();
+ this._queue = [];
- if (l && before) { before(); }
- for (i = 0; i < l; i += 4) {
- target = queue[i];
- method = queue[i+1];
- args = queue[i+2];
- stack = queue[i+3]; // Debugging assistance
+ if (before) {
+ before();
+ }
- // TODO: error handling
- if (args && args.length > 0) {
- if (onError) {
- try {
- method.apply(target, args);
- } catch (e) {
- onError(e);
- }
- } else {
- method.apply(target, args);
- }
- } else {
- if (onError) {
- try {
- method.call(target);
- } catch(e) {
- onError(e);
- }
- } else {
- method.call(target);
- }
+ for (var i = 0; i < length; i += 4) {
+ target = queueItems[i];
+ method = queueItems[i+1];
+ args = queueItems[i+2];
+ errorRecordedForStack = queueItems[i+3]; // Debugging assistance
+
+ if (isString(method)) {
+ method = target[method];
}
+
+ // method could have been nullified / canceled during flush
+ if (method) {
+ //
+ // ** Attention intrepid developer **
+ //
+ // To find out the stack of this task when it was scheduled onto
+ // the run loop, add the following to your app.js:
+ //
+ // Ember.run.backburner.DEBUG = true; // NOTE: This slows your app, don't leave it on in production.
+ //
+ // Once that is in place, when you are at a breakpoint and navigate
+ // here in the stack explorer, you can look at `errorRecordedForStack.stack`,
+ // which will be the captured stack when this job was scheduled.
+ //
+ invoke(target, method, args, onError, errorRecordedForStack);
+ }
}
- if (l && after) { after(); }
- // check if new items have been added
- if (queue.length > l) {
- this._queue = queue.slice(l);
- this.flush();
- } else {
- this._queue.length = 0;
+ if (after) {
+ after();
}
+
+ this._queueBeingFlushed = undefined;
+
+ if (sync !== false &&
+ this._queue.length > 0) {
+ // check if new items have been added
+ this.flush(true);
+ }
},
cancel: function(actionToCancel) {
var queue = this._queue, currentTarget, currentMethod, i, l;
var target = actionToCancel.target;
@@ -978,13 +932,15 @@
}
// if not found in current queue
// could be in the queue that is being flushed
queue = this._queueBeingFlushed;
+
if (!queue) {
return;
}
+
for (i = 0, l = queue.length; i < l; i += 4) {
currentTarget = queue[i];
currentMethod = queue[i+1];
if (currentTarget === target &&
@@ -1538,11 +1494,14 @@
if (this.parent) { illegalChildOperation('typeInjection'); }
var fullNameType = fullName.split(':')[0];
if (fullNameType === type) {
- throw new Error('Cannot inject a `' + fullName + '` on other ' + type + '(s). Register the `' + fullName + '` as a different type and perform the typeInjection.');
+ throw new Error('Cannot inject a `' + fullName +
+ '` on other ' + type +
+ '(s). Register the `' + fullName +
+ '` as a different type and perform the typeInjection.');
}
addTypeInjection(this.typeInjections, type, property, fullName);
},
@@ -1602,13 +1561,17 @@
Ember.assert('fullName must be a proper full name', validateFullName(fullName));
var normalizedName = this.normalize(fullName);
if (this.cache[normalizedName]) {
- throw new Error("Attempted to register an injection for a type that has already been looked up. ('" + normalizedName + "', '" + property + "', '" + injectionName + "')");
+ throw new Error("Attempted to register an injection for a type that has already been looked up. ('" +
+ normalizedName + "', '" +
+ property + "', '" +
+ injectionName + "')");
}
- addInjection(this.injections, normalizedName, property, normalizedInjectionName);
+
+ addInjection(initRules(this.injections, normalizedName), property, normalizedInjectionName);
},
/**
Used only via `factoryInjection`.
@@ -1711,11 +1674,11 @@
if (this.factoryCache[normalizedName]) {
throw new Error('Attempted to register a factoryInjection for a type that has already ' +
'been looked up. (\'' + normalizedName + '\', \'' + property + '\', \'' + injectionName + '\')');
}
- addInjection(this.factoryInjections, normalizedName, property, normalizedInjectionName);
+ addInjection(initRules(this.factoryInjections, normalizedName), property, normalizedInjectionName);
},
/**
A depth first traversal, destroying the container, its descendant containers and all
their managed objects.
@@ -1762,11 +1725,11 @@
function has(container, fullName){
if (container.cache[fullName]) {
return true;
}
- return !!container.resolve(fullName);
+ return container.resolve(fullName) !== undefined;
}
function lookup(container, fullName, options) {
options = options || {};
@@ -1798,26 +1761,36 @@
function buildInjections(container, injections) {
var hash = {};
if (!injections) { return hash; }
- var injection, injectable;
+ validateInjections(container, injections);
+ var injection;
+
for (var i = 0, length = injections.length; i < length; i++) {
injection = injections[i];
- injectable = lookup(container, injection.fullName);
-
- if (injectable !== undefined) {
- hash[injection.property] = injectable;
- } else {
- throw new Error('Attempting to inject an unknown injection: `' + injection.fullName + '`');
- }
+ hash[injection.property] = lookup(container, injection.fullName);
}
return hash;
}
+ function validateInjections(container, injections) {
+ if (!injections) { return; }
+
+ var fullName;
+
+ for (var i = 0, length = injections.length; i < length; i++) {
+ fullName = injections[i].fullName;
+
+ if (!container.has(fullName)) {
+ throw new Error('Attempting to inject an unknown injection: `' + fullName + '`');
+ }
+ }
+ }
+
function option(container, fullName, optionName) {
var options = container._options[fullName];
if (options && options[optionName] !== undefined) {
return options[optionName];
@@ -1887,12 +1860,29 @@
factoryInjections._debugContainerKey = fullName;
return factoryInjections;
}
+ if (Ember.FEATURES.isEnabled('ember-metal-injected-properties')) {
+ var normalizeInjectionsHash = function(hash) {
+ var injections = [];
+
+ for (var key in hash) {
+ if (hash.hasOwnProperty(key)) {
+ Ember.assert("Expected a proper full name, given '" + hash[key] + "'", validateFullName(hash[key]));
+
+ addInjection(injections, key, hash[key]);
+ }
+ }
+
+ return injections;
+ };
+ }
+
function instantiate(container, fullName) {
var factory = factoryFor(container, fullName);
+ var lazyInjections;
if (option(container, fullName, 'instantiate') === false) {
return factory;
}
@@ -1900,10 +1890,19 @@
if (typeof factory.create !== 'function') {
throw new Error('Failed to create an instance of \'' + fullName + '\'. ' +
'Most likely an improperly defined class or an invalid module export.');
}
+ if (Ember.FEATURES.isEnabled('ember-metal-injected-properties')) {
+ // Ensure that all lazy injections are valid at instantiation time
+ if (typeof factory.lazyInjections === 'function') {
+ lazyInjections = factory.lazyInjections();
+
+ validateInjections(container, normalizeInjectionsHash(lazyInjections));
+ }
+ }
+
if (typeof factory.extend === 'function') {
// assume the factory was extendable and is already injected
return factory.create();
} else {
// assume the factory was extendable
@@ -1957,12 +1956,15 @@
throw new TypeError('Invalid Fullname, expected: `type:name` got: ' + fullName);
}
return true;
}
- function addInjection(rules, factoryName, property, injectionName) {
- var injections = rules[factoryName] = rules[factoryName] || [];
+ function initRules(rules, factoryName) {
+ return rules[factoryName] || (rules[factoryName] = []);
+ }
+
+ function addInjection(injections, property, injectionName) {
injections.push({
property: property,
fullName: injectionName
});
}
@@ -1982,122 +1984,122 @@
// BEGIN IMPORTS
var Ember = __dependency1__["default"];
var merge = __dependency2__["default"];
var instrument = __dependency3__.instrument;
+ var reset = __dependency3__.reset;
var subscribe = __dependency3__.subscribe;
var unsubscribe = __dependency3__.unsubscribe;
- var reset = __dependency3__.reset;
- var generateGuid = __dependency4__.generateGuid;
+ var EMPTY_META = __dependency4__.EMPTY_META;
var GUID_KEY = __dependency4__.GUID_KEY;
- var guidFor = __dependency4__.guidFor;
var META_DESC = __dependency4__.META_DESC;
- var EMPTY_META = __dependency4__.EMPTY_META;
- var meta = __dependency4__.meta;
+ var apply = __dependency4__.apply;
+ var applyStr = __dependency4__.applyStr;
+ var canInvoke = __dependency4__.canInvoke;
+ var generateGuid = __dependency4__.generateGuid;
var getMeta = __dependency4__.getMeta;
- var setMeta = __dependency4__.setMeta;
- var metaPath = __dependency4__.metaPath;
+ var guidFor = __dependency4__.guidFor;
var inspect = __dependency4__.inspect;
- var typeOf = __dependency4__.typeOf;
- var tryCatchFinally = __dependency4__.tryCatchFinally;
var isArray = __dependency4__.isArray;
var makeArray = __dependency4__.makeArray;
- var canInvoke = __dependency4__.canInvoke;
- var tryInvoke = __dependency4__.tryInvoke;
+ var meta = __dependency4__.meta;
+ var metaPath = __dependency4__.metaPath;
+ var setMeta = __dependency4__.setMeta;
+ var tryCatchFinally = __dependency4__.tryCatchFinally;
var tryFinally = __dependency4__.tryFinally;
- var wrap = __dependency4__.wrap;
- var apply = __dependency4__.apply;
- var applyStr = __dependency4__.applyStr;
+ var tryInvoke = __dependency4__.tryInvoke;
+ var typeOf = __dependency4__.typeOf;
var uuid = __dependency4__.uuid;
+ var wrap = __dependency4__.wrap;
var EmberError = __dependency5__["default"];
var EnumerableUtils = __dependency6__["default"];
var Cache = __dependency7__["default"];
var create = __dependency8__.create;
- var hasPropertyAccessors = __dependency8__.hasPropertyAccessors;
+ var platform = __dependency8__.platform;
var filter = __dependency9__.filter;
var forEach = __dependency9__.forEach;
var indexOf = __dependency9__.indexOf;
var map = __dependency9__.map;
var Logger = __dependency10__["default"];
+ var _getPath = __dependency11__._getPath;
var get = __dependency11__.get;
var getWithDefault = __dependency11__.getWithDefault;
var normalizeTuple = __dependency11__.normalizeTuple;
- var _getPath = __dependency11__._getPath;
- var on = __dependency12__.on;
var addListener = __dependency12__.addListener;
+ var hasListeners = __dependency12__.hasListeners;
+ var listenersDiff = __dependency12__.listenersDiff;
+ var listenersFor = __dependency12__.listenersFor;
+ var listenersUnion = __dependency12__.listenersUnion;
+ var on = __dependency12__.on;
var removeListener = __dependency12__.removeListener;
+ var sendEvent = __dependency12__.sendEvent;
var suspendListener = __dependency12__.suspendListener;
var suspendListeners = __dependency12__.suspendListeners;
- var sendEvent = __dependency12__.sendEvent;
- var hasListeners = __dependency12__.hasListeners;
var watchedEvents = __dependency12__.watchedEvents;
- var listenersFor = __dependency12__.listenersFor;
- var listenersDiff = __dependency12__.listenersDiff;
- var listenersUnion = __dependency12__.listenersUnion;
var ObserverSet = __dependency13__["default"];
- var propertyWillChange = __dependency14__.propertyWillChange;
- var propertyDidChange = __dependency14__.propertyDidChange;
- var overrideChains = __dependency14__.overrideChains;
var beginPropertyChanges = __dependency14__.beginPropertyChanges;
- var endPropertyChanges = __dependency14__.endPropertyChanges;
var changeProperties = __dependency14__.changeProperties;
+ var endPropertyChanges = __dependency14__.endPropertyChanges;
+ var overrideChains = __dependency14__.overrideChains;
+ var propertyDidChange = __dependency14__.propertyDidChange;
+ var propertyWillChange = __dependency14__.propertyWillChange;
var Descriptor = __dependency15__.Descriptor;
var defineProperty = __dependency15__.defineProperty;
var set = __dependency16__.set;
var trySet = __dependency16__.trySet;
- var OrderedSet = __dependency17__.OrderedSet;
var Map = __dependency17__.Map;
var MapWithDefault = __dependency17__.MapWithDefault;
+ var OrderedSet = __dependency17__.OrderedSet;
var getProperties = __dependency18__["default"];
var setProperties = __dependency19__["default"];
var watchKey = __dependency20__.watchKey;
var unwatchKey = __dependency20__.unwatchKey;
- var flushPendingChains = __dependency21__.flushPendingChains;
- var removeChainWatcher = __dependency21__.removeChainWatcher;
var ChainNode = __dependency21__.ChainNode;
var finishChains = __dependency21__.finishChains;
+ var flushPendingChains = __dependency21__.flushPendingChains;
+ var removeChainWatcher = __dependency21__.removeChainWatcher;
var watchPath = __dependency22__.watchPath;
var unwatchPath = __dependency22__.unwatchPath;
- var watch = __dependency23__.watch;
+ var destroy = __dependency23__.destroy;
var isWatching = __dependency23__.isWatching;
- var unwatch = __dependency23__.unwatch;
var rewatch = __dependency23__.rewatch;
- var destroy = __dependency23__.destroy;
+ var unwatch = __dependency23__.unwatch;
+ var watch = __dependency23__.watch;
var expandProperties = __dependency24__["default"];
var ComputedProperty = __dependency25__.ComputedProperty;
var computed = __dependency25__.computed;
var cacheFor = __dependency25__.cacheFor;
// side effect of defining the computed.* macros
- var addObserver = __dependency27__.addObserver;
- var observersFor = __dependency27__.observersFor;
- var removeObserver = __dependency27__.removeObserver;
- var addBeforeObserver = __dependency27__.addBeforeObserver;
var _suspendBeforeObserver = __dependency27__._suspendBeforeObserver;
- var _suspendObserver = __dependency27__._suspendObserver;
var _suspendBeforeObservers = __dependency27__._suspendBeforeObservers;
+ var _suspendObserver = __dependency27__._suspendObserver;
var _suspendObservers = __dependency27__._suspendObservers;
+ var addBeforeObserver = __dependency27__.addBeforeObserver;
+ var addObserver = __dependency27__.addObserver;
var beforeObserversFor = __dependency27__.beforeObserversFor;
+ var observersFor = __dependency27__.observersFor;
var removeBeforeObserver = __dependency27__.removeBeforeObserver;
+ var removeObserver = __dependency27__.removeObserver;
var IS_BINDING = __dependency28__.IS_BINDING;
- var mixin = __dependency28__.mixin;
var Mixin = __dependency28__.Mixin;
- var required = __dependency28__.required;
var aliasMethod = __dependency28__.aliasMethod;
- var observer = __dependency28__.observer;
- var immediateObserver = __dependency28__.immediateObserver;
var beforeObserver = __dependency28__.beforeObserver;
+ var immediateObserver = __dependency28__.immediateObserver;
+ var mixin = __dependency28__.mixin;
+ var observer = __dependency28__.observer;
+ var required = __dependency28__.required;
var Binding = __dependency29__.Binding;
- var isGlobalPath = __dependency29__.isGlobalPath;
var bind = __dependency29__.bind;
+ var isGlobalPath = __dependency29__.isGlobalPath;
var oneWay = __dependency29__.oneWay;
var run = __dependency30__["default"];
var libraries = __dependency31__["default"];
var isNone = __dependency32__.isNone;
var none = __dependency32__.none;
@@ -2123,14 +2125,11 @@
Ember.generateGuid = generateGuid;
Ember.GUID_KEY = GUID_KEY;
Ember.create = create;
Ember.keys = keys;
- Ember.platform = {
- defineProperty: defineProperty,
- hasPropertyAccessors: hasPropertyAccessors
- };
+ Ember.platform = platform;
var EmberArrayPolyfills = Ember.ArrayPolyfills = {};
EmberArrayPolyfills.map = map;
EmberArrayPolyfills.forEach = forEach;
@@ -2298,30 +2297,32 @@
}
__exports__["default"] = Ember;
});
define("ember-metal/alias",
- ["ember-metal/property_get","ember-metal/property_set","ember-metal/error","ember-metal/properties","ember-metal/computed","ember-metal/platform","ember-metal/utils","ember-metal/dependent_keys","exports"],
- function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __dependency8__, __exports__) {
+ ["ember-metal/property_get","ember-metal/property_set","ember-metal/core","ember-metal/error","ember-metal/properties","ember-metal/computed","ember-metal/platform","ember-metal/utils","ember-metal/dependent_keys","exports"],
+ function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __dependency8__, __dependency9__, __exports__) {
"use strict";
var get = __dependency1__.get;
var set = __dependency2__.set;
- var EmberError = __dependency3__["default"];
- var Descriptor = __dependency4__.Descriptor;
- var defineProperty = __dependency4__.defineProperty;
- var ComputedProperty = __dependency5__.ComputedProperty;
- var create = __dependency6__.create;
- var meta = __dependency7__.meta;
- var inspect = __dependency7__.inspect;
- var addDependentKeys = __dependency8__.addDependentKeys;
- var removeDependentKeys = __dependency8__.removeDependentKeys;
+ var Ember = __dependency3__["default"];
+ // Ember.assert
+ var EmberError = __dependency4__["default"];
+ var Descriptor = __dependency5__.Descriptor;
+ var defineProperty = __dependency5__.defineProperty;
+ var ComputedProperty = __dependency6__.ComputedProperty;
+ var create = __dependency7__.create;
+ var meta = __dependency8__.meta;
+ var inspect = __dependency8__.inspect;
+ var addDependentKeys = __dependency9__.addDependentKeys;
+ var removeDependentKeys = __dependency9__.removeDependentKeys;
- function alias(altKey) {
+ __exports__["default"] = function alias(altKey) {
return new AliasedProperty(altKey);
}
- __exports__.alias = alias;function AliasedProperty(altKey) {
+ function AliasedProperty(altKey) {
this.altKey = altKey;
this._dependentKeys = [ altKey ];
}
__exports__.AliasedProperty = AliasedProperty;AliasedProperty.prototype = create(Descriptor.prototype);
@@ -2341,10 +2342,11 @@
AliasedProperty.prototype.didUnwatch = function(obj, keyName) {
removeDependentKeys(this, obj, keyName, meta(obj));
};
AliasedProperty.prototype.setup = function(obj, keyName) {
+ Ember.assert("Setting alias '" + keyName + "' on self", this.altKey !== keyName);
var m = meta(obj);
if (m.watching[keyName]) {
addDependentKeys(this, obj, keyName, m);
}
};
@@ -2515,11 +2517,10 @@
function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __exports__) {
"use strict";
var Ember = __dependency1__["default"];
// Ember.Logger, Ember.LOG_BINDINGS, assert
var get = __dependency2__.get;
- var set = __dependency3__.set;
var trySet = __dependency3__.trySet;
var guidFor = __dependency4__.guidFor;
var addObserver = __dependency5__.addObserver;
var removeObserver = __dependency5__.removeObserver;
var _suspendObserver = __dependency5__._suspendObserver;
@@ -3017,14 +3018,11 @@
this.hits = 0;
this.limit = limit;
this.func = func;
}
- var FALSE = function() { };
- var ZERO = function() { };
var UNDEFINED = function() { };
- var NULL = function() { };
Cache.prototype = {
set: function(key, value) {
if (this.limit > this.size) {
this.size ++;
@@ -3069,16 +3067,15 @@
"use strict";
var Ember = __dependency1__["default"];
// warn, assert, etc;
var get = __dependency2__.get;
var normalizeTuple = __dependency2__.normalizeTuple;
- var meta = __dependency3__.meta;
+ var metaFor = __dependency3__.meta;
var forEach = __dependency4__.forEach;
var watchKey = __dependency5__.watchKey;
var unwatchKey = __dependency5__.unwatchKey;
- var metaFor = meta;
var warn = Ember.warn;
var FIRST_KEY = /^([^\.]+)/;
function firstKey(path) {
return path.match(FIRST_KEY)[0];
@@ -3095,11 +3092,12 @@
var queue = pendingQueue;
pendingQueue = [];
forEach.call(queue, function(q) { q[0].add(q[1]); });
- warn('Watching an undefined global, Ember expects watched globals to be setup by the time the run loop is flushed, check for typos', pendingQueue.length === 0);
+ warn('Watching an undefined global, Ember expects watched globals to be' +
+ ' setup by the time the run loop is flushed, check for typos', pendingQueue.length === 0);
}
__exports__.flushPendingChains = flushPendingChains;function addChainWatcher(obj, keyName, node) {
if (!obj || ('object' !== typeof obj)) { return; } // nothing to do
@@ -3422,34 +3420,33 @@
__exports__.finishChains = finishChains;__exports__.removeChainWatcher = removeChainWatcher;
__exports__.ChainNode = ChainNode;
});
define("ember-metal/computed",
- ["ember-metal/core","ember-metal/property_get","ember-metal/property_set","ember-metal/utils","ember-metal/expand_properties","ember-metal/error","ember-metal/properties","ember-metal/property_events","ember-metal/dependent_keys","exports"],
- function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __dependency8__, __dependency9__, __exports__) {
+ ["ember-metal/core","ember-metal/property_set","ember-metal/utils","ember-metal/expand_properties","ember-metal/error","ember-metal/properties","ember-metal/property_events","ember-metal/dependent_keys","exports"],
+ function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __dependency8__, __exports__) {
"use strict";
var Ember = __dependency1__["default"];
- var get = __dependency2__.get;
- var set = __dependency3__.set;
- var meta = __dependency4__.meta;
- var inspect = __dependency4__.inspect;
- var expandProperties = __dependency5__["default"];
- var EmberError = __dependency6__["default"];
- var Descriptor = __dependency7__.Descriptor;
- var defineProperty = __dependency7__.defineProperty;
- var propertyWillChange = __dependency8__.propertyWillChange;
- var propertyDidChange = __dependency8__.propertyDidChange;
- var addDependentKeys = __dependency9__.addDependentKeys;
- var removeDependentKeys = __dependency9__.removeDependentKeys;
+ var set = __dependency2__.set;
+ var meta = __dependency3__.meta;
+ var inspect = __dependency3__.inspect;
+ var expandProperties = __dependency4__["default"];
+ var EmberError = __dependency5__["default"];
+ var Descriptor = __dependency6__.Descriptor;
+ var defineProperty = __dependency6__.defineProperty;
+ var propertyWillChange = __dependency7__.propertyWillChange;
+ var propertyDidChange = __dependency7__.propertyDidChange;
+ var addDependentKeys = __dependency8__.addDependentKeys;
+ var removeDependentKeys = __dependency8__.removeDependentKeys;
/**
@module ember-metal
*/
- Ember.warn("The CP_DEFAULT_CACHEABLE flag has been removed and computed properties are always cached by default. Use `volatile` if you don't want caching.", Ember.ENV.CP_DEFAULT_CACHEABLE !== false);
+ Ember.warn("The CP_DEFAULT_CACHEABLE flag has been removed and computed properties" +
+ "are always cached by default. Use `volatile` if you don't want caching.", Ember.ENV.CP_DEFAULT_CACHEABLE !== false);
-
var metaFor = meta;
var a_slice = [].slice;
function UNDEFINED() { }
@@ -3540,21 +3537,22 @@
*/
function ComputedProperty(func, opts) {
func.__ember_arity__ = func.length;
this.func = func;
+ this._dependentKeys = undefined;
+ this._suspended = undefined;
+ this._meta = undefined;
+
this._cacheable = (opts && opts.cacheable !== undefined) ? opts.cacheable : true;
this._dependentKeys = opts && opts.dependentKeys;
this._readOnly = opts && (opts.readOnly !== undefined || !!opts.readOnly) || false;
}
ComputedProperty.prototype = new Descriptor();
var ComputedPropertyPrototype = ComputedProperty.prototype;
- ComputedPropertyPrototype._dependentKeys = undefined;
- ComputedPropertyPrototype._suspended = undefined;
- ComputedPropertyPrototype._meta = undefined;
/**
Properties are cacheable by default. Computed property will automatically
cache the return value of your function until one of the dependent keys changes.
@@ -4040,11 +4038,11 @@
var get = __dependency2__.get;
var set = __dependency3__.set;
var computed = __dependency4__.computed;
var isEmpty = __dependency5__["default"];
var isNone = __dependency6__.isNone;
- var alias = __dependency7__.alias;
+ var alias = __dependency7__["default"];
/**
@module ember-metal
*/
@@ -4544,11 +4542,11 @@
@param {String} dependentKey*
@return {Ember.ComputedProperty} computed property which maps
values of all passed in properties to an array.
*/
registerComputedWithProperties('collect', function(properties) {
- var res = [];
+ var res = Ember.A();
for (var key in properties) {
if (properties.hasOwnProperty(key)) {
if (isNone(properties[key])) {
res.push(null);
} else {
@@ -4739,11 +4737,11 @@
});
define("ember-metal/core",
["exports"],
function(__exports__) {
"use strict";
- /*globals Ember:true,Em:true,ENV,EmberENV,MetamorphENV:true */
+ /*globals Ember:true,ENV,EmberENV,MetamorphENV:true */
/**
@module ember
@submodule ember-metal
*/
@@ -4763,23 +4761,23 @@
The core Runtime framework is based on the jQuery API with a number of
performance optimizations.
@class Ember
@static
- @version 1.8.1
+ @version 1.9.0-alpha
*/
if ('undefined' === typeof Ember) {
// Create core object. Make it act like an instance of Ember.Namespace so that
// objects assigned to it are given a sane string representation.
Ember = {};
}
// Default imports, exports and lookup to the global object;
- var imports = Ember.imports = Ember.imports || this;
- var exports = Ember.exports = Ember.exports || this;
- var lookup = Ember.lookup = Ember.lookup || this;
+ Ember.imports = Ember.imports || this;
+ Ember.lookup = Ember.lookup || this;
+ var exports = Ember.exports = Ember.exports || this;
// aliases needed to keep minifiers from removing the global context
exports.Em = exports.Ember = Ember;
// Make sure these are set whether Ember was already defined or not
@@ -4790,14 +4788,14 @@
/**
@property VERSION
@type String
- @default '1.8.1'
+ @default '1.9.0-alpha'
@static
*/
- Ember.VERSION = '1.8.1';
+ Ember.VERSION = '1.9.0-alpha';
/**
Standard environmental variables. You can define these in a global `EmberENV`
variable before loading Ember to control various configuration settings.
@@ -4953,15 +4951,11 @@
__exports__["default"] = Ember;
});
define("ember-metal/dependent_keys",
["ember-metal/platform","ember-metal/watching","exports"],
function(__dependency1__, __dependency2__, __exports__) {
- // Remove "use strict"; from transpiled module until
- // https://bugs.webkit.org/show_bug.cgi?id=138038 is fixed
- //
- // REMOVE_USE_STRICT: true
-
+ "use strict";
var o_create = __dependency1__.create;
var watch = __dependency2__.watch;
var unwatch = __dependency2__.unwatch;
/**
@@ -5084,22 +5078,20 @@
}
__exports__.deprecateProperty = deprecateProperty;
});
define("ember-metal/dictionary",
- ["ember-metal/platform","exports"],
- function(__dependency1__, __exports__) {
+ ["exports"],
+ function(__exports__) {
"use strict";
- var create = __dependency1__.create;
-
// the delete is meant to hint at runtimes that this object should remain in
// dictionary mode. This is clearly a runtime specific hack, but currently it
// appears worthwile in some usecases. Please note, these deletes do increase
// the cost of creation dramatically over a plain Object.create. And as this
// only makes sense for long-lived dictionaries that aren't instantiated often.
__exports__["default"] = function makeDictionary(parent) {
- var dict = create(parent);
+ var dict = Object.create(parent);
dict['_dict'] = null;
delete dict['_dict'];
return dict;
}
});
@@ -5391,27 +5383,22 @@
__exports__["default"] = EmberError;
});
define("ember-metal/events",
["ember-metal/core","ember-metal/utils","ember-metal/platform","exports"],
function(__dependency1__, __dependency2__, __dependency3__, __exports__) {
- // Remove "use strict"; from transpiled module until
- // https://bugs.webkit.org/show_bug.cgi?id=138038 is fixed
- //
- // REMOVE_USE_STRICT: true
-
+ "use strict";
/**
@module ember-metal
*/
var Ember = __dependency1__["default"];
- var meta = __dependency2__.meta;
+ var metaFor = __dependency2__.meta;
var tryFinally = __dependency2__.tryFinally;
var apply = __dependency2__.apply;
var applyStr = __dependency2__.applyStr;
var create = __dependency3__.create;
var a_slice = [].slice;
- var metaFor = meta;
/* listener flags */
var ONCE = 1;
var SUSPENDED = 2;
@@ -5448,25 +5435,30 @@
}
function actionsFor(obj, eventName) {
var meta = metaFor(obj, true);
var actions;
+ var listeners = meta.listeners;
- if (!meta.listeners) { meta.listeners = {}; }
-
- if (!meta.hasOwnProperty('listeners')) {
+ if (!listeners) {
+ listeners = meta.listeners = create(null);
+ listeners.__source__ = obj;
+ } else if (listeners.__source__ !== obj) {
// setup inherited copy of the listeners object
- meta.listeners = create(meta.listeners);
+ listeners = meta.listeners = create(listeners);
+ listeners.__source__ = obj;
}
- actions = meta.listeners[eventName];
+ actions = listeners[eventName];
// if there are actions, but the eventName doesn't exist in our listeners, then copy them from the prototype
- if (actions && !meta.listeners.hasOwnProperty(eventName)) {
- actions = meta.listeners[eventName] = meta.listeners[eventName].slice();
+ if (actions && actions.__source__ !== obj) {
+ actions = listeners[eventName] = listeners[eventName].slice();
+ actions.__source__ = obj;
} else if (!actions) {
- actions = meta.listeners[eventName] = [];
+ actions = listeners[eventName] = [];
+ actions.__source__ = obj;
}
return actions;
}
@@ -5683,12 +5675,15 @@
*/
function watchedEvents(obj) {
var listeners = obj['__ember_meta__'].listeners, ret = [];
if (listeners) {
- for(var eventName in listeners) {
- if (listeners[eventName]) { ret.push(eventName); }
+ for (var eventName in listeners) {
+ if (eventName !== '__source__' &&
+ listeners[eventName]) {
+ ret.push(eventName);
+ }
}
}
return ret;
}
@@ -5951,10 +5946,63 @@
ret[propertyNames[i]] = get(obj, propertyNames[i]);
}
return ret;
}
});
+define("ember-metal/injected_property",
+ ["ember-metal/core","ember-metal/computed","ember-metal/properties","ember-metal/platform","ember-metal/utils","ember-metal/error","exports"],
+ function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __exports__) {
+ "use strict";
+ var Ember = __dependency1__["default"];
+ // Ember.assert
+ var ComputedProperty = __dependency2__.ComputedProperty;
+ var Descriptor = __dependency3__.Descriptor;
+ var create = __dependency4__.create;
+ var inspect = __dependency5__.inspect;
+ var EmberError = __dependency6__["default"];
+
+ /**
+ Read-only property that returns the result of a container lookup.
+
+ @class InjectedProperty
+ @namespace Ember
+ @extends Ember.Descriptor
+ @constructor
+ @param {String} type The container type the property will lookup
+ @param {String} name (optional) The name the property will lookup, defaults
+ to the property's name
+ */
+ function InjectedProperty(type, name) {
+ this.type = type;
+ this.name = name;
+
+ this._super$Constructor(function(keyName) {
+ Ember.assert("Attempting to lookup an injected property on an object " +
+ "without a container, ensure that the object was " +
+ "instantiated via a container.", this.container);
+
+ return this.container.lookup(type + ':' + (name || keyName));
+ }, { readOnly: true });
+ }
+
+ InjectedProperty.prototype = create(Descriptor.prototype);
+
+ var InjectedPropertyPrototype = InjectedProperty.prototype;
+ var ComputedPropertyPrototype = ComputedProperty.prototype;
+
+ InjectedPropertyPrototype._super$Constructor = ComputedProperty;
+
+ InjectedPropertyPrototype.get = ComputedPropertyPrototype.get;
+
+ InjectedPropertyPrototype.set = function(obj, keyName) {
+ throw new EmberError("Cannot set injected property '" + keyName + "' on object: " + inspect(obj));
+ };
+
+ InjectedPropertyPrototype.teardown = ComputedPropertyPrototype.teardown;
+
+ __exports__["default"] = InjectedProperty;
+ });
define("ember-metal/instrumentation",
["ember-metal/core","ember-metal/utils","exports"],
function(__dependency1__, __dependency2__, __exports__) {
"use strict";
var Ember = __dependency1__["default"];
@@ -6178,16 +6226,14 @@
}
__exports__.reset = reset;
});
define("ember-metal/is_blank",
- ["ember-metal/core","ember-metal/is_empty","exports"],
- function(__dependency1__, __dependency2__, __exports__) {
+ ["ember-metal/is_empty","exports"],
+ function(__dependency1__, __exports__) {
"use strict";
- var Ember = __dependency1__["default"];
- // deprecateFunc
- var isEmpty = __dependency2__["default"];
+ var isEmpty = __dependency1__["default"];
/**
A value is blank if it is empty or a whitespace string.
```javascript
@@ -6225,11 +6271,11 @@
/**
Verifies that a value is `null` or an empty string, empty array,
or empty function.
- Constrains the rules on `Ember.isNone` by returning true for empty
+ Constrains the rules on `Ember.isNone` by returning false for empty
string and empty arrays.
```javascript
Ember.isEmpty(); // true
Ember.isEmpty(null); // true
@@ -6244,44 +6290,16 @@
@for Ember
@param {Object} obj Value to test
@return {Boolean}
*/
function isEmpty(obj) {
- var none = isNone(obj);
- if (none) {
- return none;
- }
-
- if (typeof obj.size === 'number') {
- return !obj.size;
- }
-
- var objectType = typeof obj;
-
- if (objectType === 'object') {
- var size = get(obj, 'size');
- if (typeof size === 'number') {
- return !size;
- }
- }
-
- if (typeof obj.length === 'number' && objectType !== 'function') {
- return !obj.length;
- }
-
- if (objectType === 'object') {
- var length = get(obj, 'length');
- if (typeof length === 'number') {
- return !length;
- }
- }
-
- return false;
+ return isNone(obj) || (obj.length === 0 && typeof obj !== 'function') ||
+ (typeof obj === 'object' && get(obj, 'length') === 0);
}
var empty = Ember.deprecateFunc("Ember.empty is deprecated. Please use Ember.isEmpty instead.", isEmpty);
- __exports__.empty = empty;
+
__exports__["default"] = isEmpty;
__exports__.isEmpty = isEmpty;
__exports__.empty = empty;
});
define("ember-metal/is_none",
@@ -6655,11 +6673,11 @@
function missingNew(name) {
throw new TypeError("Constructor " + name + "requires 'new'");
}
function copyNull(obj) {
- var output = create(null);
+ var output = Object.create(null);
for (var prop in obj) {
// hasOwnPropery is not needed because obj is Object.create(null);
output[prop] = obj[prop];
}
@@ -6713,11 +6731,11 @@
constructor: OrderedSet,
/**
@method clear
*/
clear: function() {
- this.presenceSet = create(null);
+ this.presenceSet = Object.create(null);
this.list = [];
this.size = 0;
},
/**
@@ -6877,11 +6895,11 @@
*/
function Map() {
if (this instanceof this.constructor) {
this.keys = OrderedSet.create();
this.keys._silenceRemoveDeprecation = true;
- this.values = create(null);
+ this.values = Object.create(null);
this.size = 0;
} else {
missingNew("OrderedSet");
}
}
@@ -7039,11 +7057,11 @@
/**
@method clear
*/
clear: function() {
this.keys.clear();
- this.values = create(null);
+ this.values = Object.create(null);
this.size = 0;
},
/**
@method copy
@@ -7164,54 +7182,48 @@
return original;
}
});
define("ember-metal/mixin",
- ["ember-metal/core","ember-metal/merge","ember-metal/array","ember-metal/platform","ember-metal/utils","ember-metal/expand_properties","ember-metal/properties","ember-metal/computed","ember-metal/binding","ember-metal/observer","ember-metal/events","exports"],
- function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __dependency8__, __dependency9__, __dependency10__, __dependency11__, __exports__) {
- // Remove "use strict"; from transpiled module until
- // https://bugs.webkit.org/show_bug.cgi?id=138038 is fixed
- //
- // REMOVE_USE_STRICT: true
-
+ ["ember-metal/core","ember-metal/merge","ember-metal/array","ember-metal/platform","ember-metal/property_get","ember-metal/property_set","ember-metal/utils","ember-metal/expand_properties","ember-metal/properties","ember-metal/computed","ember-metal/binding","ember-metal/observer","ember-metal/events","exports"],
+ function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __dependency8__, __dependency9__, __dependency10__, __dependency11__, __dependency12__, __dependency13__, __exports__) {
+ "use strict";
/**
@module ember
@submodule ember-metal
*/
var Ember = __dependency1__["default"];
// warn, assert, wrap, et;
var merge = __dependency2__["default"];
- var map = __dependency3__.map;
- var indexOf = __dependency3__.indexOf;
- var forEach = __dependency3__.forEach;
- var create = __dependency4__.create;
- var guidFor = __dependency5__.guidFor;
- var meta = __dependency5__.meta;
- var wrap = __dependency5__.wrap;
- var makeArray = __dependency5__.makeArray;
- var apply = __dependency5__.apply;
- var isArray = __dependency5__.isArray;
- var expandProperties = __dependency6__["default"];
- var Descriptor = __dependency7__.Descriptor;
- var defineProperty = __dependency7__.defineProperty;
- var ComputedProperty = __dependency8__.ComputedProperty;
- var Binding = __dependency9__.Binding;
- var addObserver = __dependency10__.addObserver;
- var removeObserver = __dependency10__.removeObserver;
- var addBeforeObserver = __dependency10__.addBeforeObserver;
- var removeBeforeObserver = __dependency10__.removeBeforeObserver;
- var addListener = __dependency11__.addListener;
- var removeListener = __dependency11__.removeListener;
+ var a_map = __dependency3__.map;
+ var a_indexOf = __dependency3__.indexOf;
+ var a_forEach = __dependency3__.forEach;
+ var o_create = __dependency4__.create;
+ var get = __dependency5__.get;
+ var set = __dependency6__.set;
+ var trySet = __dependency6__.trySet;
+ var guidFor = __dependency7__.guidFor;
+ var metaFor = __dependency7__.meta;
+ var wrap = __dependency7__.wrap;
+ var makeArray = __dependency7__.makeArray;
+ var apply = __dependency7__.apply;
+ var expandProperties = __dependency8__["default"];
+ var Descriptor = __dependency9__.Descriptor;
+ var defineProperty = __dependency9__.defineProperty;
+ var ComputedProperty = __dependency10__.ComputedProperty;
+ var Binding = __dependency11__.Binding;
+ var addObserver = __dependency12__.addObserver;
+ var removeObserver = __dependency12__.removeObserver;
+ var addBeforeObserver = __dependency12__.addBeforeObserver;
+ var removeBeforeObserver = __dependency12__.removeBeforeObserver;
+ var _suspendObserver = __dependency12__._suspendObserver;
+ var addListener = __dependency13__.addListener;
+ var removeListener = __dependency13__.removeListener;
var REQUIRED;
- var a_map = map;
- var a_indexOf = indexOf;
- var a_forEach = forEach;
var a_slice = [].slice;
- var o_create = create;
- var metaFor = meta;
function superFunction(){
var func = this.__nextSuper;
var ret;
if (func) {
@@ -7254,11 +7266,16 @@
}
function isMethod(obj) {
return 'function' === typeof obj &&
obj.isMethod !== false &&
- obj !== Boolean && obj !== Object && obj !== Number && obj !== Array && obj !== Date && obj !== String;
+ obj !== Boolean &&
+ obj !== Object &&
+ obj !== Number &&
+ obj !== Array &&
+ obj !== Date &&
+ obj !== String;
}
var CONTINUE = {};
function mixinProperties(mixinsMeta, mixin) {
@@ -7310,10 +7327,14 @@
property.func = wrap(property.func, superProperty.func);
return property;
}
+ var sourceAvailable = (function() {
+ return this;
+ }).toString().indexOf('return this;') > -1;
+
function giveMethodSuper(obj, key, method, values, descs) {
var superMethod;
// Methods overwrite computed properties, and do not call super to them.
if (descs[key] === undefined) {
@@ -7328,19 +7349,37 @@
// Only wrap the new method if the original method was a function
if (superMethod === undefined || 'function' !== typeof superMethod) {
return method;
}
- return wrap(method, superMethod);
+ var hasSuper;
+ if (sourceAvailable) {
+ hasSuper = method.__hasSuper;
+
+ if (hasSuper === undefined) {
+ hasSuper = method.toString().indexOf('_super') > -1;
+ method.__hasSuper = hasSuper;
+ }
+ }
+
+ if (sourceAvailable === false || hasSuper) {
+ return wrap(method, superMethod);
+ } else {
+ return method;
+ }
}
function applyConcatenatedProperties(obj, key, value, values) {
var baseValue = values[key] || obj[key];
if (baseValue) {
if ('function' === typeof baseValue.concat) {
- return baseValue.concat(value);
+ if (value === null || value === undefined) {
+ return baseValue;
+ } else {
+ return baseValue.concat(value);
+ }
} else {
return makeArray(baseValue).concat(value);
}
} else {
return makeArray(value);
@@ -7348,13 +7387,10 @@
}
function applyMergedProperties(obj, key, value, values) {
var baseValue = values[key] || obj[key];
- Ember.assert("You passed in `" + JSON.stringify(value) + "` as the value for `" + key +
- "` but `" + key + "` cannot be an Array", !isArray(value));
-
if (!baseValue) { return value; }
var newBase = merge({}, baseValue);
var hasFunction = false;
@@ -7455,20 +7491,48 @@
}
bindings[key] = value;
}
}
+ function connectStreamBinding(obj, key, stream) {
+ var onNotify = function(stream) {
+ _suspendObserver(obj, key, null, didChange, function() {
+ trySet(obj, key, stream.value());
+ });
+ };
+
+ var didChange = function() {
+ stream.setValue(get(obj, key), onNotify);
+ };
+
+ // Initialize value
+ set(obj, key, stream.value());
+
+ addObserver(obj, key, null, didChange);
+
+ stream.subscribe(onNotify);
+
+ if (obj._streamBindingSubscriptions === undefined) {
+ obj._streamBindingSubscriptions = Object.create(null);
+ }
+
+ obj._streamBindingSubscriptions[key] = onNotify;
+ }
+
function connectBindings(obj, m) {
// TODO Mixin.apply(instance) should disconnect binding if exists
var bindings = m.bindings;
var key, binding, to;
if (bindings) {
for (key in bindings) {
binding = bindings[key];
if (binding) {
to = key.slice(0, -7); // strip Binding off end
- if (binding instanceof Binding) {
+ if (binding.isStream) {
+ connectStreamBinding(obj, to, binding);
+ continue;
+ } else if (binding instanceof Binding) {
binding = binding.copy(); // copy prototypes' instance
binding.to(to);
} else { // binding is string path
binding = new Binding(to, binding);
}
@@ -7698,11 +7762,12 @@
var idx;
for(idx=0; idx < len; idx++) {
mixin = arguments[idx];
Ember.assert('Expected hash or Mixin instance, got ' + Object.prototype.toString.call(mixin),
- typeof mixin === 'object' && mixin !== null && Object.prototype.toString.call(mixin) !== '[object Array]');
+ typeof mixin === 'object' && mixin !== null &&
+ Object.prototype.toString.call(mixin) !== '[object Array]');
if (mixin instanceof Mixin) {
mixins.push(mixin);
} else {
tmp = Mixin.create();
@@ -7932,11 +7997,12 @@
@return func
*/
function immediateObserver() {
for (var i=0, l=arguments.length; i<l; i++) {
var arg = arguments[i];
- Ember.assert("Immediate observers must observe internal properties only, not properties on other objects.", typeof arg !== "string" || arg.indexOf('.') === -1);
+ Ember.assert("Immediate observers must observe internal properties only, not properties on other objects.",
+ typeof arg !== "string" || arg.indexOf('.') === -1);
}
return observer.apply(this, arguments);
}
@@ -8212,20 +8278,38 @@
var IS_GLOBAL = /^([A-Z$]|([0-9][A-Z$]))/;
var IS_GLOBAL_PATH = /^([A-Z$]|([0-9][A-Z$])).*[\.]/;
var HAS_THIS = 'this.';
- var isGlobalCache = new Cache(1000, function(key) { return IS_GLOBAL.test(key); });
- var isGlobalPathCache = new Cache(1000, function(key) { return IS_GLOBAL_PATH.test(key); });
- var hasThisCache = new Cache(1000, function(key) { return key.indexOf(HAS_THIS) !== -1; });
- var isPathCache = new Cache(1000, function(key) { return key.indexOf('.') !== -1; });
+ var isGlobalCache = new Cache(1000, function(key) { return IS_GLOBAL.test(key); });
+ var isGlobalPathCache = new Cache(1000, function(key) { return IS_GLOBAL_PATH.test(key); });
+ var hasThisCache = new Cache(1000, function(key) { return key.indexOf(HAS_THIS) !== -1; });
+ var firstDotIndexCache = new Cache(1000, function(key) { return key.indexOf('.'); });
+ var firstKeyCache = new Cache(1000, function(path) {
+ var index = firstDotIndexCache.get(path);
+ if (index === -1) {
+ return path;
+ } else {
+ return path.slice(0, index);
+ }
+ });
+
+ var tailPathCache = new Cache(1000, function(path) {
+ var index = firstDotIndexCache.get(path);
+ if (index !== -1) {
+ return path.slice(index + 1);
+ }
+ });
+
var caches = {
- isGlobalCache: isGlobalCache,
- isGlobalPathCache: isGlobalPathCache,
- hasThisCache: hasThisCache,
- isPathCache: isPathCache
+ isGlobalCache: isGlobalCache,
+ isGlobalPathCache: isGlobalPathCache,
+ hasThisCache: hasThisCache,
+ firstDotIndexCache: firstDotIndexCache,
+ firstKeyCache: firstKeyCache,
+ tailPathCache: tailPathCache
};
__exports__.caches = caches;
function isGlobal(path) {
return isGlobalCache.get(path);
}
@@ -8237,59 +8321,127 @@
__exports__.isGlobalPath = isGlobalPath;function hasThis(path) {
return hasThisCache.get(path);
}
__exports__.hasThis = hasThis;function isPath(path) {
- return isPathCache.get(path);
+ return firstDotIndexCache.get(path) !== -1;
}
- __exports__.isPath = isPath;
+ __exports__.isPath = isPath;function getFirstKey(path) {
+ return firstKeyCache.get(path);
+ }
+
+ __exports__.getFirstKey = getFirstKey;function getTailPath(path) {
+ return tailPathCache.get(path);
+ }
+
+ __exports__.getTailPath = getTailPath;
});
define("ember-metal/platform",
- ["ember-metal/platform/define_property","ember-metal/platform/define_properties","ember-metal/platform/create","exports"],
- function(__dependency1__, __dependency2__, __dependency3__, __exports__) {
+ ["exports"],
+ function(__exports__) {
"use strict";
- var hasES5CompliantDefineProperty = __dependency1__.hasES5CompliantDefineProperty;
- var defineProperty = __dependency1__.defineProperty;
- var defineProperties = __dependency2__["default"];
- var create = __dependency3__["default"];
+ /*globals Node */
/**
@module ember-metal
*/
+ var defineProperty = (function checkCompliance(defineProperty) {
+ if (!defineProperty) return;
+ try {
+ var a = 5;
+ var obj = {};
+ defineProperty(obj, 'a', {
+ configurable: true,
+ enumerable: true,
+ get: function () {
+ return a;
+ },
+ set: function (v) {
+ a = v;
+ }
+ });
+ if (obj.a !== 5) return;
+ obj.a = 10;
+ if (a !== 10) return;
- var hasPropertyAccessors = hasES5CompliantDefineProperty;
- var canDefineNonEnumerableProperties = hasES5CompliantDefineProperty;
+ // check non-enumerability
+ defineProperty(obj, 'a', {
+ configurable: true,
+ enumerable: false,
+ writable: true,
+ value: true
+ });
+ for (var key in obj) {
+ if (key === 'a') return;
+ }
- /**
- Platform specific methods and feature detectors needed by the framework.
+ // Detects a bug in Android <3.2 where you cannot redefine a property using
+ // Object.defineProperty once accessors have already been set.
+ if (obj.a !== true) return;
- @class platform
- @namespace Ember
- @static
- */
+ // defineProperty is compliant
+ return defineProperty;
+ } catch (e) {
+ // IE8 defines Object.defineProperty but calling it on an Object throws
+ return;
+ }
+ })(Object.defineProperty);
- __exports__.create = create;
- __exports__.defineProperty = defineProperty;
- __exports__.defineProperties = defineProperties;
- __exports__.hasPropertyAccessors = hasPropertyAccessors;
- __exports__.canDefineNonEnumerableProperties = canDefineNonEnumerableProperties;
- });
-define("ember-metal/platform/create",
- ["exports"],
- function(__exports__) {
- // Remove "use strict"; from transpiled module until
- // https://bugs.webkit.org/show_bug.cgi?id=138038 is fixed
- //
- // REMOVE_USE_STRICT: true
+ var hasES5CompliantDefineProperty = !!defineProperty;
- /**
- @class platform
- @namespace Ember
- @static
- */
+ if (hasES5CompliantDefineProperty && typeof document !== 'undefined') {
+ // This is for Safari 5.0, which supports Object.defineProperty, but not
+ // on DOM nodes.
+ var canDefinePropertyOnDOM = (function() {
+ try {
+ defineProperty(document.createElement('div'), 'definePropertyOnDOM', {});
+ return true;
+ } catch(e) { }
+ return false;
+ })();
+
+ if (!canDefinePropertyOnDOM) {
+ defineProperty = function(obj, keyName, desc) {
+ var isNode;
+
+ if (typeof Node === "object") {
+ isNode = obj instanceof Node;
+ } else {
+ isNode = typeof obj === "object" && typeof obj.nodeType === "number" && typeof obj.nodeName === "string";
+ }
+
+ if (isNode) {
+ // TODO: Should we have a warning here?
+ return (obj[keyName] = desc.value);
+ } else {
+ return Object.defineProperty(obj, keyName, desc);
+ }
+ };
+ }
+ }
+
+ if (!hasES5CompliantDefineProperty) {
+ defineProperty = function defineProperty(obj, keyName, desc) {
+ if (!desc.get) { obj[keyName] = desc.value; }
+ };
+ }
+
+ // ES5 15.2.3.7
+ // http://es5.github.com/#x15.2.3.7
+ if (!Object.defineProperties) {
+ Object.defineProperties = function defineProperties(object, properties) {
+ for (var property in properties) {
+ if (properties.hasOwnProperty(property) && property !== "__proto__") {
+ defineProperty(object, property, properties[property]);
+ }
+ }
+ return object;
+ };
+ }
+
/**
Identical to `Object.create()`. Implements if not available natively.
@method create
@for Ember
@@ -8372,55 +8524,27 @@
};
} else {
create = Object.create;
}
- __exports__["default"] = create;
- });
-define("ember-metal/platform/define_properties",
- ["ember-metal/platform/define_property","exports"],
- function(__dependency1__, __exports__) {
- "use strict";
- var defineProperty = __dependency1__.defineProperty;
+ var hasPropertyAccessors = hasES5CompliantDefineProperty;
+ var canDefineNonEnumerableProperties = hasES5CompliantDefineProperty;
- var defineProperties = Object.defineProperties;
-
- // ES5 15.2.3.7
- // http://es5.github.com/#x15.2.3.7
- if (!defineProperties) {
- defineProperties = function defineProperties(object, properties) {
- for (var property in properties) {
- if (properties.hasOwnProperty(property) && property !== "__proto__") {
- defineProperty(object, property, properties[property]);
- }
- }
- return object;
- };
-
- Object.defineProperties = defineProperties;
- }
-
- __exports__["default"] = defineProperties;
- });
-define("ember-metal/platform/define_property",
- ["exports"],
- function(__exports__) {
- "use strict";
- /*globals Node */
-
/**
@class platform
@namespace Ember
- @static
*/
/**
- Set to true if the platform supports native getters and setters.
+ Platform specific methods and feature detectors needed by the framework.
- @property hasPropertyAccessors
- @final
+ @class platform
+ @namespace Ember
+ @static
*/
+ // TODO remove this
+ var platform = {};
/**
Identical to `Object.defineProperty()`. Implements as much functionality
as possible if not available natively.
@@ -8428,94 +8552,25 @@
@param {Object} obj The object to modify
@param {String} keyName property name to modify
@param {Object} desc descriptor hash
@return {void}
*/
- var defineProperty = (function checkCompliance(defineProperty) {
- if (!defineProperty) return;
- try {
- var a = 5;
- var obj = {};
- defineProperty(obj, 'a', {
- configurable: true,
- enumerable: true,
- get: function () {
- return a;
- },
- set: function (v) {
- a = v;
- }
- });
- if (obj.a !== 5) return;
- obj.a = 10;
- if (a !== 10) return;
+ platform.defineProperty = defineProperty;
- // check non-enumerability
- defineProperty(obj, 'a', {
- configurable: true,
- enumerable: false,
- writable: true,
- value: true
- });
- for (var key in obj) {
- if (key === 'a') return;
- }
+ /**
+ Set to true if the platform supports native getters and setters.
- // Detects a bug in Android <3.2 where you cannot redefine a property using
- // Object.defineProperty once accessors have already been set.
- if (obj.a !== true) return;
+ @property hasPropertyAccessors
+ @final
+ */
+ platform.hasPropertyAccessors = hasPropertyAccessors;
- // defineProperty is compliant
- return defineProperty;
- } catch (e) {
- // IE8 defines Object.defineProperty but calling it on an Object throws
- return;
- }
- })(Object.defineProperty);
-
- var hasES5CompliantDefineProperty = !!defineProperty;
-
- if (hasES5CompliantDefineProperty && typeof document !== 'undefined') {
- // This is for Safari 5.0, which supports Object.defineProperty, but not
- // on DOM nodes.
- var canDefinePropertyOnDOM = (function() {
- try {
- defineProperty(document.createElement('div'), 'definePropertyOnDOM', {});
- return true;
- } catch(e) { }
-
- return false;
- })();
-
- if (!canDefinePropertyOnDOM) {
- defineProperty = function(obj, keyName, desc) {
- var isNode;
-
- if (typeof Node === "object") {
- isNode = obj instanceof Node;
- } else {
- isNode = typeof obj === "object" && typeof obj.nodeType === "number" && typeof obj.nodeName === "string";
- }
-
- if (isNode) {
- // TODO: Should we have a warning here?
- return (obj[keyName] = desc.value);
- } else {
- return Object.defineProperty(obj, keyName, desc);
- }
- };
- }
- }
-
- if (!hasES5CompliantDefineProperty) {
- defineProperty = function defineProperty(obj, keyName, desc) {
- if (!desc.get) { obj[keyName] = desc.value; }
- };
- }
-
- __exports__.hasES5CompliantDefineProperty = hasES5CompliantDefineProperty;
+ __exports__.create = create;
__exports__.defineProperty = defineProperty;
+ __exports__.hasPropertyAccessors = hasPropertyAccessors;
+ __exports__.canDefineNonEnumerableProperties = canDefineNonEnumerableProperties;
+ __exports__.platform = platform;
});
define("ember-metal/properties",
["ember-metal/core","ember-metal/utils","ember-metal/platform","ember-metal/property_events","exports"],
function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __exports__) {
"use strict";
@@ -8547,14 +8602,12 @@
__exports__.Descriptor = Descriptor;// ..........................................................
// DEFINING PROPERTIES API
//
- function MANDATORY_SETTER_FUNCTION(name) {
- return function SETTER_FUNCTION(value) {
- Ember.assert("You must use Ember.set() to set the `" + name + "` property (of " + this + ") to `" + value + "`.", false);
- };
+ function MANDATORY_SETTER_FUNCTION(value) {
+ Ember.assert("You must use Ember.set() to access this property (of " + this + ")", false);
}
__exports__.MANDATORY_SETTER_FUNCTION = MANDATORY_SETTER_FUNCTION;function DEFAULT_GETTER_FUNCTION(name) {
return function GETTER_FUNCTION() {
var meta = this['__ember_meta__'];
@@ -8646,11 +8699,11 @@
if (watching && hasPropertyAccessors) {
meta.values[keyName] = data;
objectDefineProperty(obj, keyName, {
configurable: true,
enumerable: true,
- set: MANDATORY_SETTER_FUNCTION(keyName),
+ set: MANDATORY_SETTER_FUNCTION,
get: DEFAULT_GETTER_FUNCTION(keyName)
});
} else {
obj[keyName] = data;
}
@@ -8670,10 +8723,11 @@
// either the descriptor or data, whichever was passed.
if (obj.didDefineProperty) { obj.didDefineProperty(obj, keyName, value); }
return this;
}
+
__exports__.defineProperty = defineProperty;
});
define("ember-metal/property_events",
["ember-metal/utils","ember-metal/events","ember-metal/observer_set","exports"],
function(__dependency1__, __dependency2__, __dependency3__, __exports__) {
@@ -9195,14 +9249,11 @@
// only trigger a change if the value has changed
if (value !== currentValue) {
propertyWillChange(obj, keyName);
if (hasPropertyAccessors) {
- if (
- (currentValue === undefined && !(keyName in obj)) ||
- !Object.prototype.propertyIsEnumerable.call(obj, keyName)
- ) {
+ if ((currentValue === undefined && !(keyName in obj)) || !obj.propertyIsEnumerable(keyName)) {
defineProperty(obj, keyName, null, value); // setup mandatory setter
} else {
meta.values[keyName] = value;
}
} else {
@@ -9303,11 +9354,10 @@
onEnd: onEnd,
onErrorTarget: Ember,
onErrorMethod: 'onerror'
});
var slice = [].slice;
- var concat = [].concat;
// ..........................................................
// run - this is ideally the only public API the dev sees
//
@@ -9602,14 +9652,18 @@
If you pass a string it will be resolved on the
target at the time the method is invoked.
@param {Object} [args*] Optional arguments to pass to the timeout.
@return {Object} Timer information for use in cancelling, see `run.cancel`.
*/
- run.once = function(target, method) {
+ run.once = function(/*target, method */) {
checkAutoRun();
- var args = slice.call(arguments);
- args.unshift('actions');
+ var length = arguments.length;
+ var args = new Array(length);
+ args[0] = 'actions';
+ for (var i = 0; i < length; i++) {
+ args[i + 1] = arguments[i];
+ }
return apply(backburner, backburner.scheduleOnce, args);
};
/**
Schedules a function to run one time in a given queue of the current RunLoop.
@@ -9879,11 +9933,12 @@
};
// Make sure it's not an autorun during testing
function checkAutoRun() {
if (!run.currentRunLoop) {
- Ember.assert("You have turned on testing mode, which disabled the run-loop's autorun. You will need to wrap any code with asynchronous side-effects in an run", !Ember.testing);
+ Ember.assert("You have turned on testing mode, which disabled the run-loop's autorun." +
+ " You will need to wrap any code with asynchronous side-effects in an run", !Ember.testing);
}
}
/**
Add a new named queue after the specified queue.
@@ -9923,42 +9978,346 @@
age: 21
});
```
@method setProperties
- @param obj
- @param {Object} properties
- @return obj
+ @param self
+ @param {Object} hash
+ @return self
*/
- __exports__["default"] = function setProperties(obj, properties) {
- if (!properties || typeof properties !== "object") { return obj; }
+ __exports__["default"] = function setProperties(self, hash) {
changeProperties(function() {
- var props = keys(properties);
- var propertyName;
+ var props = keys(hash);
+ var prop;
for (var i = 0, l = props.length; i < l; i++) {
- propertyName = props[i];
+ prop = props[i];
- set(obj, propertyName, properties[propertyName]);
+ set(self, prop, hash[prop]);
}
});
- return obj;
+ return self;
}
});
+define("ember-metal/streams/read",
+ ["exports"],
+ function(__exports__) {
+ "use strict";
+ function read(object) {
+ if (object && object.isStream) {
+ return object.value();
+ } else {
+ return object;
+ }
+ }
+
+ __exports__.read = read;function readArray(array) {
+ var length = array.length;
+ var ret = new Array(length);
+ for (var i = 0; i < length; i++) {
+ ret[i] = read(array[i]);
+ }
+ return ret;
+ }
+
+ __exports__.readArray = readArray;function readHash(object) {
+ var ret = {};
+ for (var key in object) {
+ ret[key] = read(object[key]);
+ }
+ return ret;
+ }
+
+ __exports__.readHash = readHash;
+ });
+define("ember-metal/streams/simple",
+ ["ember-metal/merge","ember-metal/streams/stream","ember-metal/platform","ember-metal/streams/read","exports"],
+ function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __exports__) {
+ "use strict";
+ var merge = __dependency1__["default"];
+ var Stream = __dependency2__["default"];
+ var create = __dependency3__.create;
+ var read = __dependency4__.read;
+
+ function SimpleStream(source) {
+ this.source = source;
+
+ if (source && source.isStream) {
+ source.subscribe(this._didChange, this);
+ }
+ }
+
+ SimpleStream.prototype = create(Stream.prototype);
+
+ merge(SimpleStream.prototype, {
+ valueFn: function() {
+ return read(this.source);
+ },
+
+ setValue: function(value) {
+ var source = this.source;
+
+ if (source && source.isStream) {
+ source.setValue(value);
+ }
+ },
+
+ setSource: function(nextSource) {
+ var prevSource = this.source;
+ if (nextSource !== prevSource) {
+ if (prevSource && prevSource.isStream) {
+ prevSource.unsubscribe(this._didChange, this);
+ }
+
+ if (nextSource && nextSource.isStream) {
+ nextSource.subscribe(this._didChange, this);
+ }
+
+ this.source = nextSource;
+ this.notify();
+ }
+ },
+
+ _didChange: function() {
+ this.notify();
+ },
+
+ destroy: function() {
+ if (this.source && this.source.isStream) {
+ this.source.unsubscribe(this._didChange, this);
+ }
+
+ this.source = undefined;
+ Stream.prototype.destroy.call(this);
+ }
+ });
+
+ __exports__["default"] = SimpleStream;
+ });
+define("ember-metal/streams/stream",
+ ["ember-metal/path_cache","exports"],
+ function(__dependency1__, __exports__) {
+ "use strict";
+ var getFirstKey = __dependency1__.getFirstKey;
+ var getTailPath = __dependency1__.getTailPath;
+
+ var NIL = function NIL(){};
+
+ function Stream(fn) {
+ this.valueFn = fn;
+ this.cache = NIL;
+ this.subscribers = undefined;
+ this.children = undefined;
+ this.destroyed = false;
+ }
+
+ Stream.prototype = {
+ isStream: true,
+
+ cache: NIL,
+
+ get: function(path) {
+ var firstKey = getFirstKey(path);
+ var tailPath = getTailPath(path);
+
+ if (this.children === undefined) {
+ this.children = Object.create(null);
+ }
+
+ var keyStream = this.children[firstKey];
+
+ if (keyStream === undefined) {
+ keyStream = this._makeChildStream(firstKey, path);
+ this.children[firstKey] = keyStream;
+ }
+
+ if (tailPath === undefined) {
+ return keyStream;
+ } else {
+ return keyStream.get(tailPath);
+ }
+ },
+
+ value: function() {
+ if (this.cache !== NIL) {
+ return this.cache;
+ } else {
+ return this.cache = this.valueFn();
+ }
+ },
+
+ setValue: function() {
+ throw new Error("Stream error: setValue not implemented");
+ },
+
+ notify: function() {
+ this.notifyExcept();
+ },
+
+ notifyExcept: function(callbackToSkip, contextToSkip) {
+ if (this.cache !== NIL) {
+ this.cache = NIL;
+ this.notifySubscribers(callbackToSkip, contextToSkip);
+ }
+ },
+
+ subscribe: function(callback, context) {
+ if (this.subscribers === undefined) {
+ this.subscribers = [callback, context];
+ } else {
+ this.subscribers.push(callback, context);
+ }
+ },
+
+ unsubscribe: function(callback, context) {
+ var subscribers = this.subscribers;
+
+ if (subscribers !== undefined) {
+ for (var i = 0, l = subscribers.length; i < l; i += 2) {
+ if (subscribers[i] === callback && subscribers[i+1] === context) {
+ subscribers.splice(i, 2);
+ return;
+ }
+ }
+ }
+ },
+
+ notifySubscribers: function(callbackToSkip, contextToSkip) {
+ var subscribers = this.subscribers;
+
+ if (subscribers !== undefined) {
+ for (var i = 0, l = subscribers.length; i < l; i += 2) {
+ var callback = subscribers[i];
+ var context = subscribers[i+1];
+
+ if (callback === callbackToSkip && context === contextToSkip) {
+ continue;
+ }
+
+ if (context === undefined) {
+ callback(this);
+ } else {
+ callback.call(context, this);
+ }
+ }
+ }
+ },
+
+ destroy: function() {
+ if (this.destroyed) return;
+ this.destroyed = true;
+
+ var children = this.children;
+ for (var key in children) {
+ children[key].destroy();
+ }
+ },
+
+ isGlobal: function() {
+ var stream = this;
+ while (stream !== undefined) {
+ if (stream._isRoot) {
+ return stream._isGlobal;
+ }
+ stream = stream.source;
+ }
+ }
+ };
+
+ __exports__["default"] = Stream;
+ });
+define("ember-metal/streams/stream_binding",
+ ["ember-metal/platform","ember-metal/merge","ember-metal/run_loop","ember-metal/streams/stream","exports"],
+ function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __exports__) {
+ "use strict";
+ var create = __dependency1__.create;
+ var merge = __dependency2__["default"];
+ var run = __dependency3__["default"];
+ var Stream = __dependency4__["default"];
+
+ function StreamBinding(stream) {
+ Ember.assert("StreamBinding error: tried to bind to object that is not a stream", stream && stream.isStream);
+
+ this.stream = stream;
+ this.senderCallback = undefined;
+ this.senderContext = undefined;
+ this.senderValue = undefined;
+ this.destroyed = false;
+
+ stream.subscribe(this._onNotify, this);
+ }
+
+ StreamBinding.prototype = create(Stream.prototype);
+
+ merge(StreamBinding.prototype, {
+ valueFn: function() {
+ return this.stream.value();
+ },
+
+ _onNotify: function() {
+ this._scheduleSync(undefined, undefined, this);
+ },
+
+ setValue: function(value, callback, context) {
+ this._scheduleSync(value, callback, context);
+ },
+
+ _scheduleSync: function(value, callback, context) {
+ if (this.senderCallback === undefined && this.senderContext === undefined) {
+ this.senderCallback = callback;
+ this.senderContext = context;
+ this.senderValue = value;
+ run.schedule('sync', this, this._sync);
+ } else if (this.senderContext !== this) {
+ this.senderCallback = callback;
+ this.senderContext = context;
+ this.senderValue = value;
+ }
+ },
+
+ _sync: function() {
+ if (this.destroyed) {
+ return;
+ }
+
+ if (this.senderContext !== this) {
+ this.stream.setValue(this.senderValue);
+ }
+
+ var senderCallback = this.senderCallback;
+ var senderContext = this.senderContext;
+ this.senderCallback = undefined;
+ this.senderContext = undefined;
+ this.senderValue = undefined;
+
+ // Force StreamBindings to always notify
+ this.cache = undefined;
+
+ this.notifyExcept(senderCallback, senderContext);
+ },
+
+ destroy: function() {
+ if (this.destroyed) {
+ return;
+ }
+
+ this.destroyed = true;
+ this.stream.unsubscribe(this._onNotify, this);
+ }
+ });
+
+ __exports__["default"] = StreamBinding;
+ });
define("ember-metal/utils",
["ember-metal/core","ember-metal/platform","ember-metal/array","exports"],
function(__dependency1__, __dependency2__, __dependency3__, __exports__) {
- // Remove "use strict"; from transpiled module until
- // https://bugs.webkit.org/show_bug.cgi?id=138038 is fixed
- //
- // REMOVE_USE_STRICT: true
-
+ "use strict";
var Ember = __dependency1__["default"];
var o_defineProperty = __dependency2__.defineProperty;
var canDefineNonEnumerableProperties = __dependency2__.canDefineNonEnumerableProperties;
var hasPropertyAccessors = __dependency2__.hasPropertyAccessors;
- var create = __dependency2__.create;
+ var o_create = __dependency2__.create;
var forEach = __dependency3__.forEach;
/**
@module ember-metal
@@ -9994,11 +10353,10 @@
@type String
@final
*/
var GUID_PREFIX = 'ember';
- var o_create = create;
// Used for guid generation...
var numberCache = [];
var stringCache = {};
/**
@@ -10230,11 +10588,10 @@
@param {Boolean} [writable=true] Pass `false` if you do not intend to modify
the meta hash, allowing the method to avoid making an unnecessary copy.
@return {Object} the meta hash for an object
*/
function meta(obj, writable) {
-
var ret = obj['__ember_meta__'];
if (writable===false) return ret || EMPTY_META;
if (!ret) {
if (canDefineNonEnumerableProperties) o_defineProperty(obj, '__ember_meta__', META_DESC);
@@ -10825,20 +11182,17 @@
define("ember-metal/watch_key",
["ember-metal/core","ember-metal/utils","ember-metal/platform","ember-metal/properties","exports"],
function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __exports__) {
"use strict";
var Ember = __dependency1__["default"];
- var meta = __dependency2__.meta;
+ var metaFor = __dependency2__.meta;
var typeOf = __dependency2__.typeOf;
var o_defineProperty = __dependency3__.defineProperty;
var hasPropertyAccessors = __dependency3__.hasPropertyAccessors;
var MANDATORY_SETTER_FUNCTION = __dependency4__.MANDATORY_SETTER_FUNCTION;
var DEFAULT_GETTER_FUNCTION = __dependency4__.DEFAULT_GETTER_FUNCTION;
- var metaFor = meta; // utils.js
-
-
function watchKey(obj, keyName, meta) {
// can't watch length on Array - it is special...
if (keyName === 'length' && typeOf(obj) === 'array') { return; }
var m = meta || metaFor(obj), watching = m.watching;
@@ -10870,12 +11224,12 @@
// this x in Y deopts, so keeping it in this function is better;
if (keyName in obj) {
m.values[keyName] = obj[keyName];
o_defineProperty(obj, keyName, {
configurable: true,
- enumerable: Object.prototype.propertyIsEnumerable.call(obj, keyName),
- set: MANDATORY_SETTER_FUNCTION(keyName),
+ enumerable: obj.propertyIsEnumerable(keyName),
+ set: MANDATORY_SETTER_FUNCTION,
get: DEFAULT_GETTER_FUNCTION(keyName)
});
}
};
@@ -10895,11 +11249,11 @@
if (hasPropertyAccessors && keyName in obj) {
o_defineProperty(obj, keyName, {
configurable: true,
- enumerable: Object.prototype.propertyIsEnumerable.call(obj, keyName),
+ enumerable: obj.propertyIsEnumerable(keyName),
set: function(val) {
// redefine to set as enumerable
o_defineProperty(obj, keyName, {
configurable: true,
writable: true,
@@ -10921,16 +11275,14 @@
});
define("ember-metal/watch_path",
["ember-metal/utils","ember-metal/chains","exports"],
function(__dependency1__, __dependency2__, __exports__) {
"use strict";
- var meta = __dependency1__.meta;
+ var metaFor = __dependency1__.meta;
var typeOf = __dependency1__.typeOf;
var ChainNode = __dependency2__.ChainNode;
- var metaFor = meta;
-
// get the chains for the current object. If the current object has
// chains inherited from the proto they will be cloned and reconfigured for
// the current object.
function chainsFor(obj, meta) {
var m = meta || metaFor(obj);
@@ -10978,22 +11330,20 @@
"use strict";
/**
@module ember-metal
*/
- var meta = __dependency1__.meta;
var GUID_KEY = __dependency1__.GUID_KEY;
var typeOf = __dependency1__.typeOf;
var generateGuid = __dependency1__.generateGuid;
var removeChainWatcher = __dependency2__.removeChainWatcher;
var flushPendingChains = __dependency2__.flushPendingChains;
var watchKey = __dependency3__.watchKey;
var unwatchKey = __dependency3__.unwatchKey;
var watchPath = __dependency4__.watchPath;
var unwatchPath = __dependency4__.unwatchPath;
- var metaFor = meta; // utils.js
var isPath = __dependency5__.isPath;
/**
Starts watching a property on an object. Whenever the property changes,
invokes `Ember.propertyWillChange` and `Ember.propertyDidChange`. This is the
@@ -11106,12 +11456,12 @@
}
__exports__.destroy = destroy;
});
define("ember-runtime",
- ["ember-metal","ember-runtime/core","ember-runtime/compare","ember-runtime/copy","ember-runtime/system/namespace","ember-runtime/system/object","ember-runtime/system/tracked_array","ember-runtime/system/subarray","ember-runtime/system/container","ember-runtime/system/application","ember-runtime/system/array_proxy","ember-runtime/system/object_proxy","ember-runtime/system/core_object","ember-runtime/system/each_proxy","ember-runtime/system/native_array","ember-runtime/system/set","ember-runtime/system/string","ember-runtime/system/deferred","ember-runtime/system/lazy_load","ember-runtime/mixins/array","ember-runtime/mixins/comparable","ember-runtime/mixins/copyable","ember-runtime/mixins/enumerable","ember-runtime/mixins/freezable","ember-runtime/mixins/-proxy","ember-runtime/mixins/observable","ember-runtime/mixins/action_handler","ember-runtime/mixins/deferred","ember-runtime/mixins/mutable_enumerable","ember-runtime/mixins/mutable_array","ember-runtime/mixins/target_action_support","ember-runtime/mixins/evented","ember-runtime/mixins/promise_proxy","ember-runtime/mixins/sortable","ember-runtime/computed/array_computed","ember-runtime/computed/reduce_computed","ember-runtime/computed/reduce_computed_macros","ember-runtime/controllers/array_controller","ember-runtime/controllers/object_controller","ember-runtime/controllers/controller","ember-runtime/mixins/controller","ember-runtime/ext/rsvp","ember-runtime/ext/string","ember-runtime/ext/function","exports"],
- function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __dependency8__, __dependency9__, __dependency10__, __dependency11__, __dependency12__, __dependency13__, __dependency14__, __dependency15__, __dependency16__, __dependency17__, __dependency18__, __dependency19__, __dependency20__, __dependency21__, __dependency22__, __dependency23__, __dependency24__, __dependency25__, __dependency26__, __dependency27__, __dependency28__, __dependency29__, __dependency30__, __dependency31__, __dependency32__, __dependency33__, __dependency34__, __dependency35__, __dependency36__, __dependency37__, __dependency38__, __dependency39__, __dependency40__, __dependency41__, __dependency42__, __dependency43__, __dependency44__, __exports__) {
+ ["ember-metal","ember-runtime/core","ember-runtime/compare","ember-runtime/copy","ember-runtime/inject","ember-runtime/system/namespace","ember-runtime/system/object","ember-runtime/system/tracked_array","ember-runtime/system/subarray","ember-runtime/system/container","ember-runtime/system/array_proxy","ember-runtime/system/object_proxy","ember-runtime/system/core_object","ember-runtime/system/each_proxy","ember-runtime/system/native_array","ember-runtime/system/set","ember-runtime/system/string","ember-runtime/system/deferred","ember-runtime/system/lazy_load","ember-runtime/mixins/array","ember-runtime/mixins/comparable","ember-runtime/mixins/copyable","ember-runtime/mixins/enumerable","ember-runtime/mixins/freezable","ember-runtime/mixins/-proxy","ember-runtime/mixins/observable","ember-runtime/mixins/action_handler","ember-runtime/mixins/deferred","ember-runtime/mixins/mutable_enumerable","ember-runtime/mixins/mutable_array","ember-runtime/mixins/target_action_support","ember-runtime/mixins/evented","ember-runtime/mixins/promise_proxy","ember-runtime/mixins/sortable","ember-runtime/computed/array_computed","ember-runtime/computed/reduce_computed","ember-runtime/computed/reduce_computed_macros","ember-runtime/controllers/array_controller","ember-runtime/controllers/object_controller","ember-runtime/controllers/controller","ember-runtime/mixins/controller","ember-runtime/system/service","ember-runtime/ext/rsvp","ember-runtime/ext/string","ember-runtime/ext/function","exports"],
+ function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __dependency8__, __dependency9__, __dependency10__, __dependency11__, __dependency12__, __dependency13__, __dependency14__, __dependency15__, __dependency16__, __dependency17__, __dependency18__, __dependency19__, __dependency20__, __dependency21__, __dependency22__, __dependency23__, __dependency24__, __dependency25__, __dependency26__, __dependency27__, __dependency28__, __dependency29__, __dependency30__, __dependency31__, __dependency32__, __dependency33__, __dependency34__, __dependency35__, __dependency36__, __dependency37__, __dependency38__, __dependency39__, __dependency40__, __dependency41__, __dependency42__, __dependency43__, __dependency44__, __dependency45__, __exports__) {
"use strict";
/**
Ember Runtime
@module ember
@@ -11122,17 +11472,17 @@
// BEGIN IMPORTS
var Ember = __dependency1__["default"];
var isEqual = __dependency2__.isEqual;
var compare = __dependency3__["default"];
var copy = __dependency4__["default"];
+ var inject = __dependency5__["default"];
- var Namespace = __dependency5__["default"];
- var EmberObject = __dependency6__["default"];
- var TrackedArray = __dependency7__["default"];
- var SubArray = __dependency8__["default"];
- var Container = __dependency9__["default"];
- var Application = __dependency10__["default"];
+ var Namespace = __dependency6__["default"];
+ var EmberObject = __dependency7__["default"];
+ var TrackedArray = __dependency8__["default"];
+ var SubArray = __dependency9__["default"];
+ var Container = __dependency10__["default"];
var ArrayProxy = __dependency11__["default"];
var ObjectProxy = __dependency12__["default"];
var CoreObject = __dependency13__["default"];
var EachArray = __dependency14__.EachArray;
var EachProxy = __dependency14__.EachProxy;
@@ -11185,21 +11535,27 @@
var ArrayController = __dependency38__["default"];
var ObjectController = __dependency39__["default"];
var Controller = __dependency40__["default"];
var ControllerMixin = __dependency41__["default"];
- var RSVP = __dependency42__["default"];
+ var Service = __dependency42__["default"];
+
+ var RSVP = __dependency43__["default"];
// just for side effect of extending Ember.RSVP
// just for side effect of extending String.prototype
// just for side effect of extending Function.prototype
// END IMPORTS
// BEGIN EXPORTS
Ember.compare = compare;
Ember.copy = copy;
Ember.isEqual = isEqual;
+ if (Ember.FEATURES.isEnabled('ember-metal-injected-properties')) {
+ Ember.inject = inject;
+ }
+
Ember.Array = EmberArray;
Ember.Comparable = Comparable;
Ember.Copyable = Copyable;
@@ -11267,10 +11623,14 @@
Ember.ArrayController = ArrayController;
Ember.ObjectController = ObjectController;
Ember.Controller = Controller;
Ember.ControllerMixin = ControllerMixin;
+ if (Ember.FEATURES.isEnabled('ember-metal-injected-properties')) {
+ Ember.Service = Service;
+ }
+
Ember._ProxyMixin = _ProxyMixin;
Ember.RSVP = RSVP;
// END EXPORTS
@@ -11393,11 +11753,10 @@
define("ember-runtime/computed/array_computed",
["ember-metal/core","ember-runtime/computed/reduce_computed","ember-metal/enumerable_utils","ember-metal/platform","ember-metal/observer","ember-metal/error","exports"],
function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __exports__) {
"use strict";
var Ember = __dependency1__["default"];
- var reduceComputed = __dependency2__.reduceComputed;
var ReduceComputedProperty = __dependency2__.ReduceComputedProperty;
var forEach = __dependency3__.forEach;
var o_create = __dependency4__.create;
var addObserver = __dependency5__.addObserver;
var EmberError = __dependency6__["default"];
@@ -11582,36 +11941,34 @@
__exports__.arrayComputed = arrayComputed;
__exports__.ArrayComputedProperty = ArrayComputedProperty;
});
define("ember-runtime/computed/reduce_computed",
- ["ember-metal/core","ember-metal/property_get","ember-metal/property_set","ember-metal/utils","ember-metal/error","ember-metal/property_events","ember-metal/expand_properties","ember-metal/observer","ember-metal/computed","ember-metal/platform","ember-metal/enumerable_utils","ember-runtime/system/tracked_array","ember-runtime/mixins/array","ember-metal/run_loop","exports"],
- function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __dependency8__, __dependency9__, __dependency10__, __dependency11__, __dependency12__, __dependency13__, __dependency14__, __exports__) {
+ ["ember-metal/core","ember-metal/property_get","ember-metal/utils","ember-metal/error","ember-metal/property_events","ember-metal/expand_properties","ember-metal/observer","ember-metal/computed","ember-metal/platform","ember-metal/enumerable_utils","ember-runtime/system/tracked_array","ember-runtime/mixins/array","ember-metal/run_loop","exports"],
+ function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __dependency8__, __dependency9__, __dependency10__, __dependency11__, __dependency12__, __dependency13__, __exports__) {
"use strict";
var Ember = __dependency1__["default"];
// Ember.assert
var e_get = __dependency2__.get;
- var set = __dependency3__.set;
- var guidFor = __dependency4__.guidFor;
- var metaFor = __dependency4__.meta;
- var EmberError = __dependency5__["default"];
- var propertyWillChange = __dependency6__.propertyWillChange;
- var propertyDidChange = __dependency6__.propertyDidChange;
- var expandProperties = __dependency7__["default"];
- var addObserver = __dependency8__.addObserver;
- var observersFor = __dependency8__.observersFor;
- var removeObserver = __dependency8__.removeObserver;
- var addBeforeObserver = __dependency8__.addBeforeObserver;
- var removeBeforeObserver = __dependency8__.removeBeforeObserver;
- var ComputedProperty = __dependency9__.ComputedProperty;
- var cacheFor = __dependency9__.cacheFor;
- var o_create = __dependency10__.create;
- var forEach = __dependency11__.forEach;
- var TrackedArray = __dependency12__["default"];
- var EmberArray = __dependency13__["default"];
- var run = __dependency14__["default"];
- var isArray = __dependency4__.isArray;
+ var guidFor = __dependency3__.guidFor;
+ var metaFor = __dependency3__.meta;
+ var EmberError = __dependency4__["default"];
+ var propertyWillChange = __dependency5__.propertyWillChange;
+ var propertyDidChange = __dependency5__.propertyDidChange;
+ var expandProperties = __dependency6__["default"];
+ var addObserver = __dependency7__.addObserver;
+ var removeObserver = __dependency7__.removeObserver;
+ var addBeforeObserver = __dependency7__.addBeforeObserver;
+ var removeBeforeObserver = __dependency7__.removeBeforeObserver;
+ var ComputedProperty = __dependency8__.ComputedProperty;
+ var cacheFor = __dependency8__.cacheFor;
+ var o_create = __dependency9__.create;
+ var forEach = __dependency10__.forEach;
+ var TrackedArray = __dependency11__["default"];
+ var EmberArray = __dependency12__["default"];
+ var run = __dependency13__["default"];
+ var isArray = __dependency3__.isArray;
var cacheSet = cacheFor.set;
var cacheGet = cacheFor.get;
var cacheRemove = cacheFor.remove;
var a_slice = [].slice;
@@ -11859,11 +12216,10 @@
changeMeta = new ChangeMeta(dependentArray, item, itemIndex, this.instanceMeta.propertyName, this.cp, normalizedRemoveCount);
this.setValue(removedItem.call(
this.instanceMeta.context, this.getValue(), item, changeMeta, this.instanceMeta.sugarMeta));
}
- this.callbacks.flushedChanges.call(this.instanceMeta.context, this.getValue(), this.instanceMeta.sugarMeta);
},
dependentArrayDidChange: function (dependentArray, index, removedCount, addedCount) {
if (this.suspended) { return; }
@@ -11891,11 +12247,11 @@
changeMeta = new ChangeMeta(dependentArray, item, normalizedIndex + sliceIndex, this.instanceMeta.propertyName, this.cp, addedCount);
this.setValue(addedItem.call(
this.instanceMeta.context, this.getValue(), item, changeMeta, this.instanceMeta.sugarMeta));
}, this);
- this.callbacks.flushedChanges.call(this.instanceMeta.context, this.getValue(), this.instanceMeta.sugarMeta);
+
this.trackAdd(dependentKey, normalizedIndex, observerContexts);
},
itemPropertyWillChange: function (obj, keyName, array, observerContext) {
var guid = guidFor(obj);
@@ -11935,11 +12291,10 @@
this.setValue(
this.callbacks.addedItem.call(this.instanceMeta.context, this.getValue(), c.obj, changeMeta, this.instanceMeta.sugarMeta));
}
this.changedItems = {};
- this.callbacks.flushedChanges.call(this.instanceMeta.context, this.getValue(), this.instanceMeta.sugarMeta);
}
};
function normalizeIndex(index, length, newItemsOffset) {
if (index < 0) {
@@ -11972,15 +12327,13 @@
function addItems(dependentArray, callbacks, cp, propertyName, meta) {
forEach(dependentArray, function (item, index) {
meta.setValue( callbacks.addedItem.call(
this, meta.getValue(), item, new ChangeMeta(dependentArray, item, index, propertyName, cp, dependentArray.length), meta.sugarMeta));
}, this);
- callbacks.flushedChanges.call(this, meta.getValue(), meta.sugarMeta);
}
function reset(cp, propertyName) {
- var callbacks = cp._callbacks();
var hadMeta = cp._hasInstanceMeta(this, propertyName);
var meta = cp._instanceMeta(this, propertyName);
if (hadMeta) { meta.setValue(cp.resetValue(meta.getValue())); }
@@ -12076,11 +12429,10 @@
// coalesce by, in addition to the target and method.
run.once(this, recompute, propertyName);
};
var recompute = function(propertyName) {
- var dependentKeys = cp._dependentKeys;
var meta = cp._instanceMeta(this, propertyName);
var callbacks = cp._callbacks();
reset.call(this, cp, propertyName);
@@ -12150,12 +12502,11 @@
if (!this.callbacks) {
var options = this.options;
this.callbacks = {
removedItem: options.removedItem || defaultCallback,
- addedItem: options.addedItem || defaultCallback,
- flushedChanges: options.flushedChanges || defaultCallback
+ addedItem: options.addedItem || defaultCallback
};
}
return this.callbacks;
};
@@ -12203,11 +12554,11 @@
ReduceComputedProperty.prototype.property = function () {
var cp = this;
var args = a_slice.call(arguments);
var propertyArgs = {};
- var match, dependentArrayKey, itemPropertyKey;
+ var match, dependentArrayKey;
forEach(args, function (dependentKey) {
if (doubleEachPropertyPattern.test(dependentKey)) {
throw new EmberError('Nested @each properties not supported: ' + dependentKey);
} else if (match = eachPropertyPattern.exec(dependentKey)) {
@@ -12444,33 +12795,34 @@
}
__exports__.reduceComputed = reduceComputed;
});
define("ember-runtime/computed/reduce_computed_macros",
- ["ember-metal/core","ember-metal/property_get","ember-metal/property_set","ember-metal/utils","ember-metal/error","ember-metal/enumerable_utils","ember-metal/run_loop","ember-metal/observer","ember-runtime/computed/array_computed","ember-runtime/computed/reduce_computed","ember-runtime/system/subarray","ember-metal/keys","ember-runtime/compare","exports"],
- function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __dependency8__, __dependency9__, __dependency10__, __dependency11__, __dependency12__, __dependency13__, __exports__) {
+ ["ember-metal/core","ember-metal/merge","ember-metal/property_get","ember-metal/utils","ember-metal/error","ember-metal/enumerable_utils","ember-metal/run_loop","ember-metal/observer","ember-runtime/computed/array_computed","ember-runtime/computed/reduce_computed","ember-runtime/system/object_proxy","ember-runtime/system/subarray","ember-metal/keys","ember-runtime/compare","exports"],
+ function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __dependency8__, __dependency9__, __dependency10__, __dependency11__, __dependency12__, __dependency13__, __dependency14__, __exports__) {
"use strict";
/**
@module ember
@submodule ember-runtime
*/
var Ember = __dependency1__["default"];
// Ember.assert
- var get = __dependency2__.get;
- var set = __dependency3__.set;
+ var merge = __dependency2__["default"];
+ var get = __dependency3__.get;
var isArray = __dependency4__.isArray;
var guidFor = __dependency4__.guidFor;
var EmberError = __dependency5__["default"];
var forEach = __dependency6__.forEach;
var run = __dependency7__["default"];
var addObserver = __dependency8__.addObserver;
var arrayComputed = __dependency9__.arrayComputed;
var reduceComputed = __dependency10__.reduceComputed;
- var SubArray = __dependency11__["default"];
- var keys = __dependency12__["default"];
- var compare = __dependency13__["default"];
+ var ObjectProxy = __dependency11__["default"];
+ var SubArray = __dependency12__["default"];
+ var keys = __dependency13__["default"];
+ var compare = __dependency14__["default"];
var a_slice = [].slice;
/**
A computed property that returns the sum of the value
@@ -12933,11 +13285,10 @@
},
removedItem: function(array, item, changeMeta, instanceMeta) {
var itemGuid = guidFor(item);
var dependentGuid = guidFor(changeMeta.arrayChanged);
- var numberOfDependentArrays = changeMeta.property._dependentKeys.length;
var numberOfArraysItemAppearsIn;
var itemCounts = instanceMeta.itemCounts;
if (itemCounts[itemGuid][dependentGuid] === undefined) {
itemCounts[itemGuid][dependentGuid] = 0;
@@ -13046,12 +13397,12 @@
}
mid = low + Math.floor((high - low) / 2);
midItem = array.objectAt(mid);
- guidMid = guidFor(midItem);
- guidItem = guidFor(item);
+ guidMid = _guidFor(midItem);
+ guidItem = _guidFor(item);
if (guidMid === guidItem) {
return mid;
}
@@ -13067,13 +13418,23 @@
} else if (res > 0) {
return this.binarySearch(array, item, low, mid);
}
return mid;
+
+ function _guidFor(item) {
+ if (SearchProxy.detectInstance(item)) {
+ return guidFor(get(item, 'content'));
+ }
+
+ return guidFor(item);
+ }
}
+ var SearchProxy = ObjectProxy.extend();
+
/**
A computed property which returns a new array with all the
properties from the first dependent array sorted based on a property
or sort function.
@@ -13138,65 +13499,29 @@
*/
function sort(itemsKey, sortDefinition) {
Ember.assert('Ember.computed.sort requires two arguments: an array key to sort and ' +
'either a sort properties key or sort function', arguments.length === 2);
+ var initFn, sortPropertiesKey;
+
if (typeof sortDefinition === 'function') {
- return customSort(itemsKey, sortDefinition);
+ initFn = function (array, changeMeta, instanceMeta) {
+ instanceMeta.order = sortDefinition;
+ instanceMeta.binarySearch = binarySearch;
+ };
} else {
- return propertySort(itemsKey, sortDefinition);
- }
- }
+ sortPropertiesKey = sortDefinition;
- __exports__.sort = sort;function customSort(itemsKey, comparator) {
- return arrayComputed(itemsKey, {
- initialize: function (array, changeMeta, instanceMeta) {
- instanceMeta.order = comparator;
- instanceMeta.binarySearch = binarySearch;
- instanceMeta.waitingInsertions = [];
- instanceMeta.insertWaiting = function() {
- var index, item;
- var waiting = instanceMeta.waitingInsertions;
- instanceMeta.waitingInsertions = [];
- for (var i=0; i<waiting.length; i++) {
- item = waiting[i];
- index = instanceMeta.binarySearch(array, item);
- array.insertAt(index, item);
- }
- };
- instanceMeta.insertLater = function(item) {
- this.waitingInsertions.push(item);
- };
- },
-
- addedItem: function (array, item, changeMeta, instanceMeta) {
- instanceMeta.insertLater(item);
- return array;
- },
-
- removedItem: function (array, item, changeMeta, instanceMeta) {
- array.removeObject(item);
- return array;
- },
-
- flushedChanges: function(array, instanceMeta) {
- instanceMeta.insertWaiting();
- }
- });
- }
-
- function propertySort(itemsKey, sortPropertiesKey) {
- return arrayComputed(itemsKey, {
- initialize: function (array, changeMeta, instanceMeta) {
+ initFn = function (array, changeMeta, instanceMeta) {
function setupSortProperties() {
var sortPropertyDefinitions = get(this, sortPropertiesKey);
var sortProperties = instanceMeta.sortProperties = [];
var sortPropertyAscending = instanceMeta.sortPropertyAscending = {};
var sortProperty, idx, asc;
Ember.assert('Cannot sort: \'' + sortPropertiesKey + '\' is not an array.',
- isArray(sortPropertyDefinitions));
+ isArray(sortPropertyDefinitions));
changeMeta.property.clearItemPropertyKeys(itemsKey);
forEach(sortPropertyDefinitions, function (sortPropertyDefinition) {
if ((idx = sortPropertyDefinition.indexOf(':')) !== -1) {
@@ -13226,89 +13551,79 @@
addObserver(this, sortPropertiesKey, updateSortPropertiesOnce);
setupSortProperties.call(this);
instanceMeta.order = function (itemA, itemB) {
+ var isProxy = itemB instanceof SearchProxy;
var sortProperty, result, asc;
- var keyA = this.keyFor(itemA);
- var keyB = this.keyFor(itemB);
for (var i = 0; i < this.sortProperties.length; ++i) {
sortProperty = this.sortProperties[i];
+ result = compare(get(itemA, sortProperty), isProxy ? itemB[sortProperty] : get(itemB, sortProperty));
- result = compare(keyA[sortProperty], keyB[sortProperty]);
-
if (result !== 0) {
asc = this.sortPropertyAscending[sortProperty];
return asc ? result : (-1 * result);
}
}
return 0;
};
instanceMeta.binarySearch = binarySearch;
- setupKeyCache(instanceMeta);
- },
+ };
+ }
+ return arrayComputed(itemsKey, {
+ initialize: initFn,
+
addedItem: function (array, item, changeMeta, instanceMeta) {
var index = instanceMeta.binarySearch(array, item);
array.insertAt(index, item);
+
return array;
},
removedItem: function (array, item, changeMeta, instanceMeta) {
- var index = instanceMeta.binarySearch(array, item);
+ var proxyProperties, index, searchItem;
+
+ if (changeMeta.previousValues) {
+ proxyProperties = merge({ content: item }, changeMeta.previousValues);
+
+ searchItem = SearchProxy.create(proxyProperties);
+ } else {
+ searchItem = item;
+ }
+
+ index = instanceMeta.binarySearch(array, searchItem);
array.removeAt(index);
- instanceMeta.dropKeyFor(item);
+
return array;
}
});
}
- function setupKeyCache(instanceMeta) {
- instanceMeta.keyFor = function(item) {
- var guid = guidFor(item);
- if (this.keyCache[guid]) {
- return this.keyCache[guid];
- }
- var sortProperty;
- var key = {};
- for (var i = 0; i < this.sortProperties.length; ++i) {
- sortProperty = this.sortProperties[i];
- key[sortProperty] = get(item, sortProperty);
- }
- return this.keyCache[guid] = key;
- };
-
- instanceMeta.dropKeyFor = function(item) {
- var guid = guidFor(item);
- this.keyCache[guid] = null;
- };
-
- instanceMeta.keyCache = {};
- }
+ __exports__.sort = sort;
});
define("ember-runtime/controllers/array_controller",
- ["ember-metal/core","ember-metal/property_get","ember-metal/property_set","ember-metal/enumerable_utils","ember-runtime/system/array_proxy","ember-runtime/mixins/sortable","ember-runtime/mixins/controller","ember-metal/computed","ember-metal/error","exports"],
- function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __dependency8__, __dependency9__, __exports__) {
+ ["ember-metal/core","ember-metal/property_get","ember-metal/enumerable_utils","ember-runtime/system/array_proxy","ember-runtime/mixins/sortable","ember-runtime/mixins/controller","ember-metal/computed","ember-metal/error","exports"],
+ function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __dependency8__, __exports__) {
"use strict";
/**
@module ember
@submodule ember-runtime
*/
var Ember = __dependency1__["default"];
var get = __dependency2__.get;
- var set = __dependency3__.set;
- var forEach = __dependency4__.forEach;
- var replace = __dependency4__.replace;
- var ArrayProxy = __dependency5__["default"];
- var SortableMixin = __dependency6__["default"];
- var ControllerMixin = __dependency7__["default"];
- var computed = __dependency8__.computed;
- var EmberError = __dependency9__["default"];
+ var forEach = __dependency3__.forEach;
+ var replace = __dependency3__.replace;
+ var ArrayProxy = __dependency4__["default"];
+ var SortableMixin = __dependency5__["default"];
+ var ControllerMixin = __dependency6__["default"];
+ var computed = __dependency7__.computed;
+ var EmberError = __dependency8__["default"];
/**
`Ember.ArrayController` provides a way for you to publish a collection of
objects so that you can easily bind to the collection from a Handlebars
@@ -13531,11 +13846,32 @@
parentController = get(this, 'parentController');
} else {
parentController = this;
}
-
+ if (Ember.FEATURES.isEnabled("ember-runtime-item-controller-inline-class")) {
+ options = {
+ target: parentController,
+ parentController: parentController,
+ model: object
+ };
+
+ if (typeof controllerClass === 'string') {
+ fullName = 'controller:' + controllerClass;
+
+ if (!container.has(fullName)) {
+ throw new EmberError('Could not resolve itemController: "' + controllerClass + '"');
+ }
+
+ subControllerFactory = container.lookupFactory(fullName);
+ } else {
+ subControllerFactory = controllerClass;
+ options.container = container;
+ }
+
+ subController = subControllerFactory.create(options);
+ } else {
fullName = 'controller:' + controllerClass;
if (!container.has(fullName)) {
throw new EmberError('Could not resolve itemController: "' + controllerClass + '"');
}
@@ -13543,11 +13879,11 @@
subController = container.lookupFactory(fullName).create({
target: parentController,
parentController: parentController,
model: object
});
-
+ }
subControllers[idx] = subController;
return subController;
},
@@ -13576,15 +13912,18 @@
this._super();
}
});
});
define("ember-runtime/controllers/controller",
- ["ember-runtime/system/object","ember-runtime/mixins/controller","exports"],
- function(__dependency1__, __dependency2__, __exports__) {
+ ["ember-metal/core","ember-runtime/system/object","ember-runtime/mixins/controller","ember-runtime/inject","exports"],
+ function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __exports__) {
"use strict";
- var EmberObject = __dependency1__["default"];
- var Mixin = __dependency2__["default"];
+ var Ember = __dependency1__["default"];
+ // Ember.assert
+ var EmberObject = __dependency2__["default"];
+ var Mixin = __dependency3__["default"];
+ var createInjectionHelper = __dependency4__.createInjectionHelper;
/**
@module ember
@submodule ember-runtime
*/
@@ -13593,11 +13932,49 @@
@class Controller
@namespace Ember
@extends Ember.Object
@uses Ember.ControllerMixin
*/
- __exports__["default"] = EmberObject.extend(Mixin);
+ var Controller = EmberObject.extend(Mixin);
+
+ if (Ember.FEATURES.isEnabled('ember-metal-injected-properties')) {
+ /**
+ Creates a property that lazily looks up another controller in the container.
+ Can only be used when defining another controller.
+
+ Example:
+
+ ```javascript
+ App.PostController = Ember.Controller.extend({
+ posts: Ember.inject.controller()
+ });
+ ```
+
+ This example will create a `posts` property on the `post` controller that
+ looks up the `posts` controller in the container, making it easy to
+ reference other controllers. This is functionally equivalent to:
+
+ ```javascript
+ App.PostController = Ember.Controller.extend({
+ needs: 'posts',
+ posts: Ember.computed.alias('controllers.posts')
+ });
+ ```
+
+ @method inject.controller
+ @for Ember
+ @param {String} name (optional) name of the controller to inject, defaults
+ to the property's name
+ @return {Ember.InjectedProperty} injection descriptor instance
+ */
+ createInjectionHelper('controller', function(factory) {
+ Ember.assert("Defining an injected controller property on a " +
+ "non-controller is not allowed.", Controller.detect(factory));
+ });
+ }
+
+ __exports__["default"] = Controller;
});
define("ember-runtime/controllers/object_controller",
["ember-runtime/mixins/controller","ember-runtime/system/object_proxy","exports"],
function(__dependency1__, __dependency2__, __exports__) {
"use strict";
@@ -13979,20 +14356,25 @@
return this;
};
}
});
define("ember-runtime/ext/rsvp",
- ["ember-metal/core","ember-metal/logger","ember-metal/run_loop","exports"],
- function(__dependency1__, __dependency2__, __dependency3__, __exports__) {
+ ["ember-metal/core","ember-metal/logger","ember-metal/run_loop","rsvp","exports"],
+ function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __exports__) {
"use strict";
/* globals RSVP:true */
var Ember = __dependency1__["default"];
var Logger = __dependency2__["default"];
var run = __dependency3__["default"];
- var RSVP = requireModule('rsvp');
+ // this is technically incorrect (per @wycats)
+ // it should be `import * as RSVP from 'rsvp';` but
+ // Esprima does not support this syntax yet (and neither does
+ // es6-module-transpiler 0.4.0 - 0.6.2).
+ var RSVP = __dependency4__;
+
var testModuleName = 'ember-testing/test';
var Test;
var asyncStart = function() {
if (Ember.Test && Ember.Test.adapter) {
@@ -14162,13 +14544,97 @@
StringPrototype.capitalize = function () {
return capitalize(this);
};
}
});
+define("ember-runtime/inject",
+ ["ember-metal/core","ember-metal/enumerable_utils","ember-metal/injected_property","ember-metal/keys","exports"],
+ function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __exports__) {
+ "use strict";
+ var Ember = __dependency1__["default"];
+ // Ember.assert
+ var indexOf = __dependency2__.indexOf;
+ var InjectedProperty = __dependency3__["default"];
+ var keys = __dependency4__["default"];
+
+ /**
+ Namespace for injection helper methods.
+
+ @class inject
+ @namespace Ember
+ */
+ function inject() {
+ Ember.assert("Injected properties must be created through helpers, see `" +
+ keys(inject).join("`, `") + "`");
+ }
+
+ // Dictionary of injection validations by type, added to by `createInjectionHelper`
+ var typeValidators = {};
+
+ /**
+ This method allows other Ember modules to register injection helpers for a
+ given container type. Helpers are exported to the `inject` namespace as the
+ container type itself.
+
+ @private
+ @method createInjectionHelper
+ @namespace Ember
+ @param {String} type The container type the helper will inject
+ @param {Function} validator A validation callback that is executed at mixin-time
+ */
+ function createInjectionHelper(type, validator) {
+ typeValidators[type] = validator;
+
+ inject[type] = function(name) {
+ return new InjectedProperty(type, name);
+ };
+ }
+
+ __exports__.createInjectionHelper = createInjectionHelper;/**
+ Validation function intended to be invoked at when extending a factory with
+ injected properties. Runs per-type validation functions once for each injected
+ type encountered.
+
+ Note that this currently modifies the mixin themselves, which is technically
+ dubious but is practically of little consequence. This may change in the
+ future.
+
+ @private
+ @method validatePropertyInjections
+ @namespace Ember
+ @param {Object} factory The factory object being extended
+ @param {Object} props A hash of properties to be added to the factory
+ */
+ function validatePropertyInjections(factory, props) {
+ var types = [];
+ var key, desc, validator, i, l;
+
+ for (key in props) {
+ desc = props[key];
+ if (desc instanceof InjectedProperty && indexOf(types, desc.type) === -1) {
+ types.push(desc.type);
+ }
+ }
+
+ if (types.length) {
+ for (i = 0, l = types.length; i < l; i++) {
+ validator = typeValidators[types[i]];
+
+ if (typeof validator === 'function') {
+ validator(factory);
+ }
+ }
+ }
+
+ return true;
+ }
+
+ __exports__.validatePropertyInjections = validatePropertyInjections;__exports__["default"] = inject;
+ });
define("ember-runtime/mixins/-proxy",
- ["ember-metal/core","ember-metal/property_get","ember-metal/property_set","ember-metal/utils","ember-metal/observer","ember-metal/property_events","ember-metal/computed","ember-metal/properties","ember-metal/mixin","ember-runtime/system/string","ember-runtime/system/object","exports"],
- function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __dependency8__, __dependency9__, __dependency10__, __dependency11__, __exports__) {
+ ["ember-metal/core","ember-metal/property_get","ember-metal/property_set","ember-metal/utils","ember-metal/observer","ember-metal/property_events","ember-metal/computed","ember-metal/properties","ember-metal/mixin","ember-runtime/system/string","exports"],
+ function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __dependency8__, __dependency9__, __dependency10__, __exports__) {
"use strict";
/**
@module ember
@submodule ember-runtime
*/
@@ -14187,11 +14653,10 @@
var computed = __dependency7__.computed;
var defineProperty = __dependency8__.defineProperty;
var Mixin = __dependency9__.Mixin;
var observer = __dependency9__.observer;
var fmt = __dependency10__.fmt;
- var EmberObject = __dependency11__["default"];
function contentPropertyWillChange(content, contentKey) {
var key = contentKey.slice(8); // remove "content."
if (key in this) { return; } // if shadowed in proxy
propertyWillChange(this, key);
@@ -14254,11 +14719,12 @@
defineProperty(this, key, null, value);
return value;
}
var content = get(this, 'content');
- Ember.assert(fmt("Cannot delegate set('%@', %@) to the 'content' property of object proxy %@: its 'content' is undefined.", [key, value, this]), content);
+ Ember.assert(fmt("Cannot delegate set('%@', %@) to the 'content' property of" +
+ " object proxy %@: its 'content' is undefined.", [key, value, this]), content);
return set(content, key, value);
}
});
});
@@ -14420,19 +14886,26 @@
@private
@method willMergeMixin
*/
willMergeMixin: function(props) {
+ if (Ember.FEATURES.isEnabled('ember-metal-injected-properties')) {
+ // Calling super is only OK here since we KNOW that there is another
+ // Mixin loaded first (injection dependency verification)
+ this._super.apply(this, arguments);
+ }
+
var hashName;
if (!props._actions) {
Ember.assert("'actions' should not be a function", typeof(props.actions) !== 'function');
if (typeOf(props.actions) === 'object') {
hashName = 'actions';
} else if (typeOf(props.events) === 'object') {
- Ember.deprecate('Action handlers contained in an `events` object are deprecated in favor of putting them in an `actions` object', false);
+ Ember.deprecate('Action handlers contained in an `events` object are deprecated in favor' +
+ ' of putting them in an `actions` object', false);
hashName = 'events';
}
if (hashName) {
props._actions = merge(props._actions || {}, props[hashName]);
@@ -14482,11 +14955,12 @@
return;
}
}
if (target = get(this, 'target')) {
- Ember.assert("The `target` for " + this + " (" + target + ") does not have a `send` method", typeof target.send === 'function');
+ Ember.assert("The `target` for " + this + " (" + target +
+ ") does not have a `send` method", typeof target.send === 'function');
target.send.apply(target, arguments);
}
}
});
@@ -14504,15 +14978,15 @@
// ..........................................................
// HELPERS
//
var Ember = __dependency1__["default"];
// ES6TODO: Ember.A
+
var get = __dependency2__.get;
var computed = __dependency3__.computed;
var cacheFor = __dependency3__.cacheFor;
var isNone = __dependency4__.isNone;
- var none = __dependency4__.none;
var Enumerable = __dependency5__["default"];
var map = __dependency6__.map;
var Mixin = __dependency7__.Mixin;
var required = __dependency7__.required;
var propertyWillChange = __dependency8__.propertyWillChange;
@@ -15054,21 +15528,17 @@
*/
compare: required(Function)
});
});
define("ember-runtime/mixins/controller",
- ["ember-metal/core","ember-metal/property_get","ember-runtime/system/object","ember-metal/mixin","ember-metal/computed","ember-runtime/mixins/action_handler","ember-runtime/mixins/controller_content_model_alias_deprecation","exports"],
- function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __exports__) {
+ ["ember-metal/mixin","ember-metal/computed","ember-runtime/mixins/action_handler","ember-runtime/mixins/controller_content_model_alias_deprecation","exports"],
+ function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __exports__) {
"use strict";
- var Ember = __dependency1__["default"];
- // Ember.assert, Ember.deprecate
- var get = __dependency2__.get;
- var EmberObject = __dependency3__["default"];
- var Mixin = __dependency4__.Mixin;
- var computed = __dependency5__.computed;
- var ActionHandler = __dependency6__["default"];
- var ControllerContentModelAliasDeprecation = __dependency7__["default"];
+ var Mixin = __dependency1__.Mixin;
+ var computed = __dependency2__.computed;
+ var ActionHandler = __dependency3__["default"];
+ var ControllerContentModelAliasDeprecation = __dependency4__["default"];
/**
`Ember.ControllerMixin` provides a standard interface for all classes that
compose Ember's controller layer: `Ember.Controller`,
`Ember.ArrayController`, and `Ember.ObjectController`.
@@ -15122,17 +15592,16 @@
content: computed.alias('model')
});
});
define("ember-runtime/mixins/controller_content_model_alias_deprecation",
- ["ember-metal/core","ember-metal/property_get","ember-metal/mixin","exports"],
- function(__dependency1__, __dependency2__, __dependency3__, __exports__) {
+ ["ember-metal/core","ember-metal/mixin","exports"],
+ function(__dependency1__, __dependency2__, __exports__) {
"use strict";
var Ember = __dependency1__["default"];
// Ember.deprecate
- var get = __dependency2__.get;
- var Mixin = __dependency3__.Mixin;
+ var Mixin = __dependency2__.Mixin;
/**
The ControllerContentModelAliasDeprecation mixin is used to provide a useful
deprecation warning when specifying `content` directly on a `Ember.Controller`
(without also specifying `model`).
@@ -15181,26 +15650,25 @@
}
}
});
});
define("ember-runtime/mixins/copyable",
- ["ember-metal/property_get","ember-metal/property_set","ember-metal/mixin","ember-runtime/mixins/freezable","ember-runtime/system/string","ember-metal/error","exports"],
- function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __exports__) {
+ ["ember-metal/property_get","ember-metal/mixin","ember-runtime/mixins/freezable","ember-runtime/system/string","ember-metal/error","exports"],
+ function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __exports__) {
"use strict";
/**
@module ember
@submodule ember-runtime
*/
var get = __dependency1__.get;
- var set = __dependency2__.set;
- var required = __dependency3__.required;
- var Freezable = __dependency4__.Freezable;
- var Mixin = __dependency3__.Mixin;
- var fmt = __dependency5__.fmt;
- var EmberError = __dependency6__["default"];
+ var required = __dependency2__.required;
+ var Freezable = __dependency3__.Freezable;
+ var Mixin = __dependency2__.Mixin;
+ var fmt = __dependency4__.fmt;
+ var EmberError = __dependency5__["default"];
/**
Implements some standard methods for copying an object. Add this mixin to
any object you create that can create a copy of itself. This mixin is
@@ -15364,11 +15832,11 @@
var a_slice = Array.prototype.slice;
var contexts = [];
function popCtx() {
- return contexts.length===0 ? {} : contexts.pop();
+ return contexts.length === 0 ? {} : contexts.pop();
}
function pushCtx(ctx) {
contexts.push(ctx);
return null;
@@ -15377,11 +15845,11 @@
function iter(key, value) {
var valueProvided = arguments.length === 2;
function i(item) {
var cur = get(item, key);
- return valueProvided ? value===cur : !!cur;
+ return valueProvided ? value === cur : !!cur;
}
return i;
}
@@ -15468,75 +15936,94 @@
always return the same value each time it is called. If your enumerable
contains only one object, this method should always return that object.
If your enumerable is empty, this method should return `undefined`.
```javascript
- var arr = ["a", "b", "c"];
- arr.get('firstObject'); // "a"
+ var arr = ['a', 'b', 'c'];
+ arr.get('firstObject'); // 'a'
var arr = [];
arr.get('firstObject'); // undefined
```
@property firstObject
@return {Object} the object or undefined
*/
firstObject: computed('[]', function() {
- if (get(this, 'length')===0) return undefined ;
+ if (get(this, 'length') === 0) {
+ return undefined;
+ }
// handle generic enumerables
- var context = popCtx(), ret;
- ret = this.nextObject(0, null, context);
+ var context = popCtx();
+ var ret = this.nextObject(0, null, context);
+
pushCtx(context);
+
return ret;
}),
/**
Helper method returns the last object from a collection. If your enumerable
contains only one object, this method should always return that object.
If your enumerable is empty, this method should return `undefined`.
```javascript
- var arr = ["a", "b", "c"];
- arr.get('lastObject'); // "c"
+ var arr = ['a', 'b', 'c'];
+ arr.get('lastObject'); // 'c'
var arr = [];
arr.get('lastObject'); // undefined
```
@property lastObject
@return {Object} the last object or undefined
*/
lastObject: computed('[]', function() {
var len = get(this, 'length');
- if (len===0) return undefined ;
- var context = popCtx(), idx=0, cur, last = null;
+
+ if (len === 0) {
+ return undefined;
+ }
+
+ var context = popCtx();
+ var idx = 0;
+ var last = null;
+ var cur;
+
do {
last = cur;
cur = this.nextObject(idx++, last, context);
} while (cur !== undefined);
+
pushCtx(context);
+
return last;
}),
/**
Returns `true` if the passed object can be found in the receiver. The
default version will iterate through the enumerable until the object
is found. You may want to override this with a more efficient version.
```javascript
- var arr = ["a", "b", "c"];
- arr.contains("a"); // true
- arr.contains("z"); // false
+ var arr = ['a', 'b', 'c'];
+
+ arr.contains('a'); // true
+ arr.contains('z'); // false
```
@method contains
@param {Object} obj The object to search for.
@return {Boolean} `true` if object is found in enumerable.
*/
contains: function(obj) {
- return this.find(function(item) { return item===obj; }) !== undefined;
+ var found = this.find(function(item) {
+ return item === obj;
+ });
+
+ return found !== undefined;
},
/**
Iterates through the enumerable, calling the passed function on each
item. This method corresponds to the `forEach()` method defined in
@@ -15561,22 +16048,31 @@
@param {Function} callback The callback to execute
@param {Object} [target] The target object to use
@return {Object} receiver
*/
forEach: function(callback, target) {
- if (typeof callback !== 'function') throw new TypeError() ;
- var len = get(this, 'length'), last = null, context = popCtx();
+ if (typeof callback !== 'function') {
+ throw new TypeError();
+ }
- if (target === undefined) target = null;
+ var context = popCtx();
+ var len = get(this, 'length');
+ var last = null;
- for(var idx=0;idx<len;idx++) {
+ if (target === undefined) {
+ target = null;
+ }
+
+ for(var idx = 0; idx < len; idx++) {
var next = this.nextObject(idx, last, context) ;
callback.call(target, next, idx, this);
last = next ;
}
+
last = null ;
context = pushCtx(context);
+
return this ;
},
/**
Alias for `mapBy`
@@ -15632,13 +16128,15 @@
@param {Object} [target] The target object to use
@return {Array} The mapped array.
*/
map: function(callback, target) {
var ret = Ember.A();
+
this.forEach(function(x, idx, i) {
ret[idx] = callback.call(target, x, idx,i);
});
+
return ret ;
},
/**
Similar to map, this specialized function returns the value of the named
@@ -15694,13 +16192,17 @@
@param {Object} [target] The target object to use
@return {Array} A filtered array.
*/
filter: function(callback, target) {
var ret = Ember.A();
+
this.forEach(function(x, idx, i) {
- if (callback.call(target, x, idx, i)) ret.push(x);
+ if (callback.call(target, x, idx, i)) {
+ ret.push(x);
+ }
});
+
return ret ;
},
/**
Returns an array with all of the items in the enumeration where the passed
@@ -15770,12 +16272,18 @@
@param {String} key the property to test
@param {String} [value] optional value to test against.
@return {Array} rejected array
*/
rejectBy: function(key, value) {
- var exactValue = function(item) { return get(item, key) === value; };
- var hasValue = function(item) { return !!get(item, key); };
+ var exactValue = function(item) {
+ return get(item, key) === value;
+ };
+
+ var hasValue = function(item) {
+ return !!get(item, key);
+ };
+
var use = (arguments.length === 2 ? exactValue : hasValue);
return this.reject(use);
},
@@ -15819,23 +16327,35 @@
@param {Function} callback The callback to execute
@param {Object} [target] The target object to use
@return {Object} Found item or `undefined`.
*/
find: function(callback, target) {
- var len = get(this, 'length') ;
- if (target === undefined) target = null;
+ var len = get(this, 'length');
- var last = null, next, found = false, ret ;
+ if (target === undefined) {
+ target = null;
+ }
+
var context = popCtx();
- for(var idx=0;idx<len && !found;idx++) {
- next = this.nextObject(idx, last, context) ;
- if (found = callback.call(target, next, idx, this)) ret = next ;
- last = next ;
+ var found = false;
+ var last = null;
+ var next, ret;
+
+ for(var idx = 0; idx < len && !found; idx++) {
+ next = this.nextObject(idx, last, context);
+
+ if (found = callback.call(target, next, idx, this)) {
+ ret = next;
+ }
+
+ last = next;
}
- next = last = null ;
+
+ next = last = null;
context = pushCtx(context);
- return ret ;
+
+ return ret;
},
/**
Returns the first item with a property matching the passed value. You
can pass an optional second argument with the target value. Otherwise
@@ -15889,11 +16409,13 @@
to give your iterator function access to the current object.
Example Usage:
```javascript
- if (people.every(isEngineer)) { Paychecks.addBigBonus(); }
+ if (people.every(isEngineer)) {
+ Paychecks.addBigBonus();
+ }
```
@method every
@param {Function} callback The callback to execute
@param {Object} [target] The target object to use
@@ -15960,26 +16482,30 @@
to give your iterator function access to the current object.
Usage Example:
```javascript
- if (people.any(isManager)) { Paychecks.addBiggerBonus(); }
+ if (people.any(isManager)) {
+ Paychecks.addBiggerBonus();
+ }
```
@method any
@param {Function} callback The callback to execute
@param {Object} [target] The target object to use
@return {Boolean} `true` if the passed function returns `true` for any item
*/
any: function(callback, target) {
- var len = get(this, 'length');
+ var len = get(this, 'length');
var context = popCtx();
- var found = false;
- var last = null;
+ var found = false;
+ var last = null;
var next, idx;
- if (target === undefined) { target = null; }
+ if (target === undefined) {
+ target = null;
+ }
for (idx = 0; idx < len && !found; idx++) {
next = this.nextObject(idx, last, context);
found = callback.call(target, next, idx, this);
last = next;
@@ -16013,11 +16539,13 @@
to give your iterator function access to the current object.
Usage Example:
```javascript
- if (people.some(isManager)) { Paychecks.addBiggerBonus(); }
+ if (people.some(isManager)) {
+ Paychecks.addBiggerBonus();
+ }
```
@method some
@param {Function} callback The callback to execute
@param {Object} [target] The target object to use
@@ -16090,11 +16618,13 @@
@param {Object} initialValue Initial value for the reduce
@param {String} reducerProperty internal use only.
@return {Object} The reduced value.
*/
reduce: function(callback, initialValue, reducerProperty) {
- if (typeof callback !== "function") { throw new TypeError(); }
+ if (typeof callback !== 'function') {
+ throw new TypeError();
+ }
var ret = initialValue;
this.forEach(function(item, i) {
ret = callback(ret, item, i, this, reducerProperty);
@@ -16112,15 +16642,20 @@
@param {String} methodName the name of the method
@param {Object...} args optional arguments to pass as well.
@return {Array} return values from calling invoke.
*/
invoke: function(methodName) {
- var args, ret = Ember.A();
- if (arguments.length>1) args = a_slice.call(arguments, 1);
+ var ret = Ember.A();
+ var args;
+ if (arguments.length > 1) {
+ args = a_slice.call(arguments, 1);
+ }
+
this.forEach(function(x, idx) {
var method = x && x[methodName];
+
if ('function' === typeof method) {
ret[idx] = args ? apply(x, method, args) : x[methodName]();
}
}, this);
@@ -16134,69 +16669,88 @@
@method toArray
@return {Array} the enumerable as an array.
*/
toArray: function() {
var ret = Ember.A();
- this.forEach(function(o, idx) { ret[idx] = o; });
+
+ this.forEach(function(o, idx) {
+ ret[idx] = o;
+ });
+
return ret;
},
/**
- Returns a copy of the array with all null and undefined elements removed.
+ Returns a copy of the array with all `null` and `undefined` elements removed.
```javascript
- var arr = ["a", null, "c", undefined];
- arr.compact(); // ["a", "c"]
+ var arr = ['a', null, 'c', undefined];
+ arr.compact(); // ['a', 'c']
```
@method compact
@return {Array} the array without null and undefined elements.
*/
compact: function() {
- return this.filter(function(value) { return value != null; });
+ return this.filter(function(value) {
+ return value != null;
+ });
},
/**
Returns a new enumerable that excludes the passed value. The default
implementation returns an array regardless of the receiver type unless
the receiver does not contain the value.
```javascript
- var arr = ["a", "b", "a", "c"];
- arr.without("a"); // ["b", "c"]
+ var arr = ['a', 'b', 'a', 'c'];
+ arr.without('a'); // ['b', 'c']
```
@method without
@param {Object} value
@return {Ember.Enumerable}
*/
without: function(value) {
- if (!this.contains(value)) return this; // nothing to do
+ if (!this.contains(value)) {
+ return this; // nothing to do
+ }
+
var ret = Ember.A();
+
this.forEach(function(k) {
- if (k !== value) ret[ret.length] = k;
- }) ;
- return ret ;
+ if (k !== value) {
+ ret[ret.length] = k;
+ }
+ });
+
+ return ret;
},
/**
Returns a new enumerable that contains only unique values. The default
implementation returns an array regardless of the receiver type.
```javascript
- var arr = ["a", "a", "b", "b"];
- arr.uniq(); // ["a", "b"]
+ var arr = ['a', 'a', 'b', 'b'];
+ arr.uniq(); // ['a', 'b']
```
+ This only works on primitive data types, e.g. Strings, Numbers, etc.
+
@method uniq
@return {Ember.Enumerable}
*/
uniq: function() {
var ret = Ember.A();
+
this.forEach(function(k) {
- if (indexOf(ret, k)<0) ret.push(k);
+ if (indexOf(ret, k) < 0) {
+ ret.push(k);
+ }
});
+
return ret;
},
/**
This property will trigger anytime the enumerable's content changes.
@@ -16230,14 +16784,21 @@
addEnumerableObserver: function(target, opts) {
var willChange = (opts && opts.willChange) || 'enumerableWillChange';
var didChange = (opts && opts.didChange) || 'enumerableDidChange';
var hasObservers = get(this, 'hasEnumerableObservers');
- if (!hasObservers) propertyWillChange(this, 'hasEnumerableObservers');
+ if (!hasObservers) {
+ propertyWillChange(this, 'hasEnumerableObservers');
+ }
+
addListener(this, '@enumerable:before', target, willChange);
addListener(this, '@enumerable:change', target, didChange);
- if (!hasObservers) propertyDidChange(this, 'hasEnumerableObservers');
+
+ if (!hasObservers) {
+ propertyDidChange(this, 'hasEnumerableObservers');
+ }
+
return this;
},
/**
Removes a registered enumerable observer.
@@ -16248,16 +16809,23 @@
@return this
*/
removeEnumerableObserver: function(target, opts) {
var willChange = (opts && opts.willChange) || 'enumerableWillChange';
var didChange = (opts && opts.didChange) || 'enumerableDidChange';
-
var hasObservers = get(this, 'hasEnumerableObservers');
- if (hasObservers) propertyWillChange(this, 'hasEnumerableObservers');
+
+ if (hasObservers) {
+ propertyWillChange(this, 'hasEnumerableObservers');
+ }
+
removeListener(this, '@enumerable:before', target, willChange);
removeListener(this, '@enumerable:change', target, didChange);
- if (hasObservers) propertyDidChange(this, 'hasEnumerableObservers');
+
+ if (hasObservers) {
+ propertyDidChange(this, 'hasEnumerableObservers');
+ }
+
return this;
},
/**
Becomes true whenever the array currently has observers watching changes
@@ -16282,28 +16850,44 @@
@param {Ember.Enumerable|Number} adding An enumerable of the objects to be
added or the number of items to be added.
@chainable
*/
enumerableContentWillChange: function(removing, adding) {
-
var removeCnt, addCnt, hasDelta;
- if ('number' === typeof removing) removeCnt = removing;
- else if (removing) removeCnt = get(removing, 'length');
- else removeCnt = removing = -1;
+ if ('number' === typeof removing) {
+ removeCnt = removing;
+ } else if (removing) {
+ removeCnt = get(removing, 'length');
+ } else {
+ removeCnt = removing = -1;
+ }
- if ('number' === typeof adding) addCnt = adding;
- else if (adding) addCnt = get(adding,'length');
- else addCnt = adding = -1;
+ if ('number' === typeof adding) {
+ addCnt = adding;
+ } else if (adding) {
+ addCnt = get(adding,'length');
+ } else {
+ addCnt = adding = -1;
+ }
- hasDelta = addCnt<0 || removeCnt<0 || addCnt-removeCnt!==0;
+ hasDelta = addCnt < 0 || removeCnt < 0 || addCnt - removeCnt !== 0;
- if (removing === -1) removing = null;
- if (adding === -1) adding = null;
+ if (removing === -1) {
+ removing = null;
+ }
+ if (adding === -1) {
+ adding = null;
+ }
+
propertyWillChange(this, '[]');
- if (hasDelta) propertyWillChange(this, 'length');
+
+ if (hasDelta) {
+ propertyWillChange(this, 'length');
+ }
+
sendEvent(this, '@enumerable:before', [this, removing, adding]);
return this;
},
@@ -16322,25 +16906,42 @@
@chainable
*/
enumerableContentDidChange: function(removing, adding) {
var removeCnt, addCnt, hasDelta;
- if ('number' === typeof removing) removeCnt = removing;
- else if (removing) removeCnt = get(removing, 'length');
- else removeCnt = removing = -1;
+ if ('number' === typeof removing) {
+ removeCnt = removing;
+ } else if (removing) {
+ removeCnt = get(removing, 'length');
+ } else {
+ removeCnt = removing = -1;
+ }
- if ('number' === typeof adding) addCnt = adding;
- else if (adding) addCnt = get(adding, 'length');
- else addCnt = adding = -1;
+ if ('number' === typeof adding) {
+ addCnt = adding;
+ } else if (adding) {
+ addCnt = get(adding, 'length');
+ } else {
+ addCnt = adding = -1;
+ }
- hasDelta = addCnt<0 || removeCnt<0 || addCnt-removeCnt!==0;
+ hasDelta = addCnt < 0 || removeCnt < 0 || addCnt - removeCnt !== 0;
- if (removing === -1) removing = null;
- if (adding === -1) adding = null;
+ if (removing === -1) {
+ removing = null;
+ }
+ if (adding === -1) {
+ adding = null;
+ }
+
sendEvent(this, '@enumerable:change', [this, removing, adding]);
- if (hasDelta) propertyDidChange(this, 'length');
+
+ if (hasDelta) {
+ propertyDidChange(this, 'length');
+ }
+
propertyDidChange(this, '[]');
return this ;
},
@@ -16355,18 +16956,22 @@
@return {Array} The sorted array.
@since 1.2.0
*/
sortBy: function() {
var sortKeys = arguments;
+
return this.toArray().sort(function(a, b){
for(var i = 0; i < sortKeys.length; i++) {
var key = sortKeys[i];
var propA = get(a, key);
var propB = get(b, key);
// return 1 or -1 else continue to the next sortKey
var compareValue = compare(propA, propB);
- if (compareValue) { return compareValue; }
+
+ if (compareValue) {
+ return compareValue;
+ }
}
return 0;
});
}
});
@@ -16625,12 +17230,12 @@
__exports__.Freezable = Freezable;
var FROZEN_ERROR = "Frozen object cannot be modified.";
__exports__.FROZEN_ERROR = FROZEN_ERROR;
});
define("ember-runtime/mixins/mutable_array",
- ["ember-metal/property_get","ember-metal/property_set","ember-metal/utils","ember-metal/error","ember-metal/mixin","ember-runtime/mixins/array","ember-runtime/mixins/mutable_enumerable","ember-runtime/mixins/enumerable","exports"],
- function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __dependency8__, __exports__) {
+ ["ember-metal/property_get","ember-metal/utils","ember-metal/error","ember-metal/mixin","ember-runtime/mixins/array","ember-runtime/mixins/mutable_enumerable","ember-runtime/mixins/enumerable","exports"],
+ function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __exports__) {
"use strict";
/**
@module ember
@submodule ember-runtime
*/
@@ -16649,18 +17254,17 @@
// ..........................................................
// HELPERS
//
var get = __dependency1__.get;
- var set = __dependency2__.set;
- var isArray = __dependency3__.isArray;
- var EmberError = __dependency4__["default"];
- var Mixin = __dependency5__.Mixin;
- var required = __dependency5__.required;
- var EmberArray = __dependency6__["default"];
- var MutableEnumerable = __dependency7__["default"];
- var Enumerable = __dependency8__["default"];
+ var isArray = __dependency2__.isArray;
+ var EmberError = __dependency3__["default"];
+ var Mixin = __dependency4__.Mixin;
+ var required = __dependency4__.required;
+ var EmberArray = __dependency5__["default"];
+ var MutableEnumerable = __dependency6__["default"];
+ var Enumerable = __dependency7__["default"];
/**
This mixin defines the API for modifying array-like objects. These methods
can be applied only to a collection that keeps its items in an ordered set.
It builds upon the Array mixin and adds methods to modify the array.
Concrete implementations of this class include ArrayProxy and ArrayController.
@@ -17824,32 +18428,31 @@
return promise[name].apply(promise, arguments);
};
}
});
define("ember-runtime/mixins/sortable",
- ["ember-metal/core","ember-metal/property_get","ember-metal/property_set","ember-metal/enumerable_utils","ember-metal/mixin","ember-runtime/mixins/mutable_enumerable","ember-runtime/compare","ember-metal/observer","ember-metal/computed","exports"],
- function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __dependency8__, __dependency9__, __exports__) {
+ ["ember-metal/core","ember-metal/property_get","ember-metal/enumerable_utils","ember-metal/mixin","ember-runtime/mixins/mutable_enumerable","ember-runtime/compare","ember-metal/observer","ember-metal/computed","exports"],
+ function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __dependency8__, __exports__) {
"use strict";
/**
@module ember
@submodule ember-runtime
*/
var Ember = __dependency1__["default"];
// Ember.assert, Ember.A
var get = __dependency2__.get;
- var set = __dependency3__.set;
- var forEach = __dependency4__.forEach;
- var Mixin = __dependency5__.Mixin;
- var MutableEnumerable = __dependency6__["default"];
- var compare = __dependency7__["default"];
- var addObserver = __dependency8__.addObserver;
- var removeObserver = __dependency8__.removeObserver;
- var computed = __dependency9__.computed;
- var beforeObserver = __dependency5__.beforeObserver;
- var observer = __dependency5__.observer;
+ var forEach = __dependency3__.forEach;
+ var Mixin = __dependency4__.Mixin;
+ var MutableEnumerable = __dependency5__["default"];
+ var compare = __dependency6__["default"];
+ var addObserver = __dependency7__.addObserver;
+ var removeObserver = __dependency7__.removeObserver;
+ var computed = __dependency8__.computed;
+ var beforeObserver = __dependency4__.beforeObserver;
+ var observer = __dependency4__.observer;
//ES6TODO: should we access these directly from their package or from how thier exposed in ember-metal?
/**
`Ember.SortableMixin` provides a standard interface for array proxies
to specify a sort order and maintain this sorting when objects are added,
@@ -18130,25 +18733,24 @@
return mid;
}
});
});
define("ember-runtime/mixins/target_action_support",
- ["ember-metal/core","ember-metal/property_get","ember-metal/property_set","ember-metal/utils","ember-metal/mixin","ember-metal/computed","exports"],
- function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __exports__) {
+ ["ember-metal/core","ember-metal/property_get","ember-metal/utils","ember-metal/mixin","ember-metal/computed","exports"],
+ function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __exports__) {
"use strict";
/**
@module ember
@submodule ember-runtime
*/
var Ember = __dependency1__["default"];
// Ember.lookup, Ember.assert
var get = __dependency2__.get;
- var set = __dependency3__.set;
- var typeOf = __dependency4__.typeOf;
- var Mixin = __dependency5__.Mixin;
- var computed = __dependency6__.computed;
+ var typeOf = __dependency3__.typeOf;
+ var Mixin = __dependency4__.Mixin;
+ var computed = __dependency5__.computed;
/**
`Ember.TargetActionSupport` is a mixin that can be included in a class
to add a `triggerAction` method with semantics similar to the Handlebars
`{{action}}` helper. In normal Ember usage, the `{{action}}` helper is
@@ -18288,38 +18890,37 @@
var Namespace = __dependency1__["default"];
__exports__["default"] = Namespace.extend();
});
define("ember-runtime/system/array_proxy",
- ["ember-metal/core","ember-metal/property_get","ember-metal/property_set","ember-metal/utils","ember-metal/computed","ember-metal/mixin","ember-metal/property_events","ember-metal/error","ember-runtime/system/object","ember-runtime/mixins/mutable_array","ember-runtime/mixins/enumerable","ember-runtime/system/string","exports"],
+ ["ember-metal/core","ember-metal/property_get","ember-metal/utils","ember-metal/computed","ember-metal/mixin","ember-metal/property_events","ember-metal/error","ember-runtime/system/object","ember-runtime/mixins/mutable_array","ember-runtime/mixins/enumerable","ember-runtime/system/string","ember-metal/alias","exports"],
function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __dependency8__, __dependency9__, __dependency10__, __dependency11__, __dependency12__, __exports__) {
"use strict";
var Ember = __dependency1__["default"];
// Ember.K, Ember.assert
var get = __dependency2__.get;
- var set = __dependency3__.set;
- var isArray = __dependency4__.isArray;
- var apply = __dependency4__.apply;
- var computed = __dependency5__.computed;
- var beforeObserver = __dependency6__.beforeObserver;
- var observer = __dependency6__.observer;
- var beginPropertyChanges = __dependency7__.beginPropertyChanges;
- var endPropertyChanges = __dependency7__.endPropertyChanges;
- var EmberError = __dependency8__["default"];
- var EmberObject = __dependency9__["default"];
- var MutableArray = __dependency10__["default"];
- var Enumerable = __dependency11__["default"];
- var fmt = __dependency12__.fmt;
+ var isArray = __dependency3__.isArray;
+ var apply = __dependency3__.apply;
+ var computed = __dependency4__.computed;
+ var beforeObserver = __dependency5__.beforeObserver;
+ var observer = __dependency5__.observer;
+ var beginPropertyChanges = __dependency6__.beginPropertyChanges;
+ var endPropertyChanges = __dependency6__.endPropertyChanges;
+ var EmberError = __dependency7__["default"];
+ var EmberObject = __dependency8__["default"];
+ var MutableArray = __dependency9__["default"];
+ var Enumerable = __dependency10__["default"];
+ var fmt = __dependency11__.fmt;
+ var alias = __dependency12__["default"];
/**
@module ember
@submodule ember-runtime
*/
var OUT_OF_RANGE_EXCEPTION = "Index out of range";
var EMPTY = [];
- var alias = computed.alias;
var K = Ember.K;
/**
An ArrayProxy wraps any other object that implements `Ember.Array` and/or
`Ember.MutableArray,` forwarding all requests. This makes it very useful for
@@ -18666,28 +19267,24 @@
});
__exports__["default"] = ArrayProxy;
});
define("ember-runtime/system/container",
- ["ember-metal/property_set","exports"],
- function(__dependency1__, __exports__) {
+ ["ember-metal/property_set","container","exports"],
+ function(__dependency1__, __dependency2__, __exports__) {
"use strict";
- var set = __dependency1__["default"];
+ var set = __dependency1__.set;
+ var Container = __dependency2__["default"];
- var Container = requireModule('container')["default"];
Container.set = set;
__exports__["default"] = Container;
});
define("ember-runtime/system/core_object",
- ["ember-metal/core","ember-metal/property_get","ember-metal/property_set","ember-metal/utils","ember-metal/platform","ember-metal/watching","ember-metal/chains","ember-metal/events","ember-metal/mixin","ember-metal/enumerable_utils","ember-metal/error","ember-metal/keys","ember-runtime/mixins/action_handler","ember-metal/properties","ember-metal/binding","ember-metal/computed","ember-metal/run_loop","exports"],
+ ["ember-metal/core","ember-metal/property_get","ember-metal/utils","ember-metal/platform","ember-metal/watching","ember-metal/chains","ember-metal/events","ember-metal/mixin","ember-metal/enumerable_utils","ember-metal/error","ember-metal/keys","ember-runtime/mixins/action_handler","ember-metal/properties","ember-metal/binding","ember-metal/computed","ember-metal/injected_property","ember-metal/run_loop","exports"],
function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __dependency8__, __dependency9__, __dependency10__, __dependency11__, __dependency12__, __dependency13__, __dependency14__, __dependency15__, __dependency16__, __dependency17__, __exports__) {
- // Remove "use strict"; from transpiled module until
- // https://bugs.webkit.org/show_bug.cgi?id=138038 is fixed
- //
- // REMOVE_USE_STRICT: true
-
+ "use strict";
/**
@module ember
@submodule ember-runtime
*/
@@ -18695,36 +19292,36 @@
// Ember.assert, Ember.K, Ember.config
// NOTE: this object should never be included directly. Instead use `Ember.Object`.
// We only define this separately so that `Ember.Set` can depend on it.
var get = __dependency2__.get;
- var set = __dependency3__.set;
- var guidFor = __dependency4__.guidFor;
- var apply = __dependency4__.apply;
- var o_create = __dependency5__.create;
- var generateGuid = __dependency4__.generateGuid;
- var GUID_KEY = __dependency4__.GUID_KEY;
- var meta = __dependency4__.meta;
- var makeArray = __dependency4__.makeArray;
- var rewatch = __dependency6__.rewatch;
- var finishChains = __dependency7__.finishChains;
- var sendEvent = __dependency8__.sendEvent;
- var IS_BINDING = __dependency9__.IS_BINDING;
- var Mixin = __dependency9__.Mixin;
- var required = __dependency9__.required;
- var indexOf = __dependency10__.indexOf;
- var EmberError = __dependency11__["default"];
- var o_defineProperty = __dependency5__.defineProperty;
- var keys = __dependency12__["default"];
- var ActionHandler = __dependency13__["default"];
- var defineProperty = __dependency14__.defineProperty;
- var Binding = __dependency15__.Binding;
- var ComputedProperty = __dependency16__.ComputedProperty;
+ var guidFor = __dependency3__.guidFor;
+ var apply = __dependency3__.apply;
+ var o_create = __dependency4__.create;
+ var generateGuid = __dependency3__.generateGuid;
+ var GUID_KEY = __dependency3__.GUID_KEY;
+ var meta = __dependency3__.meta;
+ var makeArray = __dependency3__.makeArray;
+ var rewatch = __dependency5__.rewatch;
+ var finishChains = __dependency6__.finishChains;
+ var sendEvent = __dependency7__.sendEvent;
+ var IS_BINDING = __dependency8__.IS_BINDING;
+ var Mixin = __dependency8__.Mixin;
+ var required = __dependency8__.required;
+ var indexOf = __dependency9__.indexOf;
+ var EmberError = __dependency10__["default"];
+ var o_defineProperty = __dependency4__.defineProperty;
+ var keys = __dependency11__["default"];
+ var ActionHandler = __dependency12__["default"];
+ var defineProperty = __dependency13__.defineProperty;
+ var Binding = __dependency14__.Binding;
+ var ComputedProperty = __dependency15__.ComputedProperty;
+ var InjectedProperty = __dependency16__["default"];
var run = __dependency17__["default"];
- var destroy = __dependency6__.destroy;
+ var destroy = __dependency5__.destroy;
var K = __dependency1__.K;
- var hasPropertyAccessors = __dependency5__.hasPropertyAccessors;
+ var hasPropertyAccessors = __dependency4__.hasPropertyAccessors;
var schedule = run.schedule;
var applyMixin = Mixin._apply;
var finishPartial = Mixin.finishPartial;
var reopen = Mixin.prototype.reopen;
@@ -18788,12 +19385,10 @@
var keyNames = keys(properties);
for (var j = 0, ll = keyNames.length; j < ll; j++) {
var keyName = keyNames[j];
- if (!properties.hasOwnProperty(keyName)) { continue; }
-
var value = properties[keyName];
if (IS_BINDING.test(keyName)) {
var bindings = m.bindings;
if (!bindings) {
@@ -18810,11 +19405,13 @@
Ember.assert("Ember.Object.create no longer supports defining methods that call _super.", !(typeof value === 'function' && value.toString().indexOf('._super') !== -1));
Ember.assert("`actions` must be provided at extend time, not at create " +
"time, when Ember.ActionHandler is used (i.e. views, " +
"controllers & routes).", !((keyName === 'actions') && ActionHandler.detect(this)));
- if (concatenatedProperties && indexOf(concatenatedProperties, keyName) >= 0) {
+ if (concatenatedProperties &&
+ concatenatedProperties.length > 0 &&
+ indexOf(concatenatedProperties, keyName) >= 0) {
var baseValue = this[keyName];
if (baseValue) {
if ('function' === typeof baseValue.concat) {
value = baseValue.concat(value);
@@ -19124,11 +19721,11 @@
Ember.config.overridePrototypeMixin(CoreObject.PrototypeMixin);
}
CoreObject.__super__ = null;
- var ClassMixin = Mixin.create({
+ var ClassMixinProps = {
ClassMixin: required(),
PrototypeMixin: required(),
@@ -19509,12 +20106,39 @@
property = properties[i];
name = property.name;
callback.call(binding || this, property.name, property.meta || empty);
}
}
- });
+ };
+ if (Ember.FEATURES.isEnabled('ember-metal-injected-properties')) {
+ /**
+ Returns a hash of property names and container names that injected
+ properties will lookup on the container lazily.
+
+ @method lazyInjections
+ @return {Object} Hash of all lazy injected property keys to container names
+ */
+ ClassMixinProps.lazyInjections = function() {
+ var injections = {};
+ var proto = this.proto();
+ var descs = meta(proto).descs;
+ var key, desc;
+
+ for (key in descs) {
+ desc = descs[key];
+ if (desc instanceof InjectedProperty) {
+ injections[key] = desc.type + ':' + (desc.name || key);
+ }
+ }
+
+ return injections;
+ };
+ }
+
+ var ClassMixin = Mixin.create(ClassMixinProps);
+
ClassMixin.ownerConstructor = CoreObject;
if (Ember.config.overrideClassMixin) {
Ember.config.overrideClassMixin(ClassMixin);
}
@@ -19537,17 +20161,16 @@
});
__exports__["default"] = CoreObject;
});
define("ember-runtime/system/deferred",
- ["ember-metal/core","ember-runtime/mixins/deferred","ember-metal/property_get","ember-runtime/system/object","exports"],
- function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __exports__) {
+ ["ember-metal/core","ember-runtime/mixins/deferred","ember-runtime/system/object","exports"],
+ function(__dependency1__, __dependency2__, __dependency3__, __exports__) {
"use strict";
var Ember = __dependency1__["default"];
var DeferredMixin = __dependency2__["default"];
- var get = __dependency3__.get;
- var EmberObject = __dependency4__["default"];
+ var EmberObject = __dependency3__["default"];
var Deferred = EmberObject.extend(DeferredMixin, {
init: function() {
Ember.deprecate('Usage of Ember.Deferred is deprecated.');
this._super();
@@ -19563,42 +20186,41 @@
});
__exports__["default"] = Deferred;
});
define("ember-runtime/system/each_proxy",
- ["ember-metal/core","ember-metal/property_get","ember-metal/property_set","ember-metal/utils","ember-metal/enumerable_utils","ember-metal/array","ember-runtime/mixins/array","ember-runtime/system/object","ember-metal/computed","ember-metal/observer","ember-metal/events","ember-metal/properties","ember-metal/property_events","exports"],
- function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __dependency8__, __dependency9__, __dependency10__, __dependency11__, __dependency12__, __dependency13__, __exports__) {
+ ["ember-metal/core","ember-metal/property_get","ember-metal/utils","ember-metal/enumerable_utils","ember-metal/array","ember-runtime/mixins/array","ember-runtime/system/object","ember-metal/computed","ember-metal/observer","ember-metal/events","ember-metal/properties","ember-metal/property_events","exports"],
+ function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __dependency8__, __dependency9__, __dependency10__, __dependency11__, __dependency12__, __exports__) {
"use strict";
/**
@module ember
@submodule ember-runtime
*/
var Ember = __dependency1__["default"];
// Ember.assert
var get = __dependency2__.get;
- var set = __dependency3__.set;
- var guidFor = __dependency4__.guidFor;
- var forEach = __dependency5__.forEach;
- var indexOf = __dependency6__.indexOf;
- var EmberArray = __dependency7__["default"];
+ var guidFor = __dependency3__.guidFor;
+ var forEach = __dependency4__.forEach;
+ var indexOf = __dependency5__.indexOf;
+ var EmberArray = __dependency6__["default"];
// ES6TODO: WAT? Circular dep?
- var EmberObject = __dependency8__["default"];
- var computed = __dependency9__.computed;
- var addObserver = __dependency10__.addObserver;
- var addBeforeObserver = __dependency10__.addBeforeObserver;
- var removeBeforeObserver = __dependency10__.removeBeforeObserver;
- var removeObserver = __dependency10__.removeObserver;
- var typeOf = __dependency4__.typeOf;
- var watchedEvents = __dependency11__.watchedEvents;
- var defineProperty = __dependency12__.defineProperty;
- var beginPropertyChanges = __dependency13__.beginPropertyChanges;
- var propertyDidChange = __dependency13__.propertyDidChange;
- var propertyWillChange = __dependency13__.propertyWillChange;
- var endPropertyChanges = __dependency13__.endPropertyChanges;
- var changeProperties = __dependency13__.changeProperties;
+ var EmberObject = __dependency7__["default"];
+ var computed = __dependency8__.computed;
+ var addObserver = __dependency9__.addObserver;
+ var addBeforeObserver = __dependency9__.addBeforeObserver;
+ var removeBeforeObserver = __dependency9__.removeBeforeObserver;
+ var removeObserver = __dependency9__.removeObserver;
+ var typeOf = __dependency3__.typeOf;
+ var watchedEvents = __dependency10__.watchedEvents;
+ var defineProperty = __dependency11__.defineProperty;
+ var beginPropertyChanges = __dependency12__.beginPropertyChanges;
+ var propertyDidChange = __dependency12__.propertyDidChange;
+ var propertyWillChange = __dependency12__.propertyWillChange;
+ var endPropertyChanges = __dependency12__.endPropertyChanges;
+ var changeProperties = __dependency12__.changeProperties;
var EachArray = EmberObject.extend(EmberArray, {
init: function(content, keyName, owner) {
this._super();
@@ -20007,11 +20629,11 @@
}
}
function findNamespaces() {
var lookup = Ember.lookup;
- var obj, isNamespace;
+ var obj;
if (Namespace.PROCESSED) { return; }
for (var prop in lookup) {
// Only process entities that start with uppercase A-Z
@@ -20094,34 +20716,33 @@
Mixin.prototype.toString = classToString; // ES6TODO: altering imported objects. SBB.
__exports__["default"] = Namespace;
});
define("ember-runtime/system/native_array",
- ["ember-metal/core","ember-metal/property_get","ember-metal/property_set","ember-metal/enumerable_utils","ember-metal/mixin","ember-metal/array","ember-runtime/mixins/array","ember-runtime/mixins/mutable_array","ember-runtime/mixins/observable","ember-runtime/mixins/copyable","ember-runtime/mixins/freezable","ember-runtime/copy","exports"],
- function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __dependency8__, __dependency9__, __dependency10__, __dependency11__, __dependency12__, __exports__) {
+ ["ember-metal/core","ember-metal/property_get","ember-metal/enumerable_utils","ember-metal/mixin","ember-metal/array","ember-runtime/mixins/array","ember-runtime/mixins/mutable_array","ember-runtime/mixins/observable","ember-runtime/mixins/copyable","ember-runtime/mixins/freezable","ember-runtime/copy","exports"],
+ function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __dependency8__, __dependency9__, __dependency10__, __dependency11__, __exports__) {
"use strict";
/**
@module ember
@submodule ember-runtime
*/
var Ember = __dependency1__["default"];
// Ember.EXTEND_PROTOTYPES
var get = __dependency2__.get;
- var set = __dependency3__.set;
- var replace = __dependency4__._replace;
- var forEach = __dependency4__.forEach;
- var Mixin = __dependency5__.Mixin;
- var indexOf = __dependency6__.indexOf;
- var lastIndexOf = __dependency6__.lastIndexOf;
- var EmberArray = __dependency7__["default"];
- var MutableArray = __dependency8__["default"];
- var Observable = __dependency9__["default"];
- var Copyable = __dependency10__["default"];
- var FROZEN_ERROR = __dependency11__.FROZEN_ERROR;
- var copy = __dependency12__["default"];
+ var replace = __dependency3__._replace;
+ var forEach = __dependency3__.forEach;
+ var Mixin = __dependency4__.Mixin;
+ var indexOf = __dependency5__.indexOf;
+ var lastIndexOf = __dependency5__.lastIndexOf;
+ var EmberArray = __dependency6__["default"];
+ var MutableArray = __dependency7__["default"];
+ var Observable = __dependency8__["default"];
+ var Copyable = __dependency9__["default"];
+ var FROZEN_ERROR = __dependency10__.FROZEN_ERROR;
+ var copy = __dependency11__["default"];
// Add Ember.Array to Array.prototype. Remove methods with native
// implementations and supply some more optimized versions of generic methods
// because they are so common.
@@ -20272,20 +20893,23 @@
__exports__.A = A;
__exports__.NativeArray = NativeArray;
__exports__["default"] = NativeArray;
});
define("ember-runtime/system/object",
- ["ember-runtime/system/core_object","ember-runtime/mixins/observable","exports"],
- function(__dependency1__, __dependency2__, __exports__) {
+ ["ember-metal/core","ember-runtime/system/core_object","ember-runtime/mixins/observable","ember-runtime/inject","exports"],
+ function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __exports__) {
"use strict";
/**
@module ember
@submodule ember-runtime
*/
- var CoreObject = __dependency1__["default"];
- var Observable = __dependency2__["default"];
+ var Ember = __dependency1__["default"];
+ // Ember.assert
+ var CoreObject = __dependency2__["default"];
+ var Observable = __dependency3__["default"];
+ var validatePropertyInjections = __dependency4__.validatePropertyInjections;
/**
`Ember.Object` is the main base class for all Ember objects. It is a subclass
of `Ember.CoreObject` with the `Ember.Observable` mixin applied. For details,
see the documentation for each of these.
@@ -20298,10 +20922,26 @@
var EmberObject = CoreObject.extend(Observable);
EmberObject.toString = function() {
return "Ember.Object";
};
+ if (Ember.FEATURES.isEnabled('ember-metal-injected-properties')) {
+ EmberObject.reopen({
+ /**
+ Provides mixin-time validation for injected properties.
+
+ @private
+ @method willMergeMixin
+ */
+ willMergeMixin: function(props) {
+ // Injection validations are a debugging aid only, so ensure that they are
+ // not performed in production builds by invoking from an assertion
+ Ember.assert("Injected properties are invalid", validatePropertyInjections(this.constructor, props));
+ }
+ });
+ }
+
__exports__["default"] = EmberObject;
});
define("ember-runtime/system/object_proxy",
["ember-runtime/system/object","ember-runtime/mixins/-proxy","exports"],
function(__dependency1__, __dependency2__, __exports__) {
@@ -20378,10 +21018,58 @@
@extends Ember._ProxyMixin
*/
__exports__["default"] = EmberObject.extend(_ProxyMixin);
});
+define("ember-runtime/system/service",
+ ["ember-runtime/system/object","ember-runtime/inject","exports"],
+ function(__dependency1__, __dependency2__, __exports__) {
+ "use strict";
+ var Object = __dependency1__["default"];
+ var createInjectionHelper = __dependency2__.createInjectionHelper;
+
+ var Service;
+
+ if (Ember.FEATURES.isEnabled('ember-metal-injected-properties')) {
+ /**
+ @class Service
+ @namespace Ember
+ @extends Ember.Object
+ */
+ Service = Object.extend();
+
+ /**
+ Creates a property that lazily looks up a service in the container. There
+ are no restrictions as to what objects a service can be injected into.
+
+ Example:
+
+ ```javascript
+ App.ApplicationRoute = Ember.Route.extend({
+ authManager: Ember.inject.service('auth'),
+
+ model: function() {
+ return this.get('authManager').findCurrentUser();
+ }
+ });
+ ```
+
+ This example will create an `authManager` property on the application route
+ that looks up the `auth` service in the container, making it easily
+ accessible in the `model` hook.
+
+ @method inject.service
+ @for Ember
+ @param {String} name (optional) name of the service to inject, defaults to
+ the property's name
+ @return {Ember.InjectedProperty} injection descriptor instance
+ */
+ createInjectionHelper('service');
+ }
+
+ __exports__["default"] = Service;
+ });
define("ember-runtime/system/set",
["ember-metal/core","ember-metal/property_get","ember-metal/property_set","ember-metal/utils","ember-metal/is_none","ember-runtime/system/string","ember-runtime/system/core_object","ember-runtime/mixins/mutable_enumerable","ember-runtime/mixins/enumerable","ember-runtime/mixins/copyable","ember-runtime/mixins/freezable","ember-metal/error","ember-metal/property_events","ember-metal/mixin","ember-metal/computed","exports"],
function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __dependency8__, __dependency9__, __dependency10__, __dependency11__, __dependency12__, __dependency13__, __dependency14__, __dependency15__, __exports__) {
"use strict";
/**
@@ -21166,16 +21854,15 @@
__exports__.classify = classify;
__exports__.underscore = underscore;
__exports__.capitalize = capitalize;
});
define("ember-runtime/system/subarray",
- ["ember-metal/property_get","ember-metal/error","ember-metal/enumerable_utils","exports"],
- function(__dependency1__, __dependency2__, __dependency3__, __exports__) {
+ ["ember-metal/error","ember-metal/enumerable_utils","exports"],
+ function(__dependency1__, __dependency2__, __exports__) {
"use strict";
- var get = __dependency1__.get;
- var EmberError = __dependency2__["default"];
- var EnumerableUtils = __dependency3__["default"];
+ var EmberError = __dependency1__["default"];
+ var EnumerableUtils = __dependency2__["default"];
var RETAIN = 'r';
var FILTER = 'f';
function Operation(type, count) {
@@ -21403,11 +22090,11 @@
var match = this._findArrayOperation(index);
var arrayOperation = match.operation;
var arrayOperationIndex = match.index;
var arrayOperationRangeStart = match.rangeStart;
- var composeIndex, splitIndex, splitItems, splitArrayOperation, newArrayOperation;
+ var composeIndex, newArrayOperation;
newArrayOperation = new ArrayOperation(INSERT, count, newItems);
if (arrayOperation) {
if (!match.split) {
@@ -21436,10 +22123,9 @@
*/
removeItems: function (index, count) {
if (count < 1) { return; }
var match = this._findArrayOperation(index);
- var arrayOperation = match.operation;
var arrayOperationIndex = match.index;
var arrayOperationRangeStart = match.rangeStart;
var newArrayOperation, composeIndex;
newArrayOperation = new ArrayOperation(DELETE, count);