ember-source 1.8.1 → 1.9.0.alpha

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of ember-source might be problematic. Click here for more details.

checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 68eb4d3650e6f5f536f6b483a1f0b0aed126e5e8
4
- data.tar.gz: e0024dc8af80f49eacaa2dfcbdaba2cdf2d283e7
3
+ metadata.gz: 383caaebb75b43dd74f935c0787bf805218a1b4c
4
+ data.tar.gz: 7f6c7c2b9dce1ffc059cd819b85b78d6022eacc1
5
5
  SHA512:
6
- metadata.gz: 4932f47dd8ff3331add1a1ba9764f00460fff4d687d36a7c78d9624117c49ee794dcc7929a39dcbfec8f84ef8aba8e2b35e27d77b30e0fe0b3f54e4570910b46
7
- data.tar.gz: 33355173606ee217c7f2720178c3432f014c13706644e46485f6fd0eabb0f1fc620609500016668f56bc4ed9fa697b8613e792b8d4b80c51a77620c98080753a
6
+ metadata.gz: 12cd4ad9624fc0518b22eae7408d52c618ee0d8463dc289e14f3d58ea99e1919cddda8526827f2855c278037252d53d593cdab71e19ed45fa1e9c54b3784f573
7
+ data.tar.gz: 9b7b8988c51a56cfd275e2c7c27437212f1dc0ca43654416e5b4578e9095c2bcdb8a8ce03782530c2fbbb87a9d8966457b9dfdc7960c36dc03336efc4d2d1b61
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.8.1
1
+ 1.9.0-alpha
@@ -5,7 +5,7 @@
5
5
  * Portions Copyright 2008-2011 Apple Inc. All rights reserved.
6
6
  * @license Licensed under MIT license
7
7
  * See https://raw.github.com/emberjs/ember.js/master/LICENSE
8
- * @version 1.8.1
8
+ * @version 1.9.0-alpha
9
9
  */
10
10
 
