ember-source 1.4.0 → 1.5.0.beta.1.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: dc7f221160ac16fbccc78d5647134b824b331c23
4
- data.tar.gz: bd4c89d6864042991aeb23e52ccb88584d46cb03
3
+ metadata.gz: 7648a0c4283d149842443c1cefadef032250a543
4
+ data.tar.gz: 980ea55b8a99ee23ead06a276bb25ebeb27cbd9a
5
5
  SHA512:
6
- metadata.gz: 5aa3ea07670537474b22f9f92b28554745f6a1a9e73e147917eb51e9d0e0dac268d57dfad32fb7bc72092fca8ab0df4d65c7e3661be4113f3c39e8ca474fd54f
7
- data.tar.gz: a66eda4f82348c77b915af73eb6adb3b68c8bb2a2fa540a6d3461fc3d174007fb50c9f0dccc040cad00d1b4deae8ed5a5fd47d8cbed956faa8f7584d1873c557
6
+ metadata.gz: 79d2d7e44856ad9bc2dc16d861c08abacb9d1d6a585d9ad99ccf1bc62137cf958aa5820e1abb2c6aa8aa1a5e1b2a7f23515427cc1c7981f059c7111bf0ac1c05
7
+ data.tar.gz: d0903e9a157dd719129db07e3bfc6ab4e2b950d1196dc94a8541b2d8876f768e3095df968f42799067437363d9e0a2e785bd2d433c91c85500180760f76b180d
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.4.0
1
+ 1.5.0-beta.1.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.4.0
8
+ * @version 1.5.0-beta.1
9
9
  */
10
10
 
11
11
 
@@ -117,9 +117,6 @@ Ember.debug = function(message) {
117
117
  will be displayed.
118
118
  */
119
119
  Ember.deprecate = function(message, test) {
120
- if (Ember.TESTING_DEPRECATION) { return; }
121
-
122
- if (arguments.length === 1) { test = false; }
123
120
  if (test) { return; }
124
121
 
125
122
  if (Ember.ENV.RAISE_ON_DEPRECATION) { throw new Ember.Error(message); }
@@ -209,7 +206,7 @@ if (!Ember.testing) {
209
206
  * Portions Copyright 2008-2011 Apple Inc. All rights reserved.
210
207
  * @license Licensed under MIT license
211
208
  * See https://raw.github.com/emberjs/ember.js/master/LICENSE
212
- * @version 1.4.0
209
+ * @version 1.5.0-beta.1.1
213
210
  */
214
211
 
215
212
 
@@ -292,7 +289,7 @@ var define, requireModule, require, requirejs;
292
289
 
293
290
  @class Ember
294
291
  @static
295
- @version 1.4.0
292
+ @version 1.5.0-beta.1
296
293
  */
297
294
 
298
295
  if ('undefined' === typeof Ember) {
@@ -319,10 +316,10 @@ Ember.toString = function() { return "Ember"; };
319
316
  /**
320
317
  @property VERSION
321
318
  @type String
322
- @default '1.4.0'
319
+ @default '1.5.0-beta.1'
323
320
  @static
324
321
  */
325
- Ember.VERSION = '1.4.0';
322
+ Ember.VERSION = '1.5.0-beta.1';
326
323
 
327
324
  /**
328
325
  Standard environmental variables. You can define these in a global `EmberENV`
@@ -552,7 +549,34 @@ Ember.none = Ember.deprecateFunc("Ember.none is deprecated. Please use Ember.isN
552
549
  Ember.isEmpty = function(obj) {
553
550
  return Ember.isNone(obj) || (obj.length === 0 && typeof obj !== 'function') || (typeof obj === 'object' && Ember.get(obj, 'length') === 0);
554
551
  };
555
- Ember.empty = Ember.deprecateFunc("Ember.empty is deprecated. Please use Ember.isEmpty instead.", Ember.isEmpty) ;
552
+ Ember.empty = Ember.deprecateFunc("Ember.empty is deprecated. Please use Ember.isEmpty instead.", Ember.isEmpty);
553
+
554
+
555
+ /**
556
+ A value is blank if it is empty or a whitespace string.
557
+
558
+ ```javascript
559
+ Ember.isBlank(); // true
560
+ Ember.isBlank(null); // true
561
+ Ember.isBlank(undefined); // true
562
+ Ember.isBlank(''); // true
563
+ Ember.isBlank([]); // true
564
+ Ember.isBlank('\n\t'); // true
565
+ Ember.isBlank(' '); // true
566
+ Ember.isBlank({}); // false
567
+ Ember.isBlank('\n\t Hello'); // false
568
+ Ember.isBlank('Hello world'); // false
569
+ Ember.isBlank([1,2,3]); // false
570
+ ```
571
+
572
+ @method isBlank
573
+ @for Ember
574
+ @param {Object} obj Value to test
575
+ @return {Boolean}
576
+ */
577
+ Ember.isBlank = function(obj) {
578
+ return Ember.isEmpty(obj) || (typeof obj === 'string' && obj.match(/\S/) === null);
579
+ };
556
580
 
557
581
 
558
582
  })();
@@ -797,19 +821,35 @@ var arrayIndexOf = isNativeFunc(Array.prototype.indexOf) ? Array.prototype.index
797
821
  return -1;
798
822
  };
799
823
 
824
+ var arrayFilter = isNativeFunc(Array.prototype.filter) ? Array.prototype.filter : function (fn, context) {
825
+ var i,
826
+ value,
827
+ result = [],
828
+ length = this.length;
829
+
830
+ for (i = 0; i < length; i++) {
831
+ if (this.hasOwnProperty(i)) {
832
+ value = this[i];
833
+ if (fn.call(context, value, i, this)) {
834
+ result.push(value);
835
+ }
836
+ }
837
+ }
838
+ return result;
839
+ };
800
840
 
801
- /**
802
- Array polyfills to support ES5 features in older browsers.
803
-
804
- @namespace Ember
805
- @property ArrayPolyfills
806
- */
807
- Ember.ArrayPolyfills = {
808
- map: arrayMap,
809
- forEach: arrayForEach,
810
- indexOf: arrayIndexOf
811
- };
841
+ /**
842
+ Array polyfills to support ES5 features in older browsers.
812
843
 
844
+ @namespace Ember
845
+ @property ArrayPolyfills
846
+ */
847
+ Ember.ArrayPolyfills = {
848
+ map: arrayMap,
849
+ forEach: arrayForEach,
850
+ filter: arrayFilter,
851
+ indexOf: arrayIndexOf
852
+ };
813
853
 
814
854
  if (Ember.SHIM_ES5) {
815
855
  if (!Array.prototype.map) {
@@ -820,6 +860,10 @@ if (Ember.SHIM_ES5) {
820
860
  Array.prototype.forEach = arrayForEach;
821
861
  }
822
862
 
863
+ if (!Array.prototype.filter) {
864
+ Array.prototype.filter = arrayFilter;
865
+ }
866
+
823
867
  if (!Array.prototype.indexOf) {
824
868
  Array.prototype.indexOf = arrayIndexOf;
825
869
  }
@@ -885,29 +929,6 @@ Ember.Error.prototype = Ember.create(Error.prototype);
885
929
  */
886
930
  Ember.onerror = null;
887
931
 
888
- /**
889
- Wrap code block in a try/catch if `Ember.onerror` is set.
890
-
891
- @private
892
- @method handleErrors
893
- @for Ember
894
- @param {Function} func
895
- @param [context]
896
- */
897
- Ember.handleErrors = function(func, context) {
898
- // Unfortunately in some browsers we lose the backtrace if we rethrow the existing error,
899
- // so in the event that we don't have an `onerror` handler we don't wrap in a try/catch
900
- if ('function' === typeof Ember.onerror) {
901
- try {
902
- return func.call(context || this);
903
- } catch (error) {
904
- Ember.onerror(error);
905
- }
906
- } else {
907
- return func.call(context || this);
908
- }
909
- };
910
-
911
932
  })();
912
933
 
913
934
 
@@ -928,9 +949,9 @@ var o_defineProperty = Ember.platform.defineProperty,
928
949
  o_create = Ember.create,
929
950
  // Used for guid generation...
930
951
  GUID_KEY = '__ember'+ (+ new Date()),
931
- uuid = 0,
932
952
  numberCache = [],
933
- stringCache = {};
953
+ stringCache = {},
954
+ uuid = 0;
934
955
 
935
956
  var MANDATORY_SETTER = Ember.ENV.MANDATORY_SETTER;
936
957
 
@@ -978,8 +999,12 @@ Ember.generateGuid = function generateGuid(obj, prefix) {
978
999
  if (!prefix) prefix = Ember.GUID_PREFIX;
979
1000
  var ret = (prefix + (uuid++));
980
1001
  if (obj) {
981
- GUID_DESC.value = ret;
982
- o_defineProperty(obj, GUID_KEY, GUID_DESC);
1002
+ if (obj[GUID_KEY] === null) {
1003
+ obj[GUID_KEY] = ret;
1004
+ } else {
1005
+ GUID_DESC.value = ret;
1006
+ o_defineProperty(obj, GUID_KEY, GUID_DESC);
1007
+ }
983
1008
  }
984
1009
  return ret;
985
1010
  };
@@ -1026,9 +1051,14 @@ Ember.guidFor = function guidFor(obj) {
1026
1051
  if (obj[GUID_KEY]) return obj[GUID_KEY];
1027
1052
  if (obj === Object) return '(Object)';
1028
1053
  if (obj === Array) return '(Array)';
1029
- ret = 'ember'+(uuid++);
1030
- GUID_DESC.value = ret;
1031
- o_defineProperty(obj, GUID_KEY, GUID_DESC);
1054
+ ret = 'ember' + (uuid++);
1055
+
1056
+ if (obj[GUID_KEY] === null) {
1057
+ obj[GUID_KEY] = ret;
1058
+ } else {
1059
+ GUID_DESC.value = ret;
1060
+ o_defineProperty(obj, GUID_KEY, GUID_DESC);
1061
+ }
1032
1062
  return ret;
1033
1063
  }
1034
1064
  };
