ember-source 2.4.0.beta.2 → 2.4.0.beta.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,12 +1,12 @@
1
1
  ;(function() {
2
2
  /*!
3
3
  * @overview Ember - JavaScript Application Framework
4
- * @copyright Copyright 2011-2015 Tilde Inc. and contributors
4
+ * @copyright Copyright 2011-2016 Tilde Inc. and contributors
5
5
  * Portions Copyright 2006-2011 Strobe Inc.
6
6
  * Portions Copyright 2008-2011 Apple Inc. All rights reserved.
7
7
  * @license Licensed under MIT license
8
8
  * See https://raw.github.com/emberjs/ember.js/master/LICENSE
9
- * @version 2.4.0-beta.2
9
+ * @version 2.4.0-beta.3
10
10
  */
11
11
 
12
12
  var enifed, requireModule, require, requirejs, Ember;
@@ -212,20 +212,24 @@ enifed('backburner/deferred-action-queues', ['exports', 'backburner/utils', 'bac
212
212
  enifed('backburner/platform', ['exports'], function (exports) {
213
213
  'use strict';
214
214
 
215
- var platform;
215
+ var GlobalContext;
216
216
 
217
217
  /* global self */
218
218
  if (typeof self === 'object') {
219
- platform = self;
219
+ GlobalContext = self;
220
220
 
221
221
  /* global global */
222
222
  } else if (typeof global === 'object') {
223
- platform = global;
224
- } else {
225
- throw new Error('no global: `self` or `global` found');
226
- }
223
+ GlobalContext = global;
227
224
 
228
- exports.default = platform;
225
+ /* global window */
226
+ } else if (typeof window === 'object') {
227
+ GlobalContext = window;
228
+ } else {
229
+ throw new Error('no global: `self`, `global` nor `window` was found');
230
+ }
231
+
232
+ exports.default = GlobalContext;
229
233
  });
230
234
  enifed('backburner/queue', ['exports', 'backburner/utils'], function (exports, _backburnerUtils) {
231
235
  'use strict';
@@ -468,7 +472,6 @@ enifed('backburner/utils', ['exports'], function (exports) {
468
472
  exports.isFunction = isFunction;
469
473
  exports.isNumber = isNumber;
470
474
  exports.isCoercableNumber = isCoercableNumber;
471
- exports.wrapInTryCatch = wrapInTryCatch;
472
475
  var NUMBER = /\d+/;
473
476
 
474
477
  function each(collection, callback) {
@@ -477,14 +480,6 @@ enifed('backburner/utils', ['exports'], function (exports) {
477
480
  }
478
481
  }
479
482
 
480
- // Date.now is not available in browsers < IE9
481
- // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/now#Compatibility
482
- var now = Date.now || function () {
483
- return new Date().getTime();
484
- };
485
-
486
- exports.now = now;
487
-
488
483
  function isString(suspect) {
489
484
  return typeof suspect === 'string';
490
485
  }
@@ -500,16 +495,6 @@ enifed('backburner/utils', ['exports'], function (exports) {
500
495
  function isCoercableNumber(number) {
501
496
  return isNumber(number) || NUMBER.test(number);
502
497
  }
503
-
504
- function wrapInTryCatch(func) {
505
- return function () {
506
- try {
507
- return func.apply(this, arguments);
508
- } catch (e) {
509
- throw e;
510
- }
511
- };
512
- }
513
498
  });
514
499
  enifed('backburner', ['exports', 'backburner/utils', 'backburner/platform', 'backburner/binary-search', 'backburner/deferred-action-queues'], function (exports, _backburnerUtils, _backburnerPlatform, _backburnerBinarySearch, _backburnerDeferredActionQueues) {
515
500
  'use strict';
@@ -530,10 +515,16 @@ enifed('backburner', ['exports', 'backburner/utils', 'backburner/platform', 'bac
530
515
  begin: []
531
516
  };
532
517
 
518
+ var _this = this;
519
+ this._boundClearItems = function () {
520
+ clearItems();
521
+ };
522
+
533
523
  this._timerTimeoutId = undefined;
534
524
  this._timers = [];
535
525
 
536
- var _this = this;
526
+ this._platform = this.options._platform || _backburnerPlatform.default;
527
+
537
528
  this._boundRunExpiredTimers = function () {
538
529
  _this._runExpiredTimers();
539
530
  };
@@ -870,7 +861,7 @@ enifed('backburner', ['exports', 'backburner/utils', 'backburner/platform', 'bac
870
861
  }
871
862
  }
872
863
 
873
- var executeAt = _backburnerUtils.now() + parseInt(wait, 10);
864
+ var executeAt = Date.now() + parseInt(wait, 10);
874
865
 
875
866
  if (_backburnerUtils.isString(method)) {
876
867
  method = target[method];
@@ -936,7 +927,7 @@ enifed('backburner', ['exports', 'backburner/utils', 'backburner/platform', 'bac
936
927
  return this._throttlers[index];
937
928
  } // throttled
938
929
 
939
- timer = _backburnerPlatform.default.setTimeout(function () {
930
+ timer = this._platform.setTimeout(function () {
940
931
  if (!immediate) {
941
932
  backburner.run.apply(backburner, args);
942
933
  }
@@ -981,10 +972,10 @@ enifed('backburner', ['exports', 'backburner/utils', 'backburner/platform', 'bac
981
972
  if (index > -1) {
982
973
  debouncee = this._debouncees[index];
983
974
  this._debouncees.splice(index, 1);
984
- clearTimeout(debouncee[2]);
975
+ this._platform.clearTimeout(debouncee[2]);
985
976
  }
986
977
 
987
- timer = _backburnerPlatform.default.setTimeout(function () {
978
+ timer = this._platform.setTimeout(function () {
988
979
  if (!immediate) {
989
980
  backburner.run.apply(backburner, args);
990
981
  }
@@ -1006,17 +997,17 @@ enifed('backburner', ['exports', 'backburner/utils', 'backburner/platform', 'bac
1006
997
  },
1007
998
 
1008
999
  cancelTimers: function () {
1009
- _backburnerUtils.each(this._throttlers, clearItems);
1000
+ _backburnerUtils.each(this._throttlers, this._boundClearItems);
1010
1001
  this._throttlers = [];
1011
1002
 
1012
- _backburnerUtils.each(this._debouncees, clearItems);
1003
+ _backburnerUtils.each(this._debouncees, this._boundClearItems);
1013
1004
  this._debouncees = [];
1014
1005
 
1015
1006
  this._clearTimerTimeout();
1016
1007
  this._timers = [];
1017
1008
 
1018
1009
  if (this._autorun) {
1019
- clearTimeout(this._autorun);
1010
+ this._platform.clearTimeout(this._autorun);
1020
1011
  this._autorun = null;
1021
1012
  }
1022
1013
  },
@@ -1065,7 +1056,7 @@ enifed('backburner', ['exports', 'backburner/utils', 'backburner/platform', 'bac
1065
1056
 
1066
1057
  if (item[2] === timer[2]) {
1067
1058
  array.splice(index, 1);
1068
- clearTimeout(timer[2]);
1059
+ this._platform.clearTimeout(timer[2]);
1069
1060
  return true;
1070
1061
  }
1071
1062
  }
@@ -1079,7 +1070,7 @@ enifed('backburner', ['exports', 'backburner/utils', 'backburner/platform', 'bac
1079
1070
  },
1080
1071
 
1081
1072
  _scheduleExpiredTimers: function () {
1082
- var n = _backburnerUtils.now();
1073
+ var n = Date.now();
1083
1074
  var timers = this._timers;
1084
1075
  var i = 0;
1085
1076
  var l = timers.length;
@@ -1105,7 +1096,7 @@ enifed('backburner', ['exports', 'backburner/utils', 'backburner/platform', 'bac
1105
1096
  if (!this._timerTimeoutId) {
1106
1097
  return;
1107
1098
  }
1108
- clearTimeout(this._timerTimeoutId);
1099
+ this._platform.clearTimeout(this._timerTimeoutId);
1109
1100
  this._timerTimeoutId = undefined;
1110
1101
  },
1111
1102
 
@@ -1114,9 +1105,9 @@ enifed('backburner', ['exports', 'backburner/utils', 'backburner/platform', 'bac
1114
1105
  return;
1115
1106
  }
1116
1107
  var minExpiresAt = this._timers[0];
1117
- var n = _backburnerUtils.now();
1108
+ var n = Date.now();
1118
1109
  var wait = Math.max(0, minExpiresAt - n);
1119
- this._timerTimeoutId = setTimeout(this._boundRunExpiredTimers, wait);
1110
+ this._timerTimeoutId = this._platform.setTimeout(this._boundRunExpiredTimers, wait);
1120
1111
  }
1121
1112
  };
1122
1113
 
@@ -1130,7 +1121,7 @@ enifed('backburner', ['exports', 'backburner/utils', 'backburner/platform', 'bac
1130
1121
 
1131
1122
  function createAutorun(backburner) {
1132
1123
  backburner.begin();
1133
- backburner._autorun = _backburnerPlatform.default.setTimeout(function () {
1124
+ backburner._autorun = backburner._platform.setTimeout(function () {
1134
1125
  backburner._autorun = null;
1135
1126
  backburner.end();
1136
1127
  });
@@ -1160,7 +1151,7 @@ enifed('backburner', ['exports', 'backburner/utils', 'backburner/platform', 'bac
1160
1151
  }
1161
1152
 
1162
1153
  function clearItems(item) {
1163
- clearTimeout(item[2]);
1154
+ this._platform.clearTimeout(item[2]);
1164
1155
  }
1165
1156
  });
1166
1157
  enifed('container/container', ['exports', 'ember-metal/core', 'ember-metal/debug', 'ember-metal/dictionary', 'ember-metal/features', 'container/owner', 'ember-runtime/mixins/container_proxy', 'ember-metal/symbol'], function (exports, _emberMetalCore, _emberMetalDebug, _emberMetalDictionary, _emberMetalFeatures, _containerOwner, _emberRuntimeMixinsContainer_proxy, _emberMetalSymbol) {
@@ -6780,7 +6771,7 @@ enifed('ember-extension-support/container_debug_adapter', ['exports', 'ember-met
6780
6771
  }
6781
6772
  });
6782
6773
  });
6783
- enifed('ember-extension-support/data_adapter', ['exports', 'ember-metal/property_get', 'ember-metal/run_loop', 'ember-runtime/system/string', 'ember-runtime/system/namespace', 'ember-runtime/system/object', 'ember-runtime/system/native_array', 'ember-application/system/application', 'container/owner'], function (exports, _emberMetalProperty_get, _emberMetalRun_loop, _emberRuntimeSystemString, _emberRuntimeSystemNamespace, _emberRuntimeSystemObject, _emberRuntimeSystemNative_array, _emberApplicationSystemApplication, _containerOwner) {
6774
+ enifed('ember-extension-support/data_adapter', ['exports', 'ember-metal/property_get', 'ember-metal/run_loop', 'ember-runtime/system/string', 'ember-runtime/system/namespace', 'ember-runtime/system/object', 'ember-runtime/system/native_array', 'ember-application/system/application', 'container/owner', 'ember-runtime/mixins/array'], function (exports, _emberMetalProperty_get, _emberMetalRun_loop, _emberRuntimeSystemString, _emberRuntimeSystemNamespace, _emberRuntimeSystemObject, _emberRuntimeSystemNative_array, _emberApplicationSystemApplication, _containerOwner, _emberRuntimeMixinsArray) {
6784
6775
  'use strict';
6785
6776
 
6786
6777
  /**
@@ -6971,7 +6962,7 @@ enifed('ember-extension-support/data_adapter', ['exports', 'ember-metal/property
6971
6962
 
6972
6963
  var contentDidChange = function (array, idx, removedCount, addedCount) {
6973
6964
  for (var i = idx; i < idx + addedCount; i++) {
6974
- var record = array.objectAt(i);
6965
+ var record = _emberRuntimeMixinsArray.objectAt(array, i);
6975
6966
  var wrapped = _this2.wrapRecord(record);
6976
6967
  releaseMethods.push(_this2.observeRecord(record, recordUpdated));
6977
6968
  recordsAdded([wrapped]);
@@ -6985,13 +6976,13 @@ enifed('ember-extension-support/data_adapter', ['exports', 'ember-metal/property
6985
6976
  var observer = { didChange: contentDidChange, willChange: function () {
6986
6977
  return this;
6987
6978
  } };
6988
- records.addArrayObserver(this, observer);
6979
+ _emberRuntimeMixinsArray.addArrayObserver(records, this, observer);
6989
6980
 
6990
6981
  release = function () {
6991
6982
  releaseMethods.forEach(function (fn) {
6992
6983
  fn();
6993
6984
  });
6994
- records.removeArrayObserver(_this2, observer);
6985
+ _emberRuntimeMixinsArray.removeArrayObserver(records, _this2, observer);
6995
6986
  _this2.releaseMethods.removeObject(release);
6996
6987
  };
6997
6988
 
@@ -7066,10 +7057,10 @@ enifed('ember-extension-support/data_adapter', ['exports', 'ember-metal/property
7066
7057
  }
7067
7058
  };
7068
7059
 
7069
- records.addArrayObserver(this, observer);
7060
+ _emberRuntimeMixinsArray.addArrayObserver(records, this, observer);
7070
7061
 
7071
7062
  var release = function () {
7072
- records.removeArrayObserver(_this3, observer);
7063
+ _emberRuntimeMixinsArray.removeArrayObserver(records, _this3, observer);
7073
7064
  };
7074
7065
 
7075
7066
  return release;
@@ -9008,9 +8999,11 @@ enifed('ember-htmlbars/hooks/link-render-node', ['exports', 'ember-htmlbars/util
9008
8999
  return true;
9009
9000
  case 'unless':
9010
9001
  case 'if':
9011
- params[0] = shouldDisplay(params[0]);break;
9002
+ params[0] = shouldDisplay(params[0], toBool);break;
9012
9003
  case 'each':
9013
9004
  params[0] = eachParam(params[0]);break;
9005
+ case 'with':
9006
+ params[0] = shouldDisplay(params[0], identity);break;
9014
9007
  }
9015
9008
  }
9016
9009
 
@@ -9060,7 +9053,7 @@ enifed('ember-htmlbars/hooks/link-render-node', ['exports', 'ember-htmlbars/util
9060
9053
  return stream;
9061
9054
  }
9062
9055
 
9063
- function shouldDisplay(predicate) {
9056
+ function shouldDisplay(predicate, coercer) {
9064
9057
  var length = getKey(predicate, 'length');
9065
9058
  var isTruthy = getKey(predicate, 'isTruthy');
9066
9059
 
@@ -9077,7 +9070,7 @@ enifed('ember-htmlbars/hooks/link-render-node', ['exports', 'ember-htmlbars/util
9077
9070
  return isTruthyVal;
9078
9071
  }
9079
9072
 
9080
- return !!predicateVal;
9073
+ return coercer(predicateVal);
9081
9074
  }, 'ShouldDisplay');
9082
9075
 
9083
9076
  _emberMetalStreamsUtils.addDependency(stream, length);
@@ -9086,6 +9079,14 @@ enifed('ember-htmlbars/hooks/link-render-node', ['exports', 'ember-htmlbars/util
9086
9079
  return stream;
9087
9080
  }
9088
9081
 
9082
+ function toBool(value) {
9083
+ return !!value;
9084
+ }
9085
+
9086
+ function identity(value) {
9087
+ return value;
9088
+ }
9089
+
9089
9090
  function getKey(obj, key) {
9090
9091
  if (_emberMetalStreamsUtils.isStream(obj)) {
9091
9092
  return obj.getKey(key);
@@ -10495,7 +10496,7 @@ enifed('ember-htmlbars/keywords/outlet', ['exports', 'ember-metal/debug', 'ember
10495
10496
 
10496
10497
  'use strict';
10497
10498
 
10498
- _emberHtmlbarsTemplatesTopLevelView.default.meta.revision = 'Ember@2.4.0-beta.2';
10499
+ _emberHtmlbarsTemplatesTopLevelView.default.meta.revision = 'Ember@2.4.0-beta.3';
10499
10500
 
10500
10501
  /**
10501
10502
  The `{{outlet}}` helper lets you specify where a child routes will render in
@@ -16164,7 +16165,7 @@ enifed('ember-metal/core', ['exports', 'require'], function (exports, _require)
16164
16165
 
16165
16166
  @class Ember
16166
16167
  @static
16167
- @version 2.4.0-beta.2
16168
+ @version 2.4.0-beta.3
16168
16169
  @public
16169
16170
  */
16170
16171
 
@@ -16206,11 +16207,11 @@ enifed('ember-metal/core', ['exports', 'require'], function (exports, _require)
16206
16207
 
16207
16208
  @property VERSION
16208
16209
  @type String
16209
- @default '2.4.0-beta.2'
16210
+ @default '2.4.0-beta.3'
16210
16211
  @static
16211
16212
  @public
16212
16213
  */
16213
- Ember.VERSION = '2.4.0-beta.2';
16214
+ Ember.VERSION = '2.4.0-beta.3';
16214
16215
 
16215
16216
  /**
16216
16217
  The hash of environment variables used to control various configuration
@@ -18575,6 +18576,7 @@ enifed('ember-metal/meta', ['exports', 'ember-metal/meta_listeners', 'ember-meta
18575
18576
  */
18576
18577
  var members = {
18577
18578
  cache: ownMap,
18579
+ weak: ownMap,
18578
18580
  watching: inheritedMap,
18579
18581
  mixins: inheritedMap,
18580
18582
  bindings: inheritedMap,
@@ -18589,6 +18591,7 @@ enifed('ember-metal/meta', ['exports', 'ember-metal/meta_listeners', 'ember-meta
18589
18591
 
18590
18592
  function Meta(obj, parentMeta) {
18591
18593
  this._cache = undefined;
18594
+ this._weak = undefined;
18592
18595
  this._watching = undefined;
18593
18596
  this._mixins = undefined;
18594
18597
  this._bindings = undefined;
@@ -18673,7 +18676,7 @@ enifed('ember-metal/meta', ['exports', 'ember-metal/meta_listeners', 'ember-meta
18673
18676
  };
18674
18677
 
18675
18678
  Meta.prototype['clear' + capitalized] = function () {
18676
- this[key] = new _emberMetalEmpty_object.default();
18679
+ this[key] = undefined;
18677
18680
  };
18678
18681
 
18679
18682
  Meta.prototype['deleteFrom' + capitalized] = function (subkey) {
@@ -19733,11 +19736,10 @@ enifed('ember-metal/mixin', ['exports', 'ember-metal/core', 'ember-metal/error',
19733
19736
  seen[_emberMetalUtils.guidFor(mixin)] = true;
19734
19737
 
19735
19738
  if (mixin.properties) {
19736
- var props = mixin.properties;
19737
- for (var key in props) {
19738
- if (props.hasOwnProperty(key)) {
19739
- ret[key] = true;
19740
- }
19739
+ var props = Object.keys(mixin.properties);
19740
+ for (var i = 0; i < props.length; i++) {
19741
+ var key = props[i];
19742
+ ret[key] = true;
19741
19743
  }
19742
19744
  } else if (mixin.mixins) {
19743
19745
  mixin.mixins.forEach(function (x) {
@@ -19749,13 +19751,9 @@ enifed('ember-metal/mixin', ['exports', 'ember-metal/core', 'ember-metal/error',
19749
19751
  MixinPrototype.keys = function () {
19750
19752
  var keys = {};
19751
19753
  var seen = {};
19752
- var ret = [];
19754
+
19753
19755
  _keys(keys, this, seen);
19754
- for (var key in keys) {
19755
- if (keys.hasOwnProperty(key)) {
19756
- ret.push(key);
19757
- }
19758
- }
19756
+ var ret = Object.keys(keys);
19759
19757
  return ret;
19760
19758
  };
19761
19759
 
@@ -23708,6 +23706,101 @@ enifed('ember-metal/watching', ['exports', 'ember-metal/chains', 'ember-metal/wa
23708
23706
  }
23709
23707
  }
23710
23708
  });
23709
+ enifed('ember-metal/weak_map', ['exports', 'ember-metal/debug', 'ember-metal/utils', 'ember-metal/meta'], function (exports, _emberMetalDebug, _emberMetalUtils, _emberMetalMeta) {
23710
+ 'use strict';
23711
+
23712
+ exports.default = WeakMap;
23713
+
23714
+ var id = 0;
23715
+ function UNDEFINED() {}
23716
+
23717
+ /*
23718
+ * @private
23719
+ * @class Ember.WeakMap
23720
+ *
23721
+ * A partial polyfill for [WeakMap](http://www.ecma-international.org/ecma-262/6.0/#sec-weakmap-objects).
23722
+ *
23723
+ * There is a small but important caveat. This implementation assumes that the
23724
+ * weak map will live longer (in the sense of garbage collection) than all of its
23725
+ * keys, otherwise it is possible to leak the values stored in the weak map. In
23726
+ * practice, most use cases satisfy this limitation which is why it is included
23727
+ * in ember-metal.
23728
+ */
23729
+
23730
+ function WeakMap() {
23731
+ _emberMetalDebug.assert('Invoking the WeakMap constructor with arguments is not supported at this time', arguments.length === 0);
23732
+
23733
+ this._id = _emberMetalUtils.GUID_KEY + id++;
23734
+ }
23735
+
23736
+ /*
23737
+ * @method get
23738
+ * @param key {Object | Function}
23739
+ * @return {Any} stored value
23740
+ */
23741
+ WeakMap.prototype.get = function (obj) {
23742
+ var meta = _emberMetalMeta.peekMeta(obj);
23743
+ if (meta) {
23744
+ var map = meta.readableWeak();
23745
+ if (map) {
23746
+ if (map[this._id] === UNDEFINED) {
23747
+ return undefined;
23748
+ }
23749
+
23750
+ return map[this._id];
23751
+ }
23752
+ }
23753
+ };
23754
+
23755
+ /*
23756
+ * @method set
23757
+ * @param key {Object | Function}
23758
+ * @param value {Any}
23759
+ * @return {WeakMap} the weak map
23760
+ */
23761
+ WeakMap.prototype.set = function (obj, value) {
23762
+ _emberMetalDebug.assert('Uncaught TypeError: Invalid value used as weak map key', obj && (typeof obj === 'object' || typeof obj === 'function'));
23763
+
23764
+ if (value === undefined) {
23765
+ value = UNDEFINED;
23766
+ }
23767
+
23768
+ _emberMetalMeta.meta(obj).writableWeak()[this._id] = value;
23769
+
23770
+ return this;
23771
+ };
23772
+
23773
+ /*
23774
+ * @method has
23775
+ * @param key {Object | Function}
23776
+ * @return {boolean} if the key exists
23777
+ */
23778
+ WeakMap.prototype.has = function (obj) {
23779
+ var meta = _emberMetalMeta.peekMeta(obj);
23780
+ if (meta) {
23781
+ var map = meta.readableWeak();
23782
+ if (map) {
23783
+ return map[this._id] !== undefined;
23784
+ }
23785
+ }
23786
+
23787
+ return false;
23788
+ };
23789
+
23790
+ /*
23791
+ * @method delete
23792
+ * @param key {Object | Function}
23793
+ * @return {boolean} if the key was deleted
23794
+ */
23795
+ WeakMap.prototype.delete = function (obj) {
23796
+ if (this.has(obj)) {
23797
+ delete _emberMetalMeta.meta(obj).writableWeak()[this._id];
23798
+ return true;
23799
+ } else {
23800
+ return false;
23801
+ }
23802
+ };
23803
+ });
23711
23804
  enifed('ember-metal-views/index', ['exports', 'ember-metal-views/renderer'], function (exports, _emberMetalViewsRenderer) {
23712
23805
  'use strict';
23713
23806
 
@@ -24006,7 +24099,7 @@ enifed('ember-routing/ext/controller', ['exports', 'ember-metal/property_get', '
24006
24099
 
24007
24100
  /**
24008
24101
  Defines which query parameters the controller accepts.
24009
- If you give the names ['category','page'] it will bind
24102
+ If you give the names `['category','page']` it will bind
24010
24103
  the values of these query parameters to the variables
24011
24104
  `this.category` and `this.page`
24012
24105
  @property queryParams
@@ -27892,9 +27985,24 @@ enifed('ember-routing/system/router', ['exports', 'ember-metal/logger', 'ember-m
27892
27985
 
27893
27986
  _doURLTransition: function (routerJsMethod, url) {
27894
27987
  var transition = this.router[routerJsMethod](url || '/');
27895
- return didBeginTransition(transition, this);
27988
+ didBeginTransition(transition, this);
27989
+ return transition;
27896
27990
  },
27897
27991
 
27992
+ /**
27993
+ Transition the application into another route. The route may
27994
+ be either a single route or route path:
27995
+ See [Route.transitionTo](http://emberjs.com/api/classes/Ember.Route.html#method_transitionTo) for more info.
27996
+ @method transitionTo
27997
+ @param {String} name the name of the route or a URL
27998
+ @param {...Object} models the model(s) or identifier(s) to be used while
27999
+ transitioning to the route.
28000
+ @param {Object} [options] optional hash with a queryParams property
28001
+ containing a mapping of query parameters
28002
+ @return {Transition} the transition object associated with this
28003
+ attempted transition
28004
+ @private
28005
+ */
27898
28006
  transitionTo: function () {
27899
28007
  var queryParams;
27900
28008
 
@@ -28212,11 +28320,11 @@ enifed('ember-routing/system/router', ['exports', 'ember-metal/logger', 'ember-m
28212
28320
  this._prepareQueryParams(targetRouteName, models, queryParams);
28213
28321
 
28214
28322
  var transitionArgs = _emberRoutingUtils.routeArgs(targetRouteName, models, queryParams);
28215
- var transitionPromise = this.router.transitionTo.apply(this.router, transitionArgs);
28323
+ var transition = this.router.transitionTo.apply(this.router, transitionArgs);
28216
28324
 
28217
- didBeginTransition(transitionPromise, this);
28325
+ didBeginTransition(transition, this);
28218
28326
 
28219
- return transitionPromise;
28327
+ return transition;
28220
28328
  },
28221
28329
 
28222
28330
  _prepareQueryParams: function (targetRouteName, models, queryParams) {
@@ -28667,7 +28775,7 @@ enifed('ember-routing/system/router', ['exports', 'ember-metal/logger', 'ember-m
28667
28775
  }
28668
28776
  router.set('targetState', routerState);
28669
28777
 
28670
- return transition.catch(function (error) {
28778
+ transition.promise = transition.catch(function (error) {
28671
28779
  var errorId = _emberMetalUtils.guidFor(error);
28672
28780
 
28673
28781
  if (router._isErrorHandled(errorId)) {
@@ -30167,7 +30275,7 @@ enifed('ember-routing-views/components/link-to', ['exports', 'ember-metal/logger
30167
30275
 
30168
30276
  'use strict';
30169
30277
 
30170
- _emberHtmlbarsTemplatesLinkTo.default.meta.revision = 'Ember@2.4.0-beta.2';
30278
+ _emberHtmlbarsTemplatesLinkTo.default.meta.revision = 'Ember@2.4.0-beta.3';
30171
30279
 
30172
30280
  /**
30173
30281
  `Ember.LinkComponent` renders an element whose `click` event triggers a
@@ -30670,7 +30778,7 @@ enifed('ember-routing-views/views/outlet', ['exports', 'ember-views/views/view',
30670
30778
 
30671
30779
  'use strict';
30672
30780
 
30673
- _emberHtmlbarsTemplatesTopLevelView.default.meta.revision = 'Ember@2.4.0-beta.2';
30781
+ _emberHtmlbarsTemplatesTopLevelView.default.meta.revision = 'Ember@2.4.0-beta.3';
30674
30782
 
30675
30783
  var CoreOutletView = _emberViewsViewsView.default.extend({
30676
30784
  defaultTemplate: _emberHtmlbarsTemplatesTopLevelView.default,
@@ -30853,7 +30961,7 @@ enifed('ember-runtime/compare', ['exports', 'ember-runtime/utils', 'ember-runtim
30853
30961
  }
30854
30962
  }
30855
30963
  });
30856
- enifed('ember-runtime/computed/reduce_computed_macros', ['exports', 'ember-metal/debug', 'ember-metal/property_get', 'ember-metal/error', 'ember-metal/computed', 'ember-metal/observer', 'ember-runtime/compare', 'ember-runtime/utils', 'ember-runtime/system/native_array', 'ember-metal/is_none', 'ember-metal/get_properties'], function (exports, _emberMetalDebug, _emberMetalProperty_get, _emberMetalError, _emberMetalComputed, _emberMetalObserver, _emberRuntimeCompare, _emberRuntimeUtils, _emberRuntimeSystemNative_array, _emberMetalIs_none, _emberMetalGet_properties) {
30964
+ enifed('ember-runtime/computed/reduce_computed_macros', ['exports', 'ember-metal/debug', 'ember-metal/property_get', 'ember-metal/error', 'ember-metal/computed', 'ember-metal/observer', 'ember-runtime/compare', 'ember-runtime/utils', 'ember-runtime/system/native_array', 'ember-metal/is_none', 'ember-metal/get_properties', 'ember-metal/weak_map'], function (exports, _emberMetalDebug, _emberMetalProperty_get, _emberMetalError, _emberMetalComputed, _emberMetalObserver, _emberRuntimeCompare, _emberRuntimeUtils, _emberRuntimeSystemNative_array, _emberMetalIs_none, _emberMetalGet_properties, _emberMetalWeak_map) {
30857
30965
  /**
30858
30966
  @module ember
30859
30967
  @submodule ember-runtime
@@ -30923,7 +31031,7 @@ enifed('ember-runtime/computed/reduce_computed_macros', ['exports', 'ember-metal
30923
31031
  }
30924
31032
 
30925
31033
  /**
30926
- A computed property that returns the sum of the value
31034
+ A computed property that returns the sum of the values
30927
31035
  in the dependent array.
30928
31036
 
30929
31037
  @method sum
@@ -31516,67 +31624,83 @@ enifed('ember-runtime/computed/reduce_computed_macros', ['exports', 'ember-metal
31516
31624
  var cp = new _emberMetalComputed.ComputedProperty(function (key) {
31517
31625
  var _this5 = this;
31518
31626
 
31519
- function didChange() {
31520
- this.notifyPropertyChange(key);
31521
- }
31522
-
31523
- var items = itemsKey === '@this' ? this : _emberMetalProperty_get.get(this, itemsKey);
31627
+ var itemsKeyIsAtThis = itemsKey === '@this';
31524
31628
  var sortProperties = _emberMetalProperty_get.get(this, sortPropertiesKey);
31525
31629
 
31526
- if (items === null || typeof items !== 'object') {
31527
- return _emberRuntimeSystemNative_array.A();
31528
- }
31630
+ _emberMetalDebug.assert('The sort definition for \'' + key + '\' on ' + this + ' must be a function or an array of strings', _emberRuntimeUtils.isArray(sortProperties) && sortProperties.every(function (s) {
31631
+ return typeof s === 'string';
31632
+ }));
31633
+
31634
+ var normalizedSortProperties = normalizeSortProperties(sortProperties);
31635
+
31636
+ // Add/remove property observers as required.
31637
+ var activeObserversMap = cp._activeObserverMap || (cp._activeObserverMap = new _emberMetalWeak_map.default());
31638
+ var activeObservers = activeObserversMap.get(this);
31529
31639
 
31530
- // TODO: Ideally we'd only do this if things have changed
31531
- if (cp._sortPropObservers) {
31532
- cp._sortPropObservers.forEach(function (args) {
31533
- return _emberMetalObserver.removeObserver.apply(null, args);
31640
+ if (activeObservers) {
31641
+ activeObservers.forEach(function (args) {
31642
+ _emberMetalObserver.removeObserver.apply(null, args);
31534
31643
  });
31535
31644
  }
31536
31645
 
31537
- cp._sortPropObservers = [];
31538
-
31539
- if (!_emberRuntimeUtils.isArray(sortProperties)) {
31540
- return items;
31646
+ function sortPropertyDidChange() {
31647
+ this.notifyPropertyChange(key);
31541
31648
  }
31542
31649
 
31543
- // Normalize properties
31544
- var normalizedSort = sortProperties.map(function (p) {
31545
- var _p$split = p.split(':');
31650
+ activeObservers = normalizedSortProperties.map(function (_ref) {
31651
+ var prop = _ref[0];
31546
31652
 
31547
- var prop = _p$split[0];
31548
- var direction = _p$split[1];
31653
+ var path = itemsKeyIsAtThis ? '@each.' + prop : itemsKey + '.@each.' + prop;
31654
+ var args = [_this5, path, sortPropertyDidChange];
31655
+ _emberMetalObserver.addObserver.apply(null, args);
31656
+ return args;
31657
+ });
31549
31658
 
31550
- direction = direction || 'asc';
31659
+ activeObserversMap.set(this, activeObservers);
31551
31660
 
31552
- return [prop, direction];
31553
- });
31661
+ // Sort and return the array.
31662
+ var items = itemsKeyIsAtThis ? this : _emberMetalProperty_get.get(this, itemsKey);
31554
31663
 
31555
- // TODO: Ideally we'd only do this if things have changed
31556
- // Add observers
31557
- normalizedSort.forEach(function (prop) {
31558
- var args = [_this5, itemsKey + '.@each.' + prop[0], didChange];
31559
- cp._sortPropObservers.push(args);
31560
- _emberMetalObserver.addObserver.apply(null, args);
31561
- });
31664
+ if (_emberRuntimeUtils.isArray(items)) {
31665
+ return sortByNormalizedSortProperties(items, normalizedSortProperties);
31666
+ } else {
31667
+ return _emberRuntimeSystemNative_array.A();
31668
+ }
31669
+ });
31562
31670
 
31563
- return _emberRuntimeSystemNative_array.A(items.slice().sort(function (itemA, itemB) {
31564
- for (var i = 0; i < normalizedSort.length; ++i) {
31565
- var _normalizedSort$i = normalizedSort[i];
31566
- var prop = _normalizedSort$i[0];
31567
- var direction = _normalizedSort$i[1];
31671
+ cp._activeObserverMap = undefined;
31568
31672
 
31569
- var result = _emberRuntimeCompare.default(_emberMetalProperty_get.get(itemA, prop), _emberMetalProperty_get.get(itemB, prop));
31570
- if (result !== 0) {
31571
- return direction === 'desc' ? -1 * result : result;
31572
- }
31573
- }
31673
+ return cp.property(sortPropertiesKey + '.[]').readOnly();
31674
+ }
31574
31675
 
31575
- return 0;
31576
- }));
31676
+ function normalizeSortProperties(sortProperties) {
31677
+ return sortProperties.map(function (p) {
31678
+ var _p$split = p.split(':');
31679
+
31680
+ var prop = _p$split[0];
31681
+ var direction = _p$split[1];
31682
+
31683
+ direction = direction || 'asc';
31684
+
31685
+ return [prop, direction];
31577
31686
  });
31687
+ }
31688
+
31689
+ function sortByNormalizedSortProperties(items, normalizedSortProperties) {
31690
+ return _emberRuntimeSystemNative_array.A(items.slice().sort(function (itemA, itemB) {
31691
+ for (var i = 0; i < normalizedSortProperties.length; i++) {
31692
+ var _normalizedSortProperties$i = normalizedSortProperties[i];
31693
+ var prop = _normalizedSortProperties$i[0];
31694
+ var direction = _normalizedSortProperties$i[1];
31695
+
31696
+ var result = _emberRuntimeCompare.default(_emberMetalProperty_get.get(itemA, prop), _emberMetalProperty_get.get(itemB, prop));
31697
+ if (result !== 0) {
31698
+ return direction === 'desc' ? -1 * result : result;
31699
+ }
31700
+ }
31578
31701
 
31579
- return cp.property(itemsKey + '.[]', sortPropertiesKey + '.[]').readOnly();
31702
+ return 0;
31703
+ }));
31580
31704
  }
31581
31705
  });
31582
31706
  enifed('ember-runtime/controllers/controller', ['exports', 'ember-metal/debug', 'ember-runtime/system/object', 'ember-runtime/mixins/controller', 'ember-runtime/inject', 'ember-runtime/mixins/action_handler'], function (exports, _emberMetalDebug, _emberRuntimeSystemObject, _emberRuntimeMixinsController, _emberRuntimeInject, _emberRuntimeMixinsAction_handler) {
@@ -32641,6 +32765,10 @@ enifed('ember-runtime/mixins/array', ['exports', 'ember-metal/core', 'ember-meta
32641
32765
  //
32642
32766
  'use strict';
32643
32767
 
32768
+ exports.addArrayObserver = addArrayObserver;
32769
+ exports.removeArrayObserver = removeArrayObserver;
32770
+ exports.objectAt = objectAt;
32771
+
32644
32772
  function arrayObserversHelper(obj, target, opts, operation, notify) {
32645
32773
  var willChange = opts && opts.willChange || 'arrayWillChange';
32646
32774
  var didChange = opts && opts.didChange || 'arrayDidChange';
@@ -32660,6 +32788,22 @@ enifed('ember-runtime/mixins/array', ['exports', 'ember-metal/core', 'ember-meta
32660
32788
  return obj;
32661
32789
  }
32662
32790
 
32791
+ function addArrayObserver(array, target, opts) {
32792
+ return arrayObserversHelper(array, target, opts, _emberMetalEvents.addListener, false);
32793
+ }
32794
+
32795
+ function removeArrayObserver(array, target, opts) {
32796
+ return arrayObserversHelper(array, target, opts, _emberMetalEvents.removeListener, true);
32797
+ }
32798
+
32799
+ function objectAt(content, idx) {
32800
+ if (content.objectAt) {
32801
+ return content.objectAt(idx);
32802
+ }
32803
+
32804
+ return content[idx];
32805
+ }
32806
+
32663
32807
  // ..........................................................
32664
32808
  // ARRAY
32665
32809
  //
@@ -32752,16 +32896,16 @@ enifed('ember-runtime/mixins/array', ['exports', 'ember-metal/core', 'ember-meta
32752
32896
  @public
32753
32897
  */
32754
32898
  objectsAt: function (indexes) {
32755
- var self = this;
32899
+ var _this = this;
32756
32900
 
32757
32901
  return indexes.map(function (idx) {
32758
- return self.objectAt(idx);
32902
+ return objectAt(_this, idx);
32759
32903
  });
32760
32904
  },
32761
32905
 
32762
32906
  // overrides Ember.Enumerable version
32763
32907
  nextObject: function (idx) {
32764
- return this.objectAt(idx);
32908
+ return objectAt(this, idx);
32765
32909
  },
32766
32910
 
32767
32911
  /**
@@ -32784,11 +32928,11 @@ enifed('ember-runtime/mixins/array', ['exports', 'ember-metal/core', 'ember-meta
32784
32928
  }),
32785
32929
 
32786
32930
  firstObject: _emberMetalComputed.computed(function () {
32787
- return this.objectAt(0);
32931
+ return objectAt(this, 0);
32788
32932
  }),
32789
32933
 
32790
32934
  lastObject: _emberMetalComputed.computed(function () {
32791
- return this.objectAt(_emberMetalProperty_get.get(this, 'length') - 1);
32935
+ return objectAt(this, _emberMetalProperty_get.get(this, 'length') - 1);
32792
32936
  }),
32793
32937
 
32794
32938
  // optimized version from Enumerable
@@ -32834,7 +32978,7 @@ enifed('ember-runtime/mixins/array', ['exports', 'ember-metal/core', 'ember-meta
32834
32978
  }
32835
32979
 
32836
32980
  while (beginIndex < endIndex) {
32837
- ret[ret.length] = this.objectAt(beginIndex++);
32981
+ ret[ret.length] = objectAt(this, beginIndex++);
32838
32982
  }
32839
32983
 
32840
32984
  return ret;
@@ -32873,7 +33017,7 @@ enifed('ember-runtime/mixins/array', ['exports', 'ember-metal/core', 'ember-meta
32873
33017
  }
32874
33018
 
32875
33019
  for (idx = startAt; idx < len; idx++) {
32876
- if (this.objectAt(idx) === object) {
33020
+ if (objectAt(this, idx) === object) {
32877
33021
  return idx;
32878
33022
  }
32879
33023
  }
@@ -32914,7 +33058,7 @@ enifed('ember-runtime/mixins/array', ['exports', 'ember-metal/core', 'ember-meta
32914
33058
  }
32915
33059
 
32916
33060
  for (idx = startAt; idx >= 0; idx--) {
32917
- if (this.objectAt(idx) === object) {
33061
+ if (objectAt(this, idx) === object) {
32918
33062
  return idx;
32919
33063
  }
32920
33064
  }
@@ -32949,7 +33093,7 @@ enifed('ember-runtime/mixins/array', ['exports', 'ember-metal/core', 'ember-meta
32949
33093
  */
32950
33094
 
32951
33095
  addArrayObserver: function (target, opts) {
32952
- return arrayObserversHelper(this, target, opts, _emberMetalEvents.addListener, false);
33096
+ return addArrayObserver(this, target, opts);
32953
33097
  },
32954
33098
 
32955
33099
  /**
@@ -32964,7 +33108,7 @@ enifed('ember-runtime/mixins/array', ['exports', 'ember-metal/core', 'ember-meta
32964
33108
  @public
32965
33109
  */
32966
33110
  removeArrayObserver: function (target, opts) {
32967
- return arrayObserversHelper(this, target, opts, _emberMetalEvents.removeListener, true);
33111
+ return removeArrayObserver(this, target, opts);
32968
33112
  },
32969
33113
 
32970
33114
  /**
@@ -33019,7 +33163,7 @@ enifed('ember-runtime/mixins/array', ['exports', 'ember-metal/core', 'ember-meta
33019
33163
  lim = startIdx + removeAmt;
33020
33164
 
33021
33165
  for (var idx = startIdx; idx < lim; idx++) {
33022
- removing.push(this.objectAt(idx));
33166
+ removing.push(objectAt(this, idx));
33023
33167
  }
33024
33168
  } else {
33025
33169
  removing = removeAmt;
@@ -33066,7 +33210,7 @@ enifed('ember-runtime/mixins/array', ['exports', 'ember-metal/core', 'ember-meta
33066
33210
  lim = startIdx + addAmt;
33067
33211
 
33068
33212
  for (var idx = startIdx; idx < lim; idx++) {
33069
- adding.push(this.objectAt(idx));
33213
+ adding.push(objectAt(this, idx));
33070
33214
  }
33071
33215
  } else {
33072
33216
  adding = addAmt;
@@ -33084,12 +33228,12 @@ enifed('ember-runtime/mixins/array', ['exports', 'ember-metal/core', 'ember-meta
33084
33228
  var cachedFirst = _emberMetalComputed.cacheFor(this, 'firstObject');
33085
33229
  var cachedLast = _emberMetalComputed.cacheFor(this, 'lastObject');
33086
33230
 
33087
- if (this.objectAt(0) !== cachedFirst) {
33231
+ if (objectAt(this, 0) !== cachedFirst) {
33088
33232
  _emberMetalProperty_events.propertyWillChange(this, 'firstObject');
33089
33233
  _emberMetalProperty_events.propertyDidChange(this, 'firstObject');
33090
33234
  }
33091
33235
 
33092
- if (this.objectAt(length - 1) !== cachedLast) {
33236
+ if (objectAt(this, length - 1) !== cachedLast) {
33093
33237
  _emberMetalProperty_events.propertyWillChange(this, 'lastObject');
33094
33238
  _emberMetalProperty_events.propertyDidChange(this, 'lastObject');
33095
33239
  }
@@ -34852,7 +34996,7 @@ enifed('ember-runtime/mixins/mutable_array', ['exports', 'ember-metal/property_g
34852
34996
  return null;
34853
34997
  }
34854
34998
 
34855
- var ret = this.objectAt(len - 1);
34999
+ var ret = _emberRuntimeMixinsArray.objectAt(this, len - 1);
34856
35000
  this.removeAt(len - 1, 1);
34857
35001
  return ret;
34858
35002
  },
@@ -34874,7 +35018,7 @@ enifed('ember-runtime/mixins/mutable_array', ['exports', 'ember-metal/property_g
34874
35018
  return null;
34875
35019
  }
34876
35020
 
34877
- var ret = this.objectAt(0);
35021
+ var ret = _emberRuntimeMixinsArray.objectAt(this, 0);
34878
35022
  this.removeAt(0);
34879
35023
  return ret;
34880
35024
  },
@@ -34977,7 +35121,7 @@ enifed('ember-runtime/mixins/mutable_array', ['exports', 'ember-metal/property_g
34977
35121
  removeObject: function (obj) {
34978
35122
  var loc = _emberMetalProperty_get.get(this, 'length') || 0;
34979
35123
  while (--loc >= 0) {
34980
- var curObject = this.objectAt(loc);
35124
+ var curObject = _emberRuntimeMixinsArray.objectAt(this, loc);
34981
35125
 
34982
35126
  if (curObject === obj) {
34983
35127
  this.removeAt(loc);
@@ -35159,8 +35303,9 @@ enifed('ember-runtime/mixins/observable', ['exports', 'ember-metal/debug', 'embe
35159
35303
 
35160
35304
  ## Observing Property Changes
35161
35305
 
35162
- You typically observe property changes simply by adding the `observes`
35163
- call to the end of your method declarations in classes that you write.
35306
+ You typically observe property changes simply by using the `Ember.observer`
35307
+ function in classes that you write.
35308
+
35164
35309
  For example:
35165
35310
 
35166
35311
  ```javascript
@@ -36185,7 +36330,7 @@ enifed('ember-runtime/system/application', ['exports', 'ember-runtime/system/nam
36185
36330
 
36186
36331
  exports.default = _emberRuntimeSystemNamespace.default.extend();
36187
36332
  });
36188
- enifed('ember-runtime/system/array_proxy', ['exports', 'ember-metal/debug', 'ember-metal/property_get', 'ember-runtime/utils', 'ember-metal/computed', 'ember-metal/mixin', 'ember-metal/property_events', 'ember-metal/error', 'ember-runtime/system/object', 'ember-runtime/mixins/mutable_array', 'ember-runtime/mixins/enumerable', 'ember-metal/alias'], function (exports, _emberMetalDebug, _emberMetalProperty_get, _emberRuntimeUtils, _emberMetalComputed, _emberMetalMixin, _emberMetalProperty_events, _emberMetalError, _emberRuntimeSystemObject, _emberRuntimeMixinsMutable_array, _emberRuntimeMixinsEnumerable, _emberMetalAlias) {
36333
+ enifed('ember-runtime/system/array_proxy', ['exports', 'ember-metal/debug', 'ember-metal/property_get', 'ember-runtime/utils', 'ember-metal/computed', 'ember-metal/mixin', 'ember-metal/property_events', 'ember-metal/error', 'ember-runtime/system/object', 'ember-runtime/mixins/mutable_array', 'ember-runtime/mixins/enumerable', 'ember-metal/alias', 'ember-runtime/mixins/array'], function (exports, _emberMetalDebug, _emberMetalProperty_get, _emberRuntimeUtils, _emberMetalComputed, _emberMetalMixin, _emberMetalProperty_events, _emberMetalError, _emberRuntimeSystemObject, _emberRuntimeMixinsMutable_array, _emberRuntimeMixinsEnumerable, _emberMetalAlias, _emberRuntimeMixinsArray) {
36189
36334
  'use strict';
36190
36335
 
36191
36336
  /**
@@ -36270,7 +36415,7 @@ enifed('ember-runtime/system/array_proxy', ['exports', 'ember-metal/debug', 'emb
36270
36415
  @private
36271
36416
  */
36272
36417
  objectAtContent: function (idx) {
36273
- return _emberMetalProperty_get.get(this, 'arrangedContent').objectAt(idx);
36418
+ return _emberRuntimeMixinsArray.objectAt(_emberMetalProperty_get.get(this, 'arrangedContent'), idx);
36274
36419
  },
36275
36420
 
36276
36421
  /**
@@ -36304,7 +36449,7 @@ enifed('ember-runtime/system/array_proxy', ['exports', 'ember-metal/debug', 'emb
36304
36449
  var content = _emberMetalProperty_get.get(this, 'content');
36305
36450
 
36306
36451
  if (content) {
36307
- content.removeArrayObserver(this, {
36452
+ _emberRuntimeMixinsArray.removeArrayObserver(content, this, {
36308
36453
  willChange: 'contentArrayWillChange',
36309
36454
  didChange: 'contentArrayDidChange'
36310
36455
  });
@@ -36352,7 +36497,7 @@ enifed('ember-runtime/system/array_proxy', ['exports', 'ember-metal/debug', 'emb
36352
36497
  if (content) {
36353
36498
  _emberMetalDebug.assert('ArrayProxy expects an Array or Ember.ArrayProxy, but you passed ' + typeof content, _emberRuntimeUtils.isArray(content) || content.isDestroyed);
36354
36499
 
36355
- content.addArrayObserver(this, {
36500
+ _emberRuntimeMixinsArray.addArrayObserver(content, this, {
36356
36501
  willChange: 'contentArrayWillChange',
36357
36502
  didChange: 'contentArrayDidChange'
36358
36503
  });
@@ -36387,7 +36532,7 @@ enifed('ember-runtime/system/array_proxy', ['exports', 'ember-metal/debug', 'emb
36387
36532
  if (arrangedContent) {
36388
36533
  _emberMetalDebug.assert('ArrayProxy expects an Array or Ember.ArrayProxy, but you passed ' + typeof arrangedContent, _emberRuntimeUtils.isArray(arrangedContent) || arrangedContent.isDestroyed);
36389
36534
 
36390
- arrangedContent.addArrayObserver(this, {
36535
+ _emberRuntimeMixinsArray.addArrayObserver(arrangedContent, this, {
36391
36536
  willChange: 'arrangedContentArrayWillChange',
36392
36537
  didChange: 'arrangedContentArrayDidChange'
36393
36538
  });
@@ -36398,7 +36543,7 @@ enifed('ember-runtime/system/array_proxy', ['exports', 'ember-metal/debug', 'emb
36398
36543
  var arrangedContent = _emberMetalProperty_get.get(this, 'arrangedContent');
36399
36544
 
36400
36545
  if (arrangedContent) {
36401
- arrangedContent.removeArrayObserver(this, {
36546
+ _emberRuntimeMixinsArray.removeArrayObserver(arrangedContent, this, {
36402
36547
  willChange: 'arrangedContentArrayWillChange',
36403
36548
  didChange: 'arrangedContentArrayDidChange'
36404
36549
  });
@@ -36471,7 +36616,7 @@ enifed('ember-runtime/system/array_proxy', ['exports', 'ember-metal/debug', 'emb
36471
36616
  // Get a list of indices in original content to remove
36472
36617
  for (i = start; i < start + len; i++) {
36473
36618
  // Use arrangedContent here so we avoid confusion with objects transformed by objectAtContent
36474
- indices.push(content.indexOf(arrangedContent.objectAt(i)));
36619
+ indices.push(content.indexOf(_emberRuntimeMixinsArray.objectAt(arrangedContent, i)));
36475
36620
  }
36476
36621
 
36477
36622
  // Replace in reverse order since indices will change
@@ -37384,7 +37529,7 @@ enifed('ember-runtime/system/core_object', ['exports', 'ember-metal/debug', 'emb
37384
37529
  @return {String} string representation
37385
37530
  @public
37386
37531
  */
37387
- enifed('ember-runtime/system/each_proxy', ['exports', 'ember-metal/debug', 'ember-metal/property_get', 'ember-metal/observer', 'ember-metal/property_events', 'ember-metal/empty_object'], function (exports, _emberMetalDebug, _emberMetalProperty_get, _emberMetalObserver, _emberMetalProperty_events, _emberMetalEmpty_object) {
37532
+ enifed('ember-runtime/system/each_proxy', ['exports', 'ember-metal/debug', 'ember-metal/property_get', 'ember-metal/observer', 'ember-metal/property_events', 'ember-metal/empty_object', 'ember-runtime/mixins/array'], function (exports, _emberMetalDebug, _emberMetalProperty_get, _emberMetalObserver, _emberMetalProperty_events, _emberMetalEmpty_object, _emberRuntimeMixinsArray) {
37388
37533
  'use strict';
37389
37534
 
37390
37535
  /**
@@ -37485,7 +37630,7 @@ enifed('ember-runtime/system/each_proxy', ['exports', 'ember-metal/debug', 'embe
37485
37630
 
37486
37631
  function addObserverForContentKey(content, keyName, proxy, idx, loc) {
37487
37632
  while (--loc >= idx) {
37488
- var item = content.objectAt(loc);
37633
+ var item = _emberRuntimeMixinsArray.objectAt(content, loc);
37489
37634
  if (item) {
37490
37635
  _emberMetalDebug.assert('When using @each to observe the array ' + content + ', the array must return an object', typeof item === 'object');
37491
37636
  _emberMetalObserver._addBeforeObserver(item, keyName, proxy, 'contentKeyWillChange');
@@ -37496,7 +37641,7 @@ enifed('ember-runtime/system/each_proxy', ['exports', 'ember-metal/debug', 'embe
37496
37641
 
37497
37642
  function removeObserverForContentKey(content, keyName, proxy, idx, loc) {
37498
37643
  while (--loc >= idx) {
37499
- var item = content.objectAt(loc);
37644
+ var item = _emberRuntimeMixinsArray.objectAt(content, loc);
37500
37645
  if (item) {
37501
37646
  _emberMetalObserver._removeBeforeObserver(item, keyName, proxy, 'contentKeyWillChange');
37502
37647
  _emberMetalObserver.removeObserver(item, keyName, proxy, 'contentKeyDidChange');
@@ -39652,7 +39797,7 @@ enifed('ember-template-compiler/system/compile_options', ['exports', 'ember-meta
39652
39797
  options.buildMeta = function buildMeta(program) {
39653
39798
  return {
39654
39799
  fragmentReason: fragmentReason(program),
39655
- revision: 'Ember@2.4.0-beta.2',
39800
+ revision: 'Ember@2.4.0-beta.3',
39656
39801
  loc: program.loc,
39657
39802
  moduleName: options.moduleName
39658
39803
  };
@@ -44752,7 +44897,7 @@ enifed('ember-views/views/collection_view', ['exports', 'ember-metal/core', 'emb
44752
44897
  _contentDidChange: _emberMetalMixin.observer('content', function () {
44753
44898
  var prevContent = this._prevContent;
44754
44899
  if (prevContent) {
44755
- prevContent.removeArrayObserver(this);
44900
+ _emberRuntimeMixinsArray.removeArrayObserver(prevContent, this);
44756
44901
  }
44757
44902
  var len = prevContent ? _emberMetalProperty_get.get(prevContent, 'length') : 0;
44758
44903
  this.arrayWillChange(prevContent, 0, len);
@@ -44762,7 +44907,7 @@ enifed('ember-views/views/collection_view', ['exports', 'ember-metal/core', 'emb
44762
44907
  if (content) {
44763
44908
  this._prevContent = content;
44764
44909
  this._assertArrayLike(content);
44765
- content.addArrayObserver(this);
44910
+ _emberRuntimeMixinsArray.addArrayObserver(content, this);
44766
44911
  }
44767
44912
 
44768
44913
  len = content ? _emberMetalProperty_get.get(content, 'length') : 0;
@@ -44790,7 +44935,7 @@ enifed('ember-views/views/collection_view', ['exports', 'ember-metal/core', 'emb
44790
44935
 
44791
44936
  var content = _emberMetalProperty_get.get(this, 'content');
44792
44937
  if (content) {
44793
- content.removeArrayObserver(this);
44938
+ _emberRuntimeMixinsArray.removeArrayObserver(content, this);
44794
44939
  }
44795
44940
 
44796
44941
  if (this._createdEmptyView) {
@@ -44840,7 +44985,7 @@ enifed('ember-views/views/collection_view', ['exports', 'ember-metal/core', 'emb
44840
44985
  itemViewClass = _emberViewsStreamsUtils.readViewFactory(itemViewClass, _containerOwner.getOwner(this));
44841
44986
 
44842
44987
  for (idx = start; idx < start + added; idx++) {
44843
- item = content.objectAt(idx);
44988
+ item = _emberRuntimeMixinsArray.objectAt(content, idx);
44844
44989
  itemViewProps._context = this.keyword ? this.get('context') : item;
44845
44990
  itemViewProps.content = item;
44846
44991
  itemViewProps.contentIndex = idx;
@@ -44992,7 +45137,7 @@ enifed('ember-views/views/collection_view', ['exports', 'ember-metal/core', 'emb
44992
45137
  enifed('ember-views/views/container_view', ['exports', 'ember-metal/core', 'ember-metal/debug', 'ember-runtime/mixins/mutable_array', 'ember-runtime/system/native_array', 'ember-views/views/view', 'ember-metal/property_get', 'ember-metal/property_set', 'ember-metal/mixin', 'ember-metal/events', 'ember-htmlbars/templates/container-view'], function (exports, _emberMetalCore, _emberMetalDebug, _emberRuntimeMixinsMutable_array, _emberRuntimeSystemNative_array, _emberViewsViewsView, _emberMetalProperty_get, _emberMetalProperty_set, _emberMetalMixin, _emberMetalEvents, _emberHtmlbarsTemplatesContainerView) {
44993
45138
  'use strict';
44994
45139
 
44995
- _emberHtmlbarsTemplatesContainerView.default.meta.revision = 'Ember@2.4.0-beta.2';
45140
+ _emberHtmlbarsTemplatesContainerView.default.meta.revision = 'Ember@2.4.0-beta.3';
44996
45141
 
44997
45142
  /**
44998
45143
  @module ember
@@ -45487,7 +45632,7 @@ enifed('ember-views/views/legacy_each_view', ['exports', 'ember-htmlbars/templat
45487
45632
  })
45488
45633
  });
45489
45634
  });
45490
- enifed('ember-views/views/select', ['exports', 'ember-metal/replace', 'ember-metal/property_get', 'ember-metal/property_set', 'ember-views/views/view', 'ember-runtime/utils', 'ember-metal/is_none', 'ember-metal/computed', 'ember-runtime/system/native_array', 'ember-metal/mixin', 'ember-metal/properties', 'ember-htmlbars/templates/select', 'ember-htmlbars/templates/select-option', 'ember-htmlbars/templates/select-optgroup'], function (exports, _emberMetalReplace, _emberMetalProperty_get, _emberMetalProperty_set, _emberViewsViewsView, _emberRuntimeUtils, _emberMetalIs_none, _emberMetalComputed, _emberRuntimeSystemNative_array, _emberMetalMixin, _emberMetalProperties, _emberHtmlbarsTemplatesSelect, _emberHtmlbarsTemplatesSelectOption, _emberHtmlbarsTemplatesSelectOptgroup) {
45635
+ enifed('ember-views/views/select', ['exports', 'ember-metal/replace', 'ember-metal/property_get', 'ember-metal/property_set', 'ember-views/views/view', 'ember-runtime/utils', 'ember-metal/is_none', 'ember-metal/computed', 'ember-runtime/system/native_array', 'ember-metal/mixin', 'ember-metal/properties', 'ember-htmlbars/templates/select', 'ember-htmlbars/templates/select-option', 'ember-htmlbars/templates/select-optgroup', 'ember-runtime/mixins/array'], function (exports, _emberMetalReplace, _emberMetalProperty_get, _emberMetalProperty_set, _emberViewsViewsView, _emberRuntimeUtils, _emberMetalIs_none, _emberMetalComputed, _emberRuntimeSystemNative_array, _emberMetalMixin, _emberMetalProperties, _emberHtmlbarsTemplatesSelect, _emberHtmlbarsTemplatesSelectOption, _emberHtmlbarsTemplatesSelectOptgroup, _emberRuntimeMixinsArray) {
45491
45636
  /**
45492
45637
  @module ember
45493
45638
  @submodule ember-views
@@ -46023,7 +46168,7 @@ enifed('ember-views/views/select', ['exports', 'ember-metal/replace', 'ember-met
46023
46168
  if (prompt) {
46024
46169
  selectedIndex -= 1;
46025
46170
  }
46026
- _emberMetalProperty_set.set(this, 'selection', content.objectAt(selectedIndex));
46171
+ _emberMetalProperty_set.set(this, 'selection', _emberRuntimeMixinsArray.objectAt(content, selectedIndex));
46027
46172
  },
46028
46173
 
46029
46174
  _selectedIndex: function (value) {