ember-source 1.9.0.alpha.2 → 1.9.0.beta.1

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

Potentially problematic release.


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

checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 6f0f26145b16f36cfb7a17292c4661f4496e485b
4
- data.tar.gz: dd54dbe04f5aee0f197926fe30644147512a6a87
3
+ metadata.gz: d1a01f22dd95285d1cda550257201f420a41c000
4
+ data.tar.gz: 27e8b7aa7dda99437965c82490584345828b7e95
5
5
  SHA512:
6
- metadata.gz: e9b1fa211134cfcb0bc0c7b52602f19bdea9988c3d632cafcec96eb82e6274f698220f1677586ee9fb3c24fd8e5c51f135d712f0727f6e11728f1ea92681632c
7
- data.tar.gz: 6ee1cb60784818ec726575425ece7a30536a4f06f5a1cbeead6dc5c0cc90c893af43ccbe743b41a36e4230062aca69147ff9f82e65278626722040e0055c7114
6
+ metadata.gz: 337ad6c012a2d07ba5d2464ab1756c3b2945d56deae80fe2ab336b924068cff037337c7b3a2fa7030bfdae0e6b55515582e59664bcd575154e6aec9c0aedb9a3
7
+ data.tar.gz: 2e561489ba2c016276f4f65f619f2aabfecb01d34e914f2cfea26d97c9d70df3b6cc8d2136c80a675e23277bd755010b730d68983516249e12b5b3b6103c758d
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.9.0-alpha.2
1
+ 1.9.0-beta.1
@@ -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.9.0-alpha
8
+ * @version 1.9.0-beta.1
9
9
  */
10
10
 
11
11
  (function() {
@@ -640,10 +640,11 @@ 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;
643
644
  var Queue = __dependency2__["default"];
644
645
 
645
646
  function DeferredActionQueues(queueNames, options) {
646
- var queues = this.queues = Object.create(null);
647
+ var queues = this.queues = {};
647
648
  this.queueNames = queueNames = queueNames || [];
648
649
 
649
650
  this.options = options;
@@ -662,9 +663,7 @@ define("backburner/deferred-action-queues",
662
663
  var queues = this.queues;
663
664
  var queue = queues[name];
664
665
 
665
- if (!queue) {
666
- noSuchQueue(name);
667
- }
666
+ if (!queue) { noSuchQueue(name); }
668
667
 
669
668
  if (onceFlag) {
670
669
  return queue.pushUnique(target, method, args, stack);
@@ -673,6 +672,26 @@ define("backburner/deferred-action-queues",
673
672
  }
674
673
  },
675
674
 
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
+
676
695
  flush: function() {
677
696
  var queues = this.queues;
678
697
  var queueNames = this.queueNames;
@@ -680,23 +699,85 @@ define("backburner/deferred-action-queues",
680
699
  var queueNameIndex = 0;
681
700
  var numberOfQueues = queueNames.length;
682
701
  var options = this.options;
702
+ var onError = options.onError || (options.onErrorTarget && options.onErrorTarget[options.onErrorMethod]);
703
+ var invoke = onError ? this.invokeWithOnError : this.invoke;
683
704
 
684
705
  while (queueNameIndex < numberOfQueues) {
685
706
  queueName = queueNames[queueNameIndex];
686
707
  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
+ }
687
722
 
688
- var numberOfQueueItems = queue._queue.length;
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
689
728
 
690
- if (numberOfQueueItems === 0) {
691
- queueNameIndex++;
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
+
752
+ queueIndex += 4;
753
+ }
754
+
755
+ queue._queueBeingFlushed = null;
756
+ if (numberOfQueueItems && after) {
757
+ after();
758
+ }
759
+
760
+ if ((priorQueueNameIndex = indexOfPriorQueueWithActions(this, queueNameIndex)) !== -1) {
761
+ queueNameIndex = priorQueueNameIndex;
692
762
  } else {
693
- queue.flush(false /* async */);
694
- queueNameIndex = 0;
763
+ queueNameIndex++;
695
764
  }
696
765
  }
697
766
  }
698
767
  };
699
768
 
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
+
700
781
  __exports__["default"] = DeferredActionQueues;
701
782
  });
702
783
  define("backburner/platform",
@@ -714,11 +795,9 @@ define("backburner/platform",
714
795
  __exports__.needsIETryCatchFix = needsIETryCatchFix;
715
796
  });
716
797
  define("backburner/queue",
717
- ["./utils","exports"],
718
- function(__dependency1__, __exports__) {
798
+ ["exports"],
799
+ function(__exports__) {
719
800
  "use strict";
720
- var isString = __dependency1__.isString;
721
-
722
801
  function Queue(name, options, globalOptions) {
723
802
  this.name = name;
724
803
  this.globalOptions = globalOptions || {};
@@ -816,89 +895,56 @@ define("backburner/queue",
816
895
  };
817
896
  },
818
897
 
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) {
898
+ // TODO: remove me, only being used for Ember.run.sync
899
+ flush: function() {
840
900
  var queue = this._queue;
841
- var length = queue.length;
842
-
843
- if (length === 0) {
844
- return;
845
- }
846
-
847
901
  var globalOptions = this.globalOptions;
848
902
  var options = this.options;
849
903
  var before = options && options.before;
850
904
  var after = options && options.after;
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;
905
+ var onError = globalOptions.onError || (globalOptions.onErrorTarget && globalOptions.onErrorTarget[globalOptions.onErrorMethod]);
906
+ var target, method, args, stack, i, l = queue.length;
855
907
 
856
908
  this.targetQueues = Object.create(null);
857
- var queueItems = this._queueBeingFlushed = this._queue.slice();
858
- this._queue = [];
859
-
860
- if (before) {
861
- before();
862
- }
863
-
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
909
 
870
- if (isString(method)) {
871
- method = target[method];
872
- }
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
873
916
 
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);
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
+ }
889
938
  }
890
939
  }
940
+ if (l && after) { after(); }
891
941
 
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);
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;
902
948
  }
903
949
  },
904
950
 
@@ -934,11 +980,9 @@ define("backburner/queue",
934
980
  // if not found in current queue
935
981
  // could be in the queue that is being flushed
936
982
  queue = this._queueBeingFlushed;
937
-
938
983
  if (!queue) {
939
984
  return;
940
985
  }
941
-
942
986
  for (i = 0, l = queue.length; i < l; i += 4) {
943
987
  currentTarget = queue[i];
944
988
  currentMethod = queue[i+1];
@@ -1862,20 +1906,18 @@ define("container/container",
1862
1906
  return factoryInjections;
1863
1907
  }
1864
1908
 
1865
- if (Ember.FEATURES.isEnabled('ember-metal-injected-properties')) {
1866
- var normalizeInjectionsHash = function(hash) {
1867
- var injections = [];
1909
+ function normalizeInjectionsHash(hash) {
1910
+ var injections = [];
1868
1911
 
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]));
1912
+ for (var key in hash) {
1913
+ if (hash.hasOwnProperty(key)) {
1914
+ Ember.assert("Expected a proper full name, given '" + hash[key] + "'", validateFullName(hash[key]));
1872
1915
 
1873
- addInjection(injections, key, hash[key]);
1874
- }
1916
+ addInjection(injections, key, hash[key]);
1875
1917
  }
1918
+ }
1876
1919
 
1877
- return injections;
1878
- };
1920
+ return injections;
1879
1921
  }
1880
1922
 
1881
1923
  function instantiate(container, fullName) {
@@ -1892,15 +1934,7 @@ define("container/container",
1892
1934
  'Most likely an improperly defined class or an invalid module export.');
1893
1935
  }
1894
1936
 
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
-
1937
+
1904
1938
  if (typeof factory.extend === 'function') {
1905
1939
  // assume the factory was extendable and is already injected
1906
1940
  return factory.create();
@@ -2014,7 +2048,7 @@ define("ember-metal",
2014
2048
  var EnumerableUtils = __dependency6__["default"];
2015
2049
  var Cache = __dependency7__["default"];
2016
2050
  var create = __dependency8__.create;
2017
- var platform = __dependency8__.platform;
2051
+ var hasPropertyAccessors = __dependency8__.hasPropertyAccessors;
2018
2052
  var filter = __dependency9__.filter;
2019
2053
  var forEach = __dependency9__.forEach;
2020
2054
  var indexOf = __dependency9__.indexOf;
@@ -2101,10 +2135,8 @@ define("ember-metal",
2101
2135
  var oneWay = __dependency29__.oneWay;
2102
2136
  var run = __dependency30__["default"];
2103
2137
  var libraries = __dependency31__["default"];
2104
- var isNone = __dependency32__.isNone;
2105
- var none = __dependency32__.none;
2106
- var isEmpty = __dependency33__.isEmpty;
2107
- var empty = __dependency33__.empty;
2138
+ var isNone = __dependency32__["default"];
2139
+ var isEmpty = __dependency33__["default"];
2108
2140
  var isBlank = __dependency34__["default"];
2109
2141
  var isPresent = __dependency35__["default"];
2110
2142
  var keys = __dependency36__["default"];
@@ -2127,7 +2159,10 @@ define("ember-metal",
2127
2159
  Ember.GUID_KEY = GUID_KEY;
2128
2160
  Ember.create = create;
2129
2161
  Ember.keys = keys;
2130
- Ember.platform = platform;
2162
+ Ember.platform = {
2163
+ defineProperty: defineProperty,
2164
+ hasPropertyAccessors: hasPropertyAccessors
2165
+ };
2131
2166
 
2132
2167
  var EmberArrayPolyfills = Ember.ArrayPolyfills = {};
2133
2168
 
@@ -2254,11 +2289,7 @@ define("ember-metal",
2254
2289
  Ember.libraries.registerCoreLibrary('Ember', Ember.VERSION);
2255
2290
 
2256
2291
  Ember.isNone = isNone;
2257
- Ember.none = none;
2258
-
2259
2292
  Ember.isEmpty = isEmpty;
2260
- Ember.empty = empty;
2261
-
2262
2293
  Ember.isBlank = isBlank;
2263
2294
 
2264
2295
 
@@ -3422,21 +3453,20 @@ define("ember-metal/chains",
3422
3453
  __exports__.ChainNode = ChainNode;
3423
3454
  });
3424
3455
  define("ember-metal/computed",
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__) {
3456
+ ["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"],
3457
+ function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __exports__) {
3427
3458
  "use strict";
3428
- var Ember = __dependency1__["default"];
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;
3459
+ var set = __dependency1__.set;
3460
+ var meta = __dependency2__.meta;
3461
+ var inspect = __dependency2__.inspect;
3462
+ var expandProperties = __dependency3__["default"];
3463
+ var EmberError = __dependency4__["default"];
3464
+ var Descriptor = __dependency5__.Descriptor;
3465
+ var defineProperty = __dependency5__.defineProperty;
3466
+ var propertyWillChange = __dependency6__.propertyWillChange;
3467
+ var propertyDidChange = __dependency6__.propertyDidChange;
3468
+ var addDependentKeys = __dependency7__.addDependentKeys;
3469
+ var removeDependentKeys = __dependency7__.removeDependentKeys;
3440
3470
 
3441
3471
  /**
3442
3472
  @module ember-metal
@@ -4039,7 +4069,7 @@ define("ember-metal/computed_macros",
4039
4069
  var set = __dependency3__.set;
4040
4070
  var computed = __dependency4__.computed;
4041
4071
  var isEmpty = __dependency5__["default"];
4042
- var isNone = __dependency6__.isNone;
4072
+ var isNone = __dependency6__["default"];
4043
4073
  var alias = __dependency7__["default"];
4044
4074
 
4045
4075
  /**
@@ -4763,7 +4793,7 @@ define("ember-metal/core",
4763
4793
 
4764
4794
  @class Ember
4765
4795
  @static
4766
- @version 1.9.0-alpha
4796
+ @version 1.9.0-beta.1
4767
4797
  */
4768
4798
 
4769
4799
  if ('undefined' === typeof Ember) {
@@ -4790,10 +4820,10 @@ define("ember-metal/core",
4790
4820
  /**
4791
4821
  @property VERSION
4792
4822
  @type String
4793
- @default '1.9.0-alpha'
4823
+ @default '1.9.0-beta.1'
4794
4824
  @static
4795
4825
  */
4796
- Ember.VERSION = '1.9.0-alpha';
4826
+ Ember.VERSION = '1.9.0-beta.1';
4797
4827
 
4798
4828
  /**
4799
4829
  Standard environmental variables. You can define these in a global `EmberENV`
@@ -4932,10 +4962,10 @@ define("ember-metal/core",
4932
4962
  @private
4933
4963
  @return {Object}
4934
4964
  */
4935
- var K = function() { return this; };
4936
- var K = K;
4937
- __exports__.K = K;Ember.K = K;
4938
- //TODO: ES6 GLOBL TODO
4965
+ function K() { return this; }
4966
+ __exports__.K = K;
4967
+ Ember.K = K;
4968
+ //TODO: ES6 GLOBAL TODO
4939
4969
 
4940
4970
  // Stub out the methods defined by the ember-debug package in case it's not loaded
4941
4971
 
@@ -4953,7 +4983,11 @@ define("ember-metal/core",
4953
4983
  define("ember-metal/dependent_keys",
4954
4984
  ["ember-metal/platform","ember-metal/watching","exports"],
4955
4985
  function(__dependency1__, __dependency2__, __exports__) {
4956
- "use strict";
4986
+ // Remove "use strict"; from transpiled module until
4987
+ // https://bugs.webkit.org/show_bug.cgi?id=138038 is fixed
4988
+ //
4989
+ // REMOVE_USE_STRICT: true
4990
+
4957
4991
  var o_create = __dependency1__.create;
4958
4992
  var watch = __dependency2__.watch;
4959
4993
  var unwatch = __dependency2__.unwatch;
@@ -5080,16 +5114,18 @@ define("ember-metal/deprecate_property",
5080
5114
  __exports__.deprecateProperty = deprecateProperty;
5081
5115
  });
5082
5116
  define("ember-metal/dictionary",
5083
- ["exports"],
5084
- function(__exports__) {
5117
+ ["ember-metal/platform","exports"],
5118
+ function(__dependency1__, __exports__) {
5085
5119
  "use strict";
5120
+ var create = __dependency1__.create;
5121
+
5086
5122
  // the delete is meant to hint at runtimes that this object should remain in
5087
5123
  // dictionary mode. This is clearly a runtime specific hack, but currently it
5088
5124
  // appears worthwile in some usecases. Please note, these deletes do increase
5089
5125
  // the cost of creation dramatically over a plain Object.create. And as this
5090
5126
  // only makes sense for long-lived dictionaries that aren't instantiated often.
5091
5127
  __exports__["default"] = function makeDictionary(parent) {
5092
- var dict = Object.create(parent);
5128
+ var dict = create(parent);
5093
5129
  dict['_dict'] = null;
5094
5130
  delete dict['_dict'];
5095
5131
  return dict;
@@ -5385,7 +5421,11 @@ define("ember-metal/error",
5385
5421
  define("ember-metal/events",
5386
5422
  ["ember-metal/core","ember-metal/utils","ember-metal/platform","exports"],
5387
5423
  function(__dependency1__, __dependency2__, __dependency3__, __exports__) {
5388
- "use strict";
5424
+ // Remove "use strict"; from transpiled module until
5425
+ // https://bugs.webkit.org/show_bug.cgi?id=138038 is fixed
5426
+ //
5427
+ // REMOVE_USE_STRICT: true
5428
+
5389
5429
  /**
5390
5430
  @module ember-metal
5391
5431
  */
@@ -6261,19 +6301,17 @@ define("ember-metal/is_blank",
6261
6301
  }
6262
6302
  });
6263
6303
  define("ember-metal/is_empty",
6264
- ["ember-metal/core","ember-metal/property_get","ember-metal/is_none","exports"],
6265
- function(__dependency1__, __dependency2__, __dependency3__, __exports__) {
6304
+ ["ember-metal/property_get","ember-metal/is_none","exports"],
6305
+ function(__dependency1__, __dependency2__, __exports__) {
6266
6306
  "use strict";
6267
- var Ember = __dependency1__["default"];
6268
- // deprecateFunc
6269
- var get = __dependency2__.get;
6270
- var isNone = __dependency3__["default"];
6307
+ var get = __dependency1__.get;
6308
+ var isNone = __dependency2__["default"];
6271
6309
 
6272
6310
  /**
6273
6311
  Verifies that a value is `null` or an empty string, empty array,
6274
6312
  or empty function.
6275
6313
 
6276
- Constrains the rules on `Ember.isNone` by returning false for empty
6314
+ Constrains the rules on `Ember.isNone` by returning true for empty
6277
6315
  string and empty arrays.
6278
6316
 
6279
6317
  ```javascript
@@ -6292,23 +6330,44 @@ define("ember-metal/is_empty",
6292
6330
  @return {Boolean}
6293
6331
  */
6294
6332
  function isEmpty(obj) {
6295
- return isNone(obj) || (obj.length === 0 && typeof obj !== 'function') ||
6296
- (typeof obj === 'object' && get(obj, 'length') === 0);
6297
- }
6333
+ var none = isNone(obj);
6334
+ if (none) {
6335
+ return none;
6336
+ }
6337
+
6338
+ if (typeof obj.size === 'number') {
6339
+ return !obj.size;
6340
+ }
6298
6341
 
6299
- var empty = Ember.deprecateFunc("Ember.empty is deprecated. Please use Ember.isEmpty instead.", isEmpty);
6342
+ var objectType = typeof obj;
6343
+
6344
+ if (objectType === 'object') {
6345
+ var size = get(obj, 'size');
6346
+ if (typeof size === 'number') {
6347
+ return !size;
6348
+ }
6349
+ }
6350
+
6351
+ if (typeof obj.length === 'number' && objectType !== 'function') {
6352
+ return !obj.length;
6353
+ }
6354
+
6355
+ if (objectType === 'object') {
6356
+ var length = get(obj, 'length');
6357
+ if (typeof length === 'number') {
6358
+ return !length;
6359
+ }
6360
+ }
6361
+
6362
+ return false;
6363
+ }
6300
6364
 
6301
6365
  __exports__["default"] = isEmpty;
6302
- __exports__.isEmpty = isEmpty;
6303
- __exports__.empty = empty;
6304
6366
  });
6305
6367
  define("ember-metal/is_none",
6306
- ["ember-metal/core","exports"],
6307
- function(__dependency1__, __exports__) {
6368
+ ["exports"],
6369
+ function(__exports__) {
6308
6370
  "use strict";
6309
- var Ember = __dependency1__["default"];
6310
- // deprecateFunc
6311
-
6312
6371
  /**
6313
6372
  Returns true if the passed value is null or undefined. This avoids errors
6314
6373
  from JSLint complaining about use of ==, which can be technically
@@ -6332,10 +6391,7 @@ define("ember-metal/is_none",
6332
6391
  return obj === null || obj === undefined;
6333
6392
  }
6334
6393
 
6335
- var none = Ember.deprecateFunc("Ember.none is deprecated. Please use Ember.isNone instead.", isNone);
6336
- __exports__.none = none;
6337
6394
  __exports__["default"] = isNone;
6338
- __exports__.isNone = isNone;
6339
6395
  });
6340
6396
  define("ember-metal/is_present",
6341
6397
  ["ember-metal/is_blank","exports"],
@@ -6675,7 +6731,7 @@ define("ember-metal/map",
6675
6731
  }
6676
6732
 
6677
6733
  function copyNull(obj) {
6678
- var output = Object.create(null);
6734
+ var output = create(null);
6679
6735
 
6680
6736
  for (var prop in obj) {
6681
6737
  // hasOwnPropery is not needed because obj is Object.create(null);
@@ -6733,7 +6789,7 @@ define("ember-metal/map",
6733
6789
  @method clear
6734
6790
  */
6735
6791
  clear: function() {
6736
- this.presenceSet = Object.create(null);
6792
+ this.presenceSet = create(null);
6737
6793
  this.list = [];
6738
6794
  this.size = 0;
6739
6795
  },
@@ -6897,7 +6953,7 @@ define("ember-metal/map",
6897
6953
  if (this instanceof this.constructor) {
6898
6954
  this.keys = OrderedSet.create();
6899
6955
  this.keys._silenceRemoveDeprecation = true;
6900
- this.values = Object.create(null);
6956
+ this.values = create(null);
6901
6957
  this.size = 0;
6902
6958
  } else {
6903
6959
  missingNew("OrderedSet");
@@ -7059,7 +7115,7 @@ define("ember-metal/map",
7059
7115
  */
7060
7116
  clear: function() {
7061
7117
  this.keys.clear();
7062
- this.values = Object.create(null);
7118
+ this.values = create(null);
7063
7119
  this.size = 0;
7064
7120
  },
7065
7121
 
@@ -7186,7 +7242,11 @@ define("ember-metal/merge",
7186
7242
  define("ember-metal/mixin",
7187
7243
  ["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
7244
  function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __dependency8__, __dependency9__, __dependency10__, __dependency11__, __dependency12__, __dependency13__, __exports__) {
7189
- "use strict";
7245
+ // Remove "use strict"; from transpiled module until
7246
+ // https://bugs.webkit.org/show_bug.cgi?id=138038 is fixed
7247
+ //
7248
+ // REMOVE_USE_STRICT: true
7249
+
7190
7250
  /**
7191
7251
  @module ember
7192
7252
  @submodule ember-metal
@@ -7207,6 +7267,7 @@ define("ember-metal/mixin",
7207
7267
  var wrap = __dependency7__.wrap;
7208
7268
  var makeArray = __dependency7__.makeArray;
7209
7269
  var apply = __dependency7__.apply;
7270
+ var isArray = __dependency7__.isArray;
7210
7271
  var expandProperties = __dependency8__["default"];
7211
7272
  var Descriptor = __dependency9__.Descriptor;
7212
7273
  var defineProperty = __dependency9__.defineProperty;
@@ -7389,6 +7450,9 @@ define("ember-metal/mixin",
7389
7450
  function applyMergedProperties(obj, key, value, values) {
7390
7451
  var baseValue = values[key] || obj[key];
7391
7452
 
7453
+ Ember.assert("You passed in `" + JSON.stringify(value) + "` as the value for `" + key +
7454
+ "` but `" + key + "` cannot be an Array", !isArray(value));
7455
+
7392
7456
  if (!baseValue) { return value; }
7393
7457
 
7394
7458
  var newBase = merge({}, baseValue);
@@ -7512,7 +7576,7 @@ define("ember-metal/mixin",
7512
7576
  stream.subscribe(onNotify);
7513
7577
 
7514
7578
  if (obj._streamBindingSubscriptions === undefined) {
7515
- obj._streamBindingSubscriptions = Object.create(null);
7579
+ obj._streamBindingSubscriptions = o_create(null);
7516
7580
  }
7517
7581
 
7518
7582
  obj._streamBindingSubscriptions[key] = onNotify;
@@ -8337,108 +8401,48 @@ define("ember-metal/path_cache",
8337
8401
  __exports__.getTailPath = getTailPath;
8338
8402
  });
8339
8403
  define("ember-metal/platform",
8340
- ["exports"],
8341
- function(__exports__) {
8404
+ ["ember-metal/platform/define_property","ember-metal/platform/define_properties","ember-metal/platform/create","exports"],
8405
+ function(__dependency1__, __dependency2__, __dependency3__, __exports__) {
8342
8406
  "use strict";
8343
- /*globals Node */
8407
+ var hasES5CompliantDefineProperty = __dependency1__.hasES5CompliantDefineProperty;
8408
+ var defineProperty = __dependency1__.defineProperty;
8409
+ var defineProperties = __dependency2__["default"];
8410
+ var create = __dependency3__["default"];
8344
8411
 
8345
8412
  /**
8346
8413
  @module ember-metal
8347
8414
  */
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;
8366
8415
 
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
- }
8377
-
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;
8381
-
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);
8389
-
8390
- var hasES5CompliantDefineProperty = !!defineProperty;
8391
-
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;
8416
+ var hasPropertyAccessors = hasES5CompliantDefineProperty;
8417
+ var canDefineNonEnumerableProperties = hasES5CompliantDefineProperty;
8407
8418
 
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
- }
8419
+ /**
8420
+ Platform specific methods and feature detectors needed by the framework.
8413
8421
 
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
- }
8422
+ @class platform
8423
+ @namespace Ember
8424
+ @static
8425
+ */
8423
8426
 
8424
- if (!hasES5CompliantDefineProperty) {
8425
- defineProperty = function defineProperty(obj, keyName, desc) {
8426
- if (!desc.get) { obj[keyName] = desc.value; }
8427
- };
8428
- }
8427
+ __exports__.create = create;
8428
+ __exports__.defineProperty = defineProperty;
8429
+ __exports__.defineProperties = defineProperties;
8430
+ __exports__.hasPropertyAccessors = hasPropertyAccessors;
8431
+ __exports__.canDefineNonEnumerableProperties = canDefineNonEnumerableProperties;
8432
+ });
8433
+ define("ember-metal/platform/create",
8434
+ ["exports"],
8435
+ function(__exports__) {
8436
+ // Remove "use strict"; from transpiled module until
8437
+ // https://bugs.webkit.org/show_bug.cgi?id=138038 is fixed
8438
+ //
8439
+ // REMOVE_USE_STRICT: true
8429
8440
 
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
- }
8441
+ /**
8442
+ @class platform
8443
+ @namespace Ember
8444
+ @static
8445
+ */
8442
8446
 
8443
8447
  /**
8444
8448
  Identical to `Object.create()`. Implements if not available natively.
@@ -8520,55 +8524,152 @@ define("ember-metal/platform",
8520
8524
  Object.defineProperties(object, properties);
8521
8525
  }
8522
8526
 
8523
- return object;
8524
- };
8525
- } else {
8526
- create = Object.create;
8527
- }
8527
+ return object;
8528
+ };
8529
+ } else {
8530
+ create = Object.create;
8531
+ }
8532
+
8533
+ __exports__["default"] = create;
8534
+ });
8535
+ define("ember-metal/platform/define_properties",
8536
+ ["ember-metal/platform/define_property","exports"],
8537
+ function(__dependency1__, __exports__) {
8538
+ "use strict";
8539
+ var defineProperty = __dependency1__.defineProperty;
8540
+
8541
+ var defineProperties = Object.defineProperties;
8542
+
8543
+ // ES5 15.2.3.7
8544
+ // http://es5.github.com/#x15.2.3.7
8545
+ if (!defineProperties) {
8546
+ defineProperties = function defineProperties(object, properties) {
8547
+ for (var property in properties) {
8548
+ if (properties.hasOwnProperty(property) && property !== "__proto__") {
8549
+ defineProperty(object, property, properties[property]);
8550
+ }
8551
+ }
8552
+ return object;
8553
+ };
8554
+
8555
+ Object.defineProperties = defineProperties;
8556
+ }
8557
+
8558
+ __exports__["default"] = defineProperties;
8559
+ });
8560
+ define("ember-metal/platform/define_property",
8561
+ ["exports"],
8562
+ function(__exports__) {
8563
+ "use strict";
8564
+ /*globals Node */
8565
+
8566
+ /**
8567
+ @class platform
8568
+ @namespace Ember
8569
+ @static
8570
+ */
8571
+
8572
+ /**
8573
+ Set to true if the platform supports native getters and setters.
8574
+
8575
+ @property hasPropertyAccessors
8576
+ @final
8577
+ */
8578
+
8579
+ /**
8580
+ Identical to `Object.defineProperty()`. Implements as much functionality
8581
+ as possible if not available natively.
8582
+
8583
+ @method defineProperty
8584
+ @param {Object} obj The object to modify
8585
+ @param {String} keyName property name to modify
8586
+ @param {Object} desc descriptor hash
8587
+ @return {void}
8588
+ */
8589
+ var defineProperty = (function checkCompliance(defineProperty) {
8590
+ if (!defineProperty) return;
8591
+ try {
8592
+ var a = 5;
8593
+ var obj = {};
8594
+ defineProperty(obj, 'a', {
8595
+ configurable: true,
8596
+ enumerable: true,
8597
+ get: function () {
8598
+ return a;
8599
+ },
8600
+ set: function (v) {
8601
+ a = v;
8602
+ }
8603
+ });
8604
+ if (obj.a !== 5) return;
8605
+ obj.a = 10;
8606
+ if (a !== 10) return;
8607
+
8608
+ // check non-enumerability
8609
+ defineProperty(obj, 'a', {
8610
+ configurable: true,
8611
+ enumerable: false,
8612
+ writable: true,
8613
+ value: true
8614
+ });
8615
+ for (var key in obj) {
8616
+ if (key === 'a') return;
8617
+ }
8618
+
8619
+ // Detects a bug in Android <3.2 where you cannot redefine a property using
8620
+ // Object.defineProperty once accessors have already been set.
8621
+ if (obj.a !== true) return;
8528
8622
 
8529
- var hasPropertyAccessors = hasES5CompliantDefineProperty;
8530
- var canDefineNonEnumerableProperties = hasES5CompliantDefineProperty;
8623
+ // defineProperty is compliant
8624
+ return defineProperty;
8625
+ } catch (e) {
8626
+ // IE8 defines Object.defineProperty but calling it on an Object throws
8627
+ return;
8628
+ }
8629
+ })(Object.defineProperty);
8531
8630
 
8532
- /**
8533
- @class platform
8534
- @namespace Ember
8535
- */
8631
+ var hasES5CompliantDefineProperty = !!defineProperty;
8536
8632
 
8537
- /**
8538
- Platform specific methods and feature detectors needed by the framework.
8633
+ if (hasES5CompliantDefineProperty && typeof document !== 'undefined') {
8634
+ // This is for Safari 5.0, which supports Object.defineProperty, but not
8635
+ // on DOM nodes.
8636
+ var canDefinePropertyOnDOM = (function() {
8637
+ try {
8638
+ defineProperty(document.createElement('div'), 'definePropertyOnDOM', {});
8639
+ return true;
8640
+ } catch(e) { }
8539
8641
 
8540
- @class platform
8541
- @namespace Ember
8542
- @static
8543
- */
8544
- // TODO remove this
8545
- var platform = {};
8642
+ return false;
8643
+ })();
8546
8644
 
8547
- /**
8548
- Identical to `Object.defineProperty()`. Implements as much functionality
8549
- as possible if not available natively.
8645
+ if (!canDefinePropertyOnDOM) {
8646
+ defineProperty = function(obj, keyName, desc) {
8647
+ var isNode;
8550
8648
 
8551
- @method defineProperty
8552
- @param {Object} obj The object to modify
8553
- @param {String} keyName property name to modify
8554
- @param {Object} desc descriptor hash
8555
- @return {void}
8556
- */
8557
- platform.defineProperty = defineProperty;
8649
+ if (typeof Node === "object") {
8650
+ isNode = obj instanceof Node;
8651
+ } else {
8652
+ isNode = typeof obj === "object" && typeof obj.nodeType === "number" && typeof obj.nodeName === "string";
8653
+ }
8558
8654
 
8559
- /**
8560
- Set to true if the platform supports native getters and setters.
8655
+ if (isNode) {
8656
+ // TODO: Should we have a warning here?
8657
+ return (obj[keyName] = desc.value);
8658
+ } else {
8659
+ return Object.defineProperty(obj, keyName, desc);
8660
+ }
8661
+ };
8662
+ }
8663
+ }
8561
8664
 
8562
- @property hasPropertyAccessors
8563
- @final
8564
- */
8565
- platform.hasPropertyAccessors = hasPropertyAccessors;
8665
+ if (!hasES5CompliantDefineProperty) {
8666
+ defineProperty = function defineProperty(obj, keyName, desc) {
8667
+ if (!desc.get) { obj[keyName] = desc.value; }
8668
+ };
8669
+ }
8566
8670
 
8567
- __exports__.create = create;
8671
+ __exports__.hasES5CompliantDefineProperty = hasES5CompliantDefineProperty;
8568
8672
  __exports__.defineProperty = defineProperty;
8569
- __exports__.hasPropertyAccessors = hasPropertyAccessors;
8570
- __exports__.canDefineNonEnumerableProperties = canDefineNonEnumerableProperties;
8571
- __exports__.platform = platform;
8572
8673
  });
8573
8674
  define("ember-metal/properties",
8574
8675
  ["ember-metal/core","ember-metal/utils","ember-metal/platform","ember-metal/property_events","exports"],
@@ -8604,8 +8705,10 @@ define("ember-metal/properties",
8604
8705
  // DEFINING PROPERTIES API
8605
8706
  //
8606
8707
 
8607
- function MANDATORY_SETTER_FUNCTION(value) {
8608
- Ember.assert("You must use Ember.set() to access this property (of " + this + ")", false);
8708
+ function MANDATORY_SETTER_FUNCTION(name) {
8709
+ return function SETTER_FUNCTION(value) {
8710
+ Ember.assert("You must use Ember.set() to set the `" + name + "` property (of " + this + ") to `" + value + "`.", false);
8711
+ };
8609
8712
  }
8610
8713
 
8611
8714
  __exports__.MANDATORY_SETTER_FUNCTION = MANDATORY_SETTER_FUNCTION;function DEFAULT_GETTER_FUNCTION(name) {
@@ -8701,7 +8804,7 @@ define("ember-metal/properties",
8701
8804
  objectDefineProperty(obj, keyName, {
8702
8805
  configurable: true,
8703
8806
  enumerable: true,
8704
- set: MANDATORY_SETTER_FUNCTION,
8807
+ set: MANDATORY_SETTER_FUNCTION(keyName),
8705
8808
  get: DEFAULT_GETTER_FUNCTION(keyName)
8706
8809
  });
8707
8810
  } else {
@@ -9251,7 +9354,10 @@ define("ember-metal/property_set",
9251
9354
  propertyWillChange(obj, keyName);
9252
9355
 
9253
9356
  if (hasPropertyAccessors) {
9254
- if ((currentValue === undefined && !(keyName in obj)) || !obj.propertyIsEnumerable(keyName)) {
9357
+ if (
9358
+ (currentValue === undefined && !(keyName in obj)) ||
9359
+ !Object.prototype.propertyIsEnumerable.call(obj, keyName)
9360
+ ) {
9255
9361
  defineProperty(obj, keyName, null, value); // setup mandatory setter
9256
9362
  } else {
9257
9363
  meta.values[keyName] = value;
@@ -9980,22 +10086,23 @@ define("ember-metal/set_properties",
9980
10086
  ```
9981
10087
 
9982
10088
  @method setProperties
9983
- @param self
9984
- @param {Object} hash
9985
- @return self
10089
+ @param obj
10090
+ @param {Object} properties
10091
+ @return obj
9986
10092
  */
9987
- __exports__["default"] = function setProperties(self, hash) {
10093
+ __exports__["default"] = function setProperties(obj, properties) {
10094
+ if (!properties || typeof properties !== "object") { return obj; }
9988
10095
  changeProperties(function() {
9989
- var props = keys(hash);
9990
- var prop;
10096
+ var props = keys(properties);
10097
+ var propertyName;
9991
10098
 
9992
10099
  for (var i = 0, l = props.length; i < l; i++) {
9993
- prop = props[i];
10100
+ propertyName = props[i];
9994
10101
 
9995
- set(self, prop, hash[prop]);
10102
+ set(obj, propertyName, properties[propertyName]);
9996
10103
  }
9997
10104
  });
9998
- return self;
10105
+ return obj;
9999
10106
  }
10000
10107
  });
10001
10108
  define("ember-metal/streams/read",
@@ -10094,11 +10201,12 @@ define("ember-metal/streams/simple",
10094
10201
  __exports__["default"] = SimpleStream;
10095
10202
  });
10096
10203
  define("ember-metal/streams/stream",
10097
- ["ember-metal/path_cache","exports"],
10098
- function(__dependency1__, __exports__) {
10204
+ ["ember-metal/platform","ember-metal/path_cache","exports"],
10205
+ function(__dependency1__, __dependency2__, __exports__) {
10099
10206
  "use strict";
10100
- var getFirstKey = __dependency1__.getFirstKey;
10101
- var getTailPath = __dependency1__.getTailPath;
10207
+ var create = __dependency1__.create;
10208
+ var getFirstKey = __dependency2__.getFirstKey;
10209
+ var getTailPath = __dependency2__.getTailPath;
10102
10210
 
10103
10211
  var NIL = function NIL(){};
10104
10212
 
@@ -10120,7 +10228,7 @@ define("ember-metal/streams/stream",
10120
10228
  var tailPath = getTailPath(path);
10121
10229
 
10122
10230
  if (this.children === undefined) {
10123
- this.children = Object.create(null);
10231
+ this.children = create(null);
10124
10232
  }
10125
10233
 
10126
10234
  var keyStream = this.children[firstKey];
@@ -10310,7 +10418,11 @@ define("ember-metal/streams/stream_binding",
10310
10418
  define("ember-metal/utils",
10311
10419
  ["ember-metal/core","ember-metal/platform","ember-metal/array","exports"],
10312
10420
  function(__dependency1__, __dependency2__, __dependency3__, __exports__) {
10313
- "use strict";
10421
+ // Remove "use strict"; from transpiled module until
10422
+ // https://bugs.webkit.org/show_bug.cgi?id=138038 is fixed
10423
+ //
10424
+ // REMOVE_USE_STRICT: true
10425
+
10314
10426
  var Ember = __dependency1__["default"];
10315
10427
  var o_defineProperty = __dependency2__.defineProperty;
10316
10428
  var canDefineNonEnumerableProperties = __dependency2__.canDefineNonEnumerableProperties;
@@ -10781,8 +10893,8 @@ define("ember-metal/utils",
10781
10893
 
10782
10894
  /**
10783
10895
  Forces the passed object to be part of an array. If the object is already
10784
- an array or array-like, returns the object. Otherwise adds the object to
10785
- an array. If obj is `null` or `undefined`, returns an empty array.
10896
+ an array or array-like, it will return the object. Otherwise, it will add the object to
10897
+ an array. If obj is `null` or `undefined`, it will return an empty array.
10786
10898
 
10787
10899
  ```javascript
10788
10900
  Ember.makeArray(); // []
@@ -11221,13 +11333,16 @@ define("ember-metal/watch_key",
11221
11333
  __exports__.watchKey = watchKey;
11222
11334
 
11223
11335
  var handleMandatorySetter = function handleMandatorySetter(m, obj, keyName) {
11336
+ var descriptor = Object.getOwnPropertyDescriptor && Object.getOwnPropertyDescriptor(obj, keyName);
11337
+ var configurable = descriptor ? descriptor.configurable : true;
11338
+
11224
11339
  // this x in Y deopts, so keeping it in this function is better;
11225
- if (keyName in obj) {
11340
+ if (configurable && keyName in obj) {
11226
11341
  m.values[keyName] = obj[keyName];
11227
11342
  o_defineProperty(obj, keyName, {
11228
11343
  configurable: true,
11229
- enumerable: obj.propertyIsEnumerable(keyName),
11230
- set: MANDATORY_SETTER_FUNCTION,
11344
+ enumerable: Object.prototype.propertyIsEnumerable.call(obj, keyName),
11345
+ set: MANDATORY_SETTER_FUNCTION(keyName),
11231
11346
  get: DEFAULT_GETTER_FUNCTION(keyName)
11232
11347
  });
11233
11348
  }
@@ -11251,7 +11366,7 @@ define("ember-metal/watch_key",
11251
11366
  if (hasPropertyAccessors && keyName in obj) {
11252
11367
  o_defineProperty(obj, keyName, {
11253
11368
  configurable: true,
11254
- enumerable: obj.propertyIsEnumerable(keyName),
11369
+ enumerable: Object.prototype.propertyIsEnumerable.call(obj, keyName),
11255
11370
  set: function(val) {
11256
11371
  // redefine to set as enumerable
11257
11372
  o_defineProperty(obj, keyName, {
@@ -11332,9 +11447,7 @@ define("ember-metal/watching",
11332
11447
  @module ember-metal
11333
11448
  */
11334
11449
 
11335
- var GUID_KEY = __dependency1__.GUID_KEY;
11336
11450
  var typeOf = __dependency1__.typeOf;
11337
- var generateGuid = __dependency1__.generateGuid;
11338
11451
  var removeChainWatcher = __dependency2__.removeChainWatcher;
11339
11452
  var flushPendingChains = __dependency2__.flushPendingChains;
11340
11453
  var watchKey = __dependency3__.watchKey;
@@ -11388,31 +11501,7 @@ define("ember-metal/watching",
11388
11501
  }
11389
11502
  }
11390
11503
 
11391
- __exports__.unwatch = unwatch;/**
11392
- Call on an object when you first beget it from another object. This will
11393
- setup any chained watchers on the object instance as needed. This method is
11394
- safe to call multiple times.
11395
-
11396
- @private
11397
- @method rewatch
11398
- @for Ember
11399
- @param obj
11400
- */
11401
- function rewatch(obj) {
11402
- var m = obj['__ember_meta__'], chains = m && m.chains;
11403
-
11404
- // make sure the object has its own guid.
11405
- if (GUID_KEY in obj && !obj.hasOwnProperty(GUID_KEY)) {
11406
- generateGuid(obj);
11407
- }
11408
-
11409
- // make sure any chained watchers update.
11410
- if (chains && chains.value() !== obj) {
11411
- m.chains = chains.copy(obj);
11412
- }
11413
- }
11414
-
11415
- __exports__.rewatch = rewatch;var NODE_STACK = [];
11504
+ __exports__.unwatch = unwatch;var NODE_STACK = [];
11416
11505
 
11417
11506
  /**
11418
11507
  Tears down the meta on an object so that it can be garbage collected.
@@ -11550,10 +11639,7 @@ define("ember-runtime",
11550
11639
  Ember.copy = copy;
11551
11640
  Ember.isEqual = isEqual;
11552
11641
 
11553
- if (Ember.FEATURES.isEnabled('ember-metal-injected-properties')) {
11554
- Ember.inject = inject;
11555
- }
11556
-
11642
+
11557
11643
  Ember.Array = EmberArray;
11558
11644
 
11559
11645
  Ember.Comparable = Comparable;
@@ -11625,10 +11711,7 @@ define("ember-runtime",
11625
11711
  Ember.Controller = Controller;
11626
11712
  Ember.ControllerMixin = ControllerMixin;
11627
11713
 
11628
- if (Ember.FEATURES.isEnabled('ember-metal-injected-properties')) {
11629
- Ember.Service = Service;
11630
- }
11631
-
11714
+
11632
11715
  Ember._ProxyMixin = _ProxyMixin;
11633
11716
 
11634
11717
  Ember.RSVP = RSVP;
@@ -12218,6 +12301,7 @@ define("ember-runtime/computed/reduce_computed",
12218
12301
  this.setValue(removedItem.call(
12219
12302
  this.instanceMeta.context, this.getValue(), item, changeMeta, this.instanceMeta.sugarMeta));
12220
12303
  }
12304
+ this.callbacks.flushedChanges.call(this.instanceMeta.context, this.getValue(), this.instanceMeta.sugarMeta);
12221
12305
  },
12222
12306
 
12223
12307
  dependentArrayDidChange: function (dependentArray, index, removedCount, addedCount) {
@@ -12249,7 +12333,7 @@ define("ember-runtime/computed/reduce_computed",
12249
12333
  this.setValue(addedItem.call(
12250
12334
  this.instanceMeta.context, this.getValue(), item, changeMeta, this.instanceMeta.sugarMeta));
12251
12335
  }, this);
12252
-
12336
+ this.callbacks.flushedChanges.call(this.instanceMeta.context, this.getValue(), this.instanceMeta.sugarMeta);
12253
12337
  this.trackAdd(dependentKey, normalizedIndex, observerContexts);
12254
12338
  },
12255
12339
 
@@ -12293,6 +12377,7 @@ define("ember-runtime/computed/reduce_computed",
12293
12377
  }
12294
12378
 
12295
12379
  this.changedItems = {};
12380
+ this.callbacks.flushedChanges.call(this.instanceMeta.context, this.getValue(), this.instanceMeta.sugarMeta);
12296
12381
  }
12297
12382
  };
12298
12383
 
@@ -12329,6 +12414,7 @@ define("ember-runtime/computed/reduce_computed",
12329
12414
  meta.setValue( callbacks.addedItem.call(
12330
12415
  this, meta.getValue(), item, new ChangeMeta(dependentArray, item, index, propertyName, cp, dependentArray.length), meta.sugarMeta));
12331
12416
  }, this);
12417
+ callbacks.flushedChanges.call(this, meta.getValue(), meta.sugarMeta);
12332
12418
  }
12333
12419
 
12334
12420
  function reset(cp, propertyName) {
@@ -12504,7 +12590,8 @@ define("ember-runtime/computed/reduce_computed",
12504
12590
 
12505
12591
  this.callbacks = {
12506
12592
  removedItem: options.removedItem || defaultCallback,
12507
- addedItem: options.addedItem || defaultCallback
12593
+ addedItem: options.addedItem || defaultCallback,
12594
+ flushedChanges: options.flushedChanges || defaultCallback
12508
12595
  };
12509
12596
  }
12510
12597
 
@@ -12797,8 +12884,8 @@ define("ember-runtime/computed/reduce_computed",
12797
12884
  __exports__.reduceComputed = reduceComputed;
12798
12885
  });
12799
12886
  define("ember-runtime/computed/reduce_computed_macros",
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__) {
12887
+ ["ember-metal/core","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/subarray","ember-metal/keys","ember-runtime/compare","exports"],
12888
+ function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __dependency8__, __dependency9__, __dependency10__, __dependency11__, __dependency12__, __exports__) {
12802
12889
  "use strict";
12803
12890
  /**
12804
12891
  @module ember
@@ -12807,20 +12894,18 @@ define("ember-runtime/computed/reduce_computed_macros",
12807
12894
 
12808
12895
  var Ember = __dependency1__["default"];
12809
12896
  // Ember.assert
12810
- var merge = __dependency2__["default"];
12811
- var get = __dependency3__.get;
12812
- var isArray = __dependency4__.isArray;
12813
- var guidFor = __dependency4__.guidFor;
12814
- var EmberError = __dependency5__["default"];
12815
- var forEach = __dependency6__.forEach;
12816
- var run = __dependency7__["default"];
12817
- var addObserver = __dependency8__.addObserver;
12818
- var arrayComputed = __dependency9__.arrayComputed;
12819
- var reduceComputed = __dependency10__.reduceComputed;
12820
- var ObjectProxy = __dependency11__["default"];
12821
- var SubArray = __dependency12__["default"];
12822
- var keys = __dependency13__["default"];
12823
- var compare = __dependency14__["default"];
12897
+ var get = __dependency2__.get;
12898
+ var isArray = __dependency3__.isArray;
12899
+ var guidFor = __dependency3__.guidFor;
12900
+ var EmberError = __dependency4__["default"];
12901
+ var forEach = __dependency5__.forEach;
12902
+ var run = __dependency6__["default"];
12903
+ var addObserver = __dependency7__.addObserver;
12904
+ var arrayComputed = __dependency8__.arrayComputed;
12905
+ var reduceComputed = __dependency9__.reduceComputed;
12906
+ var SubArray = __dependency10__["default"];
12907
+ var keys = __dependency11__["default"];
12908
+ var compare = __dependency12__["default"];
12824
12909
 
12825
12910
  var a_slice = [].slice;
12826
12911
 
@@ -13399,8 +13484,8 @@ define("ember-runtime/computed/reduce_computed_macros",
13399
13484
  mid = low + Math.floor((high - low) / 2);
13400
13485
  midItem = array.objectAt(mid);
13401
13486
 
13402
- guidMid = _guidFor(midItem);
13403
- guidItem = _guidFor(item);
13487
+ guidMid = guidFor(midItem);
13488
+ guidItem = guidFor(item);
13404
13489
 
13405
13490
  if (guidMid === guidItem) {
13406
13491
  return mid;
@@ -13420,19 +13505,9 @@ define("ember-runtime/computed/reduce_computed_macros",
13420
13505
  }
13421
13506
 
13422
13507
  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
- }
13431
13508
  }
13432
13509
 
13433
13510
 
13434
- var SearchProxy = ObjectProxy.extend();
13435
-
13436
13511
  /**
13437
13512
  A computed property which returns a new array with all the
13438
13513
  properties from the first dependent array sorted based on a property
@@ -13501,17 +13576,53 @@ define("ember-runtime/computed/reduce_computed_macros",
13501
13576
  Ember.assert('Ember.computed.sort requires two arguments: an array key to sort and ' +
13502
13577
  'either a sort properties key or sort function', arguments.length === 2);
13503
13578
 
13504
- var initFn, sortPropertiesKey;
13505
-
13506
13579
  if (typeof sortDefinition === 'function') {
13507
- initFn = function (array, changeMeta, instanceMeta) {
13508
- instanceMeta.order = sortDefinition;
13509
- instanceMeta.binarySearch = binarySearch;
13510
- };
13580
+ return customSort(itemsKey, sortDefinition);
13511
13581
  } else {
13512
- sortPropertiesKey = sortDefinition;
13582
+ return propertySort(itemsKey, sortDefinition);
13583
+ }
13584
+ }
13585
+
13586
+ __exports__.sort = sort;function customSort(itemsKey, comparator) {
13587
+ return arrayComputed(itemsKey, {
13588
+ initialize: function (array, changeMeta, instanceMeta) {
13589
+ instanceMeta.order = comparator;
13590
+ instanceMeta.binarySearch = binarySearch;
13591
+ instanceMeta.waitingInsertions = [];
13592
+ instanceMeta.insertWaiting = function() {
13593
+ var index, item;
13594
+ var waiting = instanceMeta.waitingInsertions;
13595
+ instanceMeta.waitingInsertions = [];
13596
+ for (var i=0; i<waiting.length; i++) {
13597
+ item = waiting[i];
13598
+ index = instanceMeta.binarySearch(array, item);
13599
+ array.insertAt(index, item);
13600
+ }
13601
+ };
13602
+ instanceMeta.insertLater = function(item) {
13603
+ this.waitingInsertions.push(item);
13604
+ };
13605
+ },
13606
+
13607
+ addedItem: function (array, item, changeMeta, instanceMeta) {
13608
+ instanceMeta.insertLater(item);
13609
+ return array;
13610
+ },
13611
+
13612
+ removedItem: function (array, item, changeMeta, instanceMeta) {
13613
+ array.removeObject(item);
13614
+ return array;
13615
+ },
13616
+
13617
+ flushedChanges: function(array, instanceMeta) {
13618
+ instanceMeta.insertWaiting();
13619
+ }
13620
+ });
13621
+ }
13513
13622
 
13514
- initFn = function (array, changeMeta, instanceMeta) {
13623
+ function propertySort(itemsKey, sortPropertiesKey) {
13624
+ return arrayComputed(itemsKey, {
13625
+ initialize: function (array, changeMeta, instanceMeta) {
13515
13626
  function setupSortProperties() {
13516
13627
  var sortPropertyDefinitions = get(this, sortPropertiesKey);
13517
13628
  var sortProperties = instanceMeta.sortProperties = [];
@@ -13519,7 +13630,7 @@ define("ember-runtime/computed/reduce_computed_macros",
13519
13630
  var sortProperty, idx, asc;
13520
13631
 
13521
13632
  Ember.assert('Cannot sort: \'' + sortPropertiesKey + '\' is not an array.',
13522
- isArray(sortPropertyDefinitions));
13633
+ isArray(sortPropertyDefinitions));
13523
13634
 
13524
13635
  changeMeta.property.clearItemPropertyKeys(itemsKey);
13525
13636
 
@@ -13553,12 +13664,14 @@ define("ember-runtime/computed/reduce_computed_macros",
13553
13664
  setupSortProperties.call(this);
13554
13665
 
13555
13666
  instanceMeta.order = function (itemA, itemB) {
13556
- var isProxy = itemB instanceof SearchProxy;
13557
13667
  var sortProperty, result, asc;
13668
+ var keyA = this.keyFor(itemA);
13669
+ var keyB = this.keyFor(itemB);
13558
13670
 
13559
13671
  for (var i = 0; i < this.sortProperties.length; ++i) {
13560
13672
  sortProperty = this.sortProperties[i];
13561
- result = compare(get(itemA, sortProperty), isProxy ? itemB[sortProperty] : get(itemB, sortProperty));
13673
+
13674
+ result = compare(keyA[sortProperty], keyB[sortProperty]);
13562
13675
 
13563
13676
  if (result !== 0) {
13564
13677
  asc = this.sortPropertyAscending[sortProperty];
@@ -13570,39 +13683,46 @@ define("ember-runtime/computed/reduce_computed_macros",
13570
13683
  };
13571
13684
 
13572
13685
  instanceMeta.binarySearch = binarySearch;
13573
- };
13574
- }
13575
-
13576
- return arrayComputed(itemsKey, {
13577
- initialize: initFn,
13686
+ setupKeyCache(instanceMeta);
13687
+ },
13578
13688
 
13579
13689
  addedItem: function (array, item, changeMeta, instanceMeta) {
13580
13690
  var index = instanceMeta.binarySearch(array, item);
13581
13691
  array.insertAt(index, item);
13582
-
13583
13692
  return array;
13584
13693
  },
13585
13694
 
13586
13695
  removedItem: function (array, item, changeMeta, instanceMeta) {
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);
13696
+ var index = instanceMeta.binarySearch(array, item);
13598
13697
  array.removeAt(index);
13599
-
13698
+ instanceMeta.dropKeyFor(item);
13600
13699
  return array;
13601
13700
  }
13602
13701
  });
13603
13702
  }
13604
13703
 
13605
- __exports__.sort = sort;
13704
+ function setupKeyCache(instanceMeta) {
13705
+ instanceMeta.keyFor = function(item) {
13706
+ var guid = guidFor(item);
13707
+ if (this.keyCache[guid]) {
13708
+ return this.keyCache[guid];
13709
+ }
13710
+ var sortProperty;
13711
+ var key = {};
13712
+ for (var i = 0; i < this.sortProperties.length; ++i) {
13713
+ sortProperty = this.sortProperties[i];
13714
+ key[sortProperty] = get(item, sortProperty);
13715
+ }
13716
+ return this.keyCache[guid] = key;
13717
+ };
13718
+
13719
+ instanceMeta.dropKeyFor = function(item) {
13720
+ var guid = guidFor(item);
13721
+ this.keyCache[guid] = null;
13722
+ };
13723
+
13724
+ instanceMeta.keyCache = {};
13725
+ }
13606
13726
  });
13607
13727
  define("ember-runtime/controllers/array_controller",
13608
13728
  ["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"],
@@ -13848,28 +13968,7 @@ define("ember-runtime/controllers/array_controller",
13848
13968
  parentController = this;
13849
13969
  }
13850
13970
 
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 {
13971
+
13873
13972
  fullName = 'controller:' + controllerClass;
13874
13973
 
13875
13974
  if (!container.has(fullName)) {
@@ -13881,7 +13980,7 @@ define("ember-runtime/controllers/array_controller",
13881
13980
  parentController: parentController,
13882
13981
  model: object
13883
13982
  });
13884
- }
13983
+
13885
13984
 
13886
13985
  subControllers[idx] = subController;
13887
13986
 
@@ -13936,42 +14035,12 @@ define("ember-runtime/controllers/controller",
13936
14035
  */
13937
14036
  var Controller = EmberObject.extend(Mixin);
13938
14037
 
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
- });
14038
+ function controllerInjectionHelper(factory) {
14039
+ Ember.assert("Defining an injected controller property on a " +
14040
+ "non-controller is not allowed.", Controller.detect(factory));
13973
14041
  }
13974
14042
 
14043
+
13975
14044
  __exports__["default"] = Controller;
13976
14045
  });
13977
14046
  define("ember-runtime/controllers/object_controller",
@@ -14405,7 +14474,7 @@ define("ember-runtime/ext/rsvp",
14405
14474
  };
14406
14475
 
14407
14476
  RSVP.onerrorDefault = function (error) {
14408
- if (error instanceof Error) {
14477
+ if (error && error.name !== 'TransitionAborted') {
14409
14478
  if (Ember.testing) {
14410
14479
  // ES6TODO: remove when possible
14411
14480
  if (!Test && Ember.__loader.registry[testModuleName]) {
@@ -14414,6 +14483,7 @@ define("ember-runtime/ext/rsvp",
14414
14483
 
14415
14484
  if (Test && Test.adapter) {
14416
14485
  Test.adapter.exception(error);
14486
+ Logger.error(error.stack);
14417
14487
  } else {
14418
14488
  throw error;
14419
14489
  }
@@ -14888,12 +14958,7 @@ define("ember-runtime/mixins/action_handler",
14888
14958
  @method willMergeMixin
14889
14959
  */
14890
14960
  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
-
14961
+
14897
14962
  var hashName;
14898
14963
 
14899
14964
  if (!props._actions) {
@@ -14984,7 +15049,7 @@ define("ember-runtime/mixins/array",
14984
15049
  var get = __dependency2__.get;
14985
15050
  var computed = __dependency3__.computed;
14986
15051
  var cacheFor = __dependency3__.cacheFor;
14987
- var isNone = __dependency4__.isNone;
15052
+ var isNone = __dependency4__["default"];
14988
15053
  var Enumerable = __dependency5__["default"];
14989
15054
  var map = __dependency6__.map;
14990
15055
  var Mixin = __dependency7__.Mixin;
@@ -17733,7 +17798,7 @@ define("ember-runtime/mixins/observable",
17733
17798
  var removeObserver = __dependency10__.removeObserver;
17734
17799
  var observersFor = __dependency10__.observersFor;
17735
17800
  var cacheFor = __dependency11__.cacheFor;
17736
- var isNone = __dependency12__.isNone;
17801
+ var isNone = __dependency12__["default"];
17737
17802
 
17738
17803
 
17739
17804
  var slice = Array.prototype.slice;
@@ -18451,13 +18516,13 @@ define("ember-runtime/mixins/sortable",
18451
18516
  var computed = __dependency8__.computed;
18452
18517
  var beforeObserver = __dependency4__.beforeObserver;
18453
18518
  var observer = __dependency4__.observer;
18454
- //ES6TODO: should we access these directly from their package or from how thier exposed in ember-metal?
18519
+ //ES6TODO: should we access these directly from their package or from how their exposed in ember-metal?
18455
18520
 
18456
18521
  /**
18457
18522
  `Ember.SortableMixin` provides a standard interface for array proxies
18458
18523
  to specify a sort order and maintain this sorting when objects are added,
18459
18524
  removed, or updated without changing the implicit order of their underlying
18460
- modelarray:
18525
+ model array:
18461
18526
 
18462
18527
  ```javascript
18463
18528
  songs = [
@@ -18489,8 +18554,8 @@ define("ember-runtime/mixins/sortable",
18489
18554
  songsController.get('firstObject'); // {trackNumber: 4, title: 'Ob-La-Di, Ob-La-Da'}
18490
18555
  ```
18491
18556
 
18492
- SortableMixin works by sorting the arrangedContent array, which is the array that
18493
- arrayProxy displays. Due to the fact that the underlying 'content' array is not changed, that
18557
+ `SortableMixin` works by sorting the `arrangedContent` array, which is the array that
18558
+ `ArrayProxy` displays. Due to the fact that the underlying 'content' array is not changed, that
18494
18559
  array will not display the sorted list:
18495
18560
 
18496
18561
  ```javascript
@@ -18498,8 +18563,8 @@ define("ember-runtime/mixins/sortable",
18498
18563
  songsController.get('firstObject'); // Returns the sorted content.
18499
18564
  ```
18500
18565
 
18501
- Although the sorted content can also be accessed through the arrangedContent property,
18502
- it is preferable to use the proxied class and not the arrangedContent array directly.
18566
+ Although the sorted content can also be accessed through the `arrangedContent` property,
18567
+ it is preferable to use the proxied class and not the `arrangedContent` array directly.
18503
18568
 
18504
18569
  @class SortableMixin
18505
18570
  @namespace Ember
@@ -18508,7 +18573,7 @@ define("ember-runtime/mixins/sortable",
18508
18573
  __exports__["default"] = Mixin.create(MutableEnumerable, {
18509
18574
 
18510
18575
  /**
18511
- Specifies which properties dictate the arrangedContent's sort order.
18576
+ Specifies which properties dictate the `arrangedContent`'s sort order.
18512
18577
 
18513
18578
  When specifying multiple properties the sorting will use properties
18514
18579
  from the `sortProperties` array prioritized from first to last.
@@ -18518,7 +18583,7 @@ define("ember-runtime/mixins/sortable",
18518
18583
  sortProperties: null,
18519
18584
 
18520
18585
  /**
18521
- Specifies the arrangedContent's sort direction.
18586
+ Specifies the `arrangedContent`'s sort direction.
18522
18587
  Sorts the content in ascending order by default. Set to `false` to
18523
18588
  use descending order.
18524
18589
 
@@ -18530,13 +18595,14 @@ define("ember-runtime/mixins/sortable",
18530
18595
  /**
18531
18596
  The function used to compare two values. You can override this if you
18532
18597
  want to do custom comparisons. Functions must be of the type expected by
18533
- Array#sort, i.e.
18534
- return 0 if the two parameters are equal,
18535
- return a negative value if the first parameter is smaller than the second or
18536
- return a positive value otherwise:
18598
+ Array#sort, i.e.,
18599
+
18600
+ * return 0 if the two parameters are equal,
18601
+ * return a negative value if the first parameter is smaller than the second or
18602
+ * return a positive value otherwise:
18537
18603
 
18538
18604
  ```javascript
18539
- function(x,y) { // These are assumed to be integers
18605
+ function(x, y) { // These are assumed to be integers
18540
18606
  if (x === y)
18541
18607
  return 0;
18542
18608
  return x < y ? -1 : 1;
@@ -18587,12 +18653,11 @@ define("ember-runtime/mixins/sortable",
18587
18653
  isSorted: computed.notEmpty('sortProperties'),
18588
18654
 
18589
18655
  /**
18590
- Overrides the default arrangedContent from arrayProxy in order to sort by sortFunction.
18591
- Also sets up observers for each sortProperty on each item in the content Array.
18656
+ Overrides the default `arrangedContent` from `ArrayProxy` in order to sort by `sortFunction`.
18657
+ Also sets up observers for each `sortProperty` on each item in the content Array.
18592
18658
 
18593
18659
  @property arrangedContent
18594
18660
  */
18595
-
18596
18661
  arrangedContent: computed('content', 'sortProperties.@each', function(key, value) {
18597
18662
  var content = get(this, 'content');
18598
18663
  var isSorted = get(this, 'isSorted');
@@ -19280,9 +19345,13 @@ define("ember-runtime/system/container",
19280
19345
  __exports__["default"] = Container;
19281
19346
  });
19282
19347
  define("ember-runtime/system/core_object",
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"],
19348
+ ["ember-metal/core","ember-metal/property_get","ember-metal/utils","ember-metal/platform","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","ember-metal/watching","exports"],
19284
19349
  function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __dependency8__, __dependency9__, __dependency10__, __dependency11__, __dependency12__, __dependency13__, __dependency14__, __dependency15__, __dependency16__, __dependency17__, __exports__) {
19285
- "use strict";
19350
+ // Remove "use strict"; from transpiled module until
19351
+ // https://bugs.webkit.org/show_bug.cgi?id=138038 is fixed
19352
+ //
19353
+ // REMOVE_USE_STRICT: true
19354
+
19286
19355
  /**
19287
19356
  @module ember
19288
19357
  @submodule ember-runtime
@@ -19301,23 +19370,23 @@ define("ember-runtime/system/core_object",
19301
19370
  var GUID_KEY = __dependency3__.GUID_KEY;
19302
19371
  var meta = __dependency3__.meta;
19303
19372
  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"];
19373
+ var finishChains = __dependency5__.finishChains;
19374
+ var sendEvent = __dependency6__.sendEvent;
19375
+ var IS_BINDING = __dependency7__.IS_BINDING;
19376
+ var Mixin = __dependency7__.Mixin;
19377
+ var required = __dependency7__.required;
19378
+ var indexOf = __dependency8__.indexOf;
19379
+ var EmberError = __dependency9__["default"];
19312
19380
  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"];
19319
- var run = __dependency17__["default"];
19320
- var destroy = __dependency5__.destroy;
19381
+ var keys = __dependency10__["default"];
19382
+ var ActionHandler = __dependency11__["default"];
19383
+ var defineProperty = __dependency12__.defineProperty;
19384
+ var Binding = __dependency13__.Binding;
19385
+ var ComputedProperty = __dependency14__.ComputedProperty;
19386
+ var computed = __dependency14__.computed;
19387
+ var InjectedProperty = __dependency15__["default"];
19388
+ var run = __dependency16__["default"];
19389
+ var destroy = __dependency17__.destroy;
19321
19390
  var K = __dependency1__.K;
19322
19391
  var hasPropertyAccessors = __dependency4__.hasPropertyAccessors;
19323
19392
 
@@ -19470,7 +19539,6 @@ define("ember-runtime/system/core_object",
19470
19539
  if (!wasApplied) {
19471
19540
  wasApplied = true;
19472
19541
  Class.PrototypeMixin.applyPartial(Class.prototype);
19473
- rewatch(Class.prototype);
19474
19542
  }
19475
19543
 
19476
19544
  return this.prototype;
@@ -20068,7 +20136,7 @@ define("ember-runtime/system/core_object",
20068
20136
  return desc._meta || {};
20069
20137
  },
20070
20138
 
20071
- _computedProperties: Ember.computed(function() {
20139
+ _computedProperties: computed(function() {
20072
20140
  hasCachedComputedProperties = true;
20073
20141
  var proto = this.proto();
20074
20142
  var descs = meta(proto).descs;
@@ -20110,31 +20178,7 @@ define("ember-runtime/system/core_object",
20110
20178
  }
20111
20179
  };
20112
20180
 
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
-
20181
+
20138
20182
  var ClassMixin = Mixin.create(ClassMixinProps);
20139
20183
 
20140
20184
  ClassMixin.ownerConstructor = CoreObject;
@@ -20924,22 +20968,13 @@ define("ember-runtime/system/object",
20924
20968
  return "Ember.Object";
20925
20969
  };
20926
20970
 
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
- });
20971
+ function injectedPropertyAssertion(props) {
20972
+ // Injection validations are a debugging aid only, so ensure that they are
20973
+ // not performed in production builds by invoking from an assertion
20974
+ Ember.assert("Injected properties are invalid", validatePropertyInjections(this.constructor, props));
20941
20975
  }
20942
20976
 
20977
+
20943
20978
  __exports__["default"] = EmberObject;
20944
20979
  });
20945
20980
  define("ember-runtime/system/object_proxy",
@@ -21029,43 +21064,7 @@ define("ember-runtime/system/service",
21029
21064
 
21030
21065
  var Service;
21031
21066
 
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
-
21067
+
21069
21068
  __exports__["default"] = Service;
21070
21069
  });
21071
21070
  define("ember-runtime/system/set",
@@ -21082,7 +21081,7 @@ define("ember-runtime/system/set",
21082
21081
  var get = __dependency2__.get;
21083
21082
  var set = __dependency3__.set;
21084
21083
  var guidFor = __dependency4__.guidFor;
21085
- var isNone = __dependency5__.isNone;
21084
+ var isNone = __dependency5__["default"];
21086
21085
  var fmt = __dependency6__.fmt;
21087
21086
  var CoreObject = __dependency7__["default"];
21088
21087
  var MutableEnumerable = __dependency8__["default"];