@@ -1231,13 +1261,11 @@ Ember.metaPath = function metaPath(obj, path, writable) {
1231
1261
  @return {Function} wrapped function.
1232
1262
  */
1233
1263
  Ember.wrap = function(func, superFunc) {
1234
- function K() {}
1235
-
1236
1264
  function superWrapper() {
1237
- var ret, sup = this._super;
1238
- this._super = superFunc || K;
1265
+ var ret, sup = this.__nextSuper;
1266
+ this.__nextSuper = superFunc;
1239
1267
  ret = func.apply(this, arguments);
1240
- this._super = sup;
1268
+ this.__nextSuper = sup;
1241
1269
  return ret;
1242
1270
  }
1243
1271
 
@@ -2250,8 +2278,13 @@ var o_create = Ember.create,
2250
2278
 
2251
2279
  function indexOf(array, target, method) {
2252
2280
  var index = -1;
2253
- for (var i = 0, l = array.length; i < l; i += 3) {
2254
- if (target === array[i] && method === array[i+1]) { index = i; break; }
2281
+ // hashes are added to the end of the event array
2282
+ // so it makes sense to start searching at the end
2283
+ // of the array and search in reverse
2284
+ for (var i = array.length - 3 ; i >=0; i -= 3) {
2285
+ if (target === array[i] && method === array[i + 1]) {
2286
+ index = i; break;
2287
+ }
2255
2288
  }
2256
2289
  return index;
2257
2290
  }
@@ -2406,9 +2439,10 @@ function removeListener(obj, eventName, target, method) {
2406
2439
  an object might suspend its property change listener while it is
2407
2440
  setting that property.
2408
2441
 
2409
- @private
2410
2442
  @method suspendListener
2411
2443
  @for Ember
2444
+
2445
+ @private
2412
2446
  @param obj
2413
2447
  @param {String} eventName
2414
2448
  @param {Object|Function} targetOrMethod A target object or a function
@@ -2437,9 +2471,10 @@ function suspendListener(obj, eventName, target, method, callback) {
2437
2471
  /**
2438
2472
  Suspends multiple listeners during a callback.
2439
2473
 
2440
- @private
2441
2474
  @method suspendListeners
2442
2475
  @for Ember
2476
+
2477
+ @private
2443
2478
  @param obj
2444
2479
  @param {Array} eventName Array of event names
2445
2480
  @param {Object|Function} targetOrMethod A target object or a function
@@ -3456,7 +3491,7 @@ function consoleMethod(name) {
3456
3491
 
3457
3492
  if (method) {
3458
3493
  // Older IE doesn't support apply, but Chrome needs it
3459
- if (method.apply) {
3494
+ if (typeof method.apply === 'function') {
3460
3495
  logToConsole = function() {
3461
3496
  method.apply(consoleObj, arguments);
3462
3497
  };
@@ -3700,7 +3735,12 @@ Ember.defineProperty = function(obj, keyName, desc, data, meta) {
3700
3735
  obj[keyName] = undefined; // make enumerable
3701
3736
  }
3702
3737
 
3703
- } else {
3738
+ if (Ember.FEATURES.isEnabled('composable-computed-properties')) {
3739
+ if (desc.func && desc._dependentCPs) {
3740
+ addImplicitCPs(obj, desc._dependentCPs, meta);
3741
+ }
3742
+ }
3743
+ } else {
3704
3744
  descs[keyName] = undefined; // shadow descriptor in proto
3705
3745
  if (desc == null) {
3706
3746
  value = data;
@@ -3735,6 +3775,22 @@ Ember.defineProperty = function(obj, keyName, desc, data, meta) {
3735
3775
  return this;
3736
3776
  };
3737
3777
 
3778
+ if (Ember.FEATURES.isEnabled('composable-computed-properties')) {
3779
+ var addImplicitCPs = function defineImplicitCPs(obj, implicitCPs, meta) {
3780
+ var cp, key, length = implicitCPs.length;
3781
+
3782
+ for (var i=0; i<length; ++i) {
3783
+ cp = implicitCPs[i];
3784
+ key = cp.implicitCPKey;
3785
+
3786
+ Ember.defineProperty(obj, key, cp, undefined, meta);
3787
+
3788
+ if (cp._dependentCPs) {
3789
+ addImplicitCPs(obj, cp._dependentCPs, meta);
3790
+ }
3791
+ }
3792
+ };
3793
+ }
3738
3794
 
3739
3795
  })();
3740
3796
 
@@ -4471,6 +4527,7 @@ var get = Ember.get,
4471
4527
 
4472
4528
  var expandProperties = Ember.expandProperties;
4473
4529
 
4530
+
4474
4531
  // ..........................................................
4475
4532
  // DEPENDENT KEYS
4476
4533
  //
@@ -4629,19 +4686,36 @@ function removeDependentKeys(desc, obj, keyName, meta) {
4629
4686
  */
4630
4687
  function ComputedProperty(func, opts) {
4631
4688
  this.func = func;
4632
-
4689
+ if (Ember.FEATURES.isEnabled('composable-computed-properties')) {
4690
+ setDependentKeys(this, opts && opts.dependentKeys);
4691
+ } else {
4633
4692
  this._dependentKeys = opts && opts.dependentKeys;
4634
-
4693
+ }
4635
4694
 
4636
4695
  this._cacheable = (opts && opts.cacheable !== undefined) ? opts.cacheable : true;
4637
4696
  this._readOnly = opts && (opts.readOnly !== undefined || !!opts.readOnly);
4638
4697
  }
4639
4698
 
4640
4699
  Ember.ComputedProperty = ComputedProperty;
4700
+
4641
4701
  ComputedProperty.prototype = new Ember.Descriptor();
4642
4702
 
4643
4703
  var ComputedPropertyPrototype = ComputedProperty.prototype;
4704
+ ComputedPropertyPrototype._dependentKeys = undefined;
4705
+ ComputedPropertyPrototype._suspended = undefined;
4706
+ ComputedPropertyPrototype._meta = undefined;
4644
4707
 
4708
+ if (Ember.FEATURES.isEnabled('composable-computed-properties')) {
4709
+ ComputedPropertyPrototype._dependentCPs = undefined;
4710
+ ComputedPropertyPrototype.implicitCPKey = undefined;
4711
+
4712
+ ComputedPropertyPrototype.toString = function() {
4713
+ if (this.implicitCPKey) {
4714
+ return this.implicitCPKey;
4715
+ }
4716
+ return Ember.Descriptor.prototype.toString.apply(this, arguments);
4717
+ };
4718
+ }
4645
4719
 
4646
4720
  /**
4647
4721
  Properties are cacheable by default. Computed property will automatically
@@ -4746,9 +4820,11 @@ ComputedPropertyPrototype.property = function() {
4746
4820
  expandProperties(arguments[i], addArg);
4747
4821
  }
4748
4822
 
4749
-
4823
+ if (Ember.FEATURES.isEnabled('composable-computed-properties')) {
4824
+ setDependentKeys(this, args);
4825
+ } else {
4750
4826
  this._dependentKeys = args;
4751
-
4827
+ }
4752
4828
 
4753
4829
  return this;
4754
4830
  };
@@ -5010,8 +5086,74 @@ function getProperties(self, propertyNames) {
5010
5086
 
5011
5087
  var registerComputed, registerComputedWithProperties;
5012
5088
 
5089
+ if (Ember.FEATURES.isEnabled('composable-computed-properties')) {
5090
+ var guidFor = Ember.guidFor,
5091
+ map = Ember.EnumerableUtils.map,
5092
+ filter = Ember.EnumerableUtils.filter,
5093
+ typeOf = Ember.typeOf;
5094
+
5095
+ var implicitKey = function (cp) {
5096
+ return [guidFor(cp)].concat(cp._dependentKeys).join('_').replace(/\./g, '_DOT_');
5097
+ };
5013
5098
 
5099
+ var normalizeDependentKey = function (key) {
5100
+ if (key instanceof Ember.ComputedProperty) {
5101
+ return implicitKey(key);
5102
+ } else {
5103
+ return key;
5104
+ }
5105
+ };
5014
5106
 
5107
+ var normalizeDependentKeys = function (keys) {
5108
+ return map(keys, function (key) {
5109
+ return normalizeDependentKey(key);
5110
+ });
5111
+ };
5112
+
5113
+ var selectDependentCPs = function (keys) {
5114
+ return filter(keys, function (key) {
5115
+ return key instanceof Ember.ComputedProperty;
5116
+ });
5117
+ };
5118
+
5119
+ var setDependentKeys = function(cp, dependentKeys) {
5120
+ if (dependentKeys) {
5121
+ cp._dependentKeys = normalizeDependentKeys(dependentKeys);
5122
+ cp._dependentCPs = selectDependentCPs(dependentKeys);
5123
+ } else {
5124
+ cp._dependentKeys = cp._dependentCPs = [];
5125
+ }
5126
+ cp.implicitCPKey = implicitKey(cp);
5127
+ };
5128
+ // expose `normalizeDependentKey[s]` so user CP macros can easily support
5129
+ // composition
5130
+ Ember.computed.normalizeDependentKey = normalizeDependentKey;
5131
+ Ember.computed.normalizeDependentKeys = normalizeDependentKeys;
5132
+
5133
+ registerComputed = function (name, macro) {
5134
+ Ember.computed[name] = function(dependentKey) {
5135
+ var args = normalizeDependentKeys(a_slice.call(arguments));
5136
+ return Ember.computed(dependentKey, function() {
5137
+ return macro.apply(this, args);
5138
+ });
5139
+ };
5140
+ };
5141
+ }
5142
+
5143
+ if (Ember.FEATURES.isEnabled('composable-computed-properties')) {
5144
+ registerComputedWithProperties = function(name, macro) {
5145
+ Ember.computed[name] = function() {
5146
+ var args = a_slice.call(arguments);
5147
+ var properties = normalizeDependentKeys(args);
5148
+
5149
+ var computed = Ember.computed(function() {
5150
+ return macro.apply(this, [getProperties(this, properties)]);
5151
+ });
5152
+
5153
+ return computed.property.apply(computed, args);
5154
+ };
5155
+ };
5156
+ } else {
5015
5157
  registerComputed = function (name, macro) {
5016
5158
  Ember.computed[name] = function(dependentKey) {
5017
5159
  var args = a_slice.call(arguments);
@@ -5032,39 +5174,48 @@ var registerComputed, registerComputedWithProperties;
5032
5174
  return computed.property.apply(computed, properties);
5033
5175
  };
5034
5176
  };
5177
+ }
5035
5178
 
5036
5179
 
5180
+ if (Ember.FEATURES.isEnabled('composable-computed-properties')) {
5181
+ Ember.computed.literal = function (value) {
5182
+ return Ember.computed(function () {
5183
+ return value;
5184
+ });
5185
+ };
5186
+ }
5037
5187
 
5038
5188
 
5039
- /**
5040
- A computed property that returns true if the value of the dependent
5041
- property is null, an empty string, empty array, or empty function.
5189
+ /**
5190
+ A computed property that returns true if the value of the dependent
5191
+ property is null, an empty string, empty array, or empty function.
5042
5192
 
5043
- Note: When using `Ember.computed.empty` to watch an array make sure to
5044
- use the `array.[]` syntax so the computed can subscribe to transitions
5045
- from empty to non-empty states.
5193
+ Note: When using `Ember.computed.empty` to watch an array make sure to
5194
+ use the `array.[]` syntax so the computed can subscribe to transitions
5195
+ from empty to non-empty states.
5046
5196
 
5047
- Example
5197
+ Example
5048
5198
 
5049
- ```javascript
5050
- var ToDoList = Ember.Object.extend({
5051
- done: Ember.computed.empty('todos.[]') // detect array changes
5199
+ ```javascript
5200
+ var ToDoList = Ember.Object.extend({
5201
+ done: Ember.computed.empty('todos.[]') // detect array changes
5202
+ });
5203
+ var todoList = ToDoList.create({todos: ['Unit Test', 'Documentation', 'Release']});
5204
+ todoList.get('done'); // false
5205
+ todoList.get('todos').clear(); // []
5206
+ todoList.get('done'); // true
5207
+ ```
5208
+
5209
+ @method computed.empty
5210
+ @for Ember
5211
+ @param {String} dependentKey
5212
+ @return {Ember.ComputedProperty} computed property which negate
5213
+ the original value for property
5214
+ */
5215
+ registerComputed('empty', function(dependentKey) {
5216
+ return Ember.isEmpty(get(this, dependentKey));
5052
5217
  });
5053
- var todoList = ToDoList.create({todos: ['Unit Test', 'Documentation', 'Release']});
5054
- todoList.get('done'); // false
5055
- todoList.get('todos').clear(); // []
5056
- todoList.get('done'); // true
5057
- ```
5058
5218
 
5059
- @method computed.empty
5060
- @for Ember
5061
- @param {String} dependentKey
5062
- @return {Ember.ComputedProperty} computed property which negate
5063
- the original value for property
5064
- */
5065
- registerComputed('empty', function(dependentKey) {
5066
- return Ember.isEmpty(get(this, dependentKey));
5067
- });
5068
5219
 
5069
5220
  /**
5070
5221
  A computed property that returns true if the value of the dependent
@@ -5565,6 +5716,52 @@ Ember.computed.oneWay = function(dependentKey) {
5565
5716
  });
5566
5717
  };
5567
5718
 
5719
+
5720
+
5721
+ /**
5722
+ Where `computed.oneWay` provides oneWay bindings, `computed.readOnly` provides
5723
+ a readOnly one way binding. Very often when using `computed.oneWay` one does
5724
+ not also want changes to propogate back up, as they will replace the value.
5725
+
5726
+ This prevents the reverse flow, and also throws an exception when it occurs.
5727
+
5728
+ Example
5729
+
5730
+ ```javascript
5731
+ User = Ember.Object.extend({
5732
+ firstName: null,
5733
+ lastName: null,
5734
+ nickName: Ember.computed.readOnly('firstName')
5735
+ });
5736
+
5737
+ user = User.create({
5738
+ firstName: 'Teddy',
5739
+ lastName: 'Zeenny'
5740
+ });
5741
+
5742
+ user.get('nickName');
5743
+ # 'Teddy'
5744
+
5745
+ user.set('nickName', 'TeddyBear');
5746
+ # throws Exception
5747
+ # throw new Ember.Error('Cannot Set: nickName on: <User:ember27288>' );`
5748
+
5749
+ user.get('firstName');
5750
+ # 'Teddy'
5751
+ ```
5752
+
5753
+ @method computed.readOnly
5754
+ @for Ember
5755
+ @param {String} dependentKey
5756
+ @return {Ember.ComputedProperty} computed property which creates a
5757
+ one way computed property to the original value for property.
5758
+ */
5759
+ Ember.computed.readOnly = function(dependentKey) {
5760
+ return Ember.computed(dependentKey, function() {
5761
+ return get(this, dependentKey);
5762
+ }).readOnly();
5763
+ };
5764
+
5568
5765
  /**
5569
5766
  A computed property that acts like a standard getter and setter,
5570
5767
  but returns the value at the provided `defaultPath` if the
@@ -5713,7 +5910,7 @@ Ember.removeBeforeObserver = function(obj, _path, target, method) {
5713
5910
 
5714
5911
 
5715
5912
  (function() {
5716
- define("backburner/queue",
5913
+ define("backburner/queue",
5717
5914
  ["exports"],
5718
5915
  function(__exports__) {
5719
5916
  "use strict";
@@ -5820,11 +6017,10 @@ define("backburner/queue",
5820
6017
  }
5821
6018
  };
5822
6019
 
5823
-
5824
6020
  __exports__.Queue = Queue;
5825
6021
  });
5826
6022
 
5827
- define("backburner/deferred_action_queues",
6023
+ define("backburner/deferred_action_queues",
5828
6024
  ["backburner/queue","exports"],
5829
6025
  function(__dependency1__, __exports__) {
5830
6026
  "use strict";
@@ -5923,11 +6119,10 @@ define("backburner/deferred_action_queues",
5923
6119
  return -1;
5924
6120
  }
5925
6121
 
5926
-
5927
6122
  __exports__.DeferredActionQueues = DeferredActionQueues;
5928
6123
  });
5929
6124
 
5930
- define("backburner",
6125
+ define("backburner",
5931
6126
  ["backburner/deferred_action_queues","exports"],
5932
6127
  function(__dependency1__, __exports__) {
5933
6128
  "use strict";
@@ -6128,24 +6323,39 @@ define("backburner",
6128
6323
  return fn;
6129
6324
  },
6130
6325
 
6131
- throttle: function(target, method /* , args, wait */) {
6326
+ throttle: function(target, method /* , args, wait, [immediate] */) {
6132
6327
  var self = this,
6133
6328
  args = arguments,
6134
- wait = parseInt(pop.call(args), 10),
6329
+ immediate = pop.call(args),
6330
+ wait,
6135
6331
  throttler,
6136
6332
  index,
6137
6333
  timer;
6138
6334
 
6335
+ if (typeof immediate === "number" || typeof immediate === "string") {
6336
+ wait = immediate;
6337
+ immediate = true;
6338
+ } else {
6339
+ wait = pop.call(args);
6340
+ }
6341
+
6342
+ wait = parseInt(wait, 10);
6343
+
6139
6344
  index = findThrottler(target, method);
6140
6345
  if (index > -1) { return throttlers[index]; } // throttled
6141
6346
 
6142
6347
  timer = global.setTimeout(function() {
6143
- self.run.apply(self, args);
6144
-
6348
+ if (!immediate) {
6349
+ self.run.apply(self, args);
6350
+ }
6145
6351
  var index = findThrottler(target, method);
6146
6352
  if (index > -1) { throttlers.splice(index, 1); }
6147
6353
  }, wait);
6148
6354
 
6355
+ if (immediate) {
6356
+ self.run.apply(self, args);
6357
+ }
6358
+
6149
6359
  throttler = [target, method, timer];
6150
6360
 
6151
6361
  throttlers.push(throttler);
@@ -6242,7 +6452,7 @@ define("backburner",
6242
6452
  }
6243
6453
  }
6244
6454
  } else if (Object.prototype.toString.call(timer) === "[object Array]"){ // we're cancelling a throttle or debounce
6245
- return this._cancelItem(findThrottler, throttlers, timer) ||
6455
+ return this._cancelItem(findThrottler, throttlers, timer) ||
6246
6456
  this._cancelItem(findDebouncee, debouncees, timer);
6247
6457
  } else {
6248
6458
  return; // timer was null or not a timer
@@ -6352,10 +6562,8 @@ define("backburner",
6352
6562
  return index;
6353
6563
  }
6354
6564
 
6355
-
6356
6565
  __exports__.Backburner = Backburner;
6357
6566
  });
6358
-
6359
6567
  })();
6360
6568
 
6361
6569
 
@@ -6413,22 +6621,21 @@ var Backburner = requireModule('backburner').Backburner,
6413
6621
  @param {Object} [args*] Any additional arguments you wish to pass to the method.
6414
6622
  @return {Object} return value from invoking the passed function.
6415
6623
  */
6416
- Ember.run = function(target, method) {
6417
- var ret;
6418
-
6624
+ Ember.run = function() {
6419
6625
  if (Ember.onerror) {
6420
- try {
6421
- ret = backburner.run.apply(backburner, arguments);
6422
- } catch (e) {
6423
- Ember.onerror(e);
6424
- }
6626
+ return onerror(arguments);
6425
6627
  } else {
6426
- ret = backburner.run.apply(backburner, arguments);
6628
+ return backburner.run.apply(backburner, arguments);
6427
6629
  }
6428
-
6429
- return ret;
6430
6630
  };
6431
6631
 
6632
+ function onerror(args) {
6633
+ try {
6634
+ return backburner.run.apply(backburner, args);
6635
+ } catch(error) {
6636
+ Ember.onerror(error);
6637
+ }
6638
+ }
6432
6639
  /**
6433
6640
  If no run-loop is present, it creates a new one. If a run loop is
6434
6641
  present it will queue itself to run on the existing run-loops action
@@ -6503,7 +6710,7 @@ Ember.run.join = function(target, method /* args */) {
6503
6710
  run-loop-wrapped callback handler.
6504
6711
 
6505
6712
  ```javascript
6506
- jQuery(window).on('resize', Ember.run.bind(this, this.triggerResize));
6713
+ jQuery(window).on('resize', Ember.run.bind(this, this.handleResize));
6507
6714
  ```
6508
6715
 
6509
6716
  @method bind
@@ -6837,7 +7044,7 @@ Ember.run.next = function() {
6837
7044
 
6838
7045
  var throttle = Ember.run.throttle(myContext, function() {
6839
7046
  // will not be executed
6840
- }, 1);
7047
+ }, 1, false);
6841
7048
  Ember.run.cancel(throttle);
6842
7049
 
6843
7050
  var debounce = Ember.run.debounce(myContext, function() {
@@ -6923,7 +7130,8 @@ Ember.run.cancel = function(timer) {
6923
7130
  then it will be looked up on the passed target.
6924
7131
  @param {Object} [args*] Optional arguments to pass to the timeout.
6925
7132
  @param {Number} wait Number of milliseconds to wait.
6926
- @param {Boolean} immediate Trigger the function on the leading instead of the trailing edge of the wait interval.
7133
+ @param {Boolean} immediate Trigger the function on the leading instead
7134
+ of the trailing edge of the wait interval. Defaults to false.
6927
7135
  @return {Array} Timer information for use in cancelling, see `Ember.run.cancel`.
6928
7136
  */
6929
7137
  Ember.run.debounce = function() {
@@ -6939,9 +7147,7 @@ Ember.run.debounce = function() {
6939
7147
  var myContext = {name: 'throttle'};
6940
7148
 
6941
7149
  Ember.run.throttle(myContext, myFunc, 150);
6942
-
6943
- // 50ms passes
6944
- Ember.run.throttle(myContext, myFunc, 150);
7150
+ // myFunc is invoked with context myContext
6945
7151
 
6946
7152
  // 50ms passes
6947
7153
  Ember.run.throttle(myContext, myFunc, 150);
@@ -6950,8 +7156,9 @@ Ember.run.debounce = function() {
6950
7156
  Ember.run.throttle(myContext, myFunc, 150);
6951
7157
 
6952
7158
  // 150ms passes
7159
+ Ember.run.throttle(myContext, myFunc, 150);
6953
7160
  // myFunc is invoked with context myContext
6954
- // console logs 'throttle ran.' twice, 150ms apart.
7161
+ // console logs 'throttle ran.' twice, 250ms apart.
6955
7162
  ```
6956
7163
 
6957
7164
  @method throttle
@@ -7475,6 +7682,16 @@ var Mixin, REQUIRED, Alias,
7475
7682
 
7476
7683
  var expandProperties = Ember.expandProperties;
7477
7684
 
7685
+ function superFunction(){
7686
+ var ret, func = this.__nextSuper;
7687
+ if (func) {
7688
+ this.__nextSuper = null;
7689
+ ret = func.apply(this, arguments);
7690
+ this.__nextSuper = func;
7691
+ }
7692
+ return ret;
7693
+ }
7694
+
7478
7695
  function mixinsMeta(obj) {
7479
7696
  var m = metaFor(obj, true), ret = m.mixins;
7480
7697
  if (!ret) {
@@ -7600,19 +7817,26 @@ function applyMergedProperties(obj, key, value, values) {
7600
7817
 
7601
7818
  if (!baseValue) { return value; }
7602
7819
 
7603
- var newBase = Ember.merge({}, baseValue);
7820
+ var newBase = Ember.merge({}, baseValue),
7821
+ hasFunction = false;
7822
+
7604
7823
  for (var prop in value) {
7605
7824
  if (!value.hasOwnProperty(prop)) { continue; }
7606
7825
 
7607
7826
  var propValue = value[prop];
7608
7827
  if (isMethod(propValue)) {
7609
7828
  // TODO: support for Computed Properties, etc?
7829
+ hasFunction = true;
7610
7830
  newBase[prop] = giveMethodSuper(obj, prop, propValue, baseValue, {});
7611
7831
  } else {
7612
7832
  newBase[prop] = propValue;
7613
7833
  }
7614
7834
  }
7615
7835
 
7836
+ if (hasFunction) {
7837
+ newBase._super = superFunction;
7838
+ }
7839
+
7616
7840
  return newBase;
7617
7841
  }
7618
7842
 
@@ -7621,7 +7845,7 @@ function addNormalizedProperty(base, key, value, meta, descs, values, concats, m
7621
7845
  if (value === REQUIRED && descs[key]) { return CONTINUE; }
7622
7846
 
7623
7847
  // Wrap descriptor function to implement
7624
- // _super() if needed
7848
+ // __nextSuper() if needed
7625
7849
  if (value.func) {
7626
7850
  value = giveDescriptorSuper(meta, key, value, values, descs);
7627
7851
  }
@@ -7769,6 +7993,8 @@ function applyMixin(obj, mixins, partial) {
7769
7993
  var descs = {}, values = {}, m = metaFor(obj),
7770
7994
  key, value, desc, keys = [];
7771
7995
 
7996
+ obj._super = superFunction;
7997
+
7772
7998
  // Go through all mixins and hashes passed in, and:
7773
7999
  //
7774
8000
  // * Handle concatenated properties
@@ -10444,133 +10670,11 @@ define("rsvp",
10444
10670
  })();
10445
10671
 
10446
10672
  (function() {
10447
- /**
10448
- Public api for the container is still in flux.
10449
- The public api, specified on the application namespace should be considered the stable api.
10450
- // @module container
10451
- @private
10452
- */
10453
-
10454
- /*
10455
- Flag to enable/disable model factory injections (disabled by default)
10456
- If model factory injections are enabled, models should not be
10457
- accessed globally (only through `container.lookupFactory('model:modelName'))`);
10458
- */
10459
- Ember.MODEL_FACTORY_INJECTIONS = false || !!Ember.ENV.MODEL_FACTORY_INJECTIONS;
10460
-
10461
- define("container",
10462
- [],
10463
- function() {
10673
+ define("container/container",
10674
+ ["container/inheriting_dict","exports"],
10675
+ function(__dependency1__, __exports__) {
10464
10676
  "use strict";
10465
-
10466
- // A safe and simple inheriting object.
10467
- function InheritingDict(parent) {
10468
- this.parent = parent;
10469
- this.dict = {};
10470
- }
10471
-
10472
- InheritingDict.prototype = {
10473
-
10474
- /**
10475
- @property parent
10476
- @type InheritingDict
10477
- @default null
10478
- */
10479
-
10480
- parent: null,
10481
-
10482
- /**
10483
- Object used to store the current nodes data.
10484
-
10485
- @property dict
10486
- @type Object
10487
- @default Object
10488
- */
10489
- dict: null,
10490
-
10491
- /**
10492
- Retrieve the value given a key, if the value is present at the current
10493
- level use it, otherwise walk up the parent hierarchy and try again. If
10494
- no matching key is found, return undefined.
10495
-
10496
- @method get
10497
- @param {String} key
10498
- @return {any}
10499
- */
10500
- get: function(key) {
10501
- var dict = this.dict;
10502
-
10503
- if (dict.hasOwnProperty(key)) {
10504
- return dict[key];
10505
- }
10506
-
10507
- if (this.parent) {
10508
- return this.parent.get(key);
10509
- }
10510
- },
10511
-
10512
- /**
10513
- Set the given value for the given key, at the current level.
10514
-
10515
- @method set
10516
- @param {String} key
10517
- @param {Any} value
10518
- */
10519
- set: function(key, value) {
10520
- this.dict[key] = value;
10521
- },
10522
-
10523
- /**
10524
- Delete the given key
10525
-
10526
- @method remove
10527
- @param {String} key
10528
- */
10529
- remove: function(key) {
10530
- delete this.dict[key];
10531
- },
10532
-
10533
- /**
10534
- Check for the existence of given a key, if the key is present at the current
10535
- level return true, otherwise walk up the parent hierarchy and try again. If
10536
- no matching key is found, return false.
10537
-
10538
- @method has
10539
- @param {String} key
10540
- @return {Boolean}
10541
- */
10542
- has: function(key) {
10543
- var dict = this.dict;
10544
-
10545
- if (dict.hasOwnProperty(key)) {
10546
- return true;
10547
- }
10548
-
10549
- if (this.parent) {
10550
- return this.parent.has(key);
10551
- }
10552
-
10553
- return false;
10554
- },
10555
-
10556
- /**
10557
- Iterate and invoke a callback for each local key-value pair.
10558
-
10559
- @method eachLocal
10560
- @param {Function} callback
10561
- @param {Object} binding
10562
- */
10563
- eachLocal: function(callback, binding) {
10564
- var dict = this.dict;
10565
-
10566
- for (var prop in dict) {
10567
- if (dict.hasOwnProperty(prop)) {
10568
- callback.call(binding, prop, dict[prop]);
10569
- }
10570
- }
10571
- }
10572
- };
10573
-
10677
+ var InheritingDict = __dependency1__["default"];
10574
10678
 
10575
10679
  // A lightweight container that helps to assemble and decouple components.
10576
10680
  // Public api for the container is still in flux.
@@ -11286,7 +11390,7 @@ define("container",
11286
11390
  }
11287
11391
  }
11288
11392
 
11289
- function injectionsFor(container ,fullName) {
11393
+ function injectionsFor(container, fullName) {
11290
11394
  var splitName = fullName.split(":"),
11291
11395
  type = splitName[0],
11292
11396
  injections = [];
@@ -11376,9 +11480,144 @@ define("container",
11376
11480
  injections.push({ property: property, fullName: injectionName });
11377
11481
  }
11378
11482
 
11379
- return Container;
11380
- });
11483
+ __exports__["default"] = Container;
11484
+ });
11485
+ define("container/inheriting_dict",
11486
+ ["exports"],
11487
+ function(__exports__) {
11488
+ "use strict";
11489
+ // A safe and simple inheriting object.
11490
+ function InheritingDict(parent) {
11491
+ this.parent = parent;
11492
+ this.dict = {};
11493
+ }
11494
+
11495
+ InheritingDict.prototype = {
11496
+
11497
+ /**
11498
+ @property parent
11499
+ @type InheritingDict
11500
+ @default null
11501
+ */
11502
+
11503
+ parent: null,
11504
+
11505
+ /**
11506
+ Object used to store the current nodes data.
11507
+
11508
+ @property dict
11509
+ @type Object
11510
+ @default Object
11511
+ */
11512
+ dict: null,
11513
+
11514
+ /**
11515
+ Retrieve the value given a key, if the value is present at the current
11516
+ level use it, otherwise walk up the parent hierarchy and try again. If
11517
+ no matching key is found, return undefined.
11518
+
11519
+ @method get
11520
+ @param {String} key
11521
+ @return {any}
11522
+ */
11523
+ get: function(key) {
11524
+ var dict = this.dict;
11525
+
11526
+ if (dict.hasOwnProperty(key)) {
11527
+ return dict[key];
11528
+ }
11529
+
11530
+ if (this.parent) {
11531
+ return this.parent.get(key);
11532
+ }
11533
+ },
11534
+
11535
+ /**
11536
+ Set the given value for the given key, at the current level.
11537
+
11538
+ @method set
11539
+ @param {String} key
11540
+ @param {Any} value
11541
+ */
11542
+ set: function(key, value) {
11543
+ this.dict[key] = value;
11544
+ },
11545
+
11546
+ /**
11547
+ Delete the given key
11548
+
11549
+ @method remove
11550
+ @param {String} key
11551
+ */
11552
+ remove: function(key) {
11553
+ delete this.dict[key];
11554
+ },
11555
+
11556
+ /**
11557
+ Check for the existence of given a key, if the key is present at the current
11558
+ level return true, otherwise walk up the parent hierarchy and try again. If
11559
+ no matching key is found, return false.
11560
+
11561
+ @method has
11562
+ @param {String} key
11563
+ @return {Boolean}
11564
+ */
11565
+ has: function(key) {
11566
+ var dict = this.dict;
11567
+
11568
+ if (dict.hasOwnProperty(key)) {
11569
+ return true;
11570
+ }
11381
11571
 
11572
+ if (this.parent) {
11573
+ return this.parent.has(key);
11574
+ }
11575
+
11576
+ return false;
11577
+ },
11578
+
11579
+ /**
11580
+ Iterate and invoke a callback for each local key-value pair.
11581
+
11582
+ @method eachLocal
11583
+ @param {Function} callback
11584
+ @param {Object} binding
11585
+ */
11586
+ eachLocal: function(callback, binding) {
11587
+ var dict = this.dict;
11588
+
11589
+ for (var prop in dict) {
11590
+ if (dict.hasOwnProperty(prop)) {
11591
+ callback.call(binding, prop, dict[prop]);
11592
+ }
11593
+ }
11594
+ }
11595
+ };
11596
+
11597
+ __exports__["default"] = InheritingDict;
11598
+ });
11599
+ define("container",
11600
+ ["container/container","exports"],
11601
+ function(__dependency1__, __exports__) {
11602
+ "use strict";
11603
+ /**
11604
+ Public api for the container is still in flux.
11605
+ The public api, specified on the application namespace should be considered the stable api.
11606
+ // @module container
11607
+ @private
11608
+ */
11609
+
11610
+ /*
11611
+ Flag to enable/disable model factory injections (disabled by default)
11612
+ If model factory injections are enabled, models should not be
11613
+ accessed globally (only through `container.lookupFactory('model:modelName'))`);
11614
+ */
11615
+ Ember.MODEL_FACTORY_INJECTIONS = false || !!Ember.ENV.MODEL_FACTORY_INJECTIONS;
11616
+
11617
+ var Container = __dependency1__["default"];
11618
+
11619
+ __exports__["default"] = Container;
11620
+ });
11382
11621
  })();
11383
11622
 
11384
11623
  (function() {
@@ -12567,6 +12806,13 @@ var undefinedDescriptor = {
12567
12806
  value: undefined
12568
12807
  };
12569
12808
 
12809
+ var nullDescriptor = {
12810
+ configurable: true,
12811
+ writable: true,
12812
+ enumerable: false,
12813
+ value: null
12814
+ };
12815
+
12570
12816
  function makeCtor() {
12571
12817
 
12572
12818
  // Note: avoid accessing any properties on the object since it makes the
@@ -12579,8 +12825,8 @@ function makeCtor() {
12579
12825
  if (!wasApplied) {
12580
12826
  Class.proto(); // prepare prototype...
12581
12827
  }
12582
- o_defineProperty(this, GUID_KEY, undefinedDescriptor);
12583
- o_defineProperty(this, '_super', undefinedDescriptor);
12828
+ o_defineProperty(this, GUID_KEY, nullDescriptor);
12829
+ o_defineProperty(this, '__nextSuper', undefinedDescriptor);
12584
12830
  var m = meta(this), proto = m.proto;
12585
12831
  m.proto = this;
12586
12832
  if (initMixins) {
@@ -15212,8 +15458,6 @@ DependentArraysObserver.prototype = {
15212
15458
  },
15213
15459
 
15214
15460
  setupObservers: function (dependentArray, dependentKey) {
15215
- Ember.assert("dependent array must be an `Ember.Array`", Ember.Array.detect(dependentArray));
15216
-
15217
15461
  this.dependentKeysByGuid[guidFor(dependentArray)] = dependentKey;
15218
15462
 
15219
15463
  dependentArray.addArrayObserver(this, {
@@ -15603,6 +15847,11 @@ function ReduceComputedProperty(options) {
15603
15847
 
15604
15848
  meta.dependentArraysObserver.suspendArrayObservers(function () {
15605
15849
  forEach(cp._dependentKeys, function (dependentKey) {
15850
+ Ember.assert(
15851
+ "dependent array " + dependentKey + " must be an `Ember.Array`. " +
15852
+ "If you are not extending arrays, you will need to wrap native arrays with `Ember.A`",
15853
+ !(Ember.isArray(get(this, dependentKey)) && !Ember.Array.detect(get(this, dependentKey))));
15854
+
15606
15855
  if (!partiallyRecomputeFor(this, dependentKey)) { return; }
15607
15856
 
15608
15857
  var dependentArray = get(this, dependentKey),
@@ -15722,7 +15971,7 @@ ReduceComputedProperty.prototype.property = function () {
15722
15971
  dependentArrayKey,
15723
15972
  itemPropertyKey;
15724
15973
 
15725
- forEach(a_slice.call(arguments), function (dependentKey) {
15974
+ forEach(args, function (dependentKey) {
15726
15975
  if (doubleEachPropertyPattern.test(dependentKey)) {
15727
15976
  throw new Ember.Error("Nested @each properties not supported: " + dependentKey);
15728
15977
  } else if (match = eachPropertyPattern.exec(dependentKey)) {
@@ -16833,10 +17082,12 @@ Ember.computed.sort = function (itemsKey, sortDefinition) {
16833
17082
 
16834
17083
 
16835
17084
  instanceMeta.order = function (itemA, itemB) {
16836
- var sortProperty, result, asc;
17085
+ var isProxy = itemB instanceof SearchProxy,
17086
+ sortProperty, result, asc;
17087
+
16837
17088
  for (var i = 0; i < this.sortProperties.length; ++i) {
16838
17089
  sortProperty = this.sortProperties[i];
16839
- result = Ember.compare(get(itemA, sortProperty), get(itemB, sortProperty));
17090
+ result = Ember.compare(get(itemA, sortProperty), isProxy ? itemB[sortProperty] : get(itemB, sortProperty));
16840
17091
 
16841
17092
  if (result !== 0) {
16842
17093
  asc = this.sortPropertyAscending[sortProperty];
@@ -18055,9 +18306,37 @@ Ember.Evented = Ember.Mixin.create({
18055
18306
  (function() {
18056
18307
  var RSVP = requireModule("rsvp");
18057
18308
 
18058
- RSVP.configure('async', function(callback, promise) {
18059
- Ember.run.schedule('actions', promise, callback, promise);
18060
- });
18309
+ if (Ember.FEATURES['ember-runtime-test-friendly-promises']) {
18310
+
18311
+ var asyncStart = function() {
18312
+ if (Ember.Test && Ember.Test.adapter) {
18313
+ Ember.Test.adapter.asyncStart();
18314
+ }
18315
+ };
18316
+
18317
+ var asyncEnd = function() {
18318
+ if (Ember.Test && Ember.Test.adapter) {
18319
+ Ember.Test.adapter.asyncEnd();
18320
+ }
18321
+ };
18322
+
18323
+ RSVP.configure('async', function(callback, promise) {
18324
+ var async = !Ember.run.currentRunLoop;
18325
+
18326
+ if (Ember.testing && async) { asyncStart(); }
18327
+
18328
+ Ember.run.backburner.schedule('actions', function(){
18329
+ if (Ember.testing && async) { asyncEnd(); }
18330
+ callback(promise);
18331
+ });
18332
+ });
18333
+ } else {
18334
+ RSVP.configure('async', function(callback, promise) {
18335
+ Ember.run.backburner.schedule('actions', function(){
18336
+ callback(promise);
18337
+ });
18338
+ });
18339
+ }
18061
18340
 
18062
18341
  RSVP.Promise.prototype.fail = function(callback, label){
18063
18342
  Ember.deprecate('RSVP.Promise.fail has been renamed as RSVP.Promise.catch');
@@ -18347,7 +18626,8 @@ Ember.ActionHandler = Ember.Mixin.create({
18347
18626
  } else {
18348
18627
  return;
18349
18628
  }
18350
- } else if (this.deprecatedSend && this.deprecatedSendHandles && this.deprecatedSendHandles(actionName)) {
18629
+ } else if (!Ember.FEATURES.isEnabled('ember-routing-drop-deprecated-action-style') && this.deprecatedSend && this.deprecatedSendHandles && this.deprecatedSendHandles(actionName)) {
18630
+ Ember.warn("The current default is deprecated but will prefer to handle actions directly on the controller instead of a similarly named action in the actions hash. To turn off this deprecated feature set: Ember.FEATURES['ember-routing-drop-deprecated-action-style'] = true");
18351
18631
  if (this.deprecatedSend.apply(this, [].slice.call(arguments)) === true) {
18352
18632
  // handler return true, so this action will bubble
18353
18633
  } else {
@@ -19092,7 +19372,7 @@ Ember.SubArray.prototype = {
19092
19372
 
19093
19373
 
19094
19374
  (function() {
19095
- Ember.Container = requireModule('container');
19375
+ Ember.Container = requireModule('container')['default'];
19096
19376
  Ember.Container.set = Ember.set;
19097
19377
 
19098
19378
  })();
@@ -20927,7 +21207,7 @@ Ember.ArrayController = Ember.ArrayProxy.extend(Ember.ControllerMixin,
20927
21207
  var container = get(this, 'container'),
20928
21208
  subControllers = get(this, '_subControllers'),
20929
21209
  subController = subControllers[idx],
20930
- factory, fullName;
21210
+ fullName;
20931
21211
 
20932
21212
  if (subController) { return subController; }
20933
21213