11
11
  (function() {
@@ -640,11 +640,10 @@ define("backburner/deferred-action-queues",
640
640
  function(__dependency1__, __dependency2__, __exports__) {
641
641
  "use strict";
642
642
  var each = __dependency1__.each;
643
- var isString = __dependency1__.isString;
644
643
  var Queue = __dependency2__["default"];
645
644
 
646
645
  function DeferredActionQueues(queueNames, options) {
647
- var queues = this.queues = {};
646
+ var queues = this.queues = Object.create(null);
648
647
  this.queueNames = queueNames = queueNames || [];
649
648
 
650
649
  this.options = options;
@@ -663,7 +662,9 @@ define("backburner/deferred-action-queues",
663
662
  var queues = this.queues;
664
663
  var queue = queues[name];
665
664
 
666
- if (!queue) { noSuchQueue(name); }
665
+ if (!queue) {
666
+ noSuchQueue(name);
667
+ }
667
668
 
668
669
  if (onceFlag) {
669
670
  return queue.pushUnique(target, method, args, stack);
@@ -672,26 +673,6 @@ define("backburner/deferred-action-queues",
672
673
  }
673
674
  },
674
675
 
675
- invoke: function(target, method, args, _, _errorRecordedForStack) {
676
- if (args && args.length > 0) {
677
- method.apply(target, args);
678
- } else {
679
- method.call(target);
680
- }
681
- },
682
-
683
- invokeWithOnError: function(target, method, args, onError, errorRecordedForStack) {
684
- try {
685
- if (args && args.length > 0) {
686
- method.apply(target, args);
687
- } else {
688
- method.call(target);
689
- }
690
- } catch(error) {
691
- onError(error, errorRecordedForStack);
692
- }
693
- },
694
-
695
676
  flush: function() {
696
677
  var queues = this.queues;
697
678
  var queueNames = this.queueNames;
@@ -699,85 +680,23 @@ define("backburner/deferred-action-queues",
699
680
  var queueNameIndex = 0;
700
681
  var numberOfQueues = queueNames.length;
701
682
  var options = this.options;
702
- var onError = options.onError || (options.onErrorTarget && options.onErrorTarget[options.onErrorMethod]);
703
- var invoke = onError ? this.invokeWithOnError : this.invoke;
704
683
 
705
684
  while (queueNameIndex < numberOfQueues) {
706
685
  queueName = queueNames[queueNameIndex];
707
686
  queue = queues[queueName];
708
- queueItems = queue._queueBeingFlushed = queue._queue.slice();
709
- queue._queue = [];
710
- queue.targetQueues = Object.create(null);
711
-
712
- var queueOptions = queue.options; // TODO: write a test for this
713
- var before = queueOptions && queueOptions.before;
714
- var after = queueOptions && queueOptions.after;
715
- var target, method, args, errorRecordedForStack;
716
- var queueIndex = 0;
717
- var numberOfQueueItems = queueItems.length;
718
-
719
- if (numberOfQueueItems && before) {
720
- before();
721
- }
722
-
723
- while (queueIndex < numberOfQueueItems) {
724
- target = queueItems[queueIndex];
725
- method = queueItems[queueIndex+1];
726
- args = queueItems[queueIndex+2];
727
- errorRecordedForStack = queueItems[queueIndex+3]; // Debugging assistance
728
-
729
- //
730
-
731
- if (isString(method)) {
732
- method = target[method];
733
- }
734
-
735
- // method could have been nullified / canceled during flush
736
- if (method) {
737
- //
738
- // ** Attention intrepid developer **
739
- //
740
- // To find out the stack of this task when it was scheduled onto
741
- // the run loop, add the following to your app.js:
742
- //
743
- // Ember.run.backburner.DEBUG = true; // NOTE: This slows your app, don't leave it on in production.
744
- //
745
- // Once that is in place, when you are at a breakpoint and navigate
746
- // here in the stack explorer, you can look at `errorRecordedForStack.stack`,
747
- // which will be the captured stack when this job was scheduled.
748
- //
749
- invoke(target, method, args, onError, errorRecordedForStack);
750
- }
751
687
 
752
- queueIndex += 4;
753
- }
754
-
755
- queue._queueBeingFlushed = null;
756
- if (numberOfQueueItems && after) {
757
- after();
758
- }
688
+ var numberOfQueueItems = queue._queue.length;
759
689
 
760
- if ((priorQueueNameIndex = indexOfPriorQueueWithActions(this, queueNameIndex)) !== -1) {
761
- queueNameIndex = priorQueueNameIndex;
762
- } else {
690
+ if (numberOfQueueItems === 0) {
763
691
  queueNameIndex++;
692
+ } else {
693
+ queue.flush(false /* async */);
694
+ queueNameIndex = 0;
764
695
  }
765
696
  }
766
697
  }
767
698
  };
768
699
 
769
- function indexOfPriorQueueWithActions(daq, currentQueueIndex) {
770
- var queueName, queue;
771
-
772
- for (var i = 0, l = currentQueueIndex; i <= l; i++) {
773
- queueName = daq.queueNames[i];
774
- queue = daq.queues[queueName];
775
- if (queue._queue.length) { return i; }
776
- }
777
-
778
- return -1;
779
- }
780
-
781
700
  __exports__["default"] = DeferredActionQueues;
782
701
  });
783
702
  define("backburner/platform",
@@ -795,9 +714,11 @@ define("backburner/platform",
795
714
  __exports__.needsIETryCatchFix = needsIETryCatchFix;
796
715
  });
797
716
  define("backburner/queue",
798
- ["exports"],
799
- function(__exports__) {
717
+ ["./utils","exports"],
718
+ function(__dependency1__, __exports__) {
800
719
  "use strict";
720
+ var isString = __dependency1__.isString;
721
+
801
722
  function Queue(name, options, globalOptions) {
802
723
  this.name = name;
803
724
  this.globalOptions = globalOptions || {};
@@ -895,56 +816,89 @@ define("backburner/queue",
895
816
  };
896
817
  },
897
818
 
898
- // TODO: remove me, only being used for Ember.run.sync
899
- flush: function() {
819
+ invoke: function(target, method, args, _, _errorRecordedForStack) {
820
+ if (args && args.length > 0) {
821
+ method.apply(target, args);
822
+ } else {
823
+ method.call(target);
824
+ }
825
+ },
826
+
827
+ invokeWithOnError: function(target, method, args, onError, errorRecordedForStack) {
828
+ try {
829
+ if (args && args.length > 0) {
830
+ method.apply(target, args);
831
+ } else {
832
+ method.call(target);
833
+ }
834
+ } catch(error) {
835
+ onError(error, errorRecordedForStack);
836
+ }
837
+ },
838
+
839
+ flush: function(sync) {
900
840
  var queue = this._queue;
841
+ var length = queue.length;
842
+
843
+ if (length === 0) {
844
+ return;
845
+ }
846
+
901
847
  var globalOptions = this.globalOptions;
902
848
  var options = this.options;
903
849
  var before = options && options.before;
904
850
  var after = options && options.after;
905
- var onError = globalOptions.onError || (globalOptions.onErrorTarget && globalOptions.onErrorTarget[globalOptions.onErrorMethod]);
906
- var target, method, args, stack, i, l = queue.length;
851
+ var onError = globalOptions.onError || (globalOptions.onErrorTarget &&
852
+ globalOptions.onErrorTarget[globalOptions.onErrorMethod]);
853
+ var target, method, args, errorRecordedForStack;
854
+ var invoke = onError ? this.invokeWithOnError : this.invoke;
907
855
 
908
856
  this.targetQueues = Object.create(null);
857
+ var queueItems = this._queueBeingFlushed = this._queue.slice();
858
+ this._queue = [];
909
859
 
910
- if (l && before) { before(); }
911
- for (i = 0; i < l; i += 4) {
912
- target = queue[i];
913
- method = queue[i+1];
914
- args = queue[i+2];
915
- stack = queue[i+3]; // Debugging assistance
860
+ if (before) {
861
+ before();
862
+ }
916
863
 
917
- // TODO: error handling
918
- if (args && args.length > 0) {
919
- if (onError) {
920
- try {
921
- method.apply(target, args);
922
- } catch (e) {
923
- onError(e);
924
- }
925
- } else {
926
- method.apply(target, args);
927
- }
928
- } else {
929
- if (onError) {
930
- try {
931
- method.call(target);
932
- } catch(e) {
933
- onError(e);
934
- }
935
- } else {
936
- method.call(target);
937
- }
864
+ for (var i = 0; i < length; i += 4) {
865
+ target = queueItems[i];
866
+ method = queueItems[i+1];
867
+ args = queueItems[i+2];
868
+ errorRecordedForStack = queueItems[i+3]; // Debugging assistance
869
+
870
+ if (isString(method)) {
871
+ method = target[method];
872
+ }
873
+
874
+ // method could have been nullified / canceled during flush
875
+ if (method) {
876
+ //
877
+ // ** Attention intrepid developer **
878
+ //
879
+ // To find out the stack of this task when it was scheduled onto
880
+ // the run loop, add the following to your app.js:
881
+ //
882
+ // Ember.run.backburner.DEBUG = true; // NOTE: This slows your app, don't leave it on in production.
883
+ //
884
+ // Once that is in place, when you are at a breakpoint and navigate
885
+ // here in the stack explorer, you can look at `errorRecordedForStack.stack`,
886
+ // which will be the captured stack when this job was scheduled.
887
+ //
888
+ invoke(target, method, args, onError, errorRecordedForStack);
938
889
  }
939
890
  }
940
- if (l && after) { after(); }
941
891
 
942
- // check if new items have been added
943
- if (queue.length > l) {
944
- this._queue = queue.slice(l);
945
- this.flush();
946
- } else {
947
- this._queue.length = 0;
892
+ if (after) {
893
+ after();
894
+ }
895
+
896
+ this._queueBeingFlushed = undefined;
897
+
898
+ if (sync !== false &&
899
+ this._queue.length > 0) {
900
+ // check if new items have been added
901
+ this.flush(true);
948
902
  }
949
903
  },
950
904
 
@@ -980,9 +934,11 @@ define("backburner/queue",
980
934
  // if not found in current queue
981
935
  // could be in the queue that is being flushed
982
936
  queue = this._queueBeingFlushed;
937
+
983
938
  if (!queue) {
984
939
  return;
985
940
  }
941
+
986
942
  for (i = 0, l = queue.length; i < l; i += 4) {
987
943
  currentTarget = queue[i];
988
944
  currentMethod = queue[i+1];
@@ -1540,7 +1496,10 @@ define("container/container",
1540
1496
 
1541
1497
  var fullNameType = fullName.split(':')[0];
1542
1498
  if (fullNameType === type) {
1543
- throw new Error('Cannot inject a `' + fullName + '` on other ' + type + '(s). Register the `' + fullName + '` as a different type and perform the typeInjection.');
1499
+ throw new Error('Cannot inject a `' + fullName +
1500
+ '` on other ' + type +
1501
+ '(s). Register the `' + fullName +
1502
+ '` as a different type and perform the typeInjection.');
1544
1503
  }
1545
1504
 
1546
1505
  addTypeInjection(this.typeInjections, type, property, fullName);
@@ -1604,9 +1563,13 @@ define("container/container",
1604
1563
  var normalizedName = this.normalize(fullName);
1605
1564
 
1606
1565
  if (this.cache[normalizedName]) {
1607
- throw new Error("Attempted to register an injection for a type that has already been looked up. ('" + normalizedName + "', '" + property + "', '" + injectionName + "')");
1566
+ throw new Error("Attempted to register an injection for a type that has already been looked up. ('" +
1567
+ normalizedName + "', '" +
1568
+ property + "', '" +
1569
+ injectionName + "')");
1608
1570
  }
1609
- addInjection(this.injections, normalizedName, property, normalizedInjectionName);
1571
+
1572
+ addInjection(initRules(this.injections, normalizedName), property, normalizedInjectionName);
1610
1573
  },
1611
1574
 
1612
1575
 
@@ -1713,7 +1676,7 @@ define("container/container",
1713
1676
  'been looked up. (\'' + normalizedName + '\', \'' + property + '\', \'' + injectionName + '\')');
1714
1677
  }
1715
1678
 
1716
- addInjection(this.factoryInjections, normalizedName, property, normalizedInjectionName);
1679
+ addInjection(initRules(this.factoryInjections, normalizedName), property, normalizedInjectionName);
1717
1680
  },
1718
1681
 
1719
1682
  /**
@@ -1764,7 +1727,7 @@ define("container/container",
1764
1727
  return true;
1765
1728
  }
1766
1729
 
1767
- return !!container.resolve(fullName);
1730
+ return container.resolve(fullName) !== undefined;
1768
1731
  }
1769
1732
 
1770
1733
  function lookup(container, fullName, options) {
@@ -1800,22 +1763,32 @@ define("container/container",
1800
1763
 
1801
1764
  if (!injections) { return hash; }
1802
1765
 
1803
- var injection, injectable;
1766
+ validateInjections(container, injections);
1767
+
1768
+ var injection;
1804
1769
 
1805
1770
  for (var i = 0, length = injections.length; i < length; i++) {
1806
1771
  injection = injections[i];
1807
- injectable = lookup(container, injection.fullName);
1808
-
1809
- if (injectable !== undefined) {
1810
- hash[injection.property] = injectable;
1811
- } else {
1812
- throw new Error('Attempting to inject an unknown injection: `' + injection.fullName + '`');
1813
- }
1772
+ hash[injection.property] = lookup(container, injection.fullName);
1814
1773
  }
1815
1774
 
1816
1775
  return hash;
1817
1776
  }
1818
1777
 
1778
+ function validateInjections(container, injections) {
1779
+ if (!injections) { return; }
1780
+
1781
+ var fullName;
1782
+
1783
+ for (var i = 0, length = injections.length; i < length; i++) {
1784
+ fullName = injections[i].fullName;
1785
+
1786
+ if (!container.has(fullName)) {
1787
+ throw new Error('Attempting to inject an unknown injection: `' + fullName + '`');
1788
+ }
1789
+ }
1790
+ }
1791
+
1819
1792
  function option(container, fullName, optionName) {
1820
1793
  var options = container._options[fullName];
1821
1794
 
@@ -1889,8 +1862,25 @@ define("container/container",
1889
1862
  return factoryInjections;
1890
1863
  }
1891
1864
 
1865
+ if (Ember.FEATURES.isEnabled('ember-metal-injected-properties')) {
1866
+ var normalizeInjectionsHash = function(hash) {
1867
+ var injections = [];
1868
+
1869
+ for (var key in hash) {
1870
+ if (hash.hasOwnProperty(key)) {
1871
+ Ember.assert("Expected a proper full name, given '" + hash[key] + "'", validateFullName(hash[key]));
1872
+
1873
+ addInjection(injections, key, hash[key]);
1874
+ }
1875
+ }
1876
+
1877
+ return injections;
1878
+ };
1879
+ }
1880
+
1892
1881
  function instantiate(container, fullName) {
1893
1882
  var factory = factoryFor(container, fullName);
1883
+ var lazyInjections;
1894
1884
 
1895
1885
  if (option(container, fullName, 'instantiate') === false) {
1896
1886
  return factory;
@@ -1902,6 +1892,15 @@ define("container/container",
1902
1892
  'Most likely an improperly defined class or an invalid module export.');
1903
1893
  }
1904
1894
 
1895
+ if (Ember.FEATURES.isEnabled('ember-metal-injected-properties')) {
1896
+ // Ensure that all lazy injections are valid at instantiation time
1897
+ if (typeof factory.lazyInjections === 'function') {
1898
+ lazyInjections = factory.lazyInjections();
1899
+
1900
+ validateInjections(container, normalizeInjectionsHash(lazyInjections));
1901
+ }
1902
+ }
1903
+
1905
1904
  if (typeof factory.extend === 'function') {
1906
1905
  // assume the factory was extendable and is already injected
1907
1906
  return factory.create();
@@ -1959,8 +1958,11 @@ define("container/container",
1959
1958
  return true;
1960
1959
  }
1961
1960
 
1962
- function addInjection(rules, factoryName, property, injectionName) {
1963
- var injections = rules[factoryName] = rules[factoryName] || [];
1961
+ function initRules(rules, factoryName) {
1962
+ return rules[factoryName] || (rules[factoryName] = []);
1963
+ }
1964
+
1965
+ function addInjection(injections, property, injectionName) {
1964
1966
  injections.push({
1965
1967
  property: property,
1966
1968
  fullName: injectionName
@@ -1984,90 +1986,90 @@ define("ember-metal",
1984
1986
  var Ember = __dependency1__["default"];
1985
1987
  var merge = __dependency2__["default"];
1986
1988
  var instrument = __dependency3__.instrument;
1989
+ var reset = __dependency3__.reset;
1987
1990
  var subscribe = __dependency3__.subscribe;
1988
1991
  var unsubscribe = __dependency3__.unsubscribe;
1989
- var reset = __dependency3__.reset;
1990
- var generateGuid = __dependency4__.generateGuid;
1992
+ var EMPTY_META = __dependency4__.EMPTY_META;
1991
1993
  var GUID_KEY = __dependency4__.GUID_KEY;
1992
- var guidFor = __dependency4__.guidFor;
1993
1994
  var META_DESC = __dependency4__.META_DESC;
1994
- var EMPTY_META = __dependency4__.EMPTY_META;
1995
- var meta = __dependency4__.meta;
1995
+ var apply = __dependency4__.apply;
1996
+ var applyStr = __dependency4__.applyStr;
1997
+ var canInvoke = __dependency4__.canInvoke;
1998
+ var generateGuid = __dependency4__.generateGuid;
1996
1999
  var getMeta = __dependency4__.getMeta;
1997
- var setMeta = __dependency4__.setMeta;
1998
- var metaPath = __dependency4__.metaPath;
2000
+ var guidFor = __dependency4__.guidFor;
1999
2001
  var inspect = __dependency4__.inspect;
2000
- var typeOf = __dependency4__.typeOf;
2001
- var tryCatchFinally = __dependency4__.tryCatchFinally;
2002
2002
  var isArray = __dependency4__.isArray;
2003
2003
  var makeArray = __dependency4__.makeArray;
2004
- var canInvoke = __dependency4__.canInvoke;
2005
- var tryInvoke = __dependency4__.tryInvoke;
2004
+ var meta = __dependency4__.meta;
2005
+ var metaPath = __dependency4__.metaPath;
2006
+ var setMeta = __dependency4__.setMeta;
2007
+ var tryCatchFinally = __dependency4__.tryCatchFinally;
2006
2008
  var tryFinally = __dependency4__.tryFinally;
2007
- var wrap = __dependency4__.wrap;
2008
- var apply = __dependency4__.apply;
2009
- var applyStr = __dependency4__.applyStr;
2009
+ var tryInvoke = __dependency4__.tryInvoke;
2010
+ var typeOf = __dependency4__.typeOf;
2010
2011
  var uuid = __dependency4__.uuid;
2012
+ var wrap = __dependency4__.wrap;
2011
2013
  var EmberError = __dependency5__["default"];
2012
2014
  var EnumerableUtils = __dependency6__["default"];
2013
2015
  var Cache = __dependency7__["default"];
2014
2016
  var create = __dependency8__.create;
2015
- var hasPropertyAccessors = __dependency8__.hasPropertyAccessors;
2017
+ var platform = __dependency8__.platform;
2016
2018
  var filter = __dependency9__.filter;
2017
2019
  var forEach = __dependency9__.forEach;
2018
2020
  var indexOf = __dependency9__.indexOf;
2019
2021
  var map = __dependency9__.map;
2020
2022
  var Logger = __dependency10__["default"];
2021
2023
 
2024
+ var _getPath = __dependency11__._getPath;
2022
2025
  var get = __dependency11__.get;
2023
2026
  var getWithDefault = __dependency11__.getWithDefault;
2024
2027
  var normalizeTuple = __dependency11__.normalizeTuple;
2025
- var _getPath = __dependency11__._getPath;
2026
2028
 
2027
- var on = __dependency12__.on;
2028
2029
  var addListener = __dependency12__.addListener;
2030
+ var hasListeners = __dependency12__.hasListeners;
2031
+ var listenersDiff = __dependency12__.listenersDiff;
2032
+ var listenersFor = __dependency12__.listenersFor;
2033
+ var listenersUnion = __dependency12__.listenersUnion;
2034
+ var on = __dependency12__.on;
2029
2035
  var removeListener = __dependency12__.removeListener;
2036
+ var sendEvent = __dependency12__.sendEvent;
2030
2037
  var suspendListener = __dependency12__.suspendListener;
2031
2038
  var suspendListeners = __dependency12__.suspendListeners;
2032
- var sendEvent = __dependency12__.sendEvent;
2033
- var hasListeners = __dependency12__.hasListeners;
2034
2039
  var watchedEvents = __dependency12__.watchedEvents;
2035
- var listenersFor = __dependency12__.listenersFor;
2036
- var listenersDiff = __dependency12__.listenersDiff;
2037
- var listenersUnion = __dependency12__.listenersUnion;
2038
2040
 
2039
2041
  var ObserverSet = __dependency13__["default"];
2040
2042
 
2041
- var propertyWillChange = __dependency14__.propertyWillChange;
2042
- var propertyDidChange = __dependency14__.propertyDidChange;
2043
- var overrideChains = __dependency14__.overrideChains;
2044
2043
  var beginPropertyChanges = __dependency14__.beginPropertyChanges;
2045
- var endPropertyChanges = __dependency14__.endPropertyChanges;
2046
2044
  var changeProperties = __dependency14__.changeProperties;
2045
+ var endPropertyChanges = __dependency14__.endPropertyChanges;
2046
+ var overrideChains = __dependency14__.overrideChains;
2047
+ var propertyDidChange = __dependency14__.propertyDidChange;
2048
+ var propertyWillChange = __dependency14__.propertyWillChange;
2047
2049
 
2048
2050
  var Descriptor = __dependency15__.Descriptor;
2049
2051
  var defineProperty = __dependency15__.defineProperty;
2050
2052
  var set = __dependency16__.set;
2051
2053
  var trySet = __dependency16__.trySet;
2052
2054
 
2053
- var OrderedSet = __dependency17__.OrderedSet;
2054
2055
  var Map = __dependency17__.Map;
2055
2056
  var MapWithDefault = __dependency17__.MapWithDefault;
2057
+ var OrderedSet = __dependency17__.OrderedSet;
2056
2058
  var getProperties = __dependency18__["default"];
2057
2059
  var setProperties = __dependency19__["default"];
2058
2060
  var watchKey = __dependency20__.watchKey;
2059
2061
  var unwatchKey = __dependency20__.unwatchKey;
2060
- var flushPendingChains = __dependency21__.flushPendingChains;
2061
- var removeChainWatcher = __dependency21__.removeChainWatcher;
2062
2062
  var ChainNode = __dependency21__.ChainNode;
2063
2063
  var finishChains = __dependency21__.finishChains;
2064
+ var flushPendingChains = __dependency21__.flushPendingChains;
2065
+ var removeChainWatcher = __dependency21__.removeChainWatcher;
2064
2066
  var watchPath = __dependency22__.watchPath;
2065
2067
  var unwatchPath = __dependency22__.unwatchPath;
2066
- var watch = __dependency23__.watch;
2068
+ var destroy = __dependency23__.destroy;
2067
2069
  var isWatching = __dependency23__.isWatching;
2068
- var unwatch = __dependency23__.unwatch;
2069
2070
  var rewatch = __dependency23__.rewatch;
2070
- var destroy = __dependency23__.destroy;
2071
+ var unwatch = __dependency23__.unwatch;
2072
+ var watch = __dependency23__.watch;
2071
2073
  var expandProperties = __dependency24__["default"];
2072
2074
  var ComputedProperty = __dependency25__.ComputedProperty;
2073
2075
  var computed = __dependency25__.computed;
@@ -2075,27 +2077,27 @@ define("ember-metal",
2075
2077
 
2076
2078
  // side effect of defining the computed.* macros
2077
2079
 
2078
- var addObserver = __dependency27__.addObserver;
2079
- var observersFor = __dependency27__.observersFor;
2080
- var removeObserver = __dependency27__.removeObserver;
2081
- var addBeforeObserver = __dependency27__.addBeforeObserver;
2082
2080
  var _suspendBeforeObserver = __dependency27__._suspendBeforeObserver;
2083
- var _suspendObserver = __dependency27__._suspendObserver;
2084
2081
  var _suspendBeforeObservers = __dependency27__._suspendBeforeObservers;
2082
+ var _suspendObserver = __dependency27__._suspendObserver;
2085
2083
  var _suspendObservers = __dependency27__._suspendObservers;
2084
+ var addBeforeObserver = __dependency27__.addBeforeObserver;
2085
+ var addObserver = __dependency27__.addObserver;
2086
2086
  var beforeObserversFor = __dependency27__.beforeObserversFor;
2087
+ var observersFor = __dependency27__.observersFor;
2087
2088
  var removeBeforeObserver = __dependency27__.removeBeforeObserver;
2089
+ var removeObserver = __dependency27__.removeObserver;
2088
2090
  var IS_BINDING = __dependency28__.IS_BINDING;
2089
- var mixin = __dependency28__.mixin;
2090
2091
  var Mixin = __dependency28__.Mixin;
2091
- var required = __dependency28__.required;
2092
2092
  var aliasMethod = __dependency28__.aliasMethod;
2093
- var observer = __dependency28__.observer;
2094
- var immediateObserver = __dependency28__.immediateObserver;
2095
2093
  var beforeObserver = __dependency28__.beforeObserver;
2094
+ var immediateObserver = __dependency28__.immediateObserver;
2095
+ var mixin = __dependency28__.mixin;
2096
+ var observer = __dependency28__.observer;
2097
+ var required = __dependency28__.required;
2096
2098
  var Binding = __dependency29__.Binding;
2097
- var isGlobalPath = __dependency29__.isGlobalPath;
2098
2099
  var bind = __dependency29__.bind;
2100
+ var isGlobalPath = __dependency29__.isGlobalPath;
2099
2101
  var oneWay = __dependency29__.oneWay;
2100
2102
  var run = __dependency30__["default"];
2101
2103
  var libraries = __dependency31__["default"];
@@ -2125,10 +2127,7 @@ define("ember-metal",
2125
2127
  Ember.GUID_KEY = GUID_KEY;
2126
2128
  Ember.create = create;
2127
2129
  Ember.keys = keys;
2128
- Ember.platform = {
2129
- defineProperty: defineProperty,
2130
- hasPropertyAccessors: hasPropertyAccessors
2131
- };
2130
+ Ember.platform = platform;
2132
2131
 
2133
2132
  var EmberArrayPolyfills = Ember.ArrayPolyfills = {};
2134
2133
 
@@ -2300,26 +2299,28 @@ define("ember-metal",
2300
2299
  __exports__["default"] = Ember;
2301
2300
  });
2302
2301
  define("ember-metal/alias",
2303
- ["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"],
2304
- function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __dependency8__, __exports__) {
2302
+ ["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"],
2303
+ function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __dependency8__, __dependency9__, __exports__) {
2305
2304
  "use strict";
2306
2305
  var get = __dependency1__.get;
2307
2306
  var set = __dependency2__.set;
2308
- var EmberError = __dependency3__["default"];
2309
- var Descriptor = __dependency4__.Descriptor;
2310
- var defineProperty = __dependency4__.defineProperty;
2311
- var ComputedProperty = __dependency5__.ComputedProperty;
2312
- var create = __dependency6__.create;
2313
- var meta = __dependency7__.meta;
2314
- var inspect = __dependency7__.inspect;
2315
- var addDependentKeys = __dependency8__.addDependentKeys;
2316
- var removeDependentKeys = __dependency8__.removeDependentKeys;
2307
+ var Ember = __dependency3__["default"];
2308
+ // Ember.assert
2309
+ var EmberError = __dependency4__["default"];
2310
+ var Descriptor = __dependency5__.Descriptor;
2311
+ var defineProperty = __dependency5__.defineProperty;
2312
+ var ComputedProperty = __dependency6__.ComputedProperty;
2313
+ var create = __dependency7__.create;
2314
+ var meta = __dependency8__.meta;
2315
+ var inspect = __dependency8__.inspect;
2316
+ var addDependentKeys = __dependency9__.addDependentKeys;
2317
+ var removeDependentKeys = __dependency9__.removeDependentKeys;
2317
2318
 
2318
- function alias(altKey) {
2319
+ __exports__["default"] = function alias(altKey) {
2319
2320
  return new AliasedProperty(altKey);
2320
2321
  }
2321
2322
 
2322
- __exports__.alias = alias;function AliasedProperty(altKey) {
2323
+ function AliasedProperty(altKey) {
2323
2324
  this.altKey = altKey;
2324
2325
  this._dependentKeys = [ altKey ];
2325
2326
  }
@@ -2343,6 +2344,7 @@ define("ember-metal/alias",
2343
2344
  };
2344
2345
 
2345
2346
  AliasedProperty.prototype.setup = function(obj, keyName) {
2347
+ Ember.assert("Setting alias '" + keyName + "' on self", this.altKey !== keyName);
2346
2348
  var m = meta(obj);
2347
2349
  if (m.watching[keyName]) {
2348
2350
  addDependentKeys(this, obj, keyName, m);
@@ -2517,7 +2519,6 @@ define("ember-metal/binding",
2517
2519
  var Ember = __dependency1__["default"];
2518
2520
  // Ember.Logger, Ember.LOG_BINDINGS, assert
2519
2521
  var get = __dependency2__.get;
2520
- var set = __dependency3__.set;
2521
2522
  var trySet = __dependency3__.trySet;
2522
2523
  var guidFor = __dependency4__.guidFor;
2523
2524
  var addObserver = __dependency5__.addObserver;
@@ -3019,10 +3020,7 @@ define("ember-metal/cache",
3019
3020
  this.func = func;
3020
3021
  }
3021
3022
 
3022
- var FALSE = function() { };
3023
- var ZERO = function() { };
3024
3023
  var UNDEFINED = function() { };
3025
- var NULL = function() { };
3026
3024
 
3027
3025
  Cache.prototype = {
3028
3026
  set: function(key, value) {
@@ -3071,12 +3069,11 @@ define("ember-metal/chains",
3071
3069
  // warn, assert, etc;
3072
3070
  var get = __dependency2__.get;
3073
3071
  var normalizeTuple = __dependency2__.normalizeTuple;
3074
- var meta = __dependency3__.meta;
3072
+ var metaFor = __dependency3__.meta;
3075
3073
  var forEach = __dependency4__.forEach;
3076
3074
  var watchKey = __dependency5__.watchKey;
3077
3075
  var unwatchKey = __dependency5__.unwatchKey;
3078
3076
 
3079
- var metaFor = meta;
3080
3077
  var warn = Ember.warn;
3081
3078
  var FIRST_KEY = /^([^\.]+)/;
3082
3079
 
@@ -3097,7 +3094,8 @@ define("ember-metal/chains",
3097
3094
 
3098
3095
  forEach.call(queue, function(q) { q[0].add(q[1]); });
3099
3096
 
3100
- 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);
3097
+ warn('Watching an undefined global, Ember expects watched globals to be' +
3098
+ ' setup by the time the run loop is flushed, check for typos', pendingQueue.length === 0);
3101
3099
  }
3102
3100
 
3103
3101
  __exports__.flushPendingChains = flushPendingChains;function addChainWatcher(obj, keyName, node) {
@@ -3424,29 +3422,28 @@ define("ember-metal/chains",
3424
3422
  __exports__.ChainNode = ChainNode;
3425
3423
  });
3426
3424
  define("ember-metal/computed",
3427
- ["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"],
3428
- function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __dependency8__, __dependency9__, __exports__) {
3425
+ ["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"],
3426
+ function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __dependency8__, __exports__) {
3429
3427
  "use strict";
3430
3428
  var Ember = __dependency1__["default"];
3431
- var get = __dependency2__.get;
3432
- var set = __dependency3__.set;
3433
- var meta = __dependency4__.meta;
3434
- var inspect = __dependency4__.inspect;
3435
- var expandProperties = __dependency5__["default"];
3436
- var EmberError = __dependency6__["default"];
3437
- var Descriptor = __dependency7__.Descriptor;
3438
- var defineProperty = __dependency7__.defineProperty;
3439
- var propertyWillChange = __dependency8__.propertyWillChange;
3440
- var propertyDidChange = __dependency8__.propertyDidChange;
3441
- var addDependentKeys = __dependency9__.addDependentKeys;
3442
- var removeDependentKeys = __dependency9__.removeDependentKeys;
3429
+ var set = __dependency2__.set;
3430
+ var meta = __dependency3__.meta;
3431
+ var inspect = __dependency3__.inspect;
3432
+ var expandProperties = __dependency4__["default"];
3433
+ var EmberError = __dependency5__["default"];
3434
+ var Descriptor = __dependency6__.Descriptor;
3435
+ var defineProperty = __dependency6__.defineProperty;
3436
+ var propertyWillChange = __dependency7__.propertyWillChange;
3437
+ var propertyDidChange = __dependency7__.propertyDidChange;
3438
+ var addDependentKeys = __dependency8__.addDependentKeys;
3439
+ var removeDependentKeys = __dependency8__.removeDependentKeys;
3443
3440
 
3444
3441
  /**
3445
3442
  @module ember-metal
3446
3443
  */
3447
3444
 
3448
- 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);
3449
-
3445
+ Ember.warn("The CP_DEFAULT_CACHEABLE flag has been removed and computed properties" +
3446
+ "are always cached by default. Use `volatile` if you don't want caching.", Ember.ENV.CP_DEFAULT_CACHEABLE !== false);
3450
3447
 
3451
3448
  var metaFor = meta;
3452
3449
  var a_slice = [].slice;
@@ -3542,6 +3539,10 @@ define("ember-metal/computed",
3542
3539
  func.__ember_arity__ = func.length;
3543
3540
  this.func = func;
3544
3541
 
3542
+ this._dependentKeys = undefined;
3543
+ this._suspended = undefined;
3544
+ this._meta = undefined;
3545
+
3545
3546
  this._cacheable = (opts && opts.cacheable !== undefined) ? opts.cacheable : true;
3546
3547
  this._dependentKeys = opts && opts.dependentKeys;
3547
3548
  this._readOnly = opts && (opts.readOnly !== undefined || !!opts.readOnly) || false;
@@ -3550,9 +3551,6 @@ define("ember-metal/computed",
3550
3551
  ComputedProperty.prototype = new Descriptor();
3551
3552
 
3552
3553
  var ComputedPropertyPrototype = ComputedProperty.prototype;
3553
- ComputedPropertyPrototype._dependentKeys = undefined;
3554
- ComputedPropertyPrototype._suspended = undefined;
3555
- ComputedPropertyPrototype._meta = undefined;
3556
3554
 
3557
3555
  /**
3558
3556
  Properties are cacheable by default. Computed property will automatically
@@ -4042,7 +4040,7 @@ define("ember-metal/computed_macros",
4042
4040
  var computed = __dependency4__.computed;
4043
4041
  var isEmpty = __dependency5__["default"];
4044
4042
  var isNone = __dependency6__.isNone;
4045
- var alias = __dependency7__.alias;
4043
+ var alias = __dependency7__["default"];
4046
4044
 
4047
4045
  /**
4048
4046
  @module ember-metal
@@ -4546,7 +4544,7 @@ define("ember-metal/computed_macros",
4546
4544
  values of all passed in properties to an array.
4547
4545
  */
4548
4546
  registerComputedWithProperties('collect', function(properties) {
4549
- var res = [];
4547
+ var res = Ember.A();
4550
4548
  for (var key in properties) {
4551
4549
  if (properties.hasOwnProperty(key)) {
4552
4550
  if (isNone(properties[key])) {
@@ -4741,7 +4739,7 @@ define("ember-metal/core",
4741
4739
  ["exports"],
4742
4740
  function(__exports__) {
4743
4741
  "use strict";
4744
- /*globals Ember:true,Em:true,ENV,EmberENV,MetamorphENV:true */
4742
+ /*globals Ember:true,ENV,EmberENV,MetamorphENV:true */
4745
4743
 
4746
4744
  /**
4747
4745
  @module ember
@@ -4765,7 +4763,7 @@ define("ember-metal/core",
4765
4763
 
4766
4764
  @class Ember
4767
4765
  @static
4768
- @version 1.8.1
4766
+ @version 1.9.0-alpha
4769
4767
  */
4770
4768
 
4771
4769
  if ('undefined' === typeof Ember) {
@@ -4775,9 +4773,9 @@ define("ember-metal/core",
4775
4773
  }
4776
4774
 
4777
4775
  // Default imports, exports and lookup to the global object;
4778
- var imports = Ember.imports = Ember.imports || this;
4779
- var exports = Ember.exports = Ember.exports || this;
4780
- var lookup = Ember.lookup = Ember.lookup || this;
4776
+ Ember.imports = Ember.imports || this;
4777
+ Ember.lookup = Ember.lookup || this;
4778
+ var exports = Ember.exports = Ember.exports || this;
4781
4779
 
4782
4780
  // aliases needed to keep minifiers from removing the global context
4783
4781
  exports.Em = exports.Ember = Ember;
@@ -4792,10 +4790,10 @@ define("ember-metal/core",
4792
4790
  /**
4793
4791
  @property VERSION
4794
4792
  @type String
4795
- @default '1.8.1'
4793
+ @default '1.9.0-alpha'
4796
4794
  @static
4797
4795
  */
4798
- Ember.VERSION = '1.8.1';
4796
+ Ember.VERSION = '1.9.0-alpha';
4799
4797
 
4800
4798
  /**
4801
4799
  Standard environmental variables. You can define these in a global `EmberENV`
@@ -4955,11 +4953,7 @@ define("ember-metal/core",
4955
4953
  define("ember-metal/dependent_keys",
4956
4954
  ["ember-metal/platform","ember-metal/watching","exports"],
4957
4955
  function(__dependency1__, __dependency2__, __exports__) {
4958
- // Remove "use strict"; from transpiled module until
4959
- // https://bugs.webkit.org/show_bug.cgi?id=138038 is fixed
4960
- //
4961
- // REMOVE_USE_STRICT: true
4962
-
4956
+ "use strict";
4963
4957
  var o_create = __dependency1__.create;
4964
4958
  var watch = __dependency2__.watch;
4965
4959
  var unwatch = __dependency2__.unwatch;
@@ -5086,18 +5080,16 @@ define("ember-metal/deprecate_property",
5086
5080
  __exports__.deprecateProperty = deprecateProperty;
5087
5081
  });
5088
5082
  define("ember-metal/dictionary",
5089
- ["ember-metal/platform","exports"],
5090
- function(__dependency1__, __exports__) {
5083
+ ["exports"],
5084
+ function(__exports__) {
5091
5085
  "use strict";
5092
- var create = __dependency1__.create;
5093
-
5094
5086
  // the delete is meant to hint at runtimes that this object should remain in
5095
5087
  // dictionary mode. This is clearly a runtime specific hack, but currently it
5096
5088
  // appears worthwile in some usecases. Please note, these deletes do increase
5097
5089
  // the cost of creation dramatically over a plain Object.create. And as this
5098
5090
  // only makes sense for long-lived dictionaries that aren't instantiated often.
5099
5091
  __exports__["default"] = function makeDictionary(parent) {
5100
- var dict = create(parent);
5092
+ var dict = Object.create(parent);
5101
5093
  dict['_dict'] = null;
5102
5094
  delete dict['_dict'];
5103
5095
  return dict;
@@ -5393,23 +5385,18 @@ define("ember-metal/error",
5393
5385
  define("ember-metal/events",
5394
5386
  ["ember-metal/core","ember-metal/utils","ember-metal/platform","exports"],
5395
5387
  function(__dependency1__, __dependency2__, __dependency3__, __exports__) {
5396
- // Remove "use strict"; from transpiled module until
5397
- // https://bugs.webkit.org/show_bug.cgi?id=138038 is fixed
5398
- //
5399
- // REMOVE_USE_STRICT: true
5400
-
5388
+ "use strict";
5401
5389
  /**
5402
5390
  @module ember-metal
5403
5391
  */
5404
5392
  var Ember = __dependency1__["default"];
5405
- var meta = __dependency2__.meta;
5393
+ var metaFor = __dependency2__.meta;
5406
5394
  var tryFinally = __dependency2__.tryFinally;
5407
5395
  var apply = __dependency2__.apply;
5408
5396
  var applyStr = __dependency2__.applyStr;
5409
5397
  var create = __dependency3__.create;
5410
5398
 
5411
5399
  var a_slice = [].slice;
5412
- var metaFor = meta;
5413
5400
 
5414
5401
  /* listener flags */
5415
5402
  var ONCE = 1;
@@ -5450,21 +5437,26 @@ define("ember-metal/events",
5450
5437
  function actionsFor(obj, eventName) {
5451
5438
  var meta = metaFor(obj, true);
5452
5439
  var actions;
5440
+ var listeners = meta.listeners;
5453
5441
 
5454
- if (!meta.listeners) { meta.listeners = {}; }
5455
-
5456
- if (!meta.hasOwnProperty('listeners')) {
5442
+ if (!listeners) {
5443
+ listeners = meta.listeners = create(null);
5444
+ listeners.__source__ = obj;
5445
+ } else if (listeners.__source__ !== obj) {
5457
5446
  // setup inherited copy of the listeners object
5458
- meta.listeners = create(meta.listeners);
5447
+ listeners = meta.listeners = create(listeners);
5448
+ listeners.__source__ = obj;
5459
5449
  }
5460
5450
 
5461
- actions = meta.listeners[eventName];
5451
+ actions = listeners[eventName];
5462
5452
 
5463
5453
  // if there are actions, but the eventName doesn't exist in our listeners, then copy them from the prototype
5464
- if (actions && !meta.listeners.hasOwnProperty(eventName)) {
5465
- actions = meta.listeners[eventName] = meta.listeners[eventName].slice();
5454
+ if (actions && actions.__source__ !== obj) {
5455
+ actions = listeners[eventName] = listeners[eventName].slice();
5456
+ actions.__source__ = obj;
5466
5457
  } else if (!actions) {
5467
- actions = meta.listeners[eventName] = [];
5458
+ actions = listeners[eventName] = [];
5459
+ actions.__source__ = obj;
5468
5460
  }
5469
5461
 
5470
5462
  return actions;
@@ -5685,8 +5677,11 @@ define("ember-metal/events",
5685
5677
  var listeners = obj['__ember_meta__'].listeners, ret = [];
5686
5678
 
5687
5679
  if (listeners) {
5688
- for(var eventName in listeners) {
5689
- if (listeners[eventName]) { ret.push(eventName); }
5680
+ for (var eventName in listeners) {
5681
+ if (eventName !== '__source__' &&
5682
+ listeners[eventName]) {
5683
+ ret.push(eventName);
5684
+ }
5690
5685
  }
5691
5686
  }
5692
5687
  return ret;
@@ -5953,6 +5948,59 @@ define("ember-metal/get_properties",
5953
5948
  return ret;
5954
5949
  }
5955
5950
  });
5951
+ define("ember-metal/injected_property",
5952
+ ["ember-metal/core","ember-metal/computed","ember-metal/properties","ember-metal/platform","ember-metal/utils","ember-metal/error","exports"],
5953
+ function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __exports__) {
5954
+ "use strict";
5955
+ var Ember = __dependency1__["default"];
5956
+ // Ember.assert
5957
+ var ComputedProperty = __dependency2__.ComputedProperty;
5958
+ var Descriptor = __dependency3__.Descriptor;
5959
+ var create = __dependency4__.create;
5960
+ var inspect = __dependency5__.inspect;
5961
+ var EmberError = __dependency6__["default"];
5962
+
5963
+ /**
5964
+ Read-only property that returns the result of a container lookup.
5965
+
5966
+ @class InjectedProperty
5967
+ @namespace Ember
5968
+ @extends Ember.Descriptor
5969
+ @constructor
5970
+ @param {String} type The container type the property will lookup
5971
+ @param {String} name (optional) The name the property will lookup, defaults
5972
+ to the property's name
5973
+ */
5974
+ function InjectedProperty(type, name) {
5975
+ this.type = type;
5976
+ this.name = name;
5977
+
5978
+ this._super$Constructor(function(keyName) {
5979
+ Ember.assert("Attempting to lookup an injected property on an object " +
5980
+ "without a container, ensure that the object was " +
5981
+ "instantiated via a container.", this.container);
5982
+
5983
+ return this.container.lookup(type + ':' + (name || keyName));
5984
+ }, { readOnly: true });
5985
+ }
5986
+
5987
+ InjectedProperty.prototype = create(Descriptor.prototype);
5988
+
5989
+ var InjectedPropertyPrototype = InjectedProperty.prototype;
5990
+ var ComputedPropertyPrototype = ComputedProperty.prototype;
5991
+
5992
+ InjectedPropertyPrototype._super$Constructor = ComputedProperty;
5993
+
5994
+ InjectedPropertyPrototype.get = ComputedPropertyPrototype.get;
5995
+
5996
+ InjectedPropertyPrototype.set = function(obj, keyName) {
5997
+ throw new EmberError("Cannot set injected property '" + keyName + "' on object: " + inspect(obj));
5998
+ };
5999
+
6000
+ InjectedPropertyPrototype.teardown = ComputedPropertyPrototype.teardown;
6001
+
6002
+ __exports__["default"] = InjectedProperty;
6003
+ });
5956
6004
  define("ember-metal/instrumentation",
5957
6005
  ["ember-metal/core","ember-metal/utils","exports"],
5958
6006
  function(__dependency1__, __dependency2__, __exports__) {
@@ -6180,12 +6228,10 @@ define("ember-metal/instrumentation",
6180
6228
  __exports__.reset = reset;
6181
6229
  });
6182
6230
  define("ember-metal/is_blank",
6183
- ["ember-metal/core","ember-metal/is_empty","exports"],
6184
- function(__dependency1__, __dependency2__, __exports__) {
6231
+ ["ember-metal/is_empty","exports"],
6232
+ function(__dependency1__, __exports__) {
6185
6233
  "use strict";
6186
- var Ember = __dependency1__["default"];
6187
- // deprecateFunc
6188
- var isEmpty = __dependency2__["default"];
6234
+ var isEmpty = __dependency1__["default"];
6189
6235
 
6190
6236
  /**
6191
6237
  A value is blank if it is empty or a whitespace string.
@@ -6227,7 +6273,7 @@ define("ember-metal/is_empty",
6227
6273
  Verifies that a value is `null` or an empty string, empty array,
6228
6274
  or empty function.
6229
6275
 
6230
- Constrains the rules on `Ember.isNone` by returning true for empty
6276
+ Constrains the rules on `Ember.isNone` by returning false for empty
6231
6277
  string and empty arrays.
6232
6278
 
6233
6279
  ```javascript
@@ -6246,40 +6292,12 @@ define("ember-metal/is_empty",
6246
6292
  @return {Boolean}
6247
6293
  */
6248
6294
  function isEmpty(obj) {
6249
- var none = isNone(obj);
6250
- if (none) {
6251
- return none;
6252
- }
6253
-
6254
- if (typeof obj.size === 'number') {
6255
- return !obj.size;
6256
- }
6257
-
6258
- var objectType = typeof obj;
6259
-
6260
- if (objectType === 'object') {
6261
- var size = get(obj, 'size');
6262
- if (typeof size === 'number') {
6263
- return !size;
6264
- }
6265
- }
6266
-
6267
- if (typeof obj.length === 'number' && objectType !== 'function') {
6268
- return !obj.length;
6269
- }
6270
-
6271
- if (objectType === 'object') {
6272
- var length = get(obj, 'length');
6273
- if (typeof length === 'number') {
6274
- return !length;
6275
- }
6276
- }
6277
-
6278
- return false;
6295
+ return isNone(obj) || (obj.length === 0 && typeof obj !== 'function') ||
6296
+ (typeof obj === 'object' && get(obj, 'length') === 0);
6279
6297
  }
6280
6298
 
6281
6299
  var empty = Ember.deprecateFunc("Ember.empty is deprecated. Please use Ember.isEmpty instead.", isEmpty);
6282
- __exports__.empty = empty;
6300
+
6283
6301
  __exports__["default"] = isEmpty;
6284
6302
  __exports__.isEmpty = isEmpty;
6285
6303
  __exports__.empty = empty;
@@ -6657,7 +6675,7 @@ define("ember-metal/map",
6657
6675
  }
6658
6676
 
6659
6677
  function copyNull(obj) {
6660
- var output = create(null);
6678
+ var output = Object.create(null);
6661
6679
 
6662
6680
  for (var prop in obj) {
6663
6681
  // hasOwnPropery is not needed because obj is Object.create(null);
@@ -6715,7 +6733,7 @@ define("ember-metal/map",
6715
6733
  @method clear
6716
6734
  */
6717
6735
  clear: function() {
6718
- this.presenceSet = create(null);
6736
+ this.presenceSet = Object.create(null);
6719
6737
  this.list = [];
6720
6738
  this.size = 0;
6721
6739
  },
@@ -6879,7 +6897,7 @@ define("ember-metal/map",
6879
6897
  if (this instanceof this.constructor) {
6880
6898
  this.keys = OrderedSet.create();
6881
6899
  this.keys._silenceRemoveDeprecation = true;
6882
- this.values = create(null);
6900
+ this.values = Object.create(null);
6883
6901
  this.size = 0;
6884
6902
  } else {
6885
6903
  missingNew("OrderedSet");
@@ -7041,7 +7059,7 @@ define("ember-metal/map",
7041
7059
  */
7042
7060
  clear: function() {
7043
7061
  this.keys.clear();
7044
- this.values = create(null);
7062
+ this.values = Object.create(null);
7045
7063
  this.size = 0;
7046
7064
  },
7047
7065
 
@@ -7166,13 +7184,9 @@ define("ember-metal/merge",
7166
7184
  }
7167
7185
  });
7168
7186
  define("ember-metal/mixin",
7169
- ["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"],
7170
- function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __dependency8__, __dependency9__, __dependency10__, __dependency11__, __exports__) {
7171
- // Remove "use strict"; from transpiled module until
7172
- // https://bugs.webkit.org/show_bug.cgi?id=138038 is fixed
7173
- //
7174
- // REMOVE_USE_STRICT: true
7175
-
7187
+ ["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"],
7188
+ function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __dependency8__, __dependency9__, __dependency10__, __dependency11__, __dependency12__, __dependency13__, __exports__) {
7189
+ "use strict";
7176
7190
  /**
7177
7191
  @module ember
7178
7192
  @submodule ember-metal
@@ -7181,35 +7195,33 @@ define("ember-metal/mixin",
7181
7195
  var Ember = __dependency1__["default"];
7182
7196
  // warn, assert, wrap, et;
7183
7197
  var merge = __dependency2__["default"];
7184
- var map = __dependency3__.map;
7185
- var indexOf = __dependency3__.indexOf;
7186
- var forEach = __dependency3__.forEach;
7187
- var create = __dependency4__.create;
7188
- var guidFor = __dependency5__.guidFor;
7189
- var meta = __dependency5__.meta;
7190
- var wrap = __dependency5__.wrap;
7191
- var makeArray = __dependency5__.makeArray;
7192
- var apply = __dependency5__.apply;
7193
- var isArray = __dependency5__.isArray;
7194
- var expandProperties = __dependency6__["default"];
7195
- var Descriptor = __dependency7__.Descriptor;
7196
- var defineProperty = __dependency7__.defineProperty;
7197
- var ComputedProperty = __dependency8__.ComputedProperty;
7198
- var Binding = __dependency9__.Binding;
7199
- var addObserver = __dependency10__.addObserver;
7200
- var removeObserver = __dependency10__.removeObserver;
7201
- var addBeforeObserver = __dependency10__.addBeforeObserver;
7202
- var removeBeforeObserver = __dependency10__.removeBeforeObserver;
7203
- var addListener = __dependency11__.addListener;
7204
- var removeListener = __dependency11__.removeListener;
7198
+ var a_map = __dependency3__.map;
7199
+ var a_indexOf = __dependency3__.indexOf;
7200
+ var a_forEach = __dependency3__.forEach;
7201
+ var o_create = __dependency4__.create;
7202
+ var get = __dependency5__.get;
7203
+ var set = __dependency6__.set;
7204
+ var trySet = __dependency6__.trySet;
7205
+ var guidFor = __dependency7__.guidFor;
7206
+ var metaFor = __dependency7__.meta;
7207
+ var wrap = __dependency7__.wrap;
7208
+ var makeArray = __dependency7__.makeArray;
7209
+ var apply = __dependency7__.apply;
7210
+ var expandProperties = __dependency8__["default"];
7211
+ var Descriptor = __dependency9__.Descriptor;
7212
+ var defineProperty = __dependency9__.defineProperty;
7213
+ var ComputedProperty = __dependency10__.ComputedProperty;
7214
+ var Binding = __dependency11__.Binding;
7215
+ var addObserver = __dependency12__.addObserver;
7216
+ var removeObserver = __dependency12__.removeObserver;
7217
+ var addBeforeObserver = __dependency12__.addBeforeObserver;
7218
+ var removeBeforeObserver = __dependency12__.removeBeforeObserver;
7219
+ var _suspendObserver = __dependency12__._suspendObserver;
7220
+ var addListener = __dependency13__.addListener;
7221
+ var removeListener = __dependency13__.removeListener;
7205
7222
 
7206
7223
  var REQUIRED;
7207
- var a_map = map;
7208
- var a_indexOf = indexOf;
7209
- var a_forEach = forEach;
7210
7224
  var a_slice = [].slice;
7211
- var o_create = create;
7212
- var metaFor = meta;
7213
7225
 
7214
7226
  function superFunction(){
7215
7227
  var func = this.__nextSuper;
@@ -7256,7 +7268,12 @@ define("ember-metal/mixin",
7256
7268
  function isMethod(obj) {
7257
7269
  return 'function' === typeof obj &&
7258
7270
  obj.isMethod !== false &&
7259
- obj !== Boolean && obj !== Object && obj !== Number && obj !== Array && obj !== Date && obj !== String;
7271
+ obj !== Boolean &&
7272
+ obj !== Object &&
7273
+ obj !== Number &&
7274
+ obj !== Array &&
7275
+ obj !== Date &&
7276
+ obj !== String;
7260
7277
  }
7261
7278
 
7262
7279
  var CONTINUE = {};
@@ -7312,6 +7329,10 @@ define("ember-metal/mixin",
7312
7329
  return property;
7313
7330
  }
7314
7331
 
7332
+ var sourceAvailable = (function() {
7333
+ return this;
7334
+ }).toString().indexOf('return this;') > -1;
7335
+
7315
7336
  function giveMethodSuper(obj, key, method, values, descs) {
7316
7337
  var superMethod;
7317
7338
 
@@ -7330,7 +7351,21 @@ define("ember-metal/mixin",
7330
7351
  return method;
7331
7352
  }
7332
7353
 
7333
- return wrap(method, superMethod);
7354
+ var hasSuper;
7355
+ if (sourceAvailable) {
7356
+ hasSuper = method.__hasSuper;
7357
+
7358
+ if (hasSuper === undefined) {
7359
+ hasSuper = method.toString().indexOf('_super') > -1;
7360
+ method.__hasSuper = hasSuper;
7361
+ }
7362
+ }
7363
+
7364
+ if (sourceAvailable === false || hasSuper) {
7365
+ return wrap(method, superMethod);
7366
+ } else {
7367
+ return method;
7368
+ }
7334
7369
  }
7335
7370
 
7336
7371
  function applyConcatenatedProperties(obj, key, value, values) {
@@ -7338,7 +7373,11 @@ define("ember-metal/mixin",
7338
7373
 
7339
7374
  if (baseValue) {
7340
7375
  if ('function' === typeof baseValue.concat) {
7341
- return baseValue.concat(value);
7376
+ if (value === null || value === undefined) {
7377
+ return baseValue;
7378
+ } else {
7379
+ return baseValue.concat(value);
7380
+ }
7342
7381
  } else {
7343
7382
  return makeArray(baseValue).concat(value);
7344
7383
  }
@@ -7350,9 +7389,6 @@ define("ember-metal/mixin",
7350
7389
  function applyMergedProperties(obj, key, value, values) {
7351
7390
  var baseValue = values[key] || obj[key];
7352
7391
 
7353
- Ember.assert("You passed in `" + JSON.stringify(value) + "` as the value for `" + key +
7354
- "` but `" + key + "` cannot be an Array", !isArray(value));
7355
-
7356
7392
  if (!baseValue) { return value; }
7357
7393
 
7358
7394
  var newBase = merge({}, baseValue);
@@ -7457,6 +7493,31 @@ define("ember-metal/mixin",
7457
7493
  }
7458
7494
  }
7459
7495
 
7496
+ function connectStreamBinding(obj, key, stream) {
7497
+ var onNotify = function(stream) {
7498
+ _suspendObserver(obj, key, null, didChange, function() {
7499
+ trySet(obj, key, stream.value());
7500
+ });
7501
+ };
7502
+
7503
+ var didChange = function() {
7504
+ stream.setValue(get(obj, key), onNotify);
7505
+ };
7506
+
7507
+ // Initialize value
7508
+ set(obj, key, stream.value());
7509
+
7510
+ addObserver(obj, key, null, didChange);
7511
+
7512
+ stream.subscribe(onNotify);
7513
+
7514
+ if (obj._streamBindingSubscriptions === undefined) {
7515
+ obj._streamBindingSubscriptions = Object.create(null);
7516
+ }
7517
+
7518
+ obj._streamBindingSubscriptions[key] = onNotify;
7519
+ }
7520
+
7460
7521
  function connectBindings(obj, m) {
7461
7522
  // TODO Mixin.apply(instance) should disconnect binding if exists
7462
7523
  var bindings = m.bindings;
@@ -7466,7 +7527,10 @@ define("ember-metal/mixin",
7466
7527
  binding = bindings[key];
7467
7528
  if (binding) {
7468
7529
  to = key.slice(0, -7); // strip Binding off end
7469
- if (binding instanceof Binding) {
7530
+ if (binding.isStream) {
7531
+ connectStreamBinding(obj, to, binding);
7532
+ continue;
7533
+ } else if (binding instanceof Binding) {
7470
7534
  binding = binding.copy(); // copy prototypes' instance
7471
7535
  binding.to(to);
7472
7536
  } else { // binding is string path
@@ -7700,7 +7764,8 @@ define("ember-metal/mixin",
7700
7764
  for(idx=0; idx < len; idx++) {
7701
7765
  mixin = arguments[idx];
7702
7766
  Ember.assert('Expected hash or Mixin instance, got ' + Object.prototype.toString.call(mixin),
7703
- typeof mixin === 'object' && mixin !== null && Object.prototype.toString.call(mixin) !== '[object Array]');
7767
+ typeof mixin === 'object' && mixin !== null &&
7768
+ Object.prototype.toString.call(mixin) !== '[object Array]');
7704
7769
 
7705
7770
  if (mixin instanceof Mixin) {
7706
7771
  mixins.push(mixin);
@@ -7934,7 +7999,8 @@ define("ember-metal/mixin",
7934
7999
  function immediateObserver() {
7935
8000
  for (var i=0, l=arguments.length; i<l; i++) {
7936
8001
  var arg = arguments[i];
7937
- Ember.assert("Immediate observers must observe internal properties only, not properties on other objects.", typeof arg !== "string" || arg.indexOf('.') === -1);
8002
+ Ember.assert("Immediate observers must observe internal properties only, not properties on other objects.",
8003
+ typeof arg !== "string" || arg.indexOf('.') === -1);
7938
8004
  }
7939
8005
 
7940
8006
  return observer.apply(this, arguments);
@@ -8214,16 +8280,34 @@ define("ember-metal/path_cache",
8214
8280
  var IS_GLOBAL_PATH = /^([A-Z$]|([0-9][A-Z$])).*[\.]/;
8215
8281
  var HAS_THIS = 'this.';
8216
8282
 
8217
- var isGlobalCache = new Cache(1000, function(key) { return IS_GLOBAL.test(key); });
8218
- var isGlobalPathCache = new Cache(1000, function(key) { return IS_GLOBAL_PATH.test(key); });
8219
- var hasThisCache = new Cache(1000, function(key) { return key.indexOf(HAS_THIS) !== -1; });
8220
- var isPathCache = new Cache(1000, function(key) { return key.indexOf('.') !== -1; });
8283
+ var isGlobalCache = new Cache(1000, function(key) { return IS_GLOBAL.test(key); });
8284
+ var isGlobalPathCache = new Cache(1000, function(key) { return IS_GLOBAL_PATH.test(key); });
8285
+ var hasThisCache = new Cache(1000, function(key) { return key.indexOf(HAS_THIS) !== -1; });
8286
+ var firstDotIndexCache = new Cache(1000, function(key) { return key.indexOf('.'); });
8287
+
8288
+ var firstKeyCache = new Cache(1000, function(path) {
8289
+ var index = firstDotIndexCache.get(path);
8290
+ if (index === -1) {
8291
+ return path;
8292
+ } else {
8293
+ return path.slice(0, index);
8294
+ }
8295
+ });
8296
+
8297
+ var tailPathCache = new Cache(1000, function(path) {
8298
+ var index = firstDotIndexCache.get(path);
8299
+ if (index !== -1) {
8300
+ return path.slice(index + 1);
8301
+ }
8302
+ });
8221
8303
 
8222
8304
  var caches = {
8223
- isGlobalCache: isGlobalCache,
8224
- isGlobalPathCache: isGlobalPathCache,
8225
- hasThisCache: hasThisCache,
8226
- isPathCache: isPathCache
8305
+ isGlobalCache: isGlobalCache,
8306
+ isGlobalPathCache: isGlobalPathCache,
8307
+ hasThisCache: hasThisCache,
8308
+ firstDotIndexCache: firstDotIndexCache,
8309
+ firstKeyCache: firstKeyCache,
8310
+ tailPathCache: tailPathCache
8227
8311
  };
8228
8312
  __exports__.caches = caches;
8229
8313
  function isGlobal(path) {
@@ -8239,54 +8323,122 @@ define("ember-metal/path_cache",
8239
8323
  }
8240
8324
 
8241
8325
  __exports__.hasThis = hasThis;function isPath(path) {
8242
- return isPathCache.get(path);
8326
+ return firstDotIndexCache.get(path) !== -1;
8327
+ }
8328
+
8329
+ __exports__.isPath = isPath;function getFirstKey(path) {
8330
+ return firstKeyCache.get(path);
8243
8331
  }
8244
8332
 
8245
- __exports__.isPath = isPath;
8333
+ __exports__.getFirstKey = getFirstKey;function getTailPath(path) {
8334
+ return tailPathCache.get(path);
8335
+ }
8336
+
8337
+ __exports__.getTailPath = getTailPath;
8246
8338
  });
8247
8339
  define("ember-metal/platform",
8248
- ["ember-metal/platform/define_property","ember-metal/platform/define_properties","ember-metal/platform/create","exports"],
8249
- function(__dependency1__, __dependency2__, __dependency3__, __exports__) {
8340
+ ["exports"],
8341
+ function(__exports__) {
8250
8342
  "use strict";
8251
- var hasES5CompliantDefineProperty = __dependency1__.hasES5CompliantDefineProperty;
8252
- var defineProperty = __dependency1__.defineProperty;
8253
- var defineProperties = __dependency2__["default"];
8254
- var create = __dependency3__["default"];
8343
+ /*globals Node */
8255
8344
 
8256
8345
  /**
8257
8346
  @module ember-metal
8258
8347
  */
8348
+ var defineProperty = (function checkCompliance(defineProperty) {
8349
+ if (!defineProperty) return;
8350
+ try {
8351
+ var a = 5;
8352
+ var obj = {};
8353
+ defineProperty(obj, 'a', {
8354
+ configurable: true,
8355
+ enumerable: true,
8356
+ get: function () {
8357
+ return a;
8358
+ },
8359
+ set: function (v) {
8360
+ a = v;
8361
+ }
8362
+ });
8363
+ if (obj.a !== 5) return;
8364
+ obj.a = 10;
8365
+ if (a !== 10) return;
8259
8366
 
8260
- var hasPropertyAccessors = hasES5CompliantDefineProperty;
8261
- var canDefineNonEnumerableProperties = hasES5CompliantDefineProperty;
8367
+ // check non-enumerability
8368
+ defineProperty(obj, 'a', {
8369
+ configurable: true,
8370
+ enumerable: false,
8371
+ writable: true,
8372
+ value: true
8373
+ });
8374
+ for (var key in obj) {
8375
+ if (key === 'a') return;
8376
+ }
8262
8377
 
8263
- /**
8264
- Platform specific methods and feature detectors needed by the framework.
8378
+ // Detects a bug in Android <3.2 where you cannot redefine a property using
8379
+ // Object.defineProperty once accessors have already been set.
8380
+ if (obj.a !== true) return;
8265
8381
 
8266
- @class platform
8267
- @namespace Ember
8268
- @static
8269
- */
8382
+ // defineProperty is compliant
8383
+ return defineProperty;
8384
+ } catch (e) {
8385
+ // IE8 defines Object.defineProperty but calling it on an Object throws
8386
+ return;
8387
+ }
8388
+ })(Object.defineProperty);
8270
8389
 
8271
- __exports__.create = create;
8272
- __exports__.defineProperty = defineProperty;
8273
- __exports__.defineProperties = defineProperties;
8274
- __exports__.hasPropertyAccessors = hasPropertyAccessors;
8275
- __exports__.canDefineNonEnumerableProperties = canDefineNonEnumerableProperties;
8276
- });
8277
- define("ember-metal/platform/create",
8278
- ["exports"],
8279
- function(__exports__) {
8280
- // Remove "use strict"; from transpiled module until
8281
- // https://bugs.webkit.org/show_bug.cgi?id=138038 is fixed
8282
- //
8283
- // REMOVE_USE_STRICT: true
8390
+ var hasES5CompliantDefineProperty = !!defineProperty;
8284
8391
 
8285
- /**
8286
- @class platform
8287
- @namespace Ember
8288
- @static
8289
- */
8392
+ if (hasES5CompliantDefineProperty && typeof document !== 'undefined') {
8393
+ // This is for Safari 5.0, which supports Object.defineProperty, but not
8394
+ // on DOM nodes.
8395
+ var canDefinePropertyOnDOM = (function() {
8396
+ try {
8397
+ defineProperty(document.createElement('div'), 'definePropertyOnDOM', {});
8398
+ return true;
8399
+ } catch(e) { }
8400
+
8401
+ return false;
8402
+ })();
8403
+
8404
+ if (!canDefinePropertyOnDOM) {
8405
+ defineProperty = function(obj, keyName, desc) {
8406
+ var isNode;
8407
+
8408
+ if (typeof Node === "object") {
8409
+ isNode = obj instanceof Node;
8410
+ } else {
8411
+ isNode = typeof obj === "object" && typeof obj.nodeType === "number" && typeof obj.nodeName === "string";
8412
+ }
8413
+
8414
+ if (isNode) {
8415
+ // TODO: Should we have a warning here?
8416
+ return (obj[keyName] = desc.value);
8417
+ } else {
8418
+ return Object.defineProperty(obj, keyName, desc);
8419
+ }
8420
+ };
8421
+ }
8422
+ }
8423
+
8424
+ if (!hasES5CompliantDefineProperty) {
8425
+ defineProperty = function defineProperty(obj, keyName, desc) {
8426
+ if (!desc.get) { obj[keyName] = desc.value; }
8427
+ };
8428
+ }
8429
+
8430
+ // ES5 15.2.3.7
8431
+ // http://es5.github.com/#x15.2.3.7
8432
+ if (!Object.defineProperties) {
8433
+ Object.defineProperties = function defineProperties(object, properties) {
8434
+ for (var property in properties) {
8435
+ if (properties.hasOwnProperty(property) && property !== "__proto__") {
8436
+ defineProperty(object, property, properties[property]);
8437
+ }
8438
+ }
8439
+ return object;
8440
+ };
8441
+ }
8290
8442
 
8291
8443
  /**
8292
8444
  Identical to `Object.create()`. Implements if not available natively.
@@ -8374,51 +8526,23 @@ define("ember-metal/platform/create",
8374
8526
  create = Object.create;
8375
8527
  }
8376
8528
 
8377
- __exports__["default"] = create;
8378
- });
8379
- define("ember-metal/platform/define_properties",
8380
- ["ember-metal/platform/define_property","exports"],
8381
- function(__dependency1__, __exports__) {
8382
- "use strict";
8383
- var defineProperty = __dependency1__.defineProperty;
8384
-
8385
- var defineProperties = Object.defineProperties;
8386
-
8387
- // ES5 15.2.3.7
8388
- // http://es5.github.com/#x15.2.3.7
8389
- if (!defineProperties) {
8390
- defineProperties = function defineProperties(object, properties) {
8391
- for (var property in properties) {
8392
- if (properties.hasOwnProperty(property) && property !== "__proto__") {
8393
- defineProperty(object, property, properties[property]);
8394
- }
8395
- }
8396
- return object;
8397
- };
8398
-
8399
- Object.defineProperties = defineProperties;
8400
- }
8401
-
8402
- __exports__["default"] = defineProperties;
8403
- });
8404
- define("ember-metal/platform/define_property",
8405
- ["exports"],
8406
- function(__exports__) {
8407
- "use strict";
8408
- /*globals Node */
8529
+ var hasPropertyAccessors = hasES5CompliantDefineProperty;
8530
+ var canDefineNonEnumerableProperties = hasES5CompliantDefineProperty;
8409
8531
 
8410
8532
  /**
8411
8533
  @class platform
8412
8534
  @namespace Ember
8413
- @static
8414
8535
  */
8415
8536
 
8416
8537
  /**
8417
- Set to true if the platform supports native getters and setters.
8538
+ Platform specific methods and feature detectors needed by the framework.
8418
8539
 
8419
- @property hasPropertyAccessors
8420
- @final
8540
+ @class platform
8541
+ @namespace Ember
8542
+ @static
8421
8543
  */
8544
+ // TODO remove this
8545
+ var platform = {};
8422
8546
 
8423
8547
  /**
8424
8548
  Identical to `Object.defineProperty()`. Implements as much functionality
@@ -8430,90 +8554,21 @@ define("ember-metal/platform/define_property",
8430
8554
  @param {Object} desc descriptor hash
8431
8555
  @return {void}
8432
8556
  */
8433
- var defineProperty = (function checkCompliance(defineProperty) {
8434
- if (!defineProperty) return;
8435
- try {
8436
- var a = 5;
8437
- var obj = {};
8438
- defineProperty(obj, 'a', {
8439
- configurable: true,
8440
- enumerable: true,
8441
- get: function () {
8442
- return a;
8443
- },
8444
- set: function (v) {
8445
- a = v;
8446
- }
8447
- });
8448
- if (obj.a !== 5) return;
8449
- obj.a = 10;
8450
- if (a !== 10) return;
8451
-
8452
- // check non-enumerability
8453
- defineProperty(obj, 'a', {
8454
- configurable: true,
8455
- enumerable: false,
8456
- writable: true,
8457
- value: true
8458
- });
8459
- for (var key in obj) {
8460
- if (key === 'a') return;
8461
- }
8462
-
8463
- // Detects a bug in Android <3.2 where you cannot redefine a property using
8464
- // Object.defineProperty once accessors have already been set.
8465
- if (obj.a !== true) return;
8466
-
8467
- // defineProperty is compliant
8468
- return defineProperty;
8469
- } catch (e) {
8470
- // IE8 defines Object.defineProperty but calling it on an Object throws
8471
- return;
8472
- }
8473
- })(Object.defineProperty);
8474
-
8475
- var hasES5CompliantDefineProperty = !!defineProperty;
8476
-
8477
- if (hasES5CompliantDefineProperty && typeof document !== 'undefined') {
8478
- // This is for Safari 5.0, which supports Object.defineProperty, but not
8479
- // on DOM nodes.
8480
- var canDefinePropertyOnDOM = (function() {
8481
- try {
8482
- defineProperty(document.createElement('div'), 'definePropertyOnDOM', {});
8483
- return true;
8484
- } catch(e) { }
8485
-
8486
- return false;
8487
- })();
8488
-
8489
- if (!canDefinePropertyOnDOM) {
8490
- defineProperty = function(obj, keyName, desc) {
8491
- var isNode;
8492
-
8493
- if (typeof Node === "object") {
8494
- isNode = obj instanceof Node;
8495
- } else {
8496
- isNode = typeof obj === "object" && typeof obj.nodeType === "number" && typeof obj.nodeName === "string";
8497
- }
8557
+ platform.defineProperty = defineProperty;
8498
8558
 
8499
- if (isNode) {
8500
- // TODO: Should we have a warning here?
8501
- return (obj[keyName] = desc.value);
8502
- } else {
8503
- return Object.defineProperty(obj, keyName, desc);
8504
- }
8505
- };
8506
- }
8507
- }
8559
+ /**
8560
+ Set to true if the platform supports native getters and setters.
8508
8561
 
8509
- if (!hasES5CompliantDefineProperty) {
8510
- defineProperty = function defineProperty(obj, keyName, desc) {
8511
- if (!desc.get) { obj[keyName] = desc.value; }
8512
- };
8513
- }
8562
+ @property hasPropertyAccessors
8563
+ @final
8564
+ */
8565
+ platform.hasPropertyAccessors = hasPropertyAccessors;
8514
8566
 
8515
- __exports__.hasES5CompliantDefineProperty = hasES5CompliantDefineProperty;
8567
+ __exports__.create = create;
8516
8568
  __exports__.defineProperty = defineProperty;
8569
+ __exports__.hasPropertyAccessors = hasPropertyAccessors;
8570
+ __exports__.canDefineNonEnumerableProperties = canDefineNonEnumerableProperties;
8571
+ __exports__.platform = platform;
8517
8572
  });
8518
8573
  define("ember-metal/properties",
8519
8574
  ["ember-metal/core","ember-metal/utils","ember-metal/platform","ember-metal/property_events","exports"],
@@ -8549,10 +8604,8 @@ define("ember-metal/properties",
8549
8604
  // DEFINING PROPERTIES API
8550
8605
  //
8551
8606
 
8552
- function MANDATORY_SETTER_FUNCTION(name) {
8553
- return function SETTER_FUNCTION(value) {
8554
- Ember.assert("You must use Ember.set() to set the `" + name + "` property (of " + this + ") to `" + value + "`.", false);
8555
- };
8607
+ function MANDATORY_SETTER_FUNCTION(value) {
8608
+ Ember.assert("You must use Ember.set() to access this property (of " + this + ")", false);
8556
8609
  }
8557
8610
 
8558
8611
  __exports__.MANDATORY_SETTER_FUNCTION = MANDATORY_SETTER_FUNCTION;function DEFAULT_GETTER_FUNCTION(name) {
@@ -8648,7 +8701,7 @@ define("ember-metal/properties",
8648
8701
  objectDefineProperty(obj, keyName, {
8649
8702
  configurable: true,
8650
8703
  enumerable: true,
8651
- set: MANDATORY_SETTER_FUNCTION(keyName),
8704
+ set: MANDATORY_SETTER_FUNCTION,
8652
8705
  get: DEFAULT_GETTER_FUNCTION(keyName)
8653
8706
  });
8654
8707
  } else {
@@ -8672,6 +8725,7 @@ define("ember-metal/properties",
8672
8725
 
8673
8726
  return this;
8674
8727
  }
8728
+
8675
8729
  __exports__.defineProperty = defineProperty;
8676
8730
  });
8677
8731
  define("ember-metal/property_events",
@@ -9197,10 +9251,7 @@ define("ember-metal/property_set",
9197
9251
  propertyWillChange(obj, keyName);
9198
9252
 
9199
9253
  if (hasPropertyAccessors) {
9200
- if (
9201
- (currentValue === undefined && !(keyName in obj)) ||
9202
- !Object.prototype.propertyIsEnumerable.call(obj, keyName)
9203
- ) {
9254
+ if ((currentValue === undefined && !(keyName in obj)) || !obj.propertyIsEnumerable(keyName)) {
9204
9255
  defineProperty(obj, keyName, null, value); // setup mandatory setter
9205
9256
  } else {
9206
9257
  meta.values[keyName] = value;
@@ -9305,7 +9356,6 @@ define("ember-metal/run_loop",
9305
9356
  onErrorMethod: 'onerror'
9306
9357
  });
9307
9358
  var slice = [].slice;
9308
- var concat = [].concat;
9309
9359
 
9310
9360
  // ..........................................................
9311
9361
  // run - this is ideally the only public API the dev sees
@@ -9604,10 +9654,14 @@ define("ember-metal/run_loop",
9604
9654
  @param {Object} [args*] Optional arguments to pass to the timeout.
9605
9655
  @return {Object} Timer information for use in cancelling, see `run.cancel`.
9606
9656
  */
9607
- run.once = function(target, method) {
9657
+ run.once = function(/*target, method */) {
9608
9658
  checkAutoRun();
9609
- var args = slice.call(arguments);
9610
- args.unshift('actions');
9659
+ var length = arguments.length;
9660
+ var args = new Array(length);
9661
+ args[0] = 'actions';
9662
+ for (var i = 0; i < length; i++) {
9663
+ args[i + 1] = arguments[i];
9664
+ }
9611
9665
  return apply(backburner, backburner.scheduleOnce, args);
9612
9666
  };
9613
9667
 
@@ -9881,7 +9935,8 @@ define("ember-metal/run_loop",
9881
9935
  // Make sure it's not an autorun during testing
9882
9936
  function checkAutoRun() {
9883
9937
  if (!run.currentRunLoop) {
9884
- 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);
9938
+ Ember.assert("You have turned on testing mode, which disabled the run-loop's autorun." +
9939
+ " You will need to wrap any code with asynchronous side-effects in an run", !Ember.testing);
9885
9940
  }
9886
9941
  }
9887
9942
 
@@ -9909,54 +9964,358 @@ define("ember-metal/set_properties",
9909
9964
  var set = __dependency2__.set;
9910
9965
  var keys = __dependency3__["default"];
9911
9966
 
9912
- /**
9913
- Set a list of properties on an object. These properties are set inside
9914
- a single `beginPropertyChanges` and `endPropertyChanges` batch, so
9915
- observers will be buffered.
9967
+ /**
9968
+ Set a list of properties on an object. These properties are set inside
9969
+ a single `beginPropertyChanges` and `endPropertyChanges` batch, so
9970
+ observers will be buffered.
9971
+
9972
+ ```javascript
9973
+ var anObject = Ember.Object.create();
9974
+
9975
+ anObject.setProperties({
9976
+ firstName: 'Stanley',
9977
+ lastName: 'Stuart',
9978
+ age: 21
9979
+ });
9980
+ ```
9981
+
9982
+ @method setProperties
9983
+ @param self
9984
+ @param {Object} hash
9985
+ @return self
9986
+ */
9987
+ __exports__["default"] = function setProperties(self, hash) {
9988
+ changeProperties(function() {
9989
+ var props = keys(hash);
9990
+ var prop;
9991
+
9992
+ for (var i = 0, l = props.length; i < l; i++) {
9993
+ prop = props[i];
9994
+
9995
+ set(self, prop, hash[prop]);
9996
+ }
9997
+ });
9998
+ return self;
9999
+ }
10000
+ });
10001
+ define("ember-metal/streams/read",
10002
+ ["exports"],
10003
+ function(__exports__) {
10004
+ "use strict";
10005
+ function read(object) {
10006
+ if (object && object.isStream) {
10007
+ return object.value();
10008
+ } else {
10009
+ return object;
10010
+ }
10011
+ }
10012
+
10013
+ __exports__.read = read;function readArray(array) {
10014
+ var length = array.length;
10015
+ var ret = new Array(length);
10016
+ for (var i = 0; i < length; i++) {
10017
+ ret[i] = read(array[i]);
10018
+ }
10019
+ return ret;
10020
+ }
10021
+
10022
+ __exports__.readArray = readArray;function readHash(object) {
10023
+ var ret = {};
10024
+ for (var key in object) {
10025
+ ret[key] = read(object[key]);
10026
+ }
10027
+ return ret;
10028
+ }
10029
+
10030
+ __exports__.readHash = readHash;
10031
+ });
10032
+ define("ember-metal/streams/simple",
10033
+ ["ember-metal/merge","ember-metal/streams/stream","ember-metal/platform","ember-metal/streams/read","exports"],
10034
+ function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __exports__) {
10035
+ "use strict";
10036
+ var merge = __dependency1__["default"];
10037
+ var Stream = __dependency2__["default"];
10038
+ var create = __dependency3__.create;
10039
+ var read = __dependency4__.read;
10040
+
10041
+ function SimpleStream(source) {
10042
+ this.source = source;
10043
+
10044
+ if (source && source.isStream) {
10045
+ source.subscribe(this._didChange, this);
10046
+ }
10047
+ }
10048
+
10049
+ SimpleStream.prototype = create(Stream.prototype);
10050
+
10051
+ merge(SimpleStream.prototype, {
10052
+ valueFn: function() {
10053
+ return read(this.source);
10054
+ },
10055
+
10056
+ setValue: function(value) {
10057
+ var source = this.source;
10058
+
10059
+ if (source && source.isStream) {
10060
+ source.setValue(value);
10061
+ }
10062
+ },
10063
+
10064
+ setSource: function(nextSource) {
10065
+ var prevSource = this.source;
10066
+ if (nextSource !== prevSource) {
10067
+ if (prevSource && prevSource.isStream) {
10068
+ prevSource.unsubscribe(this._didChange, this);
10069
+ }
10070
+
10071
+ if (nextSource && nextSource.isStream) {
10072
+ nextSource.subscribe(this._didChange, this);
10073
+ }
10074
+
10075
+ this.source = nextSource;
10076
+ this.notify();
10077
+ }
10078
+ },
10079
+
10080
+ _didChange: function() {
10081
+ this.notify();
10082
+ },
10083
+
10084
+ destroy: function() {
10085
+ if (this.source && this.source.isStream) {
10086
+ this.source.unsubscribe(this._didChange, this);
10087
+ }
10088
+
10089
+ this.source = undefined;
10090
+ Stream.prototype.destroy.call(this);
10091
+ }
10092
+ });
10093
+
10094
+ __exports__["default"] = SimpleStream;
10095
+ });
10096
+ define("ember-metal/streams/stream",
10097
+ ["ember-metal/path_cache","exports"],
10098
+ function(__dependency1__, __exports__) {
10099
+ "use strict";
10100
+ var getFirstKey = __dependency1__.getFirstKey;
10101
+ var getTailPath = __dependency1__.getTailPath;
10102
+
10103
+ var NIL = function NIL(){};
10104
+
10105
+ function Stream(fn) {
10106
+ this.valueFn = fn;
10107
+ this.cache = NIL;
10108
+ this.subscribers = undefined;
10109
+ this.children = undefined;
10110
+ this.destroyed = false;
10111
+ }
10112
+
10113
+ Stream.prototype = {
10114
+ isStream: true,
10115
+
10116
+ cache: NIL,
10117
+
10118
+ get: function(path) {
10119
+ var firstKey = getFirstKey(path);
10120
+ var tailPath = getTailPath(path);
10121
+
10122
+ if (this.children === undefined) {
10123
+ this.children = Object.create(null);
10124
+ }
10125
+
10126
+ var keyStream = this.children[firstKey];
10127
+
10128
+ if (keyStream === undefined) {
10129
+ keyStream = this._makeChildStream(firstKey, path);
10130
+ this.children[firstKey] = keyStream;
10131
+ }
10132
+
10133
+ if (tailPath === undefined) {
10134
+ return keyStream;
10135
+ } else {
10136
+ return keyStream.get(tailPath);
10137
+ }
10138
+ },
10139
+
10140
+ value: function() {
10141
+ if (this.cache !== NIL) {
10142
+ return this.cache;
10143
+ } else {
10144
+ return this.cache = this.valueFn();
10145
+ }
10146
+ },
10147
+
10148
+ setValue: function() {
10149
+ throw new Error("Stream error: setValue not implemented");
10150
+ },
10151
+
10152
+ notify: function() {
10153
+ this.notifyExcept();
10154
+ },
10155
+
10156
+ notifyExcept: function(callbackToSkip, contextToSkip) {
10157
+ if (this.cache !== NIL) {
10158
+ this.cache = NIL;
10159
+ this.notifySubscribers(callbackToSkip, contextToSkip);
10160
+ }
10161
+ },
10162
+
10163
+ subscribe: function(callback, context) {
10164
+ if (this.subscribers === undefined) {
10165
+ this.subscribers = [callback, context];
10166
+ } else {
10167
+ this.subscribers.push(callback, context);
10168
+ }
10169
+ },
10170
+
10171
+ unsubscribe: function(callback, context) {
10172
+ var subscribers = this.subscribers;
10173
+
10174
+ if (subscribers !== undefined) {
10175
+ for (var i = 0, l = subscribers.length; i < l; i += 2) {
10176
+ if (subscribers[i] === callback && subscribers[i+1] === context) {
10177
+ subscribers.splice(i, 2);
10178
+ return;
10179
+ }
10180
+ }
10181
+ }
10182
+ },
10183
+
10184
+ notifySubscribers: function(callbackToSkip, contextToSkip) {
10185
+ var subscribers = this.subscribers;
10186
+
10187
+ if (subscribers !== undefined) {
10188
+ for (var i = 0, l = subscribers.length; i < l; i += 2) {
10189
+ var callback = subscribers[i];
10190
+ var context = subscribers[i+1];
10191
+
10192
+ if (callback === callbackToSkip && context === contextToSkip) {
10193
+ continue;
10194
+ }
10195
+
10196
+ if (context === undefined) {
10197
+ callback(this);
10198
+ } else {
10199
+ callback.call(context, this);
10200
+ }
10201
+ }
10202
+ }
10203
+ },
10204
+
10205
+ destroy: function() {
10206
+ if (this.destroyed) return;
10207
+ this.destroyed = true;
10208
+
10209
+ var children = this.children;
10210
+ for (var key in children) {
10211
+ children[key].destroy();
10212
+ }
10213
+ },
10214
+
10215
+ isGlobal: function() {
10216
+ var stream = this;
10217
+ while (stream !== undefined) {
10218
+ if (stream._isRoot) {
10219
+ return stream._isGlobal;
10220
+ }
10221
+ stream = stream.source;
10222
+ }
10223
+ }
10224
+ };
10225
+
10226
+ __exports__["default"] = Stream;
10227
+ });
10228
+ define("ember-metal/streams/stream_binding",
10229
+ ["ember-metal/platform","ember-metal/merge","ember-metal/run_loop","ember-metal/streams/stream","exports"],
10230
+ function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __exports__) {
10231
+ "use strict";
10232
+ var create = __dependency1__.create;
10233
+ var merge = __dependency2__["default"];
10234
+ var run = __dependency3__["default"];
10235
+ var Stream = __dependency4__["default"];
10236
+
10237
+ function StreamBinding(stream) {
10238
+ Ember.assert("StreamBinding error: tried to bind to object that is not a stream", stream && stream.isStream);
9916
10239
 
9917
- ```javascript
9918
- var anObject = Ember.Object.create();
10240
+ this.stream = stream;
10241
+ this.senderCallback = undefined;
10242
+ this.senderContext = undefined;
10243
+ this.senderValue = undefined;
10244
+ this.destroyed = false;
9919
10245
 
9920
- anObject.setProperties({
9921
- firstName: 'Stanley',
9922
- lastName: 'Stuart',
9923
- age: 21
9924
- });
9925
- ```
10246
+ stream.subscribe(this._onNotify, this);
10247
+ }
9926
10248
 
9927
- @method setProperties
9928
- @param obj
9929
- @param {Object} properties
9930
- @return obj
9931
- */
9932
- __exports__["default"] = function setProperties(obj, properties) {
9933
- if (!properties || typeof properties !== "object") { return obj; }
9934
- changeProperties(function() {
9935
- var props = keys(properties);
9936
- var propertyName;
10249
+ StreamBinding.prototype = create(Stream.prototype);
9937
10250
 
9938
- for (var i = 0, l = props.length; i < l; i++) {
9939
- propertyName = props[i];
10251
+ merge(StreamBinding.prototype, {
10252
+ valueFn: function() {
10253
+ return this.stream.value();
10254
+ },
10255
+
10256
+ _onNotify: function() {
10257
+ this._scheduleSync(undefined, undefined, this);
10258
+ },
10259
+
10260
+ setValue: function(value, callback, context) {
10261
+ this._scheduleSync(value, callback, context);
10262
+ },
9940
10263
 
9941
- set(obj, propertyName, properties[propertyName]);
10264
+ _scheduleSync: function(value, callback, context) {
10265
+ if (this.senderCallback === undefined && this.senderContext === undefined) {
10266
+ this.senderCallback = callback;
10267
+ this.senderContext = context;
10268
+ this.senderValue = value;
10269
+ run.schedule('sync', this, this._sync);
10270
+ } else if (this.senderContext !== this) {
10271
+ this.senderCallback = callback;
10272
+ this.senderContext = context;
10273
+ this.senderValue = value;
9942
10274
  }
9943
- });
9944
- return obj;
9945
- }
10275
+ },
10276
+
10277
+ _sync: function() {
10278
+ if (this.destroyed) {
10279
+ return;
10280
+ }
10281
+
10282
+ if (this.senderContext !== this) {
10283
+ this.stream.setValue(this.senderValue);
10284
+ }
10285
+
10286
+ var senderCallback = this.senderCallback;
10287
+ var senderContext = this.senderContext;
10288
+ this.senderCallback = undefined;
10289
+ this.senderContext = undefined;
10290
+ this.senderValue = undefined;
10291
+
10292
+ // Force StreamBindings to always notify
10293
+ this.cache = undefined;
10294
+
10295
+ this.notifyExcept(senderCallback, senderContext);
10296
+ },
10297
+
10298
+ destroy: function() {
10299
+ if (this.destroyed) {
10300
+ return;
10301
+ }
10302
+
10303
+ this.destroyed = true;
10304
+ this.stream.unsubscribe(this._onNotify, this);
10305
+ }
10306
+ });
10307
+
10308
+ __exports__["default"] = StreamBinding;
9946
10309
  });
9947
10310
  define("ember-metal/utils",
9948
10311
  ["ember-metal/core","ember-metal/platform","ember-metal/array","exports"],
9949
10312
  function(__dependency1__, __dependency2__, __dependency3__, __exports__) {
9950
- // Remove "use strict"; from transpiled module until
9951
- // https://bugs.webkit.org/show_bug.cgi?id=138038 is fixed
9952
- //
9953
- // REMOVE_USE_STRICT: true
9954
-
10313
+ "use strict";
9955
10314
  var Ember = __dependency1__["default"];
9956
10315
  var o_defineProperty = __dependency2__.defineProperty;
9957
10316
  var canDefineNonEnumerableProperties = __dependency2__.canDefineNonEnumerableProperties;
9958
10317
  var hasPropertyAccessors = __dependency2__.hasPropertyAccessors;
9959
- var create = __dependency2__.create;
10318
+ var o_create = __dependency2__.create;
9960
10319
 
9961
10320
  var forEach = __dependency3__.forEach;
9962
10321
 
@@ -9996,7 +10355,6 @@ define("ember-metal/utils",
9996
10355
  */
9997
10356
  var GUID_PREFIX = 'ember';
9998
10357
 
9999
- var o_create = create;
10000
10358
  // Used for guid generation...
10001
10359
  var numberCache = [];
10002
10360
  var stringCache = {};
@@ -10232,7 +10590,6 @@ define("ember-metal/utils",
10232
10590
  @return {Object} the meta hash for an object
10233
10591
  */
10234
10592
  function meta(obj, writable) {
10235
-
10236
10593
  var ret = obj['__ember_meta__'];
10237
10594
  if (writable===false) return ret || EMPTY_META;
10238
10595
 
@@ -10827,16 +11184,13 @@ define("ember-metal/watch_key",
10827
11184
  function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __exports__) {
10828
11185
  "use strict";
10829
11186
  var Ember = __dependency1__["default"];
10830
- var meta = __dependency2__.meta;
11187
+ var metaFor = __dependency2__.meta;
10831
11188
  var typeOf = __dependency2__.typeOf;
10832
11189
  var o_defineProperty = __dependency3__.defineProperty;
10833
11190
  var hasPropertyAccessors = __dependency3__.hasPropertyAccessors;
10834
11191
  var MANDATORY_SETTER_FUNCTION = __dependency4__.MANDATORY_SETTER_FUNCTION;
10835
11192
  var DEFAULT_GETTER_FUNCTION = __dependency4__.DEFAULT_GETTER_FUNCTION;
10836
11193
 
10837
- var metaFor = meta; // utils.js
10838
-
10839
-
10840
11194
  function watchKey(obj, keyName, meta) {
10841
11195
  // can't watch length on Array - it is special...
10842
11196
  if (keyName === 'length' && typeOf(obj) === 'array') { return; }
@@ -10872,8 +11226,8 @@ define("ember-metal/watch_key",
10872
11226
  m.values[keyName] = obj[keyName];
10873
11227
  o_defineProperty(obj, keyName, {
10874
11228
  configurable: true,
10875
- enumerable: Object.prototype.propertyIsEnumerable.call(obj, keyName),
10876
- set: MANDATORY_SETTER_FUNCTION(keyName),
11229
+ enumerable: obj.propertyIsEnumerable(keyName),
11230
+ set: MANDATORY_SETTER_FUNCTION,
10877
11231
  get: DEFAULT_GETTER_FUNCTION(keyName)
10878
11232
  });
10879
11233
  }
@@ -10897,7 +11251,7 @@ define("ember-metal/watch_key",
10897
11251
  if (hasPropertyAccessors && keyName in obj) {
10898
11252
  o_defineProperty(obj, keyName, {
10899
11253
  configurable: true,
10900
- enumerable: Object.prototype.propertyIsEnumerable.call(obj, keyName),
11254
+ enumerable: obj.propertyIsEnumerable(keyName),
10901
11255
  set: function(val) {
10902
11256
  // redefine to set as enumerable
10903
11257
  o_defineProperty(obj, keyName, {
@@ -10923,12 +11277,10 @@ define("ember-metal/watch_path",
10923
11277
  ["ember-metal/utils","ember-metal/chains","exports"],
10924
11278
  function(__dependency1__, __dependency2__, __exports__) {
10925
11279
  "use strict";
10926
- var meta = __dependency1__.meta;
11280
+ var metaFor = __dependency1__.meta;
10927
11281
  var typeOf = __dependency1__.typeOf;
10928
11282
  var ChainNode = __dependency2__.ChainNode;
10929
11283
 
10930
- var metaFor = meta;
10931
-
10932
11284
  // get the chains for the current object. If the current object has
10933
11285
  // chains inherited from the proto they will be cloned and reconfigured for
10934
11286
  // the current object.
@@ -10980,7 +11332,6 @@ define("ember-metal/watching",
10980
11332
  @module ember-metal
10981
11333
  */
10982
11334
 
10983
- var meta = __dependency1__.meta;
10984
11335
  var GUID_KEY = __dependency1__.GUID_KEY;
10985
11336
  var typeOf = __dependency1__.typeOf;
10986
11337
  var generateGuid = __dependency1__.generateGuid;
@@ -10991,7 +11342,6 @@ define("ember-metal/watching",
10991
11342
  var watchPath = __dependency4__.watchPath;
10992
11343
  var unwatchPath = __dependency4__.unwatchPath;
10993
11344
 
10994
- var metaFor = meta; // utils.js
10995
11345
  var isPath = __dependency5__.isPath;
10996
11346
 
10997
11347
  /**
@@ -11108,8 +11458,8 @@ define("ember-metal/watching",
11108
11458
  __exports__.destroy = destroy;
11109
11459
  });
11110
11460
  define("ember-runtime",
11111
- ["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"],
11112
- 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__) {
11461
+ ["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"],
11462
+ 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__) {
11113
11463
  "use strict";
11114
11464
  /**
11115
11465
  Ember Runtime
@@ -11124,13 +11474,13 @@ define("ember-runtime",
11124
11474
  var isEqual = __dependency2__.isEqual;
11125
11475
  var compare = __dependency3__["default"];
11126
11476
  var copy = __dependency4__["default"];
11477
+ var inject = __dependency5__["default"];
11127
11478
 
11128
- var Namespace = __dependency5__["default"];
11129
- var EmberObject = __dependency6__["default"];
11130
- var TrackedArray = __dependency7__["default"];
11131
- var SubArray = __dependency8__["default"];
11132
- var Container = __dependency9__["default"];
11133
- var Application = __dependency10__["default"];
11479
+ var Namespace = __dependency6__["default"];
11480
+ var EmberObject = __dependency7__["default"];
11481
+ var TrackedArray = __dependency8__["default"];
11482
+ var SubArray = __dependency9__["default"];
11483
+ var Container = __dependency10__["default"];
11134
11484
  var ArrayProxy = __dependency11__["default"];
11135
11485
  var ObjectProxy = __dependency12__["default"];
11136
11486
  var CoreObject = __dependency13__["default"];
@@ -11187,7 +11537,9 @@ define("ember-runtime",
11187
11537
  var Controller = __dependency40__["default"];
11188
11538
  var ControllerMixin = __dependency41__["default"];
11189
11539
 
11190
- var RSVP = __dependency42__["default"];
11540
+ var Service = __dependency42__["default"];
11541
+
11542
+ var RSVP = __dependency43__["default"];
11191
11543
  // just for side effect of extending Ember.RSVP
11192
11544
  // just for side effect of extending String.prototype
11193
11545
  // just for side effect of extending Function.prototype
@@ -11198,6 +11550,10 @@ define("ember-runtime",
11198
11550
  Ember.copy = copy;
11199
11551
  Ember.isEqual = isEqual;
11200
11552
 
11553
+ if (Ember.FEATURES.isEnabled('ember-metal-injected-properties')) {
11554
+ Ember.inject = inject;
11555
+ }
11556
+
11201
11557
  Ember.Array = EmberArray;
11202
11558
 
11203
11559
  Ember.Comparable = Comparable;
@@ -11269,6 +11625,10 @@ define("ember-runtime",
11269
11625
  Ember.Controller = Controller;
11270
11626
  Ember.ControllerMixin = ControllerMixin;
11271
11627
 
11628
+ if (Ember.FEATURES.isEnabled('ember-metal-injected-properties')) {
11629
+ Ember.Service = Service;
11630
+ }
11631
+
11272
11632
  Ember._ProxyMixin = _ProxyMixin;
11273
11633
 
11274
11634
  Ember.RSVP = RSVP;
@@ -11395,7 +11755,6 @@ define("ember-runtime/computed/array_computed",
11395
11755
  function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __exports__) {
11396
11756
  "use strict";
11397
11757
  var Ember = __dependency1__["default"];
11398
- var reduceComputed = __dependency2__.reduceComputed;
11399
11758
  var ReduceComputedProperty = __dependency2__.ReduceComputedProperty;
11400
11759
  var forEach = __dependency3__.forEach;
11401
11760
  var o_create = __dependency4__.create;
@@ -11584,32 +11943,30 @@ define("ember-runtime/computed/array_computed",
11584
11943
  __exports__.ArrayComputedProperty = ArrayComputedProperty;
11585
11944
  });
11586
11945
  define("ember-runtime/computed/reduce_computed",
11587
- ["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"],
11588
- function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __dependency8__, __dependency9__, __dependency10__, __dependency11__, __dependency12__, __dependency13__, __dependency14__, __exports__) {
11946
+ ["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"],
11947
+ function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __dependency8__, __dependency9__, __dependency10__, __dependency11__, __dependency12__, __dependency13__, __exports__) {
11589
11948
  "use strict";
11590
11949
  var Ember = __dependency1__["default"];
11591
11950
  // Ember.assert
11592
11951
  var e_get = __dependency2__.get;
11593
- var set = __dependency3__.set;
11594
- var guidFor = __dependency4__.guidFor;
11595
- var metaFor = __dependency4__.meta;
11596
- var EmberError = __dependency5__["default"];
11597
- var propertyWillChange = __dependency6__.propertyWillChange;
11598
- var propertyDidChange = __dependency6__.propertyDidChange;
11599
- var expandProperties = __dependency7__["default"];
11600
- var addObserver = __dependency8__.addObserver;
11601
- var observersFor = __dependency8__.observersFor;
11602
- var removeObserver = __dependency8__.removeObserver;
11603
- var addBeforeObserver = __dependency8__.addBeforeObserver;
11604
- var removeBeforeObserver = __dependency8__.removeBeforeObserver;
11605
- var ComputedProperty = __dependency9__.ComputedProperty;
11606
- var cacheFor = __dependency9__.cacheFor;
11607
- var o_create = __dependency10__.create;
11608
- var forEach = __dependency11__.forEach;
11609
- var TrackedArray = __dependency12__["default"];
11610
- var EmberArray = __dependency13__["default"];
11611
- var run = __dependency14__["default"];
11612
- var isArray = __dependency4__.isArray;
11952
+ var guidFor = __dependency3__.guidFor;
11953
+ var metaFor = __dependency3__.meta;
11954
+ var EmberError = __dependency4__["default"];
11955
+ var propertyWillChange = __dependency5__.propertyWillChange;
11956
+ var propertyDidChange = __dependency5__.propertyDidChange;
11957
+ var expandProperties = __dependency6__["default"];
11958
+ var addObserver = __dependency7__.addObserver;
11959
+ var removeObserver = __dependency7__.removeObserver;
11960
+ var addBeforeObserver = __dependency7__.addBeforeObserver;
11961
+ var removeBeforeObserver = __dependency7__.removeBeforeObserver;
11962
+ var ComputedProperty = __dependency8__.ComputedProperty;
11963
+ var cacheFor = __dependency8__.cacheFor;
11964
+ var o_create = __dependency9__.create;
11965
+ var forEach = __dependency10__.forEach;
11966
+ var TrackedArray = __dependency11__["default"];
11967
+ var EmberArray = __dependency12__["default"];
11968
+ var run = __dependency13__["default"];
11969
+ var isArray = __dependency3__.isArray;
11613
11970
 
11614
11971
  var cacheSet = cacheFor.set;
11615
11972
  var cacheGet = cacheFor.get;
@@ -11861,7 +12218,6 @@ define("ember-runtime/computed/reduce_computed",
11861
12218
  this.setValue(removedItem.call(
11862
12219
  this.instanceMeta.context, this.getValue(), item, changeMeta, this.instanceMeta.sugarMeta));
11863
12220
  }
11864
- this.callbacks.flushedChanges.call(this.instanceMeta.context, this.getValue(), this.instanceMeta.sugarMeta);
11865
12221
  },
11866
12222
 
11867
12223
  dependentArrayDidChange: function (dependentArray, index, removedCount, addedCount) {
@@ -11893,7 +12249,7 @@ define("ember-runtime/computed/reduce_computed",
11893
12249
  this.setValue(addedItem.call(
11894
12250
  this.instanceMeta.context, this.getValue(), item, changeMeta, this.instanceMeta.sugarMeta));
11895
12251
  }, this);
11896
- this.callbacks.flushedChanges.call(this.instanceMeta.context, this.getValue(), this.instanceMeta.sugarMeta);
12252
+
11897
12253
  this.trackAdd(dependentKey, normalizedIndex, observerContexts);
11898
12254
  },
11899
12255
 
@@ -11937,7 +12293,6 @@ define("ember-runtime/computed/reduce_computed",
11937
12293
  }
11938
12294
 
11939
12295
  this.changedItems = {};
11940
- this.callbacks.flushedChanges.call(this.instanceMeta.context, this.getValue(), this.instanceMeta.sugarMeta);
11941
12296
  }
11942
12297
  };
11943
12298
 
@@ -11974,11 +12329,9 @@ define("ember-runtime/computed/reduce_computed",
11974
12329
  meta.setValue( callbacks.addedItem.call(
11975
12330
  this, meta.getValue(), item, new ChangeMeta(dependentArray, item, index, propertyName, cp, dependentArray.length), meta.sugarMeta));
11976
12331
  }, this);
11977
- callbacks.flushedChanges.call(this, meta.getValue(), meta.sugarMeta);
11978
12332
  }
11979
12333
 
11980
12334
  function reset(cp, propertyName) {
11981
- var callbacks = cp._callbacks();
11982
12335
  var hadMeta = cp._hasInstanceMeta(this, propertyName);
11983
12336
  var meta = cp._instanceMeta(this, propertyName);
11984
12337
 
@@ -12078,7 +12431,6 @@ define("ember-runtime/computed/reduce_computed",
12078
12431
  };
12079
12432
 
12080
12433
  var recompute = function(propertyName) {
12081
- var dependentKeys = cp._dependentKeys;
12082
12434
  var meta = cp._instanceMeta(this, propertyName);
12083
12435
  var callbacks = cp._callbacks();
12084
12436
 
@@ -12152,8 +12504,7 @@ define("ember-runtime/computed/reduce_computed",
12152
12504
 
12153
12505
  this.callbacks = {
12154
12506
  removedItem: options.removedItem || defaultCallback,
12155
- addedItem: options.addedItem || defaultCallback,
12156
- flushedChanges: options.flushedChanges || defaultCallback
12507
+ addedItem: options.addedItem || defaultCallback
12157
12508
  };
12158
12509
  }
12159
12510
 
@@ -12205,7 +12556,7 @@ define("ember-runtime/computed/reduce_computed",
12205
12556
  var cp = this;
12206
12557
  var args = a_slice.call(arguments);
12207
12558
  var propertyArgs = {};
12208
- var match, dependentArrayKey, itemPropertyKey;
12559
+ var match, dependentArrayKey;
12209
12560
 
12210
12561
  forEach(args, function (dependentKey) {
12211
12562
  if (doubleEachPropertyPattern.test(dependentKey)) {
@@ -12446,8 +12797,8 @@ define("ember-runtime/computed/reduce_computed",
12446
12797
  __exports__.reduceComputed = reduceComputed;
12447
12798
  });
12448
12799
  define("ember-runtime/computed/reduce_computed_macros",
12449
- ["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"],
12450
- function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __dependency8__, __dependency9__, __dependency10__, __dependency11__, __dependency12__, __dependency13__, __exports__) {
12800
+ ["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"],
12801
+ function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __dependency8__, __dependency9__, __dependency10__, __dependency11__, __dependency12__, __dependency13__, __dependency14__, __exports__) {
12451
12802
  "use strict";
12452
12803
  /**
12453
12804
  @module ember
@@ -12456,8 +12807,8 @@ define("ember-runtime/computed/reduce_computed_macros",
12456
12807
 
12457
12808
  var Ember = __dependency1__["default"];
12458
12809
  // Ember.assert
12459
- var get = __dependency2__.get;
12460
- var set = __dependency3__.set;
12810
+ var merge = __dependency2__["default"];
12811
+ var get = __dependency3__.get;
12461
12812
  var isArray = __dependency4__.isArray;
12462
12813
  var guidFor = __dependency4__.guidFor;
12463
12814
  var EmberError = __dependency5__["default"];
@@ -12466,9 +12817,10 @@ define("ember-runtime/computed/reduce_computed_macros",
12466
12817
  var addObserver = __dependency8__.addObserver;
12467
12818
  var arrayComputed = __dependency9__.arrayComputed;
12468
12819
  var reduceComputed = __dependency10__.reduceComputed;
12469
- var SubArray = __dependency11__["default"];
12470
- var keys = __dependency12__["default"];
12471
- var compare = __dependency13__["default"];
12820
+ var ObjectProxy = __dependency11__["default"];
12821
+ var SubArray = __dependency12__["default"];
12822
+ var keys = __dependency13__["default"];
12823
+ var compare = __dependency14__["default"];
12472
12824
 
12473
12825
  var a_slice = [].slice;
12474
12826
 
@@ -12935,7 +13287,6 @@ define("ember-runtime/computed/reduce_computed_macros",
12935
13287
  removedItem: function(array, item, changeMeta, instanceMeta) {
12936
13288
  var itemGuid = guidFor(item);
12937
13289
  var dependentGuid = guidFor(changeMeta.arrayChanged);
12938
- var numberOfDependentArrays = changeMeta.property._dependentKeys.length;
12939
13290
  var numberOfArraysItemAppearsIn;
12940
13291
  var itemCounts = instanceMeta.itemCounts;
12941
13292
 
@@ -13048,8 +13399,8 @@ define("ember-runtime/computed/reduce_computed_macros",
13048
13399
  mid = low + Math.floor((high - low) / 2);
13049
13400
  midItem = array.objectAt(mid);
13050
13401
 
13051
- guidMid = guidFor(midItem);
13052
- guidItem = guidFor(item);
13402
+ guidMid = _guidFor(midItem);
13403
+ guidItem = _guidFor(item);
13053
13404
 
13054
13405
  if (guidMid === guidItem) {
13055
13406
  return mid;
@@ -13069,9 +13420,19 @@ define("ember-runtime/computed/reduce_computed_macros",
13069
13420
  }
13070
13421
 
13071
13422
  return mid;
13423
+
13424
+ function _guidFor(item) {
13425
+ if (SearchProxy.detectInstance(item)) {
13426
+ return guidFor(get(item, 'content'));
13427
+ }
13428
+
13429
+ return guidFor(item);
13430
+ }
13072
13431
  }
13073
13432
 
13074
13433
 
13434
+ var SearchProxy = ObjectProxy.extend();
13435
+
13075
13436
  /**
13076
13437
  A computed property which returns a new array with all the
13077
13438
  properties from the first dependent array sorted based on a property
@@ -13140,53 +13501,17 @@ define("ember-runtime/computed/reduce_computed_macros",
13140
13501
  Ember.assert('Ember.computed.sort requires two arguments: an array key to sort and ' +
13141
13502
  'either a sort properties key or sort function', arguments.length === 2);
13142
13503
 
13143
- if (typeof sortDefinition === 'function') {
13144
- return customSort(itemsKey, sortDefinition);
13145
- } else {
13146
- return propertySort(itemsKey, sortDefinition);
13147
- }
13148
- }
13504
+ var initFn, sortPropertiesKey;
13149
13505
 
13150
- __exports__.sort = sort;function customSort(itemsKey, comparator) {
13151
- return arrayComputed(itemsKey, {
13152
- initialize: function (array, changeMeta, instanceMeta) {
13153
- instanceMeta.order = comparator;
13506
+ if (typeof sortDefinition === 'function') {
13507
+ initFn = function (array, changeMeta, instanceMeta) {
13508
+ instanceMeta.order = sortDefinition;
13154
13509
  instanceMeta.binarySearch = binarySearch;
13155
- instanceMeta.waitingInsertions = [];
13156
- instanceMeta.insertWaiting = function() {
13157
- var index, item;
13158
- var waiting = instanceMeta.waitingInsertions;
13159
- instanceMeta.waitingInsertions = [];
13160
- for (var i=0; i<waiting.length; i++) {
13161
- item = waiting[i];
13162
- index = instanceMeta.binarySearch(array, item);
13163
- array.insertAt(index, item);
13164
- }
13165
- };
13166
- instanceMeta.insertLater = function(item) {
13167
- this.waitingInsertions.push(item);
13168
- };
13169
- },
13170
-
13171
- addedItem: function (array, item, changeMeta, instanceMeta) {
13172
- instanceMeta.insertLater(item);
13173
- return array;
13174
- },
13175
-
13176
- removedItem: function (array, item, changeMeta, instanceMeta) {
13177
- array.removeObject(item);
13178
- return array;
13179
- },
13180
-
13181
- flushedChanges: function(array, instanceMeta) {
13182
- instanceMeta.insertWaiting();
13183
- }
13184
- });
13185
- }
13510
+ };
13511
+ } else {
13512
+ sortPropertiesKey = sortDefinition;
13186
13513
 
13187
- function propertySort(itemsKey, sortPropertiesKey) {
13188
- return arrayComputed(itemsKey, {
13189
- initialize: function (array, changeMeta, instanceMeta) {
13514
+ initFn = function (array, changeMeta, instanceMeta) {
13190
13515
  function setupSortProperties() {
13191
13516
  var sortPropertyDefinitions = get(this, sortPropertiesKey);
13192
13517
  var sortProperties = instanceMeta.sortProperties = [];
@@ -13194,7 +13519,7 @@ define("ember-runtime/computed/reduce_computed_macros",
13194
13519
  var sortProperty, idx, asc;
13195
13520
 
13196
13521
  Ember.assert('Cannot sort: \'' + sortPropertiesKey + '\' is not an array.',
13197
- isArray(sortPropertyDefinitions));
13522
+ isArray(sortPropertyDefinitions));
13198
13523
 
13199
13524
  changeMeta.property.clearItemPropertyKeys(itemsKey);
13200
13525
 
@@ -13228,14 +13553,12 @@ define("ember-runtime/computed/reduce_computed_macros",
13228
13553
  setupSortProperties.call(this);
13229
13554
 
13230
13555
  instanceMeta.order = function (itemA, itemB) {
13556
+ var isProxy = itemB instanceof SearchProxy;
13231
13557
  var sortProperty, result, asc;
13232
- var keyA = this.keyFor(itemA);
13233
- var keyB = this.keyFor(itemB);
13234
13558
 
13235
13559
  for (var i = 0; i < this.sortProperties.length; ++i) {
13236
13560
  sortProperty = this.sortProperties[i];
13237
-
13238
- result = compare(keyA[sortProperty], keyB[sortProperty]);
13561
+ result = compare(get(itemA, sortProperty), isProxy ? itemB[sortProperty] : get(itemB, sortProperty));
13239
13562
 
13240
13563
  if (result !== 0) {
13241
13564
  asc = this.sortPropertyAscending[sortProperty];
@@ -13247,50 +13570,43 @@ define("ember-runtime/computed/reduce_computed_macros",
13247
13570
  };
13248
13571
 
13249
13572
  instanceMeta.binarySearch = binarySearch;
13250
- setupKeyCache(instanceMeta);
13251
- },
13573
+ };
13574
+ }
13575
+
13576
+ return arrayComputed(itemsKey, {
13577
+ initialize: initFn,
13252
13578
 
13253
13579
  addedItem: function (array, item, changeMeta, instanceMeta) {
13254
13580
  var index = instanceMeta.binarySearch(array, item);
13255
13581
  array.insertAt(index, item);
13582
+
13256
13583
  return array;
13257
13584
  },
13258
13585
 
13259
13586
  removedItem: function (array, item, changeMeta, instanceMeta) {
13260
- var index = instanceMeta.binarySearch(array, item);
13587
+ var proxyProperties, index, searchItem;
13588
+
13589
+ if (changeMeta.previousValues) {
13590
+ proxyProperties = merge({ content: item }, changeMeta.previousValues);
13591
+
13592
+ searchItem = SearchProxy.create(proxyProperties);
13593
+ } else {
13594
+ searchItem = item;
13595
+ }
13596
+
13597
+ index = instanceMeta.binarySearch(array, searchItem);
13261
13598
  array.removeAt(index);
13262
- instanceMeta.dropKeyFor(item);
13599
+
13263
13600
  return array;
13264
13601
  }
13265
13602
  });
13266
13603
  }
13267
13604
 
13268
- function setupKeyCache(instanceMeta) {
13269
- instanceMeta.keyFor = function(item) {
13270
- var guid = guidFor(item);
13271
- if (this.keyCache[guid]) {
13272
- return this.keyCache[guid];
13273
- }
13274
- var sortProperty;
13275
- var key = {};
13276
- for (var i = 0; i < this.sortProperties.length; ++i) {
13277
- sortProperty = this.sortProperties[i];
13278
- key[sortProperty] = get(item, sortProperty);
13279
- }
13280
- return this.keyCache[guid] = key;
13281
- };
13282
-
13283
- instanceMeta.dropKeyFor = function(item) {
13284
- var guid = guidFor(item);
13285
- this.keyCache[guid] = null;
13286
- };
13287
-
13288
- instanceMeta.keyCache = {};
13289
- }
13605
+ __exports__.sort = sort;
13290
13606
  });
13291
13607
  define("ember-runtime/controllers/array_controller",
13292
- ["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"],
13293
- function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __dependency8__, __dependency9__, __exports__) {
13608
+ ["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"],
13609
+ function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __dependency8__, __exports__) {
13294
13610
  "use strict";
13295
13611
  /**
13296
13612
  @module ember
@@ -13299,14 +13615,13 @@ define("ember-runtime/controllers/array_controller",
13299
13615
 
13300
13616
  var Ember = __dependency1__["default"];
13301
13617
  var get = __dependency2__.get;
13302
- var set = __dependency3__.set;
13303
- var forEach = __dependency4__.forEach;
13304
- var replace = __dependency4__.replace;
13305
- var ArrayProxy = __dependency5__["default"];
13306
- var SortableMixin = __dependency6__["default"];
13307
- var ControllerMixin = __dependency7__["default"];
13308
- var computed = __dependency8__.computed;
13309
- var EmberError = __dependency9__["default"];
13618
+ var forEach = __dependency3__.forEach;
13619
+ var replace = __dependency3__.replace;
13620
+ var ArrayProxy = __dependency4__["default"];
13621
+ var SortableMixin = __dependency5__["default"];
13622
+ var ControllerMixin = __dependency6__["default"];
13623
+ var computed = __dependency7__.computed;
13624
+ var EmberError = __dependency8__["default"];
13310
13625
 
13311
13626
 
13312
13627
  /**
@@ -13533,7 +13848,28 @@ define("ember-runtime/controllers/array_controller",
13533
13848
  parentController = this;
13534
13849
  }
13535
13850
 
13536
-
13851
+ if (Ember.FEATURES.isEnabled("ember-runtime-item-controller-inline-class")) {
13852
+ options = {
13853
+ target: parentController,
13854
+ parentController: parentController,
13855
+ model: object
13856
+ };
13857
+
13858
+ if (typeof controllerClass === 'string') {
13859
+ fullName = 'controller:' + controllerClass;
13860
+
13861
+ if (!container.has(fullName)) {
13862
+ throw new EmberError('Could not resolve itemController: "' + controllerClass + '"');
13863
+ }
13864
+
13865
+ subControllerFactory = container.lookupFactory(fullName);
13866
+ } else {
13867
+ subControllerFactory = controllerClass;
13868
+ options.container = container;
13869
+ }
13870
+
13871
+ subController = subControllerFactory.create(options);
13872
+ } else {
13537
13873
  fullName = 'controller:' + controllerClass;
13538
13874
 
13539
13875
  if (!container.has(fullName)) {
@@ -13545,7 +13881,7 @@ define("ember-runtime/controllers/array_controller",
13545
13881
  parentController: parentController,
13546
13882
  model: object
13547
13883
  });
13548
-
13884
+ }
13549
13885
 
13550
13886
  subControllers[idx] = subController;
13551
13887
 
@@ -13578,11 +13914,14 @@ define("ember-runtime/controllers/array_controller",
13578
13914
  });
13579
13915
  });
13580
13916
  define("ember-runtime/controllers/controller",
13581
- ["ember-runtime/system/object","ember-runtime/mixins/controller","exports"],
13582
- function(__dependency1__, __dependency2__, __exports__) {
13917
+ ["ember-metal/core","ember-runtime/system/object","ember-runtime/mixins/controller","ember-runtime/inject","exports"],
13918
+ function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __exports__) {
13583
13919
  "use strict";
13584
- var EmberObject = __dependency1__["default"];
13585
- var Mixin = __dependency2__["default"];
13920
+ var Ember = __dependency1__["default"];
13921
+ // Ember.assert
13922
+ var EmberObject = __dependency2__["default"];
13923
+ var Mixin = __dependency3__["default"];
13924
+ var createInjectionHelper = __dependency4__.createInjectionHelper;
13586
13925
 
13587
13926
  /**
13588
13927
  @module ember
@@ -13595,7 +13934,45 @@ define("ember-runtime/controllers/controller",
13595
13934
  @extends Ember.Object
13596
13935
  @uses Ember.ControllerMixin
13597
13936
  */
13598
- __exports__["default"] = EmberObject.extend(Mixin);
13937
+ var Controller = EmberObject.extend(Mixin);
13938
+
13939
+ if (Ember.FEATURES.isEnabled('ember-metal-injected-properties')) {
13940
+ /**
13941
+ Creates a property that lazily looks up another controller in the container.
13942
+ Can only be used when defining another controller.
13943
+
13944
+ Example:
13945
+
13946
+ ```javascript
13947
+ App.PostController = Ember.Controller.extend({
13948
+ posts: Ember.inject.controller()
13949
+ });
13950
+ ```
13951
+
13952
+ This example will create a `posts` property on the `post` controller that
13953
+ looks up the `posts` controller in the container, making it easy to
13954
+ reference other controllers. This is functionally equivalent to:
13955
+
13956
+ ```javascript
13957
+ App.PostController = Ember.Controller.extend({
13958
+ needs: 'posts',
13959
+ posts: Ember.computed.alias('controllers.posts')
13960
+ });
13961
+ ```
13962
+
13963
+ @method inject.controller
13964
+ @for Ember
13965
+ @param {String} name (optional) name of the controller to inject, defaults
13966
+ to the property's name
13967
+ @return {Ember.InjectedProperty} injection descriptor instance
13968
+ */
13969
+ createInjectionHelper('controller', function(factory) {
13970
+ Ember.assert("Defining an injected controller property on a " +
13971
+ "non-controller is not allowed.", Controller.detect(factory));
13972
+ });
13973
+ }
13974
+
13975
+ __exports__["default"] = Controller;
13599
13976
  });
13600
13977
  define("ember-runtime/controllers/object_controller",
13601
13978
  ["ember-runtime/mixins/controller","ember-runtime/system/object_proxy","exports"],
@@ -13981,8 +14358,8 @@ define("ember-runtime/ext/function",
13981
14358
  }
13982
14359
  });
13983
14360
  define("ember-runtime/ext/rsvp",
13984
- ["ember-metal/core","ember-metal/logger","ember-metal/run_loop","exports"],
13985
- function(__dependency1__, __dependency2__, __dependency3__, __exports__) {
14361
+ ["ember-metal/core","ember-metal/logger","ember-metal/run_loop","rsvp","exports"],
14362
+ function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __exports__) {
13986
14363
  "use strict";
13987
14364
  /* globals RSVP:true */
13988
14365
 
@@ -13990,7 +14367,12 @@ define("ember-runtime/ext/rsvp",
13990
14367
  var Logger = __dependency2__["default"];
13991
14368
  var run = __dependency3__["default"];
13992
14369
 
13993
- var RSVP = requireModule('rsvp');
14370
+ // this is technically incorrect (per @wycats)
14371
+ // it should be `import * as RSVP from 'rsvp';` but
14372
+ // Esprima does not support this syntax yet (and neither does
14373
+ // es6-module-transpiler 0.4.0 - 0.6.2).
14374
+ var RSVP = __dependency4__;
14375
+
13994
14376
  var testModuleName = 'ember-testing/test';
13995
14377
  var Test;
13996
14378
 
@@ -14164,9 +14546,93 @@ define("ember-runtime/ext/string",
14164
14546
  };
14165
14547
  }
14166
14548
  });
14549
+ define("ember-runtime/inject",
14550
+ ["ember-metal/core","ember-metal/enumerable_utils","ember-metal/injected_property","ember-metal/keys","exports"],
14551
+ function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __exports__) {
14552
+ "use strict";
14553
+ var Ember = __dependency1__["default"];
14554
+ // Ember.assert
14555
+ var indexOf = __dependency2__.indexOf;
14556
+ var InjectedProperty = __dependency3__["default"];
14557
+ var keys = __dependency4__["default"];
14558
+
14559
+ /**
14560
+ Namespace for injection helper methods.
14561
+
14562
+ @class inject
14563
+ @namespace Ember
14564
+ */
14565
+ function inject() {
14566
+ Ember.assert("Injected properties must be created through helpers, see `" +
14567
+ keys(inject).join("`, `") + "`");
14568
+ }
14569
+
14570
+ // Dictionary of injection validations by type, added to by `createInjectionHelper`
14571
+ var typeValidators = {};
14572
+
14573
+ /**
14574
+ This method allows other Ember modules to register injection helpers for a
14575
+ given container type. Helpers are exported to the `inject` namespace as the
14576
+ container type itself.
14577
+
14578
+ @private
14579
+ @method createInjectionHelper
14580
+ @namespace Ember
14581
+ @param {String} type The container type the helper will inject
14582
+ @param {Function} validator A validation callback that is executed at mixin-time
14583
+ */
14584
+ function createInjectionHelper(type, validator) {
14585
+ typeValidators[type] = validator;
14586
+
14587
+ inject[type] = function(name) {
14588
+ return new InjectedProperty(type, name);
14589
+ };
14590
+ }
14591
+
14592
+ __exports__.createInjectionHelper = createInjectionHelper;/**
14593
+ Validation function intended to be invoked at when extending a factory with
14594
+ injected properties. Runs per-type validation functions once for each injected
14595
+ type encountered.
14596
+
14597
+ Note that this currently modifies the mixin themselves, which is technically
14598
+ dubious but is practically of little consequence. This may change in the
14599
+ future.
14600
+
14601
+ @private
14602
+ @method validatePropertyInjections
14603
+ @namespace Ember
14604
+ @param {Object} factory The factory object being extended
14605
+ @param {Object} props A hash of properties to be added to the factory
14606
+ */
14607
+ function validatePropertyInjections(factory, props) {
14608
+ var types = [];
14609
+ var key, desc, validator, i, l;
14610
+
14611
+ for (key in props) {
14612
+ desc = props[key];
14613
+ if (desc instanceof InjectedProperty && indexOf(types, desc.type) === -1) {
14614
+ types.push(desc.type);
14615
+ }
14616
+ }
14617
+
14618
+ if (types.length) {
14619
+ for (i = 0, l = types.length; i < l; i++) {
14620
+ validator = typeValidators[types[i]];
14621
+
14622
+ if (typeof validator === 'function') {
14623
+ validator(factory);
14624
+ }
14625
+ }
14626
+ }
14627
+
14628
+ return true;
14629
+ }
14630
+
14631
+ __exports__.validatePropertyInjections = validatePropertyInjections;__exports__["default"] = inject;
14632
+ });
14167
14633
  define("ember-runtime/mixins/-proxy",
14168
- ["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"],
14169
- function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __dependency8__, __dependency9__, __dependency10__, __dependency11__, __exports__) {
14634
+ ["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"],
14635
+ function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __dependency8__, __dependency9__, __dependency10__, __exports__) {
14170
14636
  "use strict";
14171
14637
  /**
14172
14638
  @module ember
@@ -14189,7 +14655,6 @@ define("ember-runtime/mixins/-proxy",
14189
14655
  var Mixin = __dependency9__.Mixin;
14190
14656
  var observer = __dependency9__.observer;
14191
14657
  var fmt = __dependency10__.fmt;
14192
- var EmberObject = __dependency11__["default"];
14193
14658
 
14194
14659
  function contentPropertyWillChange(content, contentKey) {
14195
14660
  var key = contentKey.slice(8); // remove "content."
@@ -14256,7 +14721,8 @@ define("ember-runtime/mixins/-proxy",
14256
14721
  }
14257
14722
 
14258
14723
  var content = get(this, 'content');
14259
- Ember.assert(fmt("Cannot delegate set('%@', %@) to the 'content' property of object proxy %@: its 'content' is undefined.", [key, value, this]), content);
14724
+ Ember.assert(fmt("Cannot delegate set('%@', %@) to the 'content' property of" +
14725
+ " object proxy %@: its 'content' is undefined.", [key, value, this]), content);
14260
14726
  return set(content, key, value);
14261
14727
  }
14262
14728
 
@@ -14422,6 +14888,12 @@ define("ember-runtime/mixins/action_handler",
14422
14888
  @method willMergeMixin
14423
14889
  */
14424
14890
  willMergeMixin: function(props) {
14891
+ if (Ember.FEATURES.isEnabled('ember-metal-injected-properties')) {
14892
+ // Calling super is only OK here since we KNOW that there is another
14893
+ // Mixin loaded first (injection dependency verification)
14894
+ this._super.apply(this, arguments);
14895
+ }
14896
+
14425
14897
  var hashName;
14426
14898
 
14427
14899
  if (!props._actions) {
@@ -14430,7 +14902,8 @@ define("ember-runtime/mixins/action_handler",
14430
14902
  if (typeOf(props.actions) === 'object') {
14431
14903
  hashName = 'actions';
14432
14904
  } else if (typeOf(props.events) === 'object') {
14433
- Ember.deprecate('Action handlers contained in an `events` object are deprecated in favor of putting them in an `actions` object', false);
14905
+ Ember.deprecate('Action handlers contained in an `events` object are deprecated in favor' +
14906
+ ' of putting them in an `actions` object', false);
14434
14907
  hashName = 'events';
14435
14908
  }
14436
14909
 
@@ -14484,7 +14957,8 @@ define("ember-runtime/mixins/action_handler",
14484
14957
  }
14485
14958
 
14486
14959
  if (target = get(this, 'target')) {
14487
- Ember.assert("The `target` for " + this + " (" + target + ") does not have a `send` method", typeof target.send === 'function');
14960
+ Ember.assert("The `target` for " + this + " (" + target +
14961
+ ") does not have a `send` method", typeof target.send === 'function');
14488
14962
  target.send.apply(target, arguments);
14489
14963
  }
14490
14964
  }
@@ -14506,11 +14980,11 @@ define("ember-runtime/mixins/array",
14506
14980
  //
14507
14981
  var Ember = __dependency1__["default"];
14508
14982
  // ES6TODO: Ember.A
14983
+
14509
14984
  var get = __dependency2__.get;
14510
14985
  var computed = __dependency3__.computed;
14511
14986
  var cacheFor = __dependency3__.cacheFor;
14512
14987
  var isNone = __dependency4__.isNone;
14513
- var none = __dependency4__.none;
14514
14988
  var Enumerable = __dependency5__["default"];
14515
14989
  var map = __dependency6__.map;
14516
14990
  var Mixin = __dependency7__.Mixin;
@@ -15056,17 +15530,13 @@ define("ember-runtime/mixins/comparable",
15056
15530
  });
15057
15531
  });
15058
15532
  define("ember-runtime/mixins/controller",
15059
- ["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"],
15060
- function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __exports__) {
15533
+ ["ember-metal/mixin","ember-metal/computed","ember-runtime/mixins/action_handler","ember-runtime/mixins/controller_content_model_alias_deprecation","exports"],
15534
+ function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __exports__) {
15061
15535
  "use strict";
15062
- var Ember = __dependency1__["default"];
15063
- // Ember.assert, Ember.deprecate
15064
- var get = __dependency2__.get;
15065
- var EmberObject = __dependency3__["default"];
15066
- var Mixin = __dependency4__.Mixin;
15067
- var computed = __dependency5__.computed;
15068
- var ActionHandler = __dependency6__["default"];
15069
- var ControllerContentModelAliasDeprecation = __dependency7__["default"];
15536
+ var Mixin = __dependency1__.Mixin;
15537
+ var computed = __dependency2__.computed;
15538
+ var ActionHandler = __dependency3__["default"];
15539
+ var ControllerContentModelAliasDeprecation = __dependency4__["default"];
15070
15540
 
15071
15541
  /**
15072
15542
  `Ember.ControllerMixin` provides a standard interface for all classes that
@@ -15124,13 +15594,12 @@ define("ember-runtime/mixins/controller",
15124
15594
  });
15125
15595
  });
15126
15596
  define("ember-runtime/mixins/controller_content_model_alias_deprecation",
15127
- ["ember-metal/core","ember-metal/property_get","ember-metal/mixin","exports"],
15128
- function(__dependency1__, __dependency2__, __dependency3__, __exports__) {
15597
+ ["ember-metal/core","ember-metal/mixin","exports"],
15598
+ function(__dependency1__, __dependency2__, __exports__) {
15129
15599
  "use strict";
15130
15600
  var Ember = __dependency1__["default"];
15131
15601
  // Ember.deprecate
15132
- var get = __dependency2__.get;
15133
- var Mixin = __dependency3__.Mixin;
15602
+ var Mixin = __dependency2__.Mixin;
15134
15603
 
15135
15604
  /**
15136
15605
  The ControllerContentModelAliasDeprecation mixin is used to provide a useful
@@ -15183,8 +15652,8 @@ define("ember-runtime/mixins/controller_content_model_alias_deprecation",
15183
15652
  });
15184
15653
  });
15185
15654
  define("ember-runtime/mixins/copyable",
15186
- ["ember-metal/property_get","ember-metal/property_set","ember-metal/mixin","ember-runtime/mixins/freezable","ember-runtime/system/string","ember-metal/error","exports"],
15187
- function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __exports__) {
15655
+ ["ember-metal/property_get","ember-metal/mixin","ember-runtime/mixins/freezable","ember-runtime/system/string","ember-metal/error","exports"],
15656
+ function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __exports__) {
15188
15657
  "use strict";
15189
15658
  /**
15190
15659
  @module ember
@@ -15193,12 +15662,11 @@ define("ember-runtime/mixins/copyable",
15193
15662
 
15194
15663
 
15195
15664
  var get = __dependency1__.get;
15196
- var set = __dependency2__.set;
15197
- var required = __dependency3__.required;
15198
- var Freezable = __dependency4__.Freezable;
15199
- var Mixin = __dependency3__.Mixin;
15200
- var fmt = __dependency5__.fmt;
15201
- var EmberError = __dependency6__["default"];
15665
+ var required = __dependency2__.required;
15666
+ var Freezable = __dependency3__.Freezable;
15667
+ var Mixin = __dependency2__.Mixin;
15668
+ var fmt = __dependency4__.fmt;
15669
+ var EmberError = __dependency5__["default"];
15202
15670
 
15203
15671
 
15204
15672
  /**
@@ -15366,7 +15834,7 @@ define("ember-runtime/mixins/enumerable",
15366
15834
  var contexts = [];
15367
15835
 
15368
15836
  function popCtx() {
15369
- return contexts.length===0 ? {} : contexts.pop();
15837
+ return contexts.length === 0 ? {} : contexts.pop();
15370
15838
  }
15371
15839
 
15372
15840
  function pushCtx(ctx) {
@@ -15379,7 +15847,7 @@ define("ember-runtime/mixins/enumerable",
15379
15847
 
15380
15848
  function i(item) {
15381
15849
  var cur = get(item, key);
15382
- return valueProvided ? value===cur : !!cur;
15850
+ return valueProvided ? value === cur : !!cur;
15383
15851
  }
15384
15852
 
15385
15853
  return i;
@@ -15470,8 +15938,8 @@ define("ember-runtime/mixins/enumerable",
15470
15938
  If your enumerable is empty, this method should return `undefined`.
15471
15939
 
15472
15940
  ```javascript
15473
- var arr = ["a", "b", "c"];
15474
- arr.get('firstObject'); // "a"
15941
+ var arr = ['a', 'b', 'c'];
15942
+ arr.get('firstObject'); // 'a'
15475
15943
 
15476
15944
  var arr = [];
15477
15945
  arr.get('firstObject'); // undefined
@@ -15481,12 +15949,16 @@ define("ember-runtime/mixins/enumerable",
15481
15949
  @return {Object} the object or undefined
15482
15950
  */
15483
15951
  firstObject: computed('[]', function() {
15484
- if (get(this, 'length')===0) return undefined ;
15952
+ if (get(this, 'length') === 0) {
15953
+ return undefined;
15954
+ }
15955
+
15956
+ // handle generic enumerables
15957
+ var context = popCtx();
15958
+ var ret = this.nextObject(0, null, context);
15485
15959
 
15486
- // handle generic enumerables
15487
- var context = popCtx(), ret;
15488
- ret = this.nextObject(0, null, context);
15489
15960
  pushCtx(context);
15961
+
15490
15962
  return ret;
15491
15963
  }),
15492
15964
 
@@ -15496,8 +15968,8 @@ define("ember-runtime/mixins/enumerable",
15496
15968
  If your enumerable is empty, this method should return `undefined`.
15497
15969
 
15498
15970
  ```javascript
15499
- var arr = ["a", "b", "c"];
15500
- arr.get('lastObject'); // "c"
15971
+ var arr = ['a', 'b', 'c'];
15972
+ arr.get('lastObject'); // 'c'
15501
15973
 
15502
15974
  var arr = [];
15503
15975
  arr.get('lastObject'); // undefined
@@ -15508,13 +15980,23 @@ define("ember-runtime/mixins/enumerable",
15508
15980
  */
15509
15981
  lastObject: computed('[]', function() {
15510
15982
  var len = get(this, 'length');
15511
- if (len===0) return undefined ;
15512
- var context = popCtx(), idx=0, cur, last = null;
15983
+
15984
+ if (len === 0) {
15985
+ return undefined;
15986
+ }
15987
+
15988
+ var context = popCtx();
15989
+ var idx = 0;
15990
+ var last = null;
15991
+ var cur;
15992
+
15513
15993
  do {
15514
15994
  last = cur;
15515
15995
  cur = this.nextObject(idx++, last, context);
15516
15996
  } while (cur !== undefined);
15997
+
15517
15998
  pushCtx(context);
15999
+
15518
16000
  return last;
15519
16001
  }),
15520
16002
 
@@ -15524,9 +16006,10 @@ define("ember-runtime/mixins/enumerable",
15524
16006
  is found. You may want to override this with a more efficient version.
15525
16007
 
15526
16008
  ```javascript
15527
- var arr = ["a", "b", "c"];
15528
- arr.contains("a"); // true
15529
- arr.contains("z"); // false
16009
+ var arr = ['a', 'b', 'c'];
16010
+
16011
+ arr.contains('a'); // true
16012
+ arr.contains('z'); // false
15530
16013
  ```
15531
16014
 
15532
16015
  @method contains
@@ -15534,7 +16017,11 @@ define("ember-runtime/mixins/enumerable",
15534
16017
  @return {Boolean} `true` if object is found in enumerable.
15535
16018
  */
15536
16019
  contains: function(obj) {
15537
- return this.find(function(item) { return item===obj; }) !== undefined;
16020
+ var found = this.find(function(item) {
16021
+ return item === obj;
16022
+ });
16023
+
16024
+ return found !== undefined;
15538
16025
  },
15539
16026
 
15540
16027
  /**
@@ -15563,18 +16050,27 @@ define("ember-runtime/mixins/enumerable",
15563
16050
  @return {Object} receiver
15564
16051
  */
15565
16052
  forEach: function(callback, target) {
15566
- if (typeof callback !== 'function') throw new TypeError() ;
15567
- var len = get(this, 'length'), last = null, context = popCtx();
16053
+ if (typeof callback !== 'function') {
16054
+ throw new TypeError();
16055
+ }
15568
16056
 
15569
- if (target === undefined) target = null;
16057
+ var context = popCtx();
16058
+ var len = get(this, 'length');
16059
+ var last = null;
16060
+
16061
+ if (target === undefined) {
16062
+ target = null;
16063
+ }
15570
16064
 
15571
- for(var idx=0;idx<len;idx++) {
16065
+ for(var idx = 0; idx < len; idx++) {
15572
16066
  var next = this.nextObject(idx, last, context) ;
15573
16067
  callback.call(target, next, idx, this);
15574
16068
  last = next ;
15575
16069
  }
16070
+
15576
16071
  last = null ;
15577
16072
  context = pushCtx(context);
16073
+
15578
16074
  return this ;
15579
16075
  },
15580
16076
 
@@ -15634,9 +16130,11 @@ define("ember-runtime/mixins/enumerable",
15634
16130
  */
15635
16131
  map: function(callback, target) {
15636
16132
  var ret = Ember.A();
16133
+
15637
16134
  this.forEach(function(x, idx, i) {
15638
16135
  ret[idx] = callback.call(target, x, idx,i);
15639
16136
  });
16137
+
15640
16138
  return ret ;
15641
16139
  },
15642
16140
 
@@ -15696,9 +16194,13 @@ define("ember-runtime/mixins/enumerable",
15696
16194
  */
15697
16195
  filter: function(callback, target) {
15698
16196
  var ret = Ember.A();
16197
+
15699
16198
  this.forEach(function(x, idx, i) {
15700
- if (callback.call(target, x, idx, i)) ret.push(x);
16199
+ if (callback.call(target, x, idx, i)) {
16200
+ ret.push(x);
16201
+ }
15701
16202
  });
16203
+
15702
16204
  return ret ;
15703
16205
  },
15704
16206
 
@@ -15772,8 +16274,14 @@ define("ember-runtime/mixins/enumerable",
15772
16274
  @return {Array} rejected array
15773
16275
  */
15774
16276
  rejectBy: function(key, value) {
15775
- var exactValue = function(item) { return get(item, key) === value; };
15776
- var hasValue = function(item) { return !!get(item, key); };
16277
+ var exactValue = function(item) {
16278
+ return get(item, key) === value;
16279
+ };
16280
+
16281
+ var hasValue = function(item) {
16282
+ return !!get(item, key);
16283
+ };
16284
+
15777
16285
  var use = (arguments.length === 2 ? exactValue : hasValue);
15778
16286
 
15779
16287
  return this.reject(use);
@@ -15821,19 +16329,31 @@ define("ember-runtime/mixins/enumerable",
15821
16329
  @return {Object} Found item or `undefined`.
15822
16330
  */
15823
16331
  find: function(callback, target) {
15824
- var len = get(this, 'length') ;
15825
- if (target === undefined) target = null;
16332
+ var len = get(this, 'length');
16333
+
16334
+ if (target === undefined) {
16335
+ target = null;
16336
+ }
15826
16337
 
15827
- var last = null, next, found = false, ret ;
15828
16338
  var context = popCtx();
15829
- for(var idx=0;idx<len && !found;idx++) {
15830
- next = this.nextObject(idx, last, context) ;
15831
- if (found = callback.call(target, next, idx, this)) ret = next ;
15832
- last = next ;
16339
+ var found = false;
16340
+ var last = null;
16341
+ var next, ret;
16342
+
16343
+ for(var idx = 0; idx < len && !found; idx++) {
16344
+ next = this.nextObject(idx, last, context);
16345
+
16346
+ if (found = callback.call(target, next, idx, this)) {
16347
+ ret = next;
16348
+ }
16349
+
16350
+ last = next;
15833
16351
  }
15834
- next = last = null ;
16352
+
16353
+ next = last = null;
15835
16354
  context = pushCtx(context);
15836
- return ret ;
16355
+
16356
+ return ret;
15837
16357
  },
15838
16358
 
15839
16359
  /**
@@ -15891,7 +16411,9 @@ define("ember-runtime/mixins/enumerable",
15891
16411
  Example Usage:
15892
16412
 
15893
16413
  ```javascript
15894
- if (people.every(isEngineer)) { Paychecks.addBigBonus(); }
16414
+ if (people.every(isEngineer)) {
16415
+ Paychecks.addBigBonus();
16416
+ }
15895
16417
  ```
15896
16418
 
15897
16419
  @method every
@@ -15962,7 +16484,9 @@ define("ember-runtime/mixins/enumerable",
15962
16484
  Usage Example:
15963
16485
 
15964
16486
  ```javascript
15965
- if (people.any(isManager)) { Paychecks.addBiggerBonus(); }
16487
+ if (people.any(isManager)) {
16488
+ Paychecks.addBiggerBonus();
16489
+ }
15966
16490
  ```
15967
16491
 
15968
16492
  @method any
@@ -15971,13 +16495,15 @@ define("ember-runtime/mixins/enumerable",
15971
16495
  @return {Boolean} `true` if the passed function returns `true` for any item
15972
16496
  */
15973
16497
  any: function(callback, target) {
15974
- var len = get(this, 'length');
16498
+ var len = get(this, 'length');
15975
16499
  var context = popCtx();
15976
- var found = false;
15977
- var last = null;
16500
+ var found = false;
16501
+ var last = null;
15978
16502
  var next, idx;
15979
16503
 
15980
- if (target === undefined) { target = null; }
16504
+ if (target === undefined) {
16505
+ target = null;
16506
+ }
15981
16507
 
15982
16508
  for (idx = 0; idx < len && !found; idx++) {
15983
16509
  next = this.nextObject(idx, last, context);
@@ -16015,7 +16541,9 @@ define("ember-runtime/mixins/enumerable",
16015
16541
  Usage Example:
16016
16542
 
16017
16543
  ```javascript
16018
- if (people.some(isManager)) { Paychecks.addBiggerBonus(); }
16544
+ if (people.some(isManager)) {
16545
+ Paychecks.addBiggerBonus();
16546
+ }
16019
16547
  ```
16020
16548
 
16021
16549
  @method some
@@ -16092,7 +16620,9 @@ define("ember-runtime/mixins/enumerable",
16092
16620
  @return {Object} The reduced value.
16093
16621
  */
16094
16622
  reduce: function(callback, initialValue, reducerProperty) {
16095
- if (typeof callback !== "function") { throw new TypeError(); }
16623
+ if (typeof callback !== 'function') {
16624
+ throw new TypeError();
16625
+ }
16096
16626
 
16097
16627
  var ret = initialValue;
16098
16628
 
@@ -16114,11 +16644,16 @@ define("ember-runtime/mixins/enumerable",
16114
16644
  @return {Array} return values from calling invoke.
16115
16645
  */
16116
16646
  invoke: function(methodName) {
16117
- var args, ret = Ember.A();
16118
- if (arguments.length>1) args = a_slice.call(arguments, 1);
16647
+ var ret = Ember.A();
16648
+ var args;
16649
+
16650
+ if (arguments.length > 1) {
16651
+ args = a_slice.call(arguments, 1);
16652
+ }
16119
16653
 
16120
16654
  this.forEach(function(x, idx) {
16121
16655
  var method = x && x[methodName];
16656
+
16122
16657
  if ('function' === typeof method) {
16123
16658
  ret[idx] = args ? apply(x, method, args) : x[methodName]();
16124
16659
  }
@@ -16136,23 +16671,29 @@ define("ember-runtime/mixins/enumerable",
16136
16671
  */
16137
16672
  toArray: function() {
16138
16673
  var ret = Ember.A();
16139
- this.forEach(function(o, idx) { ret[idx] = o; });
16674
+
16675
+ this.forEach(function(o, idx) {
16676
+ ret[idx] = o;
16677
+ });
16678
+
16140
16679
  return ret;
16141
16680
  },
16142
16681
 
16143
16682
  /**
16144
- Returns a copy of the array with all null and undefined elements removed.
16683
+ Returns a copy of the array with all `null` and `undefined` elements removed.
16145
16684
 
16146
16685
  ```javascript
16147
- var arr = ["a", null, "c", undefined];
16148
- arr.compact(); // ["a", "c"]
16686
+ var arr = ['a', null, 'c', undefined];
16687
+ arr.compact(); // ['a', 'c']
16149
16688
  ```
16150
16689
 
16151
16690
  @method compact
16152
16691
  @return {Array} the array without null and undefined elements.
16153
16692
  */
16154
16693
  compact: function() {
16155
- return this.filter(function(value) { return value != null; });
16694
+ return this.filter(function(value) {
16695
+ return value != null;
16696
+ });
16156
16697
  },
16157
16698
 
16158
16699
  /**
@@ -16161,8 +16702,8 @@ define("ember-runtime/mixins/enumerable",
16161
16702
  the receiver does not contain the value.
16162
16703
 
16163
16704
  ```javascript
16164
- var arr = ["a", "b", "a", "c"];
16165
- arr.without("a"); // ["b", "c"]
16705
+ var arr = ['a', 'b', 'a', 'c'];
16706
+ arr.without('a'); // ['b', 'c']
16166
16707
  ```
16167
16708
 
16168
16709
  @method without
@@ -16170,12 +16711,19 @@ define("ember-runtime/mixins/enumerable",
16170
16711
  @return {Ember.Enumerable}
16171
16712
  */
16172
16713
  without: function(value) {
16173
- if (!this.contains(value)) return this; // nothing to do
16714
+ if (!this.contains(value)) {
16715
+ return this; // nothing to do
16716
+ }
16717
+
16174
16718
  var ret = Ember.A();
16719
+
16175
16720
  this.forEach(function(k) {
16176
- if (k !== value) ret[ret.length] = k;
16177
- }) ;
16178
- return ret ;
16721
+ if (k !== value) {
16722
+ ret[ret.length] = k;
16723
+ }
16724
+ });
16725
+
16726
+ return ret;
16179
16727
  },
16180
16728
 
16181
16729
  /**
@@ -16183,18 +16731,24 @@ define("ember-runtime/mixins/enumerable",
16183
16731
  implementation returns an array regardless of the receiver type.
16184
16732
 
16185
16733
  ```javascript
16186
- var arr = ["a", "a", "b", "b"];
16187
- arr.uniq(); // ["a", "b"]
16734
+ var arr = ['a', 'a', 'b', 'b'];
16735
+ arr.uniq(); // ['a', 'b']
16188
16736
  ```
16189
16737
 
16738
+ This only works on primitive data types, e.g. Strings, Numbers, etc.
16739
+
16190
16740
  @method uniq
16191
16741
  @return {Ember.Enumerable}
16192
16742
  */
16193
16743
  uniq: function() {
16194
16744
  var ret = Ember.A();
16745
+
16195
16746
  this.forEach(function(k) {
16196
- if (indexOf(ret, k)<0) ret.push(k);
16747
+ if (indexOf(ret, k) < 0) {
16748
+ ret.push(k);
16749
+ }
16197
16750
  });
16751
+
16198
16752
  return ret;
16199
16753
  },
16200
16754
 
@@ -16232,10 +16786,17 @@ define("ember-runtime/mixins/enumerable",
16232
16786
  var didChange = (opts && opts.didChange) || 'enumerableDidChange';
16233
16787
  var hasObservers = get(this, 'hasEnumerableObservers');
16234
16788
 
16235
- if (!hasObservers) propertyWillChange(this, 'hasEnumerableObservers');
16789
+ if (!hasObservers) {
16790
+ propertyWillChange(this, 'hasEnumerableObservers');
16791
+ }
16792
+
16236
16793
  addListener(this, '@enumerable:before', target, willChange);
16237
16794
  addListener(this, '@enumerable:change', target, didChange);
16238
- if (!hasObservers) propertyDidChange(this, 'hasEnumerableObservers');
16795
+
16796
+ if (!hasObservers) {
16797
+ propertyDidChange(this, 'hasEnumerableObservers');
16798
+ }
16799
+
16239
16800
  return this;
16240
16801
  },
16241
16802
 
@@ -16250,12 +16811,19 @@ define("ember-runtime/mixins/enumerable",
16250
16811
  removeEnumerableObserver: function(target, opts) {
16251
16812
  var willChange = (opts && opts.willChange) || 'enumerableWillChange';
16252
16813
  var didChange = (opts && opts.didChange) || 'enumerableDidChange';
16253
-
16254
16814
  var hasObservers = get(this, 'hasEnumerableObservers');
16255
- if (hasObservers) propertyWillChange(this, 'hasEnumerableObservers');
16815
+
16816
+ if (hasObservers) {
16817
+ propertyWillChange(this, 'hasEnumerableObservers');
16818
+ }
16819
+
16256
16820
  removeListener(this, '@enumerable:before', target, willChange);
16257
16821
  removeListener(this, '@enumerable:change', target, didChange);
16258
- if (hasObservers) propertyDidChange(this, 'hasEnumerableObservers');
16822
+
16823
+ if (hasObservers) {
16824
+ propertyDidChange(this, 'hasEnumerableObservers');
16825
+ }
16826
+
16259
16827
  return this;
16260
16828
  },
16261
16829
 
@@ -16284,24 +16852,40 @@ define("ember-runtime/mixins/enumerable",
16284
16852
  @chainable
16285
16853
  */
16286
16854
  enumerableContentWillChange: function(removing, adding) {
16287
-
16288
16855
  var removeCnt, addCnt, hasDelta;
16289
16856
 
16290
- if ('number' === typeof removing) removeCnt = removing;
16291
- else if (removing) removeCnt = get(removing, 'length');
16292
- else removeCnt = removing = -1;
16857
+ if ('number' === typeof removing) {
16858
+ removeCnt = removing;
16859
+ } else if (removing) {
16860
+ removeCnt = get(removing, 'length');
16861
+ } else {
16862
+ removeCnt = removing = -1;
16863
+ }
16864
+
16865
+ if ('number' === typeof adding) {
16866
+ addCnt = adding;
16867
+ } else if (adding) {
16868
+ addCnt = get(adding,'length');
16869
+ } else {
16870
+ addCnt = adding = -1;
16871
+ }
16293
16872
 
16294
- if ('number' === typeof adding) addCnt = adding;
16295
- else if (adding) addCnt = get(adding,'length');
16296
- else addCnt = adding = -1;
16873
+ hasDelta = addCnt < 0 || removeCnt < 0 || addCnt - removeCnt !== 0;
16297
16874
 
16298
- hasDelta = addCnt<0 || removeCnt<0 || addCnt-removeCnt!==0;
16875
+ if (removing === -1) {
16876
+ removing = null;
16877
+ }
16299
16878
 
16300
- if (removing === -1) removing = null;
16301
- if (adding === -1) adding = null;
16879
+ if (adding === -1) {
16880
+ adding = null;
16881
+ }
16302
16882
 
16303
16883
  propertyWillChange(this, '[]');
16304
- if (hasDelta) propertyWillChange(this, 'length');
16884
+
16885
+ if (hasDelta) {
16886
+ propertyWillChange(this, 'length');
16887
+ }
16888
+
16305
16889
  sendEvent(this, '@enumerable:before', [this, removing, adding]);
16306
16890
 
16307
16891
  return this;
@@ -16324,21 +16908,38 @@ define("ember-runtime/mixins/enumerable",
16324
16908
  enumerableContentDidChange: function(removing, adding) {
16325
16909
  var removeCnt, addCnt, hasDelta;
16326
16910
 
16327
- if ('number' === typeof removing) removeCnt = removing;
16328
- else if (removing) removeCnt = get(removing, 'length');
16329
- else removeCnt = removing = -1;
16911
+ if ('number' === typeof removing) {
16912
+ removeCnt = removing;
16913
+ } else if (removing) {
16914
+ removeCnt = get(removing, 'length');
16915
+ } else {
16916
+ removeCnt = removing = -1;
16917
+ }
16918
+
16919
+ if ('number' === typeof adding) {
16920
+ addCnt = adding;
16921
+ } else if (adding) {
16922
+ addCnt = get(adding, 'length');
16923
+ } else {
16924
+ addCnt = adding = -1;
16925
+ }
16330
16926
 
16331
- if ('number' === typeof adding) addCnt = adding;
16332
- else if (adding) addCnt = get(adding, 'length');
16333
- else addCnt = adding = -1;
16927
+ hasDelta = addCnt < 0 || removeCnt < 0 || addCnt - removeCnt !== 0;
16334
16928
 
16335
- hasDelta = addCnt<0 || removeCnt<0 || addCnt-removeCnt!==0;
16929
+ if (removing === -1) {
16930
+ removing = null;
16931
+ }
16336
16932
 
16337
- if (removing === -1) removing = null;
16338
- if (adding === -1) adding = null;
16933
+ if (adding === -1) {
16934
+ adding = null;
16935
+ }
16339
16936
 
16340
16937
  sendEvent(this, '@enumerable:change', [this, removing, adding]);
16341
- if (hasDelta) propertyDidChange(this, 'length');
16938
+
16939
+ if (hasDelta) {
16940
+ propertyDidChange(this, 'length');
16941
+ }
16942
+
16342
16943
  propertyDidChange(this, '[]');
16343
16944
 
16344
16945
  return this ;
@@ -16357,6 +16958,7 @@ define("ember-runtime/mixins/enumerable",
16357
16958
  */
16358
16959
  sortBy: function() {
16359
16960
  var sortKeys = arguments;
16961
+
16360
16962
  return this.toArray().sort(function(a, b){
16361
16963
  for(var i = 0; i < sortKeys.length; i++) {
16362
16964
  var key = sortKeys[i];
@@ -16364,7 +16966,10 @@ define("ember-runtime/mixins/enumerable",
16364
16966
  var propB = get(b, key);
16365
16967
  // return 1 or -1 else continue to the next sortKey
16366
16968
  var compareValue = compare(propA, propB);
16367
- if (compareValue) { return compareValue; }
16969
+
16970
+ if (compareValue) {
16971
+ return compareValue;
16972
+ }
16368
16973
  }
16369
16974
  return 0;
16370
16975
  });
@@ -16627,8 +17232,8 @@ define("ember-runtime/mixins/freezable",
16627
17232
  __exports__.FROZEN_ERROR = FROZEN_ERROR;
16628
17233
  });
16629
17234
  define("ember-runtime/mixins/mutable_array",
16630
- ["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"],
16631
- function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __dependency8__, __exports__) {
17235
+ ["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"],
17236
+ function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __exports__) {
16632
17237
  "use strict";
16633
17238
  /**
16634
17239
  @module ember
@@ -16651,14 +17256,13 @@ define("ember-runtime/mixins/mutable_array",
16651
17256
  //
16652
17257
 
16653
17258
  var get = __dependency1__.get;
16654
- var set = __dependency2__.set;
16655
- var isArray = __dependency3__.isArray;
16656
- var EmberError = __dependency4__["default"];
16657
- var Mixin = __dependency5__.Mixin;
16658
- var required = __dependency5__.required;
16659
- var EmberArray = __dependency6__["default"];
16660
- var MutableEnumerable = __dependency7__["default"];
16661
- var Enumerable = __dependency8__["default"];
17259
+ var isArray = __dependency2__.isArray;
17260
+ var EmberError = __dependency3__["default"];
17261
+ var Mixin = __dependency4__.Mixin;
17262
+ var required = __dependency4__.required;
17263
+ var EmberArray = __dependency5__["default"];
17264
+ var MutableEnumerable = __dependency6__["default"];
17265
+ var Enumerable = __dependency7__["default"];
16662
17266
  /**
16663
17267
  This mixin defines the API for modifying array-like objects. These methods
16664
17268
  can be applied only to a collection that keeps its items in an ordered set.
@@ -17826,8 +18430,8 @@ define("ember-runtime/mixins/promise_proxy",
17826
18430
  }
17827
18431
  });
17828
18432
  define("ember-runtime/mixins/sortable",
17829
- ["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"],
17830
- function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __dependency8__, __dependency9__, __exports__) {
18433
+ ["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"],
18434
+ function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __dependency8__, __exports__) {
17831
18435
  "use strict";
17832
18436
  /**
17833
18437
  @module ember
@@ -17838,16 +18442,15 @@ define("ember-runtime/mixins/sortable",
17838
18442
  // Ember.assert, Ember.A
17839
18443
 
17840
18444
  var get = __dependency2__.get;
17841
- var set = __dependency3__.set;
17842
- var forEach = __dependency4__.forEach;
17843
- var Mixin = __dependency5__.Mixin;
17844
- var MutableEnumerable = __dependency6__["default"];
17845
- var compare = __dependency7__["default"];
17846
- var addObserver = __dependency8__.addObserver;
17847
- var removeObserver = __dependency8__.removeObserver;
17848
- var computed = __dependency9__.computed;
17849
- var beforeObserver = __dependency5__.beforeObserver;
17850
- var observer = __dependency5__.observer;
18445
+ var forEach = __dependency3__.forEach;
18446
+ var Mixin = __dependency4__.Mixin;
18447
+ var MutableEnumerable = __dependency5__["default"];
18448
+ var compare = __dependency6__["default"];
18449
+ var addObserver = __dependency7__.addObserver;
18450
+ var removeObserver = __dependency7__.removeObserver;
18451
+ var computed = __dependency8__.computed;
18452
+ var beforeObserver = __dependency4__.beforeObserver;
18453
+ var observer = __dependency4__.observer;
17851
18454
  //ES6TODO: should we access these directly from their package or from how thier exposed in ember-metal?
17852
18455
 
17853
18456
  /**
@@ -18132,8 +18735,8 @@ define("ember-runtime/mixins/sortable",
18132
18735
  });
18133
18736
  });
18134
18737
  define("ember-runtime/mixins/target_action_support",
18135
- ["ember-metal/core","ember-metal/property_get","ember-metal/property_set","ember-metal/utils","ember-metal/mixin","ember-metal/computed","exports"],
18136
- function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __exports__) {
18738
+ ["ember-metal/core","ember-metal/property_get","ember-metal/utils","ember-metal/mixin","ember-metal/computed","exports"],
18739
+ function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __exports__) {
18137
18740
  "use strict";
18138
18741
  /**
18139
18742
  @module ember
@@ -18143,10 +18746,9 @@ define("ember-runtime/mixins/target_action_support",
18143
18746
  // Ember.lookup, Ember.assert
18144
18747
 
18145
18748
  var get = __dependency2__.get;
18146
- var set = __dependency3__.set;
18147
- var typeOf = __dependency4__.typeOf;
18148
- var Mixin = __dependency5__.Mixin;
18149
- var computed = __dependency6__.computed;
18749
+ var typeOf = __dependency3__.typeOf;
18750
+ var Mixin = __dependency4__.Mixin;
18751
+ var computed = __dependency5__.computed;
18150
18752
 
18151
18753
  /**
18152
18754
  `Ember.TargetActionSupport` is a mixin that can be included in a class
@@ -18290,25 +18892,25 @@ define("ember-runtime/system/application",
18290
18892
  __exports__["default"] = Namespace.extend();
18291
18893
  });
18292
18894
  define("ember-runtime/system/array_proxy",
18293
- ["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"],
18895
+ ["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"],
18294
18896
  function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __dependency8__, __dependency9__, __dependency10__, __dependency11__, __dependency12__, __exports__) {
18295
18897
  "use strict";
18296
18898
  var Ember = __dependency1__["default"];
18297
18899
  // Ember.K, Ember.assert
18298
18900
  var get = __dependency2__.get;
18299
- var set = __dependency3__.set;
18300
- var isArray = __dependency4__.isArray;
18301
- var apply = __dependency4__.apply;
18302
- var computed = __dependency5__.computed;
18303
- var beforeObserver = __dependency6__.beforeObserver;
18304
- var observer = __dependency6__.observer;
18305
- var beginPropertyChanges = __dependency7__.beginPropertyChanges;
18306
- var endPropertyChanges = __dependency7__.endPropertyChanges;
18307
- var EmberError = __dependency8__["default"];
18308
- var EmberObject = __dependency9__["default"];
18309
- var MutableArray = __dependency10__["default"];
18310
- var Enumerable = __dependency11__["default"];
18311
- var fmt = __dependency12__.fmt;
18901
+ var isArray = __dependency3__.isArray;
18902
+ var apply = __dependency3__.apply;
18903
+ var computed = __dependency4__.computed;
18904
+ var beforeObserver = __dependency5__.beforeObserver;
18905
+ var observer = __dependency5__.observer;
18906
+ var beginPropertyChanges = __dependency6__.beginPropertyChanges;
18907
+ var endPropertyChanges = __dependency6__.endPropertyChanges;
18908
+ var EmberError = __dependency7__["default"];
18909
+ var EmberObject = __dependency8__["default"];
18910
+ var MutableArray = __dependency9__["default"];
18911
+ var Enumerable = __dependency10__["default"];
18912
+ var fmt = __dependency11__.fmt;
18913
+ var alias = __dependency12__["default"];
18312
18914
 
18313
18915
  /**
18314
18916
  @module ember
@@ -18317,7 +18919,6 @@ define("ember-runtime/system/array_proxy",
18317
18919
 
18318
18920
  var OUT_OF_RANGE_EXCEPTION = "Index out of range";
18319
18921
  var EMPTY = [];
18320
- var alias = computed.alias;
18321
18922
  var K = Ember.K;
18322
18923
 
18323
18924
  /**
@@ -18668,24 +19269,20 @@ define("ember-runtime/system/array_proxy",
18668
19269
  __exports__["default"] = ArrayProxy;
18669
19270
  });
18670
19271
  define("ember-runtime/system/container",
18671
- ["ember-metal/property_set","exports"],
18672
- function(__dependency1__, __exports__) {
19272
+ ["ember-metal/property_set","container","exports"],
19273
+ function(__dependency1__, __dependency2__, __exports__) {
18673
19274
  "use strict";
18674
- var set = __dependency1__["default"];
19275
+ var set = __dependency1__.set;
19276
+ var Container = __dependency2__["default"];
18675
19277
 
18676
- var Container = requireModule('container')["default"];
18677
19278
  Container.set = set;
18678
19279
 
18679
19280
  __exports__["default"] = Container;
18680
19281
  });
18681
19282
  define("ember-runtime/system/core_object",
18682
- ["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"],
19283
+ ["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"],
18683
19284
  function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __dependency8__, __dependency9__, __dependency10__, __dependency11__, __dependency12__, __dependency13__, __dependency14__, __dependency15__, __dependency16__, __dependency17__, __exports__) {
18684
- // Remove "use strict"; from transpiled module until
18685
- // https://bugs.webkit.org/show_bug.cgi?id=138038 is fixed
18686
- //
18687
- // REMOVE_USE_STRICT: true
18688
-
19285
+ "use strict";
18689
19286
  /**
18690
19287
  @module ember
18691
19288
  @submodule ember-runtime
@@ -18697,32 +19294,32 @@ define("ember-runtime/system/core_object",
18697
19294
  // NOTE: this object should never be included directly. Instead use `Ember.Object`.
18698
19295
  // We only define this separately so that `Ember.Set` can depend on it.
18699
19296
  var get = __dependency2__.get;
18700
- var set = __dependency3__.set;
18701
- var guidFor = __dependency4__.guidFor;
18702
- var apply = __dependency4__.apply;
18703
- var o_create = __dependency5__.create;
18704
- var generateGuid = __dependency4__.generateGuid;
18705
- var GUID_KEY = __dependency4__.GUID_KEY;
18706
- var meta = __dependency4__.meta;
18707
- var makeArray = __dependency4__.makeArray;
18708
- var rewatch = __dependency6__.rewatch;
18709
- var finishChains = __dependency7__.finishChains;
18710
- var sendEvent = __dependency8__.sendEvent;
18711
- var IS_BINDING = __dependency9__.IS_BINDING;
18712
- var Mixin = __dependency9__.Mixin;
18713
- var required = __dependency9__.required;
18714
- var indexOf = __dependency10__.indexOf;
18715
- var EmberError = __dependency11__["default"];
18716
- var o_defineProperty = __dependency5__.defineProperty;
18717
- var keys = __dependency12__["default"];
18718
- var ActionHandler = __dependency13__["default"];
18719
- var defineProperty = __dependency14__.defineProperty;
18720
- var Binding = __dependency15__.Binding;
18721
- var ComputedProperty = __dependency16__.ComputedProperty;
19297
+ var guidFor = __dependency3__.guidFor;
19298
+ var apply = __dependency3__.apply;
19299
+ var o_create = __dependency4__.create;
19300
+ var generateGuid = __dependency3__.generateGuid;
19301
+ var GUID_KEY = __dependency3__.GUID_KEY;
19302
+ var meta = __dependency3__.meta;
19303
+ var makeArray = __dependency3__.makeArray;
19304
+ var rewatch = __dependency5__.rewatch;
19305
+ var finishChains = __dependency6__.finishChains;
19306
+ var sendEvent = __dependency7__.sendEvent;
19307
+ var IS_BINDING = __dependency8__.IS_BINDING;
19308
+ var Mixin = __dependency8__.Mixin;
19309
+ var required = __dependency8__.required;
19310
+ var indexOf = __dependency9__.indexOf;
19311
+ var EmberError = __dependency10__["default"];
19312
+ var o_defineProperty = __dependency4__.defineProperty;
19313
+ var keys = __dependency11__["default"];
19314
+ var ActionHandler = __dependency12__["default"];
19315
+ var defineProperty = __dependency13__.defineProperty;
19316
+ var Binding = __dependency14__.Binding;
19317
+ var ComputedProperty = __dependency15__.ComputedProperty;
19318
+ var InjectedProperty = __dependency16__["default"];
18722
19319
  var run = __dependency17__["default"];
18723
- var destroy = __dependency6__.destroy;
19320
+ var destroy = __dependency5__.destroy;
18724
19321
  var K = __dependency1__.K;
18725
- var hasPropertyAccessors = __dependency5__.hasPropertyAccessors;
19322
+ var hasPropertyAccessors = __dependency4__.hasPropertyAccessors;
18726
19323
 
18727
19324
  var schedule = run.schedule;
18728
19325
  var applyMixin = Mixin._apply;
@@ -18790,8 +19387,6 @@ define("ember-runtime/system/core_object",
18790
19387
 
18791
19388
  for (var j = 0, ll = keyNames.length; j < ll; j++) {
18792
19389
  var keyName = keyNames[j];
18793
- if (!properties.hasOwnProperty(keyName)) { continue; }
18794
-
18795
19390
  var value = properties[keyName];
18796
19391
 
18797
19392
  if (IS_BINDING.test(keyName)) {
@@ -18812,7 +19407,9 @@ define("ember-runtime/system/core_object",
18812
19407
  "time, when Ember.ActionHandler is used (i.e. views, " +
18813
19408
  "controllers & routes).", !((keyName === 'actions') && ActionHandler.detect(this)));
18814
19409
 
18815
- if (concatenatedProperties && indexOf(concatenatedProperties, keyName) >= 0) {
19410
+ if (concatenatedProperties &&
19411
+ concatenatedProperties.length > 0 &&
19412
+ indexOf(concatenatedProperties, keyName) >= 0) {
18816
19413
  var baseValue = this[keyName];
18817
19414
 
18818
19415
  if (baseValue) {
@@ -19126,7 +19723,7 @@ define("ember-runtime/system/core_object",
19126
19723
 
19127
19724
  CoreObject.__super__ = null;
19128
19725
 
19129
- var ClassMixin = Mixin.create({
19726
+ var ClassMixinProps = {
19130
19727
 
19131
19728
  ClassMixin: required(),
19132
19729
 
@@ -19511,7 +20108,34 @@ define("ember-runtime/system/core_object",
19511
20108
  callback.call(binding || this, property.name, property.meta || empty);
19512
20109
  }
19513
20110
  }
19514
- });
20111
+ };
20112
+
20113
+ if (Ember.FEATURES.isEnabled('ember-metal-injected-properties')) {
20114
+ /**
20115
+ Returns a hash of property names and container names that injected
20116
+ properties will lookup on the container lazily.
20117
+
20118
+ @method lazyInjections
20119
+ @return {Object} Hash of all lazy injected property keys to container names
20120
+ */
20121
+ ClassMixinProps.lazyInjections = function() {
20122
+ var injections = {};
20123
+ var proto = this.proto();
20124
+ var descs = meta(proto).descs;
20125
+ var key, desc;
20126
+
20127
+ for (key in descs) {
20128
+ desc = descs[key];
20129
+ if (desc instanceof InjectedProperty) {
20130
+ injections[key] = desc.type + ':' + (desc.name || key);
20131
+ }
20132
+ }
20133
+
20134
+ return injections;
20135
+ };
20136
+ }
20137
+
20138
+ var ClassMixin = Mixin.create(ClassMixinProps);
19515
20139
 
19516
20140
  ClassMixin.ownerConstructor = CoreObject;
19517
20141
 
@@ -19539,13 +20163,12 @@ define("ember-runtime/system/core_object",
19539
20163
  __exports__["default"] = CoreObject;
19540
20164
  });
19541
20165
  define("ember-runtime/system/deferred",
19542
- ["ember-metal/core","ember-runtime/mixins/deferred","ember-metal/property_get","ember-runtime/system/object","exports"],
19543
- function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __exports__) {
20166
+ ["ember-metal/core","ember-runtime/mixins/deferred","ember-runtime/system/object","exports"],
20167
+ function(__dependency1__, __dependency2__, __dependency3__, __exports__) {
19544
20168
  "use strict";
19545
20169
  var Ember = __dependency1__["default"];
19546
20170
  var DeferredMixin = __dependency2__["default"];
19547
- var get = __dependency3__.get;
19548
- var EmberObject = __dependency4__["default"];
20171
+ var EmberObject = __dependency3__["default"];
19549
20172
 
19550
20173
  var Deferred = EmberObject.extend(DeferredMixin, {
19551
20174
  init: function() {
@@ -19565,8 +20188,8 @@ define("ember-runtime/system/deferred",
19565
20188
  __exports__["default"] = Deferred;
19566
20189
  });
19567
20190
  define("ember-runtime/system/each_proxy",
19568
- ["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"],
19569
- function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __dependency8__, __dependency9__, __dependency10__, __dependency11__, __dependency12__, __dependency13__, __exports__) {
20191
+ ["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"],
20192
+ function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __dependency8__, __dependency9__, __dependency10__, __dependency11__, __dependency12__, __exports__) {
19570
20193
  "use strict";
19571
20194
  /**
19572
20195
  @module ember
@@ -19577,26 +20200,25 @@ define("ember-runtime/system/each_proxy",
19577
20200
  // Ember.assert
19578
20201
 
19579
20202
  var get = __dependency2__.get;
19580
- var set = __dependency3__.set;
19581
- var guidFor = __dependency4__.guidFor;
19582
- var forEach = __dependency5__.forEach;
19583
- var indexOf = __dependency6__.indexOf;
19584
- var EmberArray = __dependency7__["default"];
20203
+ var guidFor = __dependency3__.guidFor;
20204
+ var forEach = __dependency4__.forEach;
20205
+ var indexOf = __dependency5__.indexOf;
20206
+ var EmberArray = __dependency6__["default"];
19585
20207
  // ES6TODO: WAT? Circular dep?
19586
- var EmberObject = __dependency8__["default"];
19587
- var computed = __dependency9__.computed;
19588
- var addObserver = __dependency10__.addObserver;
19589
- var addBeforeObserver = __dependency10__.addBeforeObserver;
19590
- var removeBeforeObserver = __dependency10__.removeBeforeObserver;
19591
- var removeObserver = __dependency10__.removeObserver;
19592
- var typeOf = __dependency4__.typeOf;
19593
- var watchedEvents = __dependency11__.watchedEvents;
19594
- var defineProperty = __dependency12__.defineProperty;
19595
- var beginPropertyChanges = __dependency13__.beginPropertyChanges;
19596
- var propertyDidChange = __dependency13__.propertyDidChange;
19597
- var propertyWillChange = __dependency13__.propertyWillChange;
19598
- var endPropertyChanges = __dependency13__.endPropertyChanges;
19599
- var changeProperties = __dependency13__.changeProperties;
20208
+ var EmberObject = __dependency7__["default"];
20209
+ var computed = __dependency8__.computed;
20210
+ var addObserver = __dependency9__.addObserver;
20211
+ var addBeforeObserver = __dependency9__.addBeforeObserver;
20212
+ var removeBeforeObserver = __dependency9__.removeBeforeObserver;
20213
+ var removeObserver = __dependency9__.removeObserver;
20214
+ var typeOf = __dependency3__.typeOf;
20215
+ var watchedEvents = __dependency10__.watchedEvents;
20216
+ var defineProperty = __dependency11__.defineProperty;
20217
+ var beginPropertyChanges = __dependency12__.beginPropertyChanges;
20218
+ var propertyDidChange = __dependency12__.propertyDidChange;
20219
+ var propertyWillChange = __dependency12__.propertyWillChange;
20220
+ var endPropertyChanges = __dependency12__.endPropertyChanges;
20221
+ var changeProperties = __dependency12__.changeProperties;
19600
20222
 
19601
20223
  var EachArray = EmberObject.extend(EmberArray, {
19602
20224
 
@@ -20009,7 +20631,7 @@ define("ember-runtime/system/namespace",
20009
20631
 
20010
20632
  function findNamespaces() {
20011
20633
  var lookup = Ember.lookup;
20012
- var obj, isNamespace;
20634
+ var obj;
20013
20635
 
20014
20636
  if (Namespace.PROCESSED) { return; }
20015
20637
 
@@ -20096,8 +20718,8 @@ define("ember-runtime/system/namespace",
20096
20718
  __exports__["default"] = Namespace;
20097
20719
  });
20098
20720
  define("ember-runtime/system/native_array",
20099
- ["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"],
20100
- function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __dependency8__, __dependency9__, __dependency10__, __dependency11__, __dependency12__, __exports__) {
20721
+ ["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"],
20722
+ function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __dependency8__, __dependency9__, __dependency10__, __dependency11__, __exports__) {
20101
20723
  "use strict";
20102
20724
  /**
20103
20725
  @module ember
@@ -20108,18 +20730,17 @@ define("ember-runtime/system/native_array",
20108
20730
  // Ember.EXTEND_PROTOTYPES
20109
20731
 
20110
20732
  var get = __dependency2__.get;
20111
- var set = __dependency3__.set;
20112
- var replace = __dependency4__._replace;
20113
- var forEach = __dependency4__.forEach;
20114
- var Mixin = __dependency5__.Mixin;
20115
- var indexOf = __dependency6__.indexOf;
20116
- var lastIndexOf = __dependency6__.lastIndexOf;
20117
- var EmberArray = __dependency7__["default"];
20118
- var MutableArray = __dependency8__["default"];
20119
- var Observable = __dependency9__["default"];
20120
- var Copyable = __dependency10__["default"];
20121
- var FROZEN_ERROR = __dependency11__.FROZEN_ERROR;
20122
- var copy = __dependency12__["default"];
20733
+ var replace = __dependency3__._replace;
20734
+ var forEach = __dependency3__.forEach;
20735
+ var Mixin = __dependency4__.Mixin;
20736
+ var indexOf = __dependency5__.indexOf;
20737
+ var lastIndexOf = __dependency5__.lastIndexOf;
20738
+ var EmberArray = __dependency6__["default"];
20739
+ var MutableArray = __dependency7__["default"];
20740
+ var Observable = __dependency8__["default"];
20741
+ var Copyable = __dependency9__["default"];
20742
+ var FROZEN_ERROR = __dependency10__.FROZEN_ERROR;
20743
+ var copy = __dependency11__["default"];
20123
20744
 
20124
20745
  // Add Ember.Array to Array.prototype. Remove methods with native
20125
20746
  // implementations and supply some more optimized versions of generic methods
@@ -20274,16 +20895,19 @@ define("ember-runtime/system/native_array",
20274
20895
  __exports__["default"] = NativeArray;
20275
20896
  });
20276
20897
  define("ember-runtime/system/object",
20277
- ["ember-runtime/system/core_object","ember-runtime/mixins/observable","exports"],
20278
- function(__dependency1__, __dependency2__, __exports__) {
20898
+ ["ember-metal/core","ember-runtime/system/core_object","ember-runtime/mixins/observable","ember-runtime/inject","exports"],
20899
+ function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __exports__) {
20279
20900
  "use strict";
20280
20901
  /**
20281
20902
  @module ember
20282
20903
  @submodule ember-runtime
20283
20904
  */
20284
20905
 
20285
- var CoreObject = __dependency1__["default"];
20286
- var Observable = __dependency2__["default"];
20906
+ var Ember = __dependency1__["default"];
20907
+ // Ember.assert
20908
+ var CoreObject = __dependency2__["default"];
20909
+ var Observable = __dependency3__["default"];
20910
+ var validatePropertyInjections = __dependency4__.validatePropertyInjections;
20287
20911
 
20288
20912
  /**
20289
20913
  `Ember.Object` is the main base class for all Ember objects. It is a subclass
@@ -20300,6 +20924,22 @@ define("ember-runtime/system/object",
20300
20924
  return "Ember.Object";
20301
20925
  };
20302
20926
 
20927
+ if (Ember.FEATURES.isEnabled('ember-metal-injected-properties')) {
20928
+ EmberObject.reopen({
20929
+ /**
20930
+ Provides mixin-time validation for injected properties.
20931
+
20932
+ @private
20933
+ @method willMergeMixin
20934
+ */
20935
+ willMergeMixin: function(props) {
20936
+ // Injection validations are a debugging aid only, so ensure that they are
20937
+ // not performed in production builds by invoking from an assertion
20938
+ Ember.assert("Injected properties are invalid", validatePropertyInjections(this.constructor, props));
20939
+ }
20940
+ });
20941
+ }
20942
+
20303
20943
  __exports__["default"] = EmberObject;
20304
20944
  });
20305
20945
  define("ember-runtime/system/object_proxy",
@@ -20380,6 +21020,54 @@ define("ember-runtime/system/object_proxy",
20380
21020
 
20381
21021
  __exports__["default"] = EmberObject.extend(_ProxyMixin);
20382
21022
  });
21023
+ define("ember-runtime/system/service",
21024
+ ["ember-runtime/system/object","ember-runtime/inject","exports"],
21025
+ function(__dependency1__, __dependency2__, __exports__) {
21026
+ "use strict";
21027
+ var Object = __dependency1__["default"];
21028
+ var createInjectionHelper = __dependency2__.createInjectionHelper;
21029
+
21030
+ var Service;
21031
+
21032
+ if (Ember.FEATURES.isEnabled('ember-metal-injected-properties')) {
21033
+ /**
21034
+ @class Service
21035
+ @namespace Ember
21036
+ @extends Ember.Object
21037
+ */
21038
+ Service = Object.extend();
21039
+
21040
+ /**
21041
+ Creates a property that lazily looks up a service in the container. There
21042
+ are no restrictions as to what objects a service can be injected into.
21043
+
21044
+ Example:
21045
+
21046
+ ```javascript
21047
+ App.ApplicationRoute = Ember.Route.extend({
21048
+ authManager: Ember.inject.service('auth'),
21049
+
21050
+ model: function() {
21051
+ return this.get('authManager').findCurrentUser();
21052
+ }
21053
+ });
21054
+ ```
21055
+
21056
+ This example will create an `authManager` property on the application route
21057
+ that looks up the `auth` service in the container, making it easily
21058
+ accessible in the `model` hook.
21059
+
21060
+ @method inject.service
21061
+ @for Ember
21062
+ @param {String} name (optional) name of the service to inject, defaults to
21063
+ the property's name
21064
+ @return {Ember.InjectedProperty} injection descriptor instance
21065
+ */
21066
+ createInjectionHelper('service');
21067
+ }
21068
+
21069
+ __exports__["default"] = Service;
21070
+ });
20383
21071
  define("ember-runtime/system/set",
20384
21072
  ["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"],
20385
21073
  function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __dependency8__, __dependency9__, __dependency10__, __dependency11__, __dependency12__, __dependency13__, __dependency14__, __dependency15__, __exports__) {
@@ -21168,12 +21856,11 @@ define("ember-runtime/system/string",
21168
21856
  __exports__.capitalize = capitalize;
21169
21857
  });
21170
21858
  define("ember-runtime/system/subarray",
21171
- ["ember-metal/property_get","ember-metal/error","ember-metal/enumerable_utils","exports"],
21172
- function(__dependency1__, __dependency2__, __dependency3__, __exports__) {
21859
+ ["ember-metal/error","ember-metal/enumerable_utils","exports"],
21860
+ function(__dependency1__, __dependency2__, __exports__) {
21173
21861
  "use strict";
21174
- var get = __dependency1__.get;
21175
- var EmberError = __dependency2__["default"];
21176
- var EnumerableUtils = __dependency3__["default"];
21862
+ var EmberError = __dependency1__["default"];
21863
+ var EnumerableUtils = __dependency2__["default"];
21177
21864
 
21178
21865
  var RETAIN = 'r';
21179
21866
  var FILTER = 'f';
@@ -21405,7 +22092,7 @@ define("ember-runtime/system/tracked_array",
21405
22092
  var arrayOperation = match.operation;
21406
22093
  var arrayOperationIndex = match.index;
21407
22094
  var arrayOperationRangeStart = match.rangeStart;
21408
- var composeIndex, splitIndex, splitItems, splitArrayOperation, newArrayOperation;
22095
+ var composeIndex, newArrayOperation;
21409
22096
 
21410
22097
  newArrayOperation = new ArrayOperation(INSERT, count, newItems);
21411
22098
 
@@ -21438,7 +22125,6 @@ define("ember-runtime/system/tracked_array",
21438
22125
  if (count < 1) { return; }
21439
22126
 
21440
22127
  var match = this._findArrayOperation(index);
21441
- var arrayOperation = match.operation;
21442
22128
  var arrayOperationIndex = match.index;
21443
22129
  var arrayOperationRangeStart = match.rangeStart;
21444
22130
  var newArrayOperation, composeIndex;