ember-source 1.8.1 → 1.9.0.alpha

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

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;