ember-source 2.5.1 → 2.6.0.beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 698e61c9494151d0b52b92673dbed45b74858818
4
- data.tar.gz: 3ce4074ee6bdf9446fd4fef2e7ff08c783aa53a2
3
+ metadata.gz: fe27b26c635f95296bbcb34fc9f229e413bc6463
4
+ data.tar.gz: 389f5ea2e08951c91bc2f653125aeb9e4695ba03
5
5
  SHA512:
6
- metadata.gz: 310191f8558d8a407a70d16b53475cab430ab078251051104f51a1ddfa1d95e934e34a85e73d5bfbab56949301fd63f1ca8479ce1615104de3f34596b4b59edc
7
- data.tar.gz: e6ae9a2de2b8ab3358876ef3d58914e6eb7f6c39ba5f905136a061aaeea3fe13cc3731754a7baffc5adfd4e2d6b9a69da1631fccb1b0cd37a1a61653967cf929
6
+ metadata.gz: 0a498d8373db0f9a6835806035c1836c8678006f9e2cda05794f841f4cb94d6a8ddab54a1aa4ef62a18f384faefc90d7372f189c4dee946237f56e74d60e53ef
7
+ data.tar.gz: c421b688d28e06cf7403369c93c3154112e1109a01b5442a841e5c6839c634de2d557abcb3a0e2b82091369ef2ecf644e00566d2690ba59058f290a2ba652e17
data/VERSION CHANGED
@@ -1 +1 @@
1
- 2.5.1
1
+ 2.6.0-beta.1
@@ -6,10 +6,10 @@
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.5.1
9
+ * @version 2.6.0-beta.1
10
10
  */
11
11
 
12
- var enifed, requireModule, require, requirejs, Ember;
12
+ var enifed, requireModule, require, Ember;
13
13
  var mainContext = this;
14
14
 
15
15
  (function() {
@@ -20,7 +20,7 @@ var mainContext = this;
20
20
  Ember = this.Ember = this.Ember || {};
21
21
  }
22
22
 
23
- if (typeof Ember === 'undefined') { Ember = {}; };
23
+ if (typeof Ember === 'undefined') { Ember = {}; }
24
24
 
25
25
  if (typeof Ember.__loader === 'undefined') {
26
26
  var registry = {};
@@ -40,9 +40,9 @@ var mainContext = this;
40
40
  registry[name] = value;
41
41
  };
42
42
 
43
- requirejs = require = requireModule = function(name) {
43
+ require = requireModule = function(name) {
44
44
  return internalRequire(name, null);
45
- }
45
+ };
46
46
 
47
47
  // setup `require` module
48
48
  require['default'] = require;
@@ -83,7 +83,7 @@ var mainContext = this;
83
83
  var deps = mod.deps;
84
84
  var callback = mod.callback;
85
85
  var length = deps.length;
86
- var reified = new Array(length);;
86
+ var reified = new Array(length);
87
87
 
88
88
  for (var i = 0; i < length; i++) {
89
89
  if (deps[i] === 'exports') {
@@ -98,9 +98,9 @@ var mainContext = this;
98
98
  callback.apply(this, reified);
99
99
 
100
100
  return exports;
101
- };
101
+ }
102
102
 
103
- requirejs._eak_seen = registry;
103
+ requireModule._eak_seen = registry;
104
104
 
105
105
  Ember.__loader = {
106
106
  define: enifed,
@@ -109,7 +109,7 @@ var mainContext = this;
109
109
  };
110
110
  } else {
111
111
  enifed = Ember.__loader.define;
112
- requirejs = require = requireModule = Ember.__loader.require;
112
+ require = requireModule = Ember.__loader.require;
113
113
  }
114
114
  })();
115
115
 
@@ -1178,11 +1178,8 @@ enifed('container/container', ['exports', 'ember-metal/core', 'ember-metal/debug
1178
1178
  this.cache = _emberMetalDictionary.default(options && options.cache ? options.cache : null);
1179
1179
  this.factoryCache = _emberMetalDictionary.default(options && options.factoryCache ? options.factoryCache : null);
1180
1180
  this.validationCache = _emberMetalDictionary.default(options && options.validationCache ? options.validationCache : null);
1181
-
1182
- if (_emberMetalFeatures.default('ember-container-inject-owner')) {
1183
- this._fakeContainerToInject = _emberRuntimeMixinsContainer_proxy.buildFakeContainerWithDeprecations(this);
1184
- this[CONTAINER_OVERRIDE] = undefined;
1185
- }
1181
+ this._fakeContainerToInject = _emberRuntimeMixinsContainer_proxy.buildFakeContainerWithDeprecations(this);
1182
+ this[CONTAINER_OVERRIDE] = undefined;
1186
1183
  }
1187
1184
 
1188
1185
  Container.prototype = {
@@ -1433,12 +1430,7 @@ enifed('container/container', ['exports', 'ember-metal/core', 'ember-metal/debug
1433
1430
  var injectedFactory = factory.extend(injections);
1434
1431
 
1435
1432
  // TODO - remove all `container` injections when Ember reaches v3.0.0
1436
- if (_emberMetalFeatures.default('ember-container-inject-owner')) {
1437
- injectDeprecatedContainer(injectedFactory.prototype, container);
1438
- } else {
1439
- injectedFactory.prototype.container = container;
1440
- }
1441
-
1433
+ injectDeprecatedContainer(injectedFactory.prototype, container);
1442
1434
  injectedFactory.reopenClass(factoryInjections);
1443
1435
 
1444
1436
  if (factory && typeof factory._onLookup === 'function') {
@@ -1515,21 +1507,14 @@ enifed('container/container', ['exports', 'ember-metal/core', 'ember-metal/debug
1515
1507
 
1516
1508
  // Ensure that a container is available to an object during instantiation.
1517
1509
  // TODO - remove when Ember reaches v3.0.0
1518
- if (_emberMetalFeatures.default('ember-container-inject-owner')) {
1519
- // This "fake" container will be replaced after instantiation with a
1520
- // property that raises deprecations every time it is accessed.
1521
- injections.container = container._fakeContainerToInject;
1522
- } else {
1523
- injections.container = container;
1524
- }
1525
-
1510
+ // This "fake" container will be replaced after instantiation with a
1511
+ // property that raises deprecations every time it is accessed.
1512
+ injections.container = container._fakeContainerToInject;
1526
1513
  obj = factory.create(injections);
1527
1514
 
1528
1515
  // TODO - remove when Ember reaches v3.0.0
1529
- if (_emberMetalFeatures.default('ember-container-inject-owner')) {
1530
- if (!Object.isFrozen(obj) && 'container' in obj) {
1531
- injectDeprecatedContainer(obj, container);
1532
- }
1516
+ if (!Object.isFrozen(obj) && 'container' in obj) {
1517
+ injectDeprecatedContainer(obj, container);
1533
1518
  }
1534
1519
  }
1535
1520
 
@@ -1696,9 +1681,11 @@ enifed('container/owner', ['exports', 'ember-metal/symbol'], function (exports,
1696
1681
  object[OWNER] = owner;
1697
1682
  }
1698
1683
  });
1699
- enifed('container/registry', ['exports', 'ember-metal/features', 'ember-metal/debug', 'ember-metal/dictionary', 'ember-metal/empty_object', 'ember-metal/assign', 'container/container'], function (exports, _emberMetalFeatures, _emberMetalDebug, _emberMetalDictionary, _emberMetalEmpty_object, _emberMetalAssign, _containerContainer) {
1684
+ enifed('container/registry', ['exports', 'ember-metal/features', 'ember-metal/debug', 'ember-metal/dictionary', 'ember-metal/empty_object', 'ember-metal/assign', 'container/container', 'ember-metal/utils'], function (exports, _emberMetalFeatures, _emberMetalDebug, _emberMetalDictionary, _emberMetalEmpty_object, _emberMetalAssign, _containerContainer, _emberMetalUtils) {
1700
1685
  'use strict';
1701
1686
 
1687
+ exports.privatize = privatize;
1688
+
1702
1689
  var VALID_FULL_NAME_REGEXP = /^[^:]+.+:[^:]+$/;
1703
1690
 
1704
1691
  /**
@@ -2480,6 +2467,25 @@ enifed('container/registry', ['exports', 'ember-metal/features', 'ember-metal/de
2480
2467
  return registry.resolve(fullName, { source: source }) !== undefined;
2481
2468
  }
2482
2469
 
2470
+ var privateNames = _emberMetalDictionary.default(null);
2471
+ var privateSuffix = Math.floor(Math.random() * new Date()) + '';
2472
+
2473
+ function privatize(_ref) {
2474
+ var fullName = _ref[0];
2475
+
2476
+ var name = privateNames[fullName];
2477
+ if (name) {
2478
+ return name;
2479
+ }
2480
+
2481
+ var _fullName$split = fullName.split(':');
2482
+
2483
+ var type = _fullName$split[0];
2484
+ var rawName = _fullName$split[1];
2485
+
2486
+ return privateNames[fullName] = _emberMetalUtils.intern(type + ':' + rawName + '-' + privateSuffix);
2487
+ }
2488
+
2483
2489
  exports.default = Registry;
2484
2490
  });
2485
2491
  enifed('ember-metal/alias', ['exports', 'ember-metal/debug', 'ember-metal/property_get', 'ember-metal/property_set', 'ember-metal/error', 'ember-metal/properties', 'ember-metal/computed', 'ember-metal/utils', 'ember-metal/meta', 'ember-metal/dependent_keys'], function (exports, _emberMetalDebug, _emberMetalProperty_get, _emberMetalProperty_set, _emberMetalError, _emberMetalProperties, _emberMetalComputed, _emberMetalUtils, _emberMetalMeta, _emberMetalDependent_keys) {
@@ -4067,7 +4073,7 @@ enifed('ember-metal/computed', ['exports', 'ember-metal/debug', 'ember-metal/pro
4067
4073
  exports.computed = computed;
4068
4074
  exports.cacheFor = cacheFor;
4069
4075
  });
4070
- enifed('ember-metal/computed_macros', ['exports', 'ember-metal/debug', 'ember-metal/property_get', 'ember-metal/property_set', 'ember-metal/computed', 'ember-metal/is_empty', 'ember-metal/is_none', 'ember-metal/alias'], function (exports, _emberMetalDebug, _emberMetalProperty_get, _emberMetalProperty_set, _emberMetalComputed, _emberMetalIs_empty, _emberMetalIs_none, _emberMetalAlias) {
4076
+ enifed('ember-metal/computed_macros', ['exports', 'ember-metal/debug', 'ember-metal/property_get', 'ember-metal/property_set', 'ember-metal/computed', 'ember-metal/is_empty', 'ember-metal/is_none', 'ember-metal/alias', 'ember-metal/expand_properties'], function (exports, _emberMetalDebug, _emberMetalProperty_get, _emberMetalProperty_set, _emberMetalComputed, _emberMetalIs_empty, _emberMetalIs_none, _emberMetalAlias, _emberMetalExpand_properties) {
4071
4077
  'use strict';
4072
4078
 
4073
4079
  exports.empty = empty;
@@ -4100,15 +4106,24 @@ enifed('ember-metal/computed_macros', ['exports', 'ember-metal/debug', 'ember-me
4100
4106
 
4101
4107
  function generateComputedWithProperties(macro) {
4102
4108
  return function () {
4109
+ var expandedProperties = [];
4110
+ var computedFunc = _emberMetalComputed.computed(function () {
4111
+ return macro.apply(this, [getProperties(this, expandedProperties)]);
4112
+ });
4113
+
4114
+ function extractProperty(entry) {
4115
+ expandedProperties.push(entry);
4116
+ }
4117
+
4103
4118
  for (var _len = arguments.length, properties = Array(_len), _key = 0; _key < _len; _key++) {
4104
4119
  properties[_key] = arguments[_key];
4105
4120
  }
4106
4121
 
4107
- var computedFunc = _emberMetalComputed.computed(function () {
4108
- return macro.apply(this, [getProperties(this, properties)]);
4109
- });
4122
+ for (var i = 0; i < properties.length; i++) {
4123
+ _emberMetalExpand_properties.default(properties[i], extractProperty);
4124
+ }
4110
4125
 
4111
- return computedFunc.property.apply(computedFunc, properties);
4126
+ return computedFunc.property.apply(computedFunc, expandedProperties);
4112
4127
  };
4113
4128
  }
4114
4129
 
@@ -4497,22 +4512,30 @@ enifed('ember-metal/computed_macros', ['exports', 'ember-metal/debug', 'ember-me
4497
4512
  A computed property that performs a logical `and` on the
4498
4513
  original values for the provided dependent properties.
4499
4514
 
4515
+ You may pass in more than two properties and even use
4516
+ property brace expansion. The computed property will
4517
+ returns the first falsy value or last truthy value
4518
+ just like JavaScript's `||` operator.
4519
+
4500
4520
  Example
4501
4521
 
4502
4522
  ```javascript
4503
4523
  var Hamster = Ember.Object.extend({
4504
- readyForCamp: Ember.computed.and('hasTent', 'hasBackpack')
4524
+ readyForCamp: Ember.computed.and('hasTent', 'hasBackpack'),
4525
+ readyForHike: Ember.computed.and('hasWalkingStick', 'hasBackpack')
4505
4526
  });
4506
4527
 
4507
- var hamster = Hamster.create();
4508
-
4509
- hamster.get('readyForCamp'); // false
4510
- hamster.set('hasTent', true);
4511
- hamster.get('readyForCamp'); // false
4512
- hamster.set('hasBackpack', true);
4513
- hamster.get('readyForCamp'); // true
4514
- hamster.set('hasBackpack', 'Yes');
4515
- hamster.get('readyForCamp'); // 'Yes'
4528
+ var tomster = Hamster.create();
4529
+
4530
+ tomster.get('readyForCamp'); // false
4531
+ tomster.set('hasTent', true);
4532
+ tomster.get('readyForCamp'); // false
4533
+ tomster.set('hasBackpack', true);
4534
+ tomster.get('readyForCamp'); // true
4535
+ tomster.set('hasBackpack', 'Yes');
4536
+ tomster.get('readyForCamp'); // 'Yes'
4537
+ tomster.set('hasWalkingStick', null);
4538
+ tomster.get('readyForHike'); // null
4516
4539
  ```
4517
4540
 
4518
4541
  @method and
@@ -4527,7 +4550,7 @@ enifed('ember-metal/computed_macros', ['exports', 'ember-metal/debug', 'ember-me
4527
4550
  for (var key in properties) {
4528
4551
  value = properties[key];
4529
4552
  if (properties.hasOwnProperty(key) && !value) {
4530
- return false;
4553
+ return value;
4531
4554
  }
4532
4555
  }
4533
4556
  return value;
@@ -4538,20 +4561,28 @@ enifed('ember-metal/computed_macros', ['exports', 'ember-metal/debug', 'ember-me
4538
4561
  A computed property which performs a logical `or` on the
4539
4562
  original values for the provided dependent properties.
4540
4563
 
4564
+ You may pass in more than two properties and even use
4565
+ property brace expansion. The computed property will
4566
+ returns the first truthy value or last falsy value just
4567
+ like JavaScript's `||` operator.
4568
+
4541
4569
  Example
4542
4570
 
4543
4571
  ```javascript
4544
4572
  var Hamster = Ember.Object.extend({
4545
- readyForRain: Ember.computed.or('hasJacket', 'hasUmbrella')
4573
+ readyForRain: Ember.computed.or('hasJacket', 'hasUmbrella'),
4574
+ readyForBeach: Ember.computed.or('{hasSunscreen,hasUmbrella}')
4546
4575
  });
4547
4576
 
4548
- var hamster = Hamster.create();
4577
+ var tomster = Hamster.create();
4549
4578
 
4550
- hamster.get('readyForRain'); // false
4551
- hamster.set('hasUmbrella', true);
4552
- hamster.get('readyForRain'); // true
4553
- hamster.set('hasJacket', 'Yes');
4554
- hamster.get('readyForRain'); // 'Yes'
4579
+ tomster.get('readyForRain'); // undefined
4580
+ tomster.set('hasUmbrella', true);
4581
+ tomster.get('readyForRain'); // true
4582
+ tomster.set('hasJacket', 'Yes');
4583
+ tomster.get('readyForRain'); // 'Yes'
4584
+ tomster.set('hasSunscreen', 'Check');
4585
+ tomster.get('readyForBeach'); // 'Check'
4555
4586
  ```
4556
4587
 
4557
4588
  @method or
@@ -4743,7 +4774,7 @@ enifed('ember-metal/core', ['exports', 'require'], function (exports, _require)
4743
4774
 
4744
4775
  @class Ember
4745
4776
  @static
4746
- @version 2.5.1
4777
+ @version 2.6.0-beta.1
4747
4778
  @public
4748
4779
  */
4749
4780
 
@@ -4785,11 +4816,11 @@ enifed('ember-metal/core', ['exports', 'require'], function (exports, _require)
4785
4816
 
4786
4817
  @property VERSION
4787
4818
  @type String
4788
- @default '2.5.1'
4819
+ @default '2.6.0-beta.1'
4789
4820
  @static
4790
4821
  @public
4791
4822
  */
4792
- Ember.VERSION = '2.5.1';
4823
+ Ember.VERSION = '2.6.0-beta.1';
4793
4824
 
4794
4825
  /**
4795
4826
  The hash of environment variables used to control various configuration
@@ -5277,6 +5308,14 @@ enifed('ember-metal/events', ['exports', 'ember-metal/debug', 'ember-metal/utils
5277
5308
  function addListener(obj, eventName, target, method, once) {
5278
5309
  _emberMetalDebug.assert('You must pass at least an object and event name to Ember.addListener', !!obj && !!eventName);
5279
5310
 
5311
+ if (eventName === 'didInitAttrs' && obj.isComponent) {
5312
+ _emberMetalDebug.deprecate('[DEPRECATED] didInitAttrs called in ' + obj.toString() + '.', false, {
5313
+ id: 'ember-views.did-init-attrs',
5314
+ until: '3.0.0',
5315
+ url: 'http://emberjs.com/deprecations/v2.x#toc_ember-component-didinitattrs'
5316
+ });
5317
+ }
5318
+
5280
5319
  if (!method && 'function' === typeof target) {
5281
5320
  method = target;
5282
5321
  target = null;
@@ -5895,11 +5934,8 @@ enifed('ember-metal/index', ['exports', 'require', 'ember-metal/core', 'ember-me
5895
5934
  _require.default('ember-debug');
5896
5935
  } else {
5897
5936
  _emberMetalCore.default.Debug = {};
5898
-
5899
- if (_emberMetalFeatures.default('ember-debug-handlers')) {
5900
- _emberMetalCore.default.Debug.registerDeprecationHandler = function () {};
5901
- _emberMetalCore.default.Debug.registerWarnHandler = function () {};
5902
- }
5937
+ _emberMetalCore.default.Debug.registerDeprecationHandler = function () {};
5938
+ _emberMetalCore.default.Debug.registerWarnHandler = function () {};
5903
5939
  }
5904
5940
 
5905
5941
  _emberMetalCore.default.create = _emberMetalDebug.deprecateFunc('Ember.create is deprecated in favor of Object.create', { id: 'ember-metal.ember-create', until: '3.0.0' }, Object.create);
@@ -5931,7 +5967,7 @@ enifed('ember-metal/injected_property', ['exports', 'ember-metal/debug', 'ember-
5931
5967
 
5932
5968
  function injectedPropertyGet(keyName) {
5933
5969
  var desc = this[keyName];
5934
- var owner = _containerOwner.getOwner(this) || this.container; // fallback to `container` for backwards compat
5970
+ var owner = _containerOwner.getOwner(this);
5935
5971
 
5936
5972
  _emberMetalDebug.assert('InjectedProperties should be defined with the Ember.inject computed property macros.', desc && desc.isDescriptor && desc.type);
5937
5973
  _emberMetalDebug.assert('Attempting to lookup an injected property on an object without a container, ensure that the object was instantiated via a container.', owner);
@@ -5954,7 +5990,7 @@ enifed('ember-metal/injected_property', ['exports', 'ember-metal/debug', 'ember-
5954
5990
 
5955
5991
  exports.default = InjectedProperty;
5956
5992
  });
5957
- enifed('ember-metal/instrumentation', ['exports', 'ember-metal/core'], function (exports, _emberMetalCore) {
5993
+ enifed('ember-metal/instrumentation', ['exports', 'ember-metal/core', 'ember-metal/features'], function (exports, _emberMetalCore, _emberMetalFeatures) {
5958
5994
  'use strict';
5959
5995
 
5960
5996
  exports.instrument = instrument;
@@ -6072,14 +6108,26 @@ enifed('ember-metal/instrumentation', ['exports', 'ember-metal/core'], function
6072
6108
  }
6073
6109
  }
6074
6110
 
6111
+ var flaggedInstrument;
6112
+ if (_emberMetalFeatures.default('ember-improved-instrumentation')) {
6113
+ exports.flaggedInstrument = flaggedInstrument = instrument;
6114
+ } else {
6115
+ exports.flaggedInstrument = flaggedInstrument = function (name, payload, callback) {
6116
+ return callback();
6117
+ };
6118
+ }
6119
+ exports.flaggedInstrument = flaggedInstrument;
6120
+
6075
6121
  function withFinalizer(callback, finalizer, payload, binding) {
6122
+ var result = undefined;
6076
6123
  try {
6077
- return callback.call(binding);
6124
+ result = callback.call(binding);
6078
6125
  } catch (e) {
6079
6126
  payload.exception = e;
6080
- return payload;
6127
+ result = payload;
6081
6128
  } finally {
6082
- return finalizer();
6129
+ finalizer();
6130
+ return result;
6083
6131
  }
6084
6132
  }
6085
6133
 
@@ -6119,7 +6167,9 @@ enifed('ember-metal/instrumentation', ['exports', 'ember-metal/core'], function
6119
6167
  var timestamp = time();
6120
6168
  for (i = 0, l = listeners.length; i < l; i++) {
6121
6169
  listener = listeners[i];
6122
- listener.after(name, timestamp, payload, beforeValues[i]);
6170
+ if (typeof listener.after === 'function') {
6171
+ listener.after(name, timestamp, payload, beforeValues[i]);
6172
+ }
6123
6173
  }
6124
6174
 
6125
6175
  if (STRUCTURED_PROFILE) {
@@ -7085,7 +7135,11 @@ enifed('ember-metal/map', ['exports', 'ember-metal/core', 'ember-metal/utils', '
7085
7135
  exports.Map = Map;
7086
7136
  exports.MapWithDefault = MapWithDefault;
7087
7137
  });
7088
- enifed('ember-metal/merge', ['exports'], function (exports) {
7138
+ enifed('ember-metal/merge', ['exports', 'ember-metal/debug', 'ember-metal/features'], function (exports, _emberMetalDebug, _emberMetalFeatures) {
7139
+ 'use strict';
7140
+
7141
+ exports.default = merge;
7142
+
7089
7143
  /**
7090
7144
  Merge the contents of two objects together into the first object.
7091
7145
 
@@ -7103,11 +7157,14 @@ enifed('ember-metal/merge', ['exports'], function (exports) {
7103
7157
  @return {Object}
7104
7158
  @public
7105
7159
  */
7106
- 'use strict';
7107
-
7108
- exports.default = merge;
7109
7160
 
7110
7161
  function merge(original, updates) {
7162
+ if (_emberMetalFeatures.default('ember-metal-ember-assign')) {
7163
+ _emberMetalDebug.deprecate('Usage of `Ember.merge` is deprecated, use `Ember.assign` instead.', false, {
7164
+ id: 'ember-metal.merge', until: '3.0.0', url: 'http://emberjs.com/deprecations/v2.x/#toc_ember-merge'
7165
+ });
7166
+ }
7167
+
7111
7168
  if (!updates || typeof updates !== 'object') {
7112
7169
  return original;
7113
7170
  }
@@ -7155,7 +7212,7 @@ enifed('ember-metal/meta', ['exports', 'ember-metal/meta_listeners', 'ember-meta
7155
7212
  peekBindings, clearBindings, writeValues,
7156
7213
  peekValues, clearValues, writeDeps, forEachInDeps
7157
7214
  writableChainWatchers, readableChainWatchers, writableChains,
7158
- readableChains
7215
+ readableChains, writableTag, readableTag
7159
7216
 
7160
7217
  */
7161
7218
  var members = {
@@ -7167,7 +7224,8 @@ enifed('ember-metal/meta', ['exports', 'ember-metal/meta_listeners', 'ember-meta
7167
7224
  values: inheritedMap,
7168
7225
  deps: inheritedMapOfMaps,
7169
7226
  chainWatchers: ownCustomObject,
7170
- chains: inheritedCustomObject
7227
+ chains: inheritedCustomObject,
7228
+ tag: ownCustomObject
7171
7229
  };
7172
7230
 
7173
7231
  var memberNames = Object.keys(members);
@@ -7183,6 +7241,8 @@ enifed('ember-metal/meta', ['exports', 'ember-metal/meta_listeners', 'ember-meta
7183
7241
  this._deps = undefined;
7184
7242
  this._chainWatchers = undefined;
7185
7243
  this._chains = undefined;
7244
+ this._tag = undefined;
7245
+
7186
7246
  // used only internally
7187
7247
  this.source = obj;
7188
7248
 
@@ -9476,7 +9536,7 @@ enifed('ember-metal/property_get', ['exports', 'ember-metal/debug', 'ember-metal
9476
9536
 
9477
9537
  exports.default = get;
9478
9538
  });
9479
- enifed('ember-metal/property_set', ['exports', 'ember-metal/debug', 'ember-metal/features', 'ember-metal/property_get', 'ember-metal/property_events', 'ember-metal/properties', 'ember-metal/error', 'ember-metal/path_cache', 'ember-metal/meta', 'ember-metal/utils'], function (exports, _emberMetalDebug, _emberMetalFeatures, _emberMetalProperty_get, _emberMetalProperty_events, _emberMetalProperties, _emberMetalError, _emberMetalPath_cache, _emberMetalMeta, _emberMetalUtils) {
9539
+ enifed('ember-metal/property_set', ['exports', 'ember-metal/debug', 'ember-metal/features', 'ember-metal/property_get', 'ember-metal/property_events', 'ember-metal/properties', 'ember-metal/error', 'ember-metal/path_cache', 'ember-metal/meta', 'ember-metal/utils', 'ember-metal/tags'], function (exports, _emberMetalDebug, _emberMetalFeatures, _emberMetalProperty_get, _emberMetalProperty_events, _emberMetalProperties, _emberMetalError, _emberMetalPath_cache, _emberMetalMeta, _emberMetalUtils, _emberMetalTags) {
9480
9540
  'use strict';
9481
9541
 
9482
9542
  exports.set = set;
@@ -9503,11 +9563,15 @@ enifed('ember-metal/property_set', ['exports', 'ember-metal/debug', 'ember-metal
9503
9563
  _emberMetalDebug.assert('The key provided to set must be a string, you passed ' + keyName, typeof keyName === 'string');
9504
9564
  _emberMetalDebug.assert('\'this\' in paths is not supported', !_emberMetalPath_cache.hasThis(keyName));
9505
9565
 
9506
- var meta, possibleDesc, desc;
9566
+ var meta = undefined,
9567
+ possibleDesc = undefined,
9568
+ desc = undefined;
9569
+
9507
9570
  if (obj) {
9508
9571
  meta = _emberMetalMeta.peekMeta(obj);
9509
9572
  possibleDesc = obj[keyName];
9510
9573
  desc = possibleDesc !== null && typeof possibleDesc === 'object' && possibleDesc.isDescriptor ? possibleDesc : undefined;
9574
+ _emberMetalTags.markObjectAsDirty(meta);
9511
9575
  }
9512
9576
 
9513
9577
  var isUnknown, currentValue;
@@ -10117,17 +10181,21 @@ enifed('ember-metal/run_loop', ['exports', 'ember-metal/core', 'ember-metal/debu
10117
10181
  after all DOM element operations have completed within the current
10118
10182
  run loop, you can make use of the `afterRender` run loop queue (added
10119
10183
  by the `ember-views` package, along with the preceding `render` queue
10120
- where all the DOM element operations happen). Example:
10184
+ where all the DOM element operations happen).
10185
+
10186
+ Example:
10121
10187
 
10122
10188
  ```javascript
10123
- App.MyCollectionView = Ember.CollectionView.extend({
10124
- didInsertElement: function() {
10189
+ export default Ember.Component.extend({
10190
+ didInsertElement() {
10191
+ this._super(...arguments);
10125
10192
  run.scheduleOnce('afterRender', this, 'processChildElements');
10126
10193
  },
10127
- processChildElements: function() {
10128
- // ... do something with collectionView's child view
10194
+
10195
+ processChildElements() {
10196
+ // ... do something with component's child component
10129
10197
  // elements after they've finished rendering, which
10130
- // can't be done within the CollectionView's
10198
+ // can't be done within this component's
10131
10199
  // `didInsertElement` hook because that gets run
10132
10200
  // before the child elements have been added to the DOM.
10133
10201
  }
@@ -11388,6 +11456,53 @@ enifed('ember-metal/symbol', ['exports', 'ember-metal/utils'], function (exports
11388
11456
  return _emberMetalUtils.intern(debugName + ' [id=' + _emberMetalUtils.GUID_KEY + Math.floor(Math.random() * new Date()) + ']');
11389
11457
  }
11390
11458
  });
11459
+ enifed('ember-metal/tags', ['exports', 'ember-metal/meta', 'require'], function (exports, _emberMetalMeta, _require2) {
11460
+ 'use strict';
11461
+
11462
+ exports.tagFor = tagFor;
11463
+
11464
+ var hasGlimmer = _require2.has('glimmer-reference');
11465
+ var CONSTANT_TAG = undefined,
11466
+ CURRENT_TAG = undefined,
11467
+ DirtyableTag = undefined,
11468
+ makeTag = undefined;
11469
+
11470
+ var markObjectAsDirty = undefined;
11471
+
11472
+ exports.markObjectAsDirty = markObjectAsDirty;
11473
+
11474
+ function tagFor(object, _meta) {
11475
+ if (!hasGlimmer) {
11476
+ throw new Error('Cannot call tagFor without Glimmer');
11477
+ }
11478
+
11479
+ if (object && typeof object === 'object') {
11480
+ var meta = _meta || _emberMetalMeta.meta(object);
11481
+ return meta.writableTag(makeTag);
11482
+ } else {
11483
+ return CONSTANT_TAG;
11484
+ }
11485
+ }
11486
+
11487
+ if (hasGlimmer) {
11488
+ var _require = _require2.default('glimmer-reference');
11489
+
11490
+ DirtyableTag = _require.DirtyableTag;
11491
+ CONSTANT_TAG = _require.CONSTANT_TAG;
11492
+ CURRENT_TAG = _require.CURRENT_TAG;
11493
+
11494
+ makeTag = function () {
11495
+ return new DirtyableTag();
11496
+ };
11497
+
11498
+ exports.markObjectAsDirty = markObjectAsDirty = function (meta) {
11499
+ var tag = meta && meta.readableTag() || CURRENT_TAG;
11500
+ tag.dirty();
11501
+ };
11502
+ } else {
11503
+ exports.markObjectAsDirty = markObjectAsDirty = function () {};
11504
+ }
11505
+ });
11391
11506
  enifed('ember-metal/utils', ['exports'], function (exports) {
11392
11507
  'no use strict';
11393
11508
  // Remove "use strict"; from transpiled module until
@@ -12501,7 +12616,7 @@ enifed('ember-runtime/compare', ['exports', 'ember-runtime/utils', 'ember-runtim
12501
12616
  }
12502
12617
  }
12503
12618
  });
12504
- 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) {
12619
+ 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/empty_object', 'ember-metal/utils', 'ember-metal/weak_map'], function (exports, _emberMetalDebug, _emberMetalProperty_get, _emberMetalError, _emberMetalComputed, _emberMetalObserver, _emberRuntimeCompare, _emberRuntimeUtils, _emberRuntimeSystemNative_array, _emberMetalIs_none, _emberMetalGet_properties, _emberMetalEmpty_object, _emberMetalUtils, _emberMetalWeak_map) {
12505
12620
  /**
12506
12621
  @module ember
12507
12622
  @submodule ember-runtime
@@ -12517,6 +12632,7 @@ enifed('ember-runtime/computed/reduce_computed_macros', ['exports', 'ember-metal
12517
12632
  exports.filter = filter;
12518
12633
  exports.filterBy = filterBy;
12519
12634
  exports.uniq = uniq;
12635
+ exports.uniqBy = uniqBy;
12520
12636
  exports.intersect = intersect;
12521
12637
  exports.setDiff = setDiff;
12522
12638
  exports.collect = collect;
@@ -12894,6 +13010,51 @@ enifed('ember-runtime/computed/reduce_computed_macros', ['exports', 'ember-metal
12894
13010
  });
12895
13011
  }
12896
13012
 
13013
+ /**
13014
+ A computed property which returns a new array with all the unique
13015
+ elements from an array, with uniqueness determined by specific key.
13016
+ Example
13017
+ ```javascript
13018
+ var Hamster = Ember.Object.extend({
13019
+ uniqueFruits: Ember.computed.uniqBy('fruits', 'id')
13020
+ });
13021
+ var hamster = Hamster.create({
13022
+ fruits: [
13023
+ { id: 1, 'banana' },
13024
+ { id: 2, 'grape' },
13025
+ { id: 3, 'peach' },
13026
+ { id: 1, 'banana' }
13027
+ ]
13028
+ });
13029
+ hamster.get('uniqueFruits'); // [ { id: 1, 'banana' }, { id: 2, 'grape' }, { id: 3, 'peach' }]
13030
+ ```
13031
+ @method uniqBy
13032
+ @for Ember.computed
13033
+ @param {String} dependentKey
13034
+ @param {String} propertyKey
13035
+ @return {Ember.ComputedProperty} computes a new array with all the
13036
+ unique elements from the dependent array
13037
+ @public
13038
+ */
13039
+
13040
+ function uniqBy(dependentKey, propertyKey) {
13041
+ return _emberMetalComputed.computed(dependentKey + '.[]', function () {
13042
+ var uniq = _emberRuntimeSystemNative_array.A();
13043
+ var seen = new _emberMetalEmpty_object.default();
13044
+ var list = _emberMetalProperty_get.get(this, dependentKey);
13045
+ if (_emberRuntimeUtils.isArray(list)) {
13046
+ list.forEach(function (item) {
13047
+ var guid = _emberMetalUtils.guidFor(_emberMetalProperty_get.get(item, propertyKey));
13048
+ if (!(guid in seen)) {
13049
+ seen[guid] = true;
13050
+ uniq.push(item);
13051
+ }
13052
+ });
13053
+ }
13054
+ return uniq;
13055
+ }).readOnly();
13056
+ }
13057
+
12897
13058
  /**
12898
13059
  Alias for [Ember.computed.uniq](/api/#method_computed_uniq).
12899
13060
 
@@ -13614,8 +13775,8 @@ enifed('ember-runtime/ext/rsvp', ['exports', 'ember-metal/core', 'require', 'emb
13614
13775
  error = reason;
13615
13776
  }
13616
13777
 
13617
- if (error && error.name === "UnrecognizedURLError") {
13618
- _emberMetalDebug.assert("The URL '" + error.message + "' did not match any routes in your application", false);
13778
+ if (error && error.name === 'UnrecognizedURLError') {
13779
+ _emberMetalDebug.assert('The URL \'' + error.message + '\' did not match any routes in your application', false);
13619
13780
  return;
13620
13781
  }
13621
13782
 
@@ -13761,7 +13922,7 @@ enifed('ember-runtime/ext/string', ['exports', 'ember-metal/core', 'ember-runtim
13761
13922
  }
13762
13923
  });
13763
13924
  // Ember.EXTEND_PROTOTYPES
13764
- enifed('ember-runtime/index', ['exports', 'ember-metal', 'ember-runtime/is-equal', 'ember-runtime/compare', 'ember-runtime/copy', 'ember-runtime/inject', 'ember-runtime/system/namespace', 'ember-runtime/system/object', 'ember-runtime/system/container', 'ember-runtime/system/array_proxy', 'ember-runtime/system/object_proxy', 'ember-runtime/system/core_object', 'ember-runtime/system/native_array', 'ember-runtime/system/string', 'ember-runtime/system/lazy_load', 'ember-runtime/mixins/array', 'ember-runtime/mixins/comparable', 'ember-runtime/mixins/copyable', 'ember-runtime/mixins/enumerable', 'ember-runtime/mixins/freezable', 'ember-runtime/mixins/-proxy', 'ember-runtime/mixins/observable', 'ember-runtime/mixins/action_handler', 'ember-runtime/mixins/mutable_enumerable', 'ember-runtime/mixins/mutable_array', 'ember-runtime/mixins/target_action_support', 'ember-runtime/mixins/evented', 'ember-runtime/mixins/promise_proxy', 'ember-runtime/computed/reduce_computed_macros', 'ember-runtime/controllers/controller', 'ember-runtime/mixins/controller', 'ember-runtime/system/service', 'ember-runtime/ext/rsvp', 'ember-runtime/ext/string', 'ember-runtime/ext/function', 'ember-runtime/utils', 'ember-metal/features', 'ember-runtime/mixins/registry_proxy', 'ember-runtime/mixins/container_proxy', 'ember-runtime/string_registry'], function (exports, _emberMetal, _emberRuntimeIsEqual, _emberRuntimeCompare, _emberRuntimeCopy, _emberRuntimeInject, _emberRuntimeSystemNamespace, _emberRuntimeSystemObject, _emberRuntimeSystemContainer, _emberRuntimeSystemArray_proxy, _emberRuntimeSystemObject_proxy, _emberRuntimeSystemCore_object, _emberRuntimeSystemNative_array, _emberRuntimeSystemString, _emberRuntimeSystemLazy_load, _emberRuntimeMixinsArray, _emberRuntimeMixinsComparable, _emberRuntimeMixinsCopyable, _emberRuntimeMixinsEnumerable, _emberRuntimeMixinsFreezable, _emberRuntimeMixinsProxy, _emberRuntimeMixinsObservable, _emberRuntimeMixinsAction_handler, _emberRuntimeMixinsMutable_enumerable, _emberRuntimeMixinsMutable_array, _emberRuntimeMixinsTarget_action_support, _emberRuntimeMixinsEvented, _emberRuntimeMixinsPromise_proxy, _emberRuntimeComputedReduce_computed_macros, _emberRuntimeControllersController, _emberRuntimeMixinsController, _emberRuntimeSystemService, _emberRuntimeExtRsvp, _emberRuntimeExtString, _emberRuntimeExtFunction, _emberRuntimeUtils, _emberMetalFeatures, _emberRuntimeMixinsRegistry_proxy, _emberRuntimeMixinsContainer_proxy, _emberRuntimeString_registry) {
13925
+ enifed('ember-runtime/index', ['exports', 'ember-metal', 'ember-runtime/is-equal', 'ember-runtime/compare', 'ember-runtime/copy', 'ember-runtime/inject', 'ember-runtime/system/namespace', 'ember-runtime/system/object', 'ember-runtime/system/container', 'ember-runtime/system/array_proxy', 'ember-runtime/system/object_proxy', 'ember-runtime/system/core_object', 'ember-runtime/system/native_array', 'ember-runtime/system/string', 'ember-runtime/system/lazy_load', 'ember-runtime/mixins/array', 'ember-runtime/mixins/comparable', 'ember-runtime/mixins/copyable', 'ember-runtime/mixins/enumerable', 'ember-runtime/mixins/freezable', 'ember-runtime/mixins/-proxy', 'ember-runtime/mixins/observable', 'ember-runtime/mixins/action_handler', 'ember-runtime/mixins/mutable_enumerable', 'ember-runtime/mixins/mutable_array', 'ember-runtime/mixins/target_action_support', 'ember-runtime/mixins/evented', 'ember-runtime/mixins/promise_proxy', 'ember-metal/features', 'ember-runtime/computed/reduce_computed_macros', 'ember-runtime/controllers/controller', 'ember-runtime/mixins/controller', 'ember-runtime/system/service', 'ember-runtime/ext/rsvp', 'ember-runtime/ext/string', 'ember-runtime/ext/function', 'ember-runtime/utils', 'ember-runtime/mixins/registry_proxy', 'ember-runtime/mixins/container_proxy', 'ember-runtime/string_registry'], function (exports, _emberMetal, _emberRuntimeIsEqual, _emberRuntimeCompare, _emberRuntimeCopy, _emberRuntimeInject, _emberRuntimeSystemNamespace, _emberRuntimeSystemObject, _emberRuntimeSystemContainer, _emberRuntimeSystemArray_proxy, _emberRuntimeSystemObject_proxy, _emberRuntimeSystemCore_object, _emberRuntimeSystemNative_array, _emberRuntimeSystemString, _emberRuntimeSystemLazy_load, _emberRuntimeMixinsArray, _emberRuntimeMixinsComparable, _emberRuntimeMixinsCopyable, _emberRuntimeMixinsEnumerable, _emberRuntimeMixinsFreezable, _emberRuntimeMixinsProxy, _emberRuntimeMixinsObservable, _emberRuntimeMixinsAction_handler, _emberRuntimeMixinsMutable_enumerable, _emberRuntimeMixinsMutable_array, _emberRuntimeMixinsTarget_action_support, _emberRuntimeMixinsEvented, _emberRuntimeMixinsPromise_proxy, _emberMetalFeatures, _emberRuntimeComputedReduce_computed_macros, _emberRuntimeControllersController, _emberRuntimeMixinsController, _emberRuntimeSystemService, _emberRuntimeExtRsvp, _emberRuntimeExtString, _emberRuntimeExtFunction, _emberRuntimeUtils, _emberRuntimeMixinsRegistry_proxy, _emberRuntimeMixinsContainer_proxy, _emberRuntimeString_registry) {
13765
13926
  /**
13766
13927
  @module ember
13767
13928
  @submodule ember-runtime
@@ -13813,6 +13974,11 @@ enifed('ember-runtime/index', ['exports', 'ember-metal', 'ember-runtime/is-equal
13813
13974
  EmComputed.filter = _emberRuntimeComputedReduce_computed_macros.filter;
13814
13975
  EmComputed.filterBy = _emberRuntimeComputedReduce_computed_macros.filterBy;
13815
13976
  EmComputed.uniq = _emberRuntimeComputedReduce_computed_macros.uniq;
13977
+
13978
+ if (_emberMetalFeatures.default('ember-runtime-computed-uniq-by')) {
13979
+ EmComputed.uniqBy = _emberRuntimeComputedReduce_computed_macros.uniqBy;
13980
+ }
13981
+
13816
13982
  EmComputed.union = _emberRuntimeComputedReduce_computed_macros.union;
13817
13983
  EmComputed.intersect = _emberRuntimeComputedReduce_computed_macros.intersect;
13818
13984
  EmComputed.collect = _emberRuntimeComputedReduce_computed_macros.collect;
@@ -13822,13 +13988,11 @@ enifed('ember-runtime/index', ['exports', 'ember-metal', 'ember-runtime/is-equal
13822
13988
  _emberMetal.default.Container = _emberRuntimeSystemContainer.Container;
13823
13989
  _emberMetal.default.Registry = _emberRuntimeSystemContainer.Registry;
13824
13990
 
13825
- if (_emberMetalFeatures.default('ember-container-inject-owner')) {
13826
- _emberMetal.default.getOwner = _emberRuntimeSystemContainer.getOwner;
13827
- _emberMetal.default.setOwner = _emberRuntimeSystemContainer.setOwner;
13991
+ _emberMetal.default.getOwner = _emberRuntimeSystemContainer.getOwner;
13992
+ _emberMetal.default.setOwner = _emberRuntimeSystemContainer.setOwner;
13828
13993
 
13829
- _emberMetal.default._RegistryProxyMixin = _emberRuntimeMixinsRegistry_proxy.default;
13830
- _emberMetal.default._ContainerProxyMixin = _emberRuntimeMixinsContainer_proxy.default;
13831
- }
13994
+ _emberMetal.default._RegistryProxyMixin = _emberRuntimeMixinsRegistry_proxy.default;
13995
+ _emberMetal.default._ContainerProxyMixin = _emberRuntimeMixinsContainer_proxy.default;
13832
13996
 
13833
13997
  _emberMetal.default.Namespace = _emberRuntimeSystemNamespace.default;
13834
13998
  _emberMetal.default.Enumerable = _emberRuntimeMixinsEnumerable.default;
@@ -14008,7 +14172,7 @@ enifed('ember-runtime/is-equal', ['exports'], function (exports) {
14008
14172
  return a === b;
14009
14173
  }
14010
14174
  });
14011
- enifed('ember-runtime/mixins/-proxy', ['exports', 'ember-metal/debug', 'ember-metal/property_get', 'ember-metal/property_set', 'ember-metal/meta', 'ember-metal/observer', 'ember-metal/property_events', 'ember-metal/computed', 'ember-metal/properties', 'ember-metal/mixin'], function (exports, _emberMetalDebug, _emberMetalProperty_get, _emberMetalProperty_set, _emberMetalMeta, _emberMetalObserver, _emberMetalProperty_events, _emberMetalComputed, _emberMetalProperties, _emberMetalMixin) {
14175
+ enifed('ember-runtime/mixins/-proxy', ['exports', 'ember-metal/debug', 'ember-metal/property_get', 'ember-metal/property_set', 'ember-metal/meta', 'ember-metal/observer', 'ember-metal/property_events', 'ember-metal/computed', 'ember-metal/properties', 'ember-metal/mixin', 'ember-metal/symbol'], function (exports, _emberMetalDebug, _emberMetalProperty_get, _emberMetalProperty_set, _emberMetalMeta, _emberMetalObserver, _emberMetalProperty_events, _emberMetalComputed, _emberMetalProperties, _emberMetalMixin, _emberMetalSymbol) {
14012
14176
  /**
14013
14177
  @module ember
14014
14178
  @submodule ember-runtime
@@ -14016,6 +14180,16 @@ enifed('ember-runtime/mixins/-proxy', ['exports', 'ember-metal/debug', 'ember-me
14016
14180
 
14017
14181
  'use strict';
14018
14182
 
14183
+ var _Mixin$create;
14184
+
14185
+ exports.isProxy = isProxy;
14186
+
14187
+ var IS_PROXY = _emberMetalSymbol.default('IS_PROXY');
14188
+
14189
+ function isProxy(value) {
14190
+ return value && value[IS_PROXY];
14191
+ }
14192
+
14019
14193
  function contentPropertyWillChange(content, contentKey) {
14020
14194
  var key = contentKey.slice(8); // remove "content."
14021
14195
  if (key in this) {
@@ -14040,61 +14214,46 @@ enifed('ember-runtime/mixins/-proxy', ['exports', 'ember-metal/debug', 'ember-me
14040
14214
  @namespace Ember
14041
14215
  @private
14042
14216
  */
14043
- exports.default = _emberMetalMixin.Mixin.create({
14044
- /**
14045
- The object whose properties will be forwarded.
14046
- @property content
14047
- @type Ember.Object
14048
- @default null
14049
- @private
14050
- */
14051
- content: null,
14052
- _contentDidChange: _emberMetalMixin.observer('content', function () {
14053
- _emberMetalDebug.assert('Can\'t set Proxy\'s content to itself', _emberMetalProperty_get.get(this, 'content') !== this);
14054
- }),
14055
-
14056
- isTruthy: _emberMetalComputed.computed.bool('content'),
14057
-
14058
- _debugContainerKey: null,
14059
-
14060
- willWatchProperty: function (key) {
14061
- var contentKey = 'content.' + key;
14062
- _emberMetalObserver._addBeforeObserver(this, contentKey, null, contentPropertyWillChange);
14063
- _emberMetalObserver.addObserver(this, contentKey, null, contentPropertyDidChange);
14064
- },
14065
-
14066
- didUnwatchProperty: function (key) {
14067
- var contentKey = 'content.' + key;
14068
- _emberMetalObserver._removeBeforeObserver(this, contentKey, null, contentPropertyWillChange);
14069
- _emberMetalObserver.removeObserver(this, contentKey, null, contentPropertyDidChange);
14070
- },
14071
-
14072
- unknownProperty: function (key) {
14073
- var content = _emberMetalProperty_get.get(this, 'content');
14074
- if (content) {
14075
- _emberMetalDebug.deprecate('You attempted to access `' + key + '` from `' + this + '`, but object proxying is deprecated. Please use `model.' + key + '` instead.', !this.isController, { id: 'ember-runtime.controller-proxy', until: '3.0.0' });
14076
- return _emberMetalProperty_get.get(content, key);
14077
- }
14078
- },
14079
-
14080
- setUnknownProperty: function (key, value) {
14081
- var m = _emberMetalMeta.meta(this);
14082
- if (m.proto === this) {
14083
- // if marked as prototype then just defineProperty
14084
- // rather than delegate
14085
- _emberMetalProperties.defineProperty(this, key, null, value);
14086
- return value;
14087
- }
14088
-
14089
- var content = _emberMetalProperty_get.get(this, 'content');
14090
- _emberMetalDebug.assert('Cannot delegate set(\'' + key + '\', ' + value + ') to the \'content\' property of object proxy ' + this + ': its \'content\' is undefined.', content);
14091
-
14092
- _emberMetalDebug.deprecate('You attempted to set `' + key + '` from `' + this + '`, but object proxying is deprecated. Please use `model.' + key + '` instead.', !this.isController, { id: 'ember-runtime.controller-proxy', until: '3.0.0' });
14093
- return _emberMetalProperty_set.set(content, key, value);
14217
+ exports.default = _emberMetalMixin.Mixin.create((_Mixin$create = {}, _Mixin$create[IS_PROXY] = true, _Mixin$create.content = null, _Mixin$create._contentDidChange = _emberMetalMixin.observer('content', function () {
14218
+ _emberMetalDebug.assert('Can\'t set Proxy\'s content to itself', _emberMetalProperty_get.get(this, 'content') !== this);
14219
+ }), _Mixin$create.isTruthy = _emberMetalComputed.computed.bool('content'), _Mixin$create._debugContainerKey = null, _Mixin$create.willWatchProperty = function (key) {
14220
+ var contentKey = 'content.' + key;
14221
+ _emberMetalObserver._addBeforeObserver(this, contentKey, null, contentPropertyWillChange);
14222
+ _emberMetalObserver.addObserver(this, contentKey, null, contentPropertyDidChange);
14223
+ }, _Mixin$create.didUnwatchProperty = function (key) {
14224
+ var contentKey = 'content.' + key;
14225
+ _emberMetalObserver._removeBeforeObserver(this, contentKey, null, contentPropertyWillChange);
14226
+ _emberMetalObserver.removeObserver(this, contentKey, null, contentPropertyDidChange);
14227
+ }, _Mixin$create.unknownProperty = function (key) {
14228
+ var content = _emberMetalProperty_get.get(this, 'content');
14229
+ if (content) {
14230
+ _emberMetalDebug.deprecate('You attempted to access `' + key + '` from `' + this + '`, but object proxying is deprecated. Please use `model.' + key + '` instead.', !this.isController, { id: 'ember-runtime.controller-proxy', until: '3.0.0' });
14231
+ return _emberMetalProperty_get.get(content, key);
14232
+ }
14233
+ }, _Mixin$create.setUnknownProperty = function (key, value) {
14234
+ var m = _emberMetalMeta.meta(this);
14235
+ if (m.proto === this) {
14236
+ // if marked as prototype then just defineProperty
14237
+ // rather than delegate
14238
+ _emberMetalProperties.defineProperty(this, key, null, value);
14239
+ return value;
14094
14240
  }
14095
14241
 
14096
- });
14242
+ var content = _emberMetalProperty_get.get(this, 'content');
14243
+ _emberMetalDebug.assert('Cannot delegate set(\'' + key + '\', ' + value + ') to the \'content\' property of object proxy ' + this + ': its \'content\' is undefined.', content);
14244
+
14245
+ _emberMetalDebug.deprecate('You attempted to set `' + key + '` from `' + this + '`, but object proxying is deprecated. Please use `model.' + key + '` instead.', !this.isController, { id: 'ember-runtime.controller-proxy', until: '3.0.0' });
14246
+ return _emberMetalProperty_set.set(content, key, value);
14247
+ }, _Mixin$create));
14097
14248
  });
14249
+
14250
+ /**
14251
+ The object whose properties will be forwarded.
14252
+ @property content
14253
+ @type Ember.Object
14254
+ @default null
14255
+ @private
14256
+ */
14098
14257
  enifed('ember-runtime/mixins/action_handler', ['exports', 'ember-metal/debug', 'ember-metal/mixin', 'ember-metal/property_get'], function (exports, _emberMetalDebug, _emberMetalMixin, _emberMetalProperty_get) {
14099
14258
  /**
14100
14259
  @module ember
@@ -14296,7 +14455,7 @@ enifed('ember-runtime/mixins/action_handler', ['exports', 'ember-metal/debug', '
14296
14455
  });
14297
14456
  }
14298
14457
  });
14299
- enifed('ember-runtime/mixins/array', ['exports', 'ember-metal/core', 'ember-metal/property_get', 'ember-metal/computed', 'ember-metal/is_none', 'ember-runtime/mixins/enumerable', 'ember-metal/mixin', 'ember-metal/property_events', 'ember-metal/events', 'ember-runtime/system/each_proxy'], function (exports, _emberMetalCore, _emberMetalProperty_get, _emberMetalComputed, _emberMetalIs_none, _emberRuntimeMixinsEnumerable, _emberMetalMixin, _emberMetalProperty_events, _emberMetalEvents, _emberRuntimeSystemEach_proxy) {
14458
+ enifed('ember-runtime/mixins/array', ['exports', 'ember-metal/core', 'ember-metal/symbol', 'ember-metal/property_get', 'ember-metal/computed', 'ember-metal/is_none', 'ember-runtime/mixins/enumerable', 'ember-metal/mixin', 'ember-metal/property_events', 'ember-metal/events', 'ember-metal/meta', 'ember-metal/tags', 'ember-runtime/system/each_proxy'], function (exports, _emberMetalCore, _emberMetalSymbol, _emberMetalProperty_get, _emberMetalComputed, _emberMetalIs_none, _emberRuntimeMixinsEnumerable, _emberMetalMixin, _emberMetalProperty_events, _emberMetalEvents, _emberMetalMeta, _emberMetalTags, _emberRuntimeSystemEach_proxy) {
14300
14459
  /**
14301
14460
  @module ember
14302
14461
  @submodule ember-runtime
@@ -14307,9 +14466,12 @@ enifed('ember-runtime/mixins/array', ['exports', 'ember-metal/core', 'ember-meta
14307
14466
  //
14308
14467
  'use strict';
14309
14468
 
14469
+ var _Mixin$create;
14470
+
14310
14471
  exports.addArrayObserver = addArrayObserver;
14311
14472
  exports.removeArrayObserver = removeArrayObserver;
14312
14473
  exports.objectAt = objectAt;
14474
+ exports.isEmberArray = isEmberArray;
14313
14475
 
14314
14476
  function arrayObserversHelper(obj, target, opts, operation, notify) {
14315
14477
  var willChange = opts && opts.willChange || 'arrayWillChange';
@@ -14346,6 +14508,12 @@ enifed('ember-runtime/mixins/array', ['exports', 'ember-metal/core', 'ember-meta
14346
14508
  return content[idx];
14347
14509
  }
14348
14510
 
14511
+ var EMBER_ARRAY = _emberMetalSymbol.default('EMBER_ARRAY');
14512
+
14513
+ function isEmberArray(obj) {
14514
+ return obj && !!obj[EMBER_ARRAY];
14515
+ }
14516
+
14349
14517
  // ..........................................................
14350
14518
  // ARRAY
14351
14519
  //
@@ -14386,435 +14554,416 @@ enifed('ember-runtime/mixins/array', ['exports', 'ember-metal/core', 'ember-meta
14386
14554
  @since Ember 0.9.0
14387
14555
  @public
14388
14556
  */
14389
- exports.default = _emberMetalMixin.Mixin.create(_emberRuntimeMixinsEnumerable.default, {
14390
-
14391
- /**
14392
- __Required.__ You must implement this method to apply this mixin.
14393
- Your array must support the `length` property. Your replace methods should
14394
- set this property whenever it changes.
14395
- @property {Number} length
14396
- @public
14397
- */
14398
- length: null,
14557
+ exports.default = _emberMetalMixin.Mixin.create(_emberRuntimeMixinsEnumerable.default, (_Mixin$create = {}, _Mixin$create[EMBER_ARRAY] = true, _Mixin$create.length = null, _Mixin$create.objectAt = function (idx) {
14558
+ if (idx < 0 || idx >= _emberMetalProperty_get.get(this, 'length')) {
14559
+ return undefined;
14560
+ }
14399
14561
 
14400
- /**
14401
- Returns the object at the given `index`. If the given `index` is negative
14402
- or is greater or equal than the array length, returns `undefined`.
14403
- This is one of the primitives you must implement to support `Ember.Array`.
14404
- If your object supports retrieving the value of an array item using `get()`
14405
- (i.e. `myArray.get(0)`), then you do not need to implement this method
14406
- yourself.
14407
- ```javascript
14408
- var arr = ['a', 'b', 'c', 'd'];
14409
- arr.objectAt(0); // 'a'
14410
- arr.objectAt(3); // 'd'
14411
- arr.objectAt(-1); // undefined
14412
- arr.objectAt(4); // undefined
14413
- arr.objectAt(5); // undefined
14414
- ```
14415
- @method objectAt
14416
- @param {Number} idx The index of the item to return.
14417
- @return {*} item at index or undefined
14418
- @public
14419
- */
14420
- objectAt: function (idx) {
14421
- if (idx < 0 || idx >= _emberMetalProperty_get.get(this, 'length')) {
14422
- return undefined;
14423
- }
14562
+ return _emberMetalProperty_get.get(this, idx);
14563
+ }, _Mixin$create.objectsAt = function (indexes) {
14564
+ var _this = this;
14424
14565
 
14425
- return _emberMetalProperty_get.get(this, idx);
14566
+ return indexes.map(function (idx) {
14567
+ return objectAt(_this, idx);
14568
+ });
14569
+ }, _Mixin$create.nextObject = function (idx) {
14570
+ return objectAt(this, idx);
14571
+ }, _Mixin$create['[]'] = _emberMetalComputed.computed({
14572
+ get: function (key) {
14573
+ return this;
14426
14574
  },
14575
+ set: function (key, value) {
14576
+ this.replace(0, _emberMetalProperty_get.get(this, 'length'), value);
14577
+ return this;
14578
+ }
14579
+ }), _Mixin$create.firstObject = _emberMetalComputed.computed(function () {
14580
+ return objectAt(this, 0);
14581
+ }).readOnly(), _Mixin$create.lastObject = _emberMetalComputed.computed(function () {
14582
+ return objectAt(this, _emberMetalProperty_get.get(this, 'length') - 1);
14583
+ }).readOnly(), _Mixin$create.contains = function (obj) {
14584
+ return this.indexOf(obj) >= 0;
14585
+ }, _Mixin$create.slice = function (beginIndex, endIndex) {
14586
+ var ret = _emberMetalCore.default.A();
14587
+ var length = _emberMetalProperty_get.get(this, 'length');
14427
14588
 
14428
- /**
14429
- This returns the objects at the specified indexes, using `objectAt`.
14430
- ```javascript
14431
- var arr = ['a', 'b', 'c', 'd'];
14432
- arr.objectsAt([0, 1, 2]); // ['a', 'b', 'c']
14433
- arr.objectsAt([2, 3, 4]); // ['c', 'd', undefined]
14434
- ```
14435
- @method objectsAt
14436
- @param {Array} indexes An array of indexes of items to return.
14437
- @return {Array}
14438
- @public
14439
- */
14440
- objectsAt: function (indexes) {
14441
- var _this = this;
14589
+ if (_emberMetalIs_none.default(beginIndex)) {
14590
+ beginIndex = 0;
14591
+ }
14442
14592
 
14443
- return indexes.map(function (idx) {
14444
- return objectAt(_this, idx);
14445
- });
14446
- },
14593
+ if (_emberMetalIs_none.default(endIndex) || endIndex > length) {
14594
+ endIndex = length;
14595
+ }
14447
14596
 
14448
- // overrides Ember.Enumerable version
14449
- nextObject: function (idx) {
14450
- return objectAt(this, idx);
14451
- },
14597
+ if (beginIndex < 0) {
14598
+ beginIndex = length + beginIndex;
14599
+ }
14452
14600
 
14453
- /**
14454
- This is the handler for the special array content property. If you get
14455
- this property, it will return this. If you set this property to a new
14456
- array, it will replace the current content.
14457
- This property overrides the default property defined in `Ember.Enumerable`.
14458
- @property []
14459
- @return this
14460
- @public
14461
- */
14462
- '[]': _emberMetalComputed.computed({
14463
- get: function (key) {
14464
- return this;
14465
- },
14466
- set: function (key, value) {
14467
- this.replace(0, _emberMetalProperty_get.get(this, 'length'), value);
14468
- return this;
14469
- }
14470
- }),
14601
+ if (endIndex < 0) {
14602
+ endIndex = length + endIndex;
14603
+ }
14471
14604
 
14472
- firstObject: _emberMetalComputed.computed(function () {
14473
- return objectAt(this, 0);
14474
- }),
14605
+ while (beginIndex < endIndex) {
14606
+ ret[ret.length] = objectAt(this, beginIndex++);
14607
+ }
14475
14608
 
14476
- lastObject: _emberMetalComputed.computed(function () {
14477
- return objectAt(this, _emberMetalProperty_get.get(this, 'length') - 1);
14478
- }),
14609
+ return ret;
14610
+ }, _Mixin$create.indexOf = function (object, startAt) {
14611
+ var len = _emberMetalProperty_get.get(this, 'length');
14612
+ var idx;
14479
14613
 
14480
- // optimized version from Enumerable
14481
- contains: function (obj) {
14482
- return this.indexOf(obj) >= 0;
14483
- },
14614
+ if (startAt === undefined) {
14615
+ startAt = 0;
14616
+ }
14484
14617
 
14485
- // Add any extra methods to Ember.Array that are native to the built-in Array.
14486
- /**
14487
- Returns a new array that is a slice of the receiver. This implementation
14488
- uses the observable array methods to retrieve the objects for the new
14489
- slice.
14490
- ```javascript
14491
- var arr = ['red', 'green', 'blue'];
14492
- arr.slice(0); // ['red', 'green', 'blue']
14493
- arr.slice(0, 2); // ['red', 'green']
14494
- arr.slice(1, 100); // ['green', 'blue']
14495
- ```
14496
- @method slice
14497
- @param {Number} beginIndex (Optional) index to begin slicing from.
14498
- @param {Number} endIndex (Optional) index to end the slice at (but not included).
14499
- @return {Array} New array with specified slice
14500
- @public
14501
- */
14502
- slice: function (beginIndex, endIndex) {
14503
- var ret = _emberMetalCore.default.A();
14504
- var length = _emberMetalProperty_get.get(this, 'length');
14618
+ if (startAt < 0) {
14619
+ startAt += len;
14620
+ }
14505
14621
 
14506
- if (_emberMetalIs_none.default(beginIndex)) {
14507
- beginIndex = 0;
14622
+ for (idx = startAt; idx < len; idx++) {
14623
+ if (objectAt(this, idx) === object) {
14624
+ return idx;
14508
14625
  }
14626
+ }
14509
14627
 
14510
- if (_emberMetalIs_none.default(endIndex) || endIndex > length) {
14511
- endIndex = length;
14512
- }
14628
+ return -1;
14629
+ }, _Mixin$create.lastIndexOf = function (object, startAt) {
14630
+ var len = _emberMetalProperty_get.get(this, 'length');
14631
+ var idx;
14513
14632
 
14514
- if (beginIndex < 0) {
14515
- beginIndex = length + beginIndex;
14516
- }
14633
+ if (startAt === undefined || startAt >= len) {
14634
+ startAt = len - 1;
14635
+ }
14517
14636
 
14518
- if (endIndex < 0) {
14519
- endIndex = length + endIndex;
14520
- }
14637
+ if (startAt < 0) {
14638
+ startAt += len;
14639
+ }
14521
14640
 
14522
- while (beginIndex < endIndex) {
14523
- ret[ret.length] = objectAt(this, beginIndex++);
14641
+ for (idx = startAt; idx >= 0; idx--) {
14642
+ if (objectAt(this, idx) === object) {
14643
+ return idx;
14524
14644
  }
14645
+ }
14525
14646
 
14526
- return ret;
14527
- },
14528
-
14529
- /**
14530
- Returns the index of the given object's first occurrence.
14531
- If no `startAt` argument is given, the starting location to
14532
- search is 0. If it's negative, will count backward from
14533
- the end of the array. Returns -1 if no match is found.
14534
- ```javascript
14535
- var arr = ['a', 'b', 'c', 'd', 'a'];
14536
- arr.indexOf('a'); // 0
14537
- arr.indexOf('z'); // -1
14538
- arr.indexOf('a', 2); // 4
14539
- arr.indexOf('a', -1); // 4
14540
- arr.indexOf('b', 3); // -1
14541
- arr.indexOf('a', 100); // -1
14542
- ```
14543
- @method indexOf
14544
- @param {Object} object the item to search for
14545
- @param {Number} startAt optional starting location to search, default 0
14546
- @return {Number} index or -1 if not found
14547
- @public
14548
- */
14549
- indexOf: function (object, startAt) {
14550
- var len = _emberMetalProperty_get.get(this, 'length');
14551
- var idx;
14552
-
14553
- if (startAt === undefined) {
14554
- startAt = 0;
14647
+ return -1;
14648
+ }, _Mixin$create.addArrayObserver = function (target, opts) {
14649
+ return addArrayObserver(this, target, opts);
14650
+ }, _Mixin$create.removeArrayObserver = function (target, opts) {
14651
+ return removeArrayObserver(this, target, opts);
14652
+ }, _Mixin$create.hasArrayObservers = _emberMetalComputed.computed(function () {
14653
+ return _emberMetalEvents.hasListeners(this, '@array:change') || _emberMetalEvents.hasListeners(this, '@array:before');
14654
+ }), _Mixin$create.arrayContentWillChange = function (startIdx, removeAmt, addAmt) {
14655
+ var removing, lim;
14656
+
14657
+ // if no args are passed assume everything changes
14658
+ if (startIdx === undefined) {
14659
+ startIdx = 0;
14660
+ removeAmt = addAmt = -1;
14661
+ } else {
14662
+ if (removeAmt === undefined) {
14663
+ removeAmt = -1;
14555
14664
  }
14556
14665
 
14557
- if (startAt < 0) {
14558
- startAt += len;
14666
+ if (addAmt === undefined) {
14667
+ addAmt = -1;
14559
14668
  }
14669
+ }
14560
14670
 
14561
- for (idx = startAt; idx < len; idx++) {
14562
- if (objectAt(this, idx) === object) {
14563
- return idx;
14564
- }
14565
- }
14671
+ if (this.__each) {
14672
+ this.__each.arrayWillChange(this, startIdx, removeAmt, addAmt);
14673
+ }
14566
14674
 
14567
- return -1;
14568
- },
14675
+ _emberMetalEvents.sendEvent(this, '@array:before', [this, startIdx, removeAmt, addAmt]);
14569
14676
 
14570
- /**
14571
- Returns the index of the given object's last occurrence.
14572
- If no `startAt` argument is given, the search starts from
14573
- the last position. If it's negative, will count backward
14574
- from the end of the array. Returns -1 if no match is found.
14575
- ```javascript
14576
- var arr = ['a', 'b', 'c', 'd', 'a'];
14577
- arr.lastIndexOf('a'); // 4
14578
- arr.lastIndexOf('z'); // -1
14579
- arr.lastIndexOf('a', 2); // 0
14580
- arr.lastIndexOf('a', -1); // 4
14581
- arr.lastIndexOf('b', 3); // 1
14582
- arr.lastIndexOf('a', 100); // 4
14583
- ```
14584
- @method lastIndexOf
14585
- @param {Object} object the item to search for
14586
- @param {Number} startAt optional starting location to search, default 0
14587
- @return {Number} index or -1 if not found
14588
- @public
14589
- */
14590
- lastIndexOf: function (object, startAt) {
14591
- var len = _emberMetalProperty_get.get(this, 'length');
14592
- var idx;
14677
+ if (startIdx >= 0 && removeAmt >= 0 && _emberMetalProperty_get.get(this, 'hasEnumerableObservers')) {
14678
+ removing = [];
14679
+ lim = startIdx + removeAmt;
14593
14680
 
14594
- if (startAt === undefined || startAt >= len) {
14595
- startAt = len - 1;
14681
+ for (var idx = startIdx; idx < lim; idx++) {
14682
+ removing.push(objectAt(this, idx));
14596
14683
  }
14684
+ } else {
14685
+ removing = removeAmt;
14686
+ }
14597
14687
 
14598
- if (startAt < 0) {
14599
- startAt += len;
14600
- }
14688
+ this.enumerableContentWillChange(removing, addAmt);
14601
14689
 
14602
- for (idx = startAt; idx >= 0; idx--) {
14603
- if (objectAt(this, idx) === object) {
14604
- return idx;
14605
- }
14606
- }
14690
+ return this;
14691
+ }, _Mixin$create.arrayContentDidChange = function (startIdx, removeAmt, addAmt) {
14692
+ var adding, lim;
14607
14693
 
14608
- return -1;
14609
- },
14694
+ _emberMetalTags.markObjectAsDirty(_emberMetalMeta.meta(this));
14610
14695
 
14611
- // ..........................................................
14612
- // ARRAY OBSERVERS
14613
- //
14696
+ // if no args are passed assume everything changes
14697
+ if (startIdx === undefined) {
14698
+ startIdx = 0;
14699
+ removeAmt = addAmt = -1;
14700
+ } else {
14701
+ if (removeAmt === undefined) {
14702
+ removeAmt = -1;
14703
+ }
14614
14704
 
14615
- /**
14616
- Adds an array observer to the receiving array. The array observer object
14617
- normally must implement two methods:
14618
- * `arrayWillChange(observedObj, start, removeCount, addCount)` - This method will be
14619
- called just before the array is modified.
14620
- * `arrayDidChange(observedObj, start, removeCount, addCount)` - This method will be
14621
- called just after the array is modified.
14622
- Both callbacks will be passed the observed object, starting index of the
14623
- change as well as a count of the items to be removed and added. You can use
14624
- these callbacks to optionally inspect the array during the change, clear
14625
- caches, or do any other bookkeeping necessary.
14626
- In addition to passing a target, you can also include an options hash
14627
- which you can use to override the method names that will be invoked on the
14628
- target.
14629
- @method addArrayObserver
14630
- @param {Object} target The observer object.
14631
- @param {Object} opts Optional hash of configuration options including
14632
- `willChange` and `didChange` option.
14633
- @return {Ember.Array} receiver
14634
- @public
14635
- */
14705
+ if (addAmt === undefined) {
14706
+ addAmt = -1;
14707
+ }
14708
+ }
14636
14709
 
14637
- addArrayObserver: function (target, opts) {
14638
- return addArrayObserver(this, target, opts);
14639
- },
14710
+ if (startIdx >= 0 && addAmt >= 0 && _emberMetalProperty_get.get(this, 'hasEnumerableObservers')) {
14711
+ adding = [];
14712
+ lim = startIdx + addAmt;
14640
14713
 
14641
- /**
14642
- Removes an array observer from the object if the observer is current
14643
- registered. Calling this method multiple times with the same object will
14644
- have no effect.
14645
- @method removeArrayObserver
14646
- @param {Object} target The object observing the array.
14647
- @param {Object} opts Optional hash of configuration options including
14648
- `willChange` and `didChange` option.
14649
- @return {Ember.Array} receiver
14650
- @public
14651
- */
14652
- removeArrayObserver: function (target, opts) {
14653
- return removeArrayObserver(this, target, opts);
14654
- },
14714
+ for (var idx = startIdx; idx < lim; idx++) {
14715
+ adding.push(objectAt(this, idx));
14716
+ }
14717
+ } else {
14718
+ adding = addAmt;
14719
+ }
14655
14720
 
14656
- /**
14657
- Becomes true whenever the array currently has observers watching changes
14658
- on the array.
14659
- @property {Boolean} hasArrayObservers
14660
- @public
14661
- */
14662
- hasArrayObservers: _emberMetalComputed.computed(function () {
14663
- return _emberMetalEvents.hasListeners(this, '@array:change') || _emberMetalEvents.hasListeners(this, '@array:before');
14664
- }),
14721
+ this.enumerableContentDidChange(removeAmt, adding);
14665
14722
 
14666
- /**
14667
- If you are implementing an object that supports `Ember.Array`, call this
14668
- method just before the array content changes to notify any observers and
14669
- invalidate any related properties. Pass the starting index of the change
14670
- as well as a delta of the amounts to change.
14671
- @method arrayContentWillChange
14672
- @param {Number} startIdx The starting index in the array that will change.
14673
- @param {Number} removeAmt The number of items that will be removed. If you
14674
- pass `null` assumes 0
14675
- @param {Number} addAmt The number of items that will be added. If you
14676
- pass `null` assumes 0.
14677
- @return {Ember.Array} receiver
14678
- @public
14679
- */
14680
- arrayContentWillChange: function (startIdx, removeAmt, addAmt) {
14681
- var removing, lim;
14723
+ if (this.__each) {
14724
+ this.__each.arrayDidChange(this, startIdx, removeAmt, addAmt);
14725
+ }
14682
14726
 
14683
- // if no args are passed assume everything changes
14684
- if (startIdx === undefined) {
14685
- startIdx = 0;
14686
- removeAmt = addAmt = -1;
14687
- } else {
14688
- if (removeAmt === undefined) {
14689
- removeAmt = -1;
14690
- }
14727
+ _emberMetalEvents.sendEvent(this, '@array:change', [this, startIdx, removeAmt, addAmt]);
14691
14728
 
14692
- if (addAmt === undefined) {
14693
- addAmt = -1;
14694
- }
14695
- }
14729
+ var length = _emberMetalProperty_get.get(this, 'length');
14730
+ var cachedFirst = _emberMetalComputed.cacheFor(this, 'firstObject');
14731
+ var cachedLast = _emberMetalComputed.cacheFor(this, 'lastObject');
14696
14732
 
14697
- if (this.__each) {
14698
- this.__each.arrayWillChange(this, startIdx, removeAmt, addAmt);
14699
- }
14733
+ if (objectAt(this, 0) !== cachedFirst) {
14734
+ _emberMetalProperty_events.propertyWillChange(this, 'firstObject');
14735
+ _emberMetalProperty_events.propertyDidChange(this, 'firstObject');
14736
+ }
14700
14737
 
14701
- _emberMetalEvents.sendEvent(this, '@array:before', [this, startIdx, removeAmt, addAmt]);
14738
+ if (objectAt(this, length - 1) !== cachedLast) {
14739
+ _emberMetalProperty_events.propertyWillChange(this, 'lastObject');
14740
+ _emberMetalProperty_events.propertyDidChange(this, 'lastObject');
14741
+ }
14702
14742
 
14703
- if (startIdx >= 0 && removeAmt >= 0 && _emberMetalProperty_get.get(this, 'hasEnumerableObservers')) {
14704
- removing = [];
14705
- lim = startIdx + removeAmt;
14743
+ return this;
14744
+ }, _Mixin$create['@each'] = _emberMetalComputed.computed(function () {
14745
+ // TODO use Symbol or add to meta
14746
+ if (!this.__each) {
14747
+ this.__each = new _emberRuntimeSystemEach_proxy.default(this);
14748
+ }
14706
14749
 
14707
- for (var idx = startIdx; idx < lim; idx++) {
14708
- removing.push(objectAt(this, idx));
14709
- }
14710
- } else {
14711
- removing = removeAmt;
14712
- }
14750
+ return this.__each;
14751
+ }).volatile(), _Mixin$create));
14752
+ });
14753
+ // ES6TODO: Ember.A
14713
14754
 
14714
- this.enumerableContentWillChange(removing, addAmt);
14755
+ /**
14756
+ __Required.__ You must implement this method to apply this mixin.
14757
+ Your array must support the `length` property. Your replace methods should
14758
+ set this property whenever it changes.
14759
+ @property {Number} length
14760
+ @public
14761
+ */
14715
14762
 
14716
- return this;
14717
- },
14763
+ /**
14764
+ Returns the object at the given `index`. If the given `index` is negative
14765
+ or is greater or equal than the array length, returns `undefined`.
14766
+ This is one of the primitives you must implement to support `Ember.Array`.
14767
+ If your object supports retrieving the value of an array item using `get()`
14768
+ (i.e. `myArray.get(0)`), then you do not need to implement this method
14769
+ yourself.
14770
+ ```javascript
14771
+ var arr = ['a', 'b', 'c', 'd'];
14772
+ arr.objectAt(0); // 'a'
14773
+ arr.objectAt(3); // 'd'
14774
+ arr.objectAt(-1); // undefined
14775
+ arr.objectAt(4); // undefined
14776
+ arr.objectAt(5); // undefined
14777
+ ```
14778
+ @method objectAt
14779
+ @param {Number} idx The index of the item to return.
14780
+ @return {*} item at index or undefined
14781
+ @public
14782
+ */
14718
14783
 
14719
- /**
14720
- If you are implementing an object that supports `Ember.Array`, call this
14721
- method just after the array content changes to notify any observers and
14722
- invalidate any related properties. Pass the starting index of the change
14723
- as well as a delta of the amounts to change.
14724
- @method arrayContentDidChange
14725
- @param {Number} startIdx The starting index in the array that did change.
14726
- @param {Number} removeAmt The number of items that were removed. If you
14727
- pass `null` assumes 0
14728
- @param {Number} addAmt The number of items that were added. If you
14729
- pass `null` assumes 0.
14730
- @return {Ember.Array} receiver
14731
- @public
14732
- */
14733
- arrayContentDidChange: function (startIdx, removeAmt, addAmt) {
14734
- var adding, lim;
14784
+ /**
14785
+ This returns the objects at the specified indexes, using `objectAt`.
14786
+ ```javascript
14787
+ var arr = ['a', 'b', 'c', 'd'];
14788
+ arr.objectsAt([0, 1, 2]); // ['a', 'b', 'c']
14789
+ arr.objectsAt([2, 3, 4]); // ['c', 'd', undefined]
14790
+ ```
14791
+ @method objectsAt
14792
+ @param {Array} indexes An array of indexes of items to return.
14793
+ @return {Array}
14794
+ @public
14795
+ */
14735
14796
 
14736
- // if no args are passed assume everything changes
14737
- if (startIdx === undefined) {
14738
- startIdx = 0;
14739
- removeAmt = addAmt = -1;
14740
- } else {
14741
- if (removeAmt === undefined) {
14742
- removeAmt = -1;
14743
- }
14797
+ // overrides Ember.Enumerable version
14744
14798
 
14745
- if (addAmt === undefined) {
14746
- addAmt = -1;
14747
- }
14748
- }
14799
+ /**
14800
+ This is the handler for the special array content property. If you get
14801
+ this property, it will return this. If you set this property to a new
14802
+ array, it will replace the current content.
14803
+ This property overrides the default property defined in `Ember.Enumerable`.
14804
+ @property []
14805
+ @return this
14806
+ @public
14807
+ */
14749
14808
 
14750
- if (startIdx >= 0 && addAmt >= 0 && _emberMetalProperty_get.get(this, 'hasEnumerableObservers')) {
14751
- adding = [];
14752
- lim = startIdx + addAmt;
14809
+ // optimized version from Enumerable
14753
14810
 
14754
- for (var idx = startIdx; idx < lim; idx++) {
14755
- adding.push(objectAt(this, idx));
14756
- }
14757
- } else {
14758
- adding = addAmt;
14759
- }
14811
+ // Add any extra methods to Ember.Array that are native to the built-in Array.
14812
+ /**
14813
+ Returns a new array that is a slice of the receiver. This implementation
14814
+ uses the observable array methods to retrieve the objects for the new
14815
+ slice.
14816
+ ```javascript
14817
+ var arr = ['red', 'green', 'blue'];
14818
+ arr.slice(0); // ['red', 'green', 'blue']
14819
+ arr.slice(0, 2); // ['red', 'green']
14820
+ arr.slice(1, 100); // ['green', 'blue']
14821
+ ```
14822
+ @method slice
14823
+ @param {Number} beginIndex (Optional) index to begin slicing from.
14824
+ @param {Number} endIndex (Optional) index to end the slice at (but not included).
14825
+ @return {Array} New array with specified slice
14826
+ @public
14827
+ */
14760
14828
 
14761
- this.enumerableContentDidChange(removeAmt, adding);
14829
+ /**
14830
+ Returns the index of the given object's first occurrence.
14831
+ If no `startAt` argument is given, the starting location to
14832
+ search is 0. If it's negative, will count backward from
14833
+ the end of the array. Returns -1 if no match is found.
14834
+ ```javascript
14835
+ var arr = ['a', 'b', 'c', 'd', 'a'];
14836
+ arr.indexOf('a'); // 0
14837
+ arr.indexOf('z'); // -1
14838
+ arr.indexOf('a', 2); // 4
14839
+ arr.indexOf('a', -1); // 4
14840
+ arr.indexOf('b', 3); // -1
14841
+ arr.indexOf('a', 100); // -1
14842
+ ```
14843
+ @method indexOf
14844
+ @param {Object} object the item to search for
14845
+ @param {Number} startAt optional starting location to search, default 0
14846
+ @return {Number} index or -1 if not found
14847
+ @public
14848
+ */
14762
14849
 
14763
- if (this.__each) {
14764
- this.__each.arrayDidChange(this, startIdx, removeAmt, addAmt);
14765
- }
14850
+ /**
14851
+ Returns the index of the given object's last occurrence.
14852
+ If no `startAt` argument is given, the search starts from
14853
+ the last position. If it's negative, will count backward
14854
+ from the end of the array. Returns -1 if no match is found.
14855
+ ```javascript
14856
+ var arr = ['a', 'b', 'c', 'd', 'a'];
14857
+ arr.lastIndexOf('a'); // 4
14858
+ arr.lastIndexOf('z'); // -1
14859
+ arr.lastIndexOf('a', 2); // 0
14860
+ arr.lastIndexOf('a', -1); // 4
14861
+ arr.lastIndexOf('b', 3); // 1
14862
+ arr.lastIndexOf('a', 100); // 4
14863
+ ```
14864
+ @method lastIndexOf
14865
+ @param {Object} object the item to search for
14866
+ @param {Number} startAt optional starting location to search, default 0
14867
+ @return {Number} index or -1 if not found
14868
+ @public
14869
+ */
14766
14870
 
14767
- _emberMetalEvents.sendEvent(this, '@array:change', [this, startIdx, removeAmt, addAmt]);
14871
+ // ..........................................................
14872
+ // ARRAY OBSERVERS
14873
+ //
14768
14874
 
14769
- var length = _emberMetalProperty_get.get(this, 'length');
14770
- var cachedFirst = _emberMetalComputed.cacheFor(this, 'firstObject');
14771
- var cachedLast = _emberMetalComputed.cacheFor(this, 'lastObject');
14875
+ /**
14876
+ Adds an array observer to the receiving array. The array observer object
14877
+ normally must implement two methods:
14878
+ * `arrayWillChange(observedObj, start, removeCount, addCount)` - This method will be
14879
+ called just before the array is modified.
14880
+ * `arrayDidChange(observedObj, start, removeCount, addCount)` - This method will be
14881
+ called just after the array is modified.
14882
+ Both callbacks will be passed the observed object, starting index of the
14883
+ change as well as a count of the items to be removed and added. You can use
14884
+ these callbacks to optionally inspect the array during the change, clear
14885
+ caches, or do any other bookkeeping necessary.
14886
+ In addition to passing a target, you can also include an options hash
14887
+ which you can use to override the method names that will be invoked on the
14888
+ target.
14889
+ @method addArrayObserver
14890
+ @param {Object} target The observer object.
14891
+ @param {Object} opts Optional hash of configuration options including
14892
+ `willChange` and `didChange` option.
14893
+ @return {Ember.Array} receiver
14894
+ @public
14895
+ */
14772
14896
 
14773
- if (objectAt(this, 0) !== cachedFirst) {
14774
- _emberMetalProperty_events.propertyWillChange(this, 'firstObject');
14775
- _emberMetalProperty_events.propertyDidChange(this, 'firstObject');
14776
- }
14897
+ /**
14898
+ Removes an array observer from the object if the observer is current
14899
+ registered. Calling this method multiple times with the same object will
14900
+ have no effect.
14901
+ @method removeArrayObserver
14902
+ @param {Object} target The object observing the array.
14903
+ @param {Object} opts Optional hash of configuration options including
14904
+ `willChange` and `didChange` option.
14905
+ @return {Ember.Array} receiver
14906
+ @public
14907
+ */
14777
14908
 
14778
- if (objectAt(this, length - 1) !== cachedLast) {
14779
- _emberMetalProperty_events.propertyWillChange(this, 'lastObject');
14780
- _emberMetalProperty_events.propertyDidChange(this, 'lastObject');
14781
- }
14909
+ /**
14910
+ Becomes true whenever the array currently has observers watching changes
14911
+ on the array.
14912
+ @property {Boolean} hasArrayObservers
14913
+ @public
14914
+ */
14782
14915
 
14783
- return this;
14784
- },
14916
+ /**
14917
+ If you are implementing an object that supports `Ember.Array`, call this
14918
+ method just before the array content changes to notify any observers and
14919
+ invalidate any related properties. Pass the starting index of the change
14920
+ as well as a delta of the amounts to change.
14921
+ @method arrayContentWillChange
14922
+ @param {Number} startIdx The starting index in the array that will change.
14923
+ @param {Number} removeAmt The number of items that will be removed. If you
14924
+ pass `null` assumes 0
14925
+ @param {Number} addAmt The number of items that will be added. If you
14926
+ pass `null` assumes 0.
14927
+ @return {Ember.Array} receiver
14928
+ @public
14929
+ */
14785
14930
 
14786
- /**
14787
- Returns a special object that can be used to observe individual properties
14788
- on the array. Just get an equivalent property on this object and it will
14789
- return an enumerable that maps automatically to the named key on the
14790
- member objects.
14791
- `@each` should only be used in a non-terminal context. Example:
14792
- ```javascript
14793
- myMethod: computed('posts.@each.author', function(){
14794
- ...
14795
- });
14796
- ```
14797
- If you merely want to watch for the array being changed, like an object being
14798
- replaced, added or removed, use `[]` instead of `@each`.
14799
- ```javascript
14800
- myMethod: computed('posts.[]', function(){
14801
- ...
14802
- });
14803
- ```
14804
- @property @each
14805
- @public
14806
- */
14807
- '@each': _emberMetalComputed.computed(function () {
14808
- // TODO use Symbol or add to meta
14809
- if (!this.__each) {
14810
- this.__each = new _emberRuntimeSystemEach_proxy.default(this);
14811
- }
14931
+ /**
14932
+ If you are implementing an object that supports `Ember.Array`, call this
14933
+ method just after the array content changes to notify any observers and
14934
+ invalidate any related properties. Pass the starting index of the change
14935
+ as well as a delta of the amounts to change.
14936
+ @method arrayContentDidChange
14937
+ @param {Number} startIdx The starting index in the array that did change.
14938
+ @param {Number} removeAmt The number of items that were removed. If you
14939
+ pass `null` assumes 0
14940
+ @param {Number} addAmt The number of items that were added. If you
14941
+ pass `null` assumes 0.
14942
+ @return {Ember.Array} receiver
14943
+ @public
14944
+ */
14812
14945
 
14813
- return this.__each;
14814
- }).volatile()
14946
+ /**
14947
+ Returns a special object that can be used to observe individual properties
14948
+ on the array. Just get an equivalent property on this object and it will
14949
+ return an enumerable that maps automatically to the named key on the
14950
+ member objects.
14951
+ `@each` should only be used in a non-terminal context. Example:
14952
+ ```javascript
14953
+ myMethod: computed('posts.@each.author', function(){
14954
+ ...
14815
14955
  });
14816
- });
14817
- // ES6TODO: Ember.A
14956
+ ```
14957
+ If you merely want to watch for the array being changed, like an object being
14958
+ replaced, added or removed, use `[]` instead of `@each`.
14959
+ ```javascript
14960
+ myMethod: computed('posts.[]', function(){
14961
+ ...
14962
+ });
14963
+ ```
14964
+ @property @each
14965
+ @public
14966
+ */
14818
14967
  enifed('ember-runtime/mixins/comparable', ['exports', 'ember-metal/mixin'], function (exports, _emberMetalMixin) {
14819
14968
  'use strict';
14820
14969
 
@@ -14892,7 +15041,9 @@ enifed('ember-runtime/mixins/container_proxy', ['exports', 'ember-metal/run_loop
14892
15041
  @method ownerInjection
14893
15042
  @return {Object}
14894
15043
  */
14895
- ownerInjection: containerAlias('ownerInjection'),
15044
+ ownerInjection: function () {
15045
+ return this.__container__.ownerInjection();
15046
+ },
14896
15047
 
14897
15048
  /**
14898
15049
  Given a fullName return a corresponding instance.
@@ -14925,7 +15076,9 @@ enifed('ember-runtime/mixins/container_proxy', ['exports', 'ember-metal/run_loop
14925
15076
  @param {Object} options
14926
15077
  @return {any}
14927
15078
  */
14928
- lookup: containerAlias('lookup'),
15079
+ lookup: function (fullName, options) {
15080
+ return this.__container__.lookup(fullName, options);
15081
+ },
14929
15082
 
14930
15083
  /**
14931
15084
  Given a fullName return the corresponding factory.
@@ -14934,7 +15087,9 @@ enifed('ember-runtime/mixins/container_proxy', ['exports', 'ember-metal/run_loop
14934
15087
  @param {String} fullName
14935
15088
  @return {any}
14936
15089
  */
14937
- _lookupFactory: containerAlias('lookupFactory'),
15090
+ _lookupFactory: function (fullName, options) {
15091
+ return this.__container__.lookupFactory(fullName, options);
15092
+ },
14938
15093
 
14939
15094
  /**
14940
15095
  @private
@@ -14948,14 +15103,6 @@ enifed('ember-runtime/mixins/container_proxy', ['exports', 'ember-metal/run_loop
14948
15103
  }
14949
15104
  });
14950
15105
 
14951
- function containerAlias(name) {
14952
- return function () {
14953
- var _container__;
14954
-
14955
- return (_container__ = this.__container__)[name].apply(_container__, arguments);
14956
- };
14957
- }
14958
-
14959
15106
  function buildFakeContainerWithDeprecations(container) {
14960
15107
  var fakeContainer = {};
14961
15108
  var propertyMappings = {
@@ -15130,7 +15277,7 @@ enifed('ember-runtime/mixins/copyable', ['exports', 'ember-metal/debug', 'ember-
15130
15277
  }
15131
15278
  });
15132
15279
  });
15133
- enifed('ember-runtime/mixins/enumerable', ['exports', 'ember-metal/property_get', 'ember-metal/property_set', 'ember-metal/mixin', 'ember-metal/computed', 'ember-metal/property_events', 'ember-metal/events', 'ember-runtime/compare', 'require'], function (exports, _emberMetalProperty_get, _emberMetalProperty_set, _emberMetalMixin, _emberMetalComputed, _emberMetalProperty_events, _emberMetalEvents, _emberRuntimeCompare, _require) {
15280
+ enifed('ember-runtime/mixins/enumerable', ['exports', 'ember-metal/property_get', 'ember-metal/property_set', 'ember-metal/mixin', 'ember-metal/utils', 'ember-metal/computed', 'ember-metal/empty_object', 'ember-metal/features', 'ember-metal/property_events', 'ember-metal/events', 'ember-runtime/compare', 'require'], function (exports, _emberMetalProperty_get, _emberMetalProperty_set, _emberMetalMixin, _emberMetalUtils, _emberMetalComputed, _emberMetalEmpty_object, _emberMetalFeatures, _emberMetalProperty_events, _emberMetalEvents, _emberRuntimeCompare, _require) {
15134
15281
  /**
15135
15282
  @module ember
15136
15283
  @submodule ember-runtime
@@ -15208,7 +15355,7 @@ enifed('ember-runtime/mixins/enumerable', ['exports', 'ember-metal/property_get'
15208
15355
  @since Ember 0.9
15209
15356
  @private
15210
15357
  */
15211
- exports.default = _emberMetalMixin.Mixin.create({
15358
+ var Enumerable = _emberMetalMixin.Mixin.create({
15212
15359
 
15213
15360
  /**
15214
15361
  __Required.__ You must implement this method to apply this mixin.
@@ -15272,7 +15419,7 @@ enifed('ember-runtime/mixins/enumerable', ['exports', 'ember-metal/property_get'
15272
15419
  pushCtx(context);
15273
15420
 
15274
15421
  return ret;
15275
- }),
15422
+ }).readOnly(),
15276
15423
 
15277
15424
  /**
15278
15425
  Helper method returns the last object from a collection. If your enumerable
@@ -15309,7 +15456,7 @@ enifed('ember-runtime/mixins/enumerable', ['exports', 'ember-metal/property_get'
15309
15456
  pushCtx(context);
15310
15457
 
15311
15458
  return last;
15312
- }),
15459
+ }).readOnly(),
15313
15460
 
15314
15461
  /**
15315
15462
  Returns `true` if the passed object can be found in the receiver. The
@@ -16106,6 +16253,39 @@ enifed('ember-runtime/mixins/enumerable', ['exports', 'ember-metal/property_get'
16106
16253
  });
16107
16254
  }
16108
16255
  });
16256
+
16257
+ if (_emberMetalFeatures.default('ember-runtime-computed-uniq-by')) {
16258
+ Enumerable.reopen({
16259
+ /**
16260
+ Returns a new enumerable that contains only items containing a unique property value.
16261
+ The default implementation returns an array regardless of the receiver type.
16262
+ ```javascript
16263
+ var arr = [{ value: 'a' }, { value: 'a' }, { value: 'b' }, { value: 'b' }];
16264
+ arr.uniqBy('value'); // [{ value: 'a' }, { value: 'b' }]
16265
+ ```
16266
+ @method uniqBy
16267
+ @return {Ember.Enumerable}
16268
+ @public
16269
+ */
16270
+
16271
+ uniqBy: function (key) {
16272
+ var ret = emberA();
16273
+ var seen = new _emberMetalEmpty_object.default();
16274
+
16275
+ this.forEach(function (item) {
16276
+ var guid = _emberMetalUtils.guidFor(_emberMetalProperty_get.get(item, key));
16277
+ if (!(guid in seen)) {
16278
+ seen[guid] = true;
16279
+ ret.push(item);
16280
+ }
16281
+ });
16282
+
16283
+ return ret;
16284
+ }
16285
+ });
16286
+ }
16287
+
16288
+ exports.default = Enumerable;
16109
16289
  });
16110
16290
  enifed('ember-runtime/mixins/evented', ['exports', 'ember-metal/mixin', 'ember-metal/events'], function (exports, _emberMetalMixin, _emberMetalEvents) {
16111
16291
  'use strict';
@@ -18508,11 +18688,18 @@ enifed('ember-runtime/system/core_object', ['exports', 'ember-metal/debug', 'emb
18508
18688
  var extension = hasToStringExtension ? ':' + this.toStringExtension() : '';
18509
18689
  var ret = '<' + this.constructor.toString() + ':' + _emberMetalUtils.guidFor(this) + extension + '>';
18510
18690
 
18691
+ this.toString = makeToString(ret);
18511
18692
  return ret;
18512
18693
  }, _Mixin$create));
18513
18694
 
18514
18695
  CoreObject.PrototypeMixin.ownerConstructor = CoreObject;
18515
18696
 
18697
+ function makeToString(ret) {
18698
+ return function () {
18699
+ return ret;
18700
+ };
18701
+ }
18702
+
18516
18703
  CoreObject.__super__ = null;
18517
18704
 
18518
18705
  var ClassMixinProps = {
@@ -19528,7 +19715,7 @@ enifed('ember-runtime/system/native_array', ['exports', 'ember-metal/core', 'emb
19528
19715
  Array support Ember.MutableArray and all of its dependent APIs. Unless you
19529
19716
  have `Ember.EXTEND_PROTOTYPES` or `Ember.EXTEND_PROTOTYPES.Array` set to
19530
19717
  false, this will be applied automatically. Otherwise you can apply the mixin
19531
- at anytime by calling `Ember.NativeArray.activate`.
19718
+ at anytime by calling `Ember.NativeArray.apply(Array.prototype)`.
19532
19719
 
19533
19720
  @class NativeArray
19534
19721
  @namespace Ember
@@ -19623,12 +19810,13 @@ enifed('ember-runtime/system/native_array', ['exports', 'ember-metal/core', 'emb
19623
19810
  Example
19624
19811
 
19625
19812
  ```js
19626
- var Pagination = Ember.CollectionView.extend({
19813
+ export default Ember.Component.extend({
19627
19814
  tagName: 'ul',
19628
19815
  classNames: ['pagination'],
19629
19816
 
19630
- init: function() {
19817
+ init() {
19631
19818
  this._super(...arguments);
19819
+
19632
19820
  if (!this.get('content')) {
19633
19821
  this.set('content', Ember.A());
19634
19822
  }