ember-source 2.4.6 → 2.5.0.beta.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -6,7 +6,7 @@
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.6
9
+ * @version 2.5.0-beta.1
10
10
  */
11
11
 
12
12
  var enifed, requireModule, require, requirejs, Ember;
@@ -1236,7 +1236,7 @@ enifed('container/container', ['exports', 'ember-metal/core', 'ember-metal/debug
1236
1236
  twitter2 instanceof Twitter; // => true
1237
1237
  twitter === twitter2; //=> true
1238
1238
  ```
1239
- If singletons are not wanted an optional flag can be provided at lookup.
1239
+ If singletons are not wanted, an optional flag can be provided at lookup.
1240
1240
  ```javascript
1241
1241
  var registry = new Registry();
1242
1242
  var container = registry.container();
@@ -1258,7 +1258,7 @@ enifed('container/container', ['exports', 'ember-metal/core', 'ember-metal/debug
1258
1258
  },
1259
1259
 
1260
1260
  /**
1261
- Given a fullName return the corresponding factory.
1261
+ Given a fullName, return the corresponding factory.
1262
1262
  @private
1263
1263
  @method lookupFactory
1264
1264
  @param {String} fullName
@@ -1319,9 +1319,19 @@ enifed('container/container', ['exports', 'ember-metal/core', 'ember-metal/debug
1319
1319
  return container.registry.getOption(fullName, 'singleton') !== false;
1320
1320
  }
1321
1321
 
1322
- function lookup(container, _fullName, _options) {
1323
- var options = _options || {};
1324
- var fullName = _fullName;
1322
+ function lookup(container, fullName) {
1323
+ var options = arguments.length <= 2 || arguments[2] === undefined ? {} : arguments[2];
1324
+
1325
+ if (_emberMetalFeatures.default('ember-htmlbars-local-lookup')) {
1326
+ if (options.source) {
1327
+ fullName = container.registry.expandLocalLookup(fullName, options);
1328
+
1329
+ // if expandLocalLookup returns falsey, we do not support local lookup
1330
+ if (!fullName) {
1331
+ return;
1332
+ }
1333
+ }
1334
+ }
1325
1335
 
1326
1336
  if (container.cache[fullName] !== undefined && options.singleton !== false) {
1327
1337
  return container.cache[fullName];
@@ -1376,10 +1386,21 @@ enifed('container/container', ['exports', 'ember-metal/core', 'ember-metal/debug
1376
1386
  return hash;
1377
1387
  }
1378
1388
 
1379
- function factoryFor(container, _fullName, _options) {
1380
- var options = _options || {};
1389
+ function factoryFor(container, fullName) {
1390
+ var options = arguments.length <= 2 || arguments[2] === undefined ? {} : arguments[2];
1391
+
1381
1392
  var registry = container.registry;
1382
- var fullName = _fullName;
1393
+
1394
+ if (_emberMetalFeatures.default('ember-htmlbars-local-lookup')) {
1395
+ if (options.source) {
1396
+ fullName = registry.expandLocalLookup(fullName, options);
1397
+
1398
+ // if expandLocalLookup returns falsey, we do not support local lookup
1399
+ if (!fullName) {
1400
+ return;
1401
+ }
1402
+ }
1403
+ }
1383
1404
 
1384
1405
  var cache = container.factoryCache;
1385
1406
  if (cache[fullName]) {
@@ -1568,22 +1589,18 @@ enifed('container/container', ['exports', 'ember-metal/core', 'ember-metal/debug
1568
1589
 
1569
1590
  exports.default = Container;
1570
1591
  });
1571
-
1572
- // if expandLocalLookup returns falsey, we do not support local lookup
1573
-
1574
- // if expandLocalLookup returns falsey, we do not support local lookup
1575
1592
  enifed('container/index', ['exports', 'ember-metal/core', 'container/registry', 'container/container', 'container/owner'], function (exports, _emberMetalCore, _containerRegistry, _containerContainer, _containerOwner) {
1576
1593
  'use strict';
1577
1594
 
1578
1595
  /*
1579
- Public api for the container is still in flux.
1580
- The public api, specified on the application namespace should be considered the stable api.
1596
+ Public API for the container is still in flux.
1597
+ The public API, specified on the application namespace should be considered the stable API.
1581
1598
  // @module container
1582
1599
  @private
1583
1600
  */
1584
1601
 
1585
1602
  /*
1586
- Flag to enable/disable model factory injections (disabled by default)
1603
+ Flag to enable/disable model factory injections (disabled by default).
1587
1604
  If model factory injections are enabled, models should not be
1588
1605
  accessed globally (only through `container.lookupFactory('model:modelName'))`);
1589
1606
  */
@@ -1645,8 +1662,8 @@ enifed('container/owner', ['exports', 'ember-metal/symbol'], function (exports,
1645
1662
  ```
1646
1663
 
1647
1664
  @method getOwner
1648
- @param {Object} object A object with an owner.
1649
- @return {Object} an owner object.
1665
+ @param {Object} object An object with an owner.
1666
+ @return {Object} An owner object.
1650
1667
  @for Ember
1651
1668
  @public
1652
1669
  */
@@ -1660,8 +1677,8 @@ enifed('container/owner', ['exports', 'ember-metal/symbol'], function (exports,
1660
1677
  useful in some testing cases.
1661
1678
 
1662
1679
  @method setOwner
1663
- @param {Object} object A object with an owner.
1664
- @return {Object} an owner object.
1680
+ @param {Object} object An object with an owner.
1681
+ @return {Object} An owner object.
1665
1682
  @for Ember
1666
1683
  @public
1667
1684
  */
@@ -1821,7 +1838,9 @@ enifed('container/registry', ['exports', 'ember-metal/features', 'ember-metal/de
1821
1838
  @param {Function} factory
1822
1839
  @param {Object} options
1823
1840
  */
1824
- register: function (fullName, factory, options) {
1841
+ register: function (fullName, factory) {
1842
+ var options = arguments.length <= 2 || arguments[2] === undefined ? {} : arguments[2];
1843
+
1825
1844
  _emberMetalDebug.assert('fullName must be a proper full name', this.validateFullName(fullName));
1826
1845
 
1827
1846
  if (factory === undefined) {
@@ -1836,7 +1855,7 @@ enifed('container/registry', ['exports', 'ember-metal/features', 'ember-metal/de
1836
1855
 
1837
1856
  delete this._failCache[normalizedName];
1838
1857
  this.registrations[normalizedName] = factory;
1839
- this._options[normalizedName] = options || {};
1858
+ this._options[normalizedName] = options;
1840
1859
  },
1841
1860
 
1842
1861
  /**
@@ -1984,6 +2003,9 @@ enifed('container/registry', ['exports', 'ember-metal/features', 'ember-metal/de
1984
2003
  _emberMetalDebug.assert('fullName must be a proper full name', this.validateFullName(fullName));
1985
2004
 
1986
2005
  var source = undefined;
2006
+ if (_emberMetalFeatures.default('ember-htmlbars-local-lookup')) {
2007
+ source = options && options.source && this.normalize(options.source);
2008
+ }
1987
2009
 
1988
2010
  return has(this, this.normalize(fullName), source);
1989
2011
  },
@@ -2027,8 +2049,9 @@ enifed('container/registry', ['exports', 'ember-metal/features', 'ember-metal/de
2027
2049
  @param {String} fullName
2028
2050
  @param {Object} options
2029
2051
  */
2030
- options: function (fullName, _options) {
2031
- var options = _options || {};
2052
+ options: function (fullName) {
2053
+ var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];
2054
+
2032
2055
  var normalizedName = this.normalize(fullName);
2033
2056
  this._options[normalizedName] = options;
2034
2057
  },
@@ -2350,6 +2373,40 @@ enifed('container/registry', ['exports', 'ember-metal/features', 'ember-metal/de
2350
2373
  };
2351
2374
  }
2352
2375
 
2376
+ if (_emberMetalFeatures.default('ember-htmlbars-local-lookup')) {
2377
+ /**
2378
+ Given a fullName and a source fullName returns the fully resolved
2379
+ fullName. Used to allow for local lookup.
2380
+ ```javascript
2381
+ var registry = new Registry();
2382
+ // the twitter factory is added to the module system
2383
+ registry.expandLocalLookup('component:post-title', { source: 'template:post' }) // => component:post/post-title
2384
+ ```
2385
+ @private
2386
+ @method expandLocalLookup
2387
+ @param {String} fullName
2388
+ @param {Object} [options]
2389
+ @param {String} [options.source] the fullname of the request source (used for local lookups)
2390
+ @return {String} fullName
2391
+ */
2392
+ Registry.prototype.expandLocalLookup = function Registry_expandLocalLookup(fullName, options) {
2393
+ if (this.resolver && this.resolver.expandLocalLookup) {
2394
+ _emberMetalDebug.assert('fullName must be a proper full name', this.validateFullName(fullName));
2395
+ _emberMetalDebug.assert('options.source must be provided to expandLocalLookup', options && options.source);
2396
+ _emberMetalDebug.assert('options.source must be a proper full name', this.validateFullName(options.source));
2397
+
2398
+ var normalizedFullName = this.normalize(fullName);
2399
+ var normalizedSource = this.normalize(options.source);
2400
+
2401
+ return expandLocalLookup(this, normalizedFullName, normalizedSource);
2402
+ } else if (this.fallback) {
2403
+ return this.fallback.expandLocalLookup(fullName, options);
2404
+ } else {
2405
+ return null;
2406
+ }
2407
+ };
2408
+ }
2409
+
2353
2410
  function expandLocalLookup(registry, normalizedName, normalizedSource) {
2354
2411
  var cache = registry._localLookupCache;
2355
2412
  var normalizedNameCache = cache[normalizedName];
@@ -2370,6 +2427,18 @@ enifed('container/registry', ['exports', 'ember-metal/features', 'ember-metal/de
2370
2427
  }
2371
2428
 
2372
2429
  function resolve(registry, normalizedName, options) {
2430
+ if (_emberMetalFeatures.default('ember-htmlbars-local-lookup')) {
2431
+ if (options && options.source) {
2432
+ // when `source` is provided expand normalizedName
2433
+ // and source into the full normalizedName
2434
+ normalizedName = registry.expandLocalLookup(normalizedName, options);
2435
+
2436
+ // if expandLocalLookup returns falsey, we do not support local lookup
2437
+ if (!normalizedName) {
2438
+ return;
2439
+ }
2440
+ }
2441
+ }
2373
2442
 
2374
2443
  var cached = registry._resolveCache[normalizedName];
2375
2444
  if (cached !== undefined) {
@@ -2404,27 +2473,6 @@ enifed('container/registry', ['exports', 'ember-metal/features', 'ember-metal/de
2404
2473
 
2405
2474
  exports.default = Registry;
2406
2475
  });
2407
-
2408
- /**
2409
- Given a fullName and a source fullName returns the fully resolved
2410
- fullName. Used to allow for local lookup.
2411
- ```javascript
2412
- var registry = new Registry();
2413
- // the twitter factory is added to the module system
2414
- registry.expandLocalLookup('component:post-title', { source: 'template:post' }) // => component:post/post-title
2415
- ```
2416
- @private
2417
- @method expandLocalLookup
2418
- @param {String} fullName
2419
- @param {Object} [options]
2420
- @param {String} [options.source] the fullname of the request source (used for local lookups)
2421
- @return {String} fullName
2422
- */
2423
-
2424
- // when `source` is provided expand normalizedName
2425
- // and source into the full normalizedName
2426
-
2427
- // if expandLocalLookup returns falsey, we do not support local lookup
2428
2476
  enifed('dag-map/platform', ['exports'], function (exports) {
2429
2477
  'use strict';
2430
2478
 
@@ -3695,6 +3743,15 @@ enifed('ember-application/index', ['exports', 'ember-metal/core', 'ember-metal/f
3695
3743
  _emberMetalCore.default.Resolver = _emberApplicationSystemResolver.Resolver;
3696
3744
  _emberMetalCore.default.DefaultResolver = _emberApplicationSystemResolver.default;
3697
3745
 
3746
+ if (_emberMetalFeatures.default('ember-application-engines')) {
3747
+ _emberMetalCore.default.Engine = _emberApplicationSystemEngine.default;
3748
+
3749
+ // Expose `EngineInstance` and `ApplicationInstance` for easy overriding.
3750
+ // Reanalyze whether to continue exposing these after feature flag is removed.
3751
+ _emberMetalCore.default.EngineInstance = _emberApplicationSystemEngineInstance.default;
3752
+ _emberMetalCore.default.ApplicationInstance = _emberApplicationSystemApplicationInstance.default;
3753
+ }
3754
+
3698
3755
  _emberRuntimeSystemLazy_load.runLoadHooks('Ember.Application', _emberApplicationSystemApplication.default);
3699
3756
  });
3700
3757
 
@@ -3702,10 +3759,7 @@ enifed('ember-application/index', ['exports', 'ember-metal/core', 'ember-metal/f
3702
3759
  @module ember
3703
3760
  @submodule ember-application
3704
3761
  */
3705
-
3706
- // Expose `EngineInstance` and `ApplicationInstance` for easy overriding.
3707
- // Reanalyze whether to continue exposing these after feature flag is removed.
3708
- enifed('ember-application/system/application-instance', ['exports', 'ember-metal/debug', 'ember-metal/features', 'ember-metal/property_get', 'ember-metal/property_set', 'ember-metal/run_loop', 'ember-metal/computed', 'ember-htmlbars/system/dom-helper', 'ember-runtime/mixins/registry_proxy', 'ember-metal-views/renderer', 'ember-metal/assign', 'ember-metal/environment', 'ember-runtime/ext/rsvp', 'ember-views/system/jquery', 'ember-application/system/engine-instance'], function (exports, _emberMetalDebug, _emberMetalFeatures, _emberMetalProperty_get, _emberMetalProperty_set, _emberMetalRun_loop, _emberMetalComputed, _emberHtmlbarsSystemDomHelper, _emberRuntimeMixinsRegistry_proxy, _emberMetalViewsRenderer, _emberMetalAssign, _emberMetalEnvironment, _emberRuntimeExtRsvp, _emberViewsSystemJquery, _emberApplicationSystemEngineInstance) {
3762
+ enifed('ember-application/system/application-instance', ['exports', 'ember-metal/debug', 'ember-metal/features', 'ember-metal/property_get', 'ember-metal/property_set', 'ember-metal/run_loop', 'ember-metal/computed', 'ember-htmlbars/system/dom-helper', 'ember-runtime/mixins/registry_proxy', 'ember-metal-views', 'ember-metal/assign', 'ember-metal/environment', 'ember-runtime/ext/rsvp', 'ember-views/system/jquery', 'ember-application/system/engine-instance'], function (exports, _emberMetalDebug, _emberMetalFeatures, _emberMetalProperty_get, _emberMetalProperty_set, _emberMetalRun_loop, _emberMetalComputed, _emberHtmlbarsSystemDomHelper, _emberRuntimeMixinsRegistry_proxy, _emberMetalViews, _emberMetalAssign, _emberMetalEnvironment, _emberRuntimeExtRsvp, _emberViewsSystemJquery, _emberApplicationSystemEngineInstance) {
3709
3763
  /**
3710
3764
  @module ember
3711
3765
  @submodule ember-application
@@ -3837,7 +3891,7 @@ enifed('ember-application/system/application-instance', ['exports', 'ember-metal
3837
3891
 
3838
3892
  registry.register('renderer:-dom', {
3839
3893
  create: function () {
3840
- return new _emberMetalViewsRenderer.default(new _emberHtmlbarsSystemDomHelper.default(options.document), options.isInteractive);
3894
+ return new _emberMetalViews.Renderer(new _emberHtmlbarsSystemDomHelper.default(options.document), { destinedForDOM: options.isInteractive });
3841
3895
  }
3842
3896
  });
3843
3897
 
@@ -4195,27 +4249,15 @@ enifed('ember-application/system/application-instance', ['exports', 'ember-metal
4195
4249
 
4196
4250
  exports.default = ApplicationInstance;
4197
4251
  });
4198
- enifed('ember-application/system/application', ['exports', 'ember-metal', 'ember-metal/debug', 'ember-metal/features', 'ember-metal/property_get', 'ember-runtime/system/lazy_load', 'ember-metal/run_loop', 'ember-runtime/controllers/controller', 'ember-metal-views/renderer', 'ember-htmlbars/system/dom-helper', 'ember-views/views/select', 'ember-routing-views/views/outlet', 'ember-views/views/view', 'ember-views/system/event_dispatcher', 'ember-views/system/jquery', 'ember-routing/system/route', 'ember-routing/system/router', 'ember-routing/location/hash_location', 'ember-routing/location/history_location', 'ember-routing/location/auto_location', 'ember-routing/location/none_location', 'ember-routing/system/cache', 'ember-application/system/application-instance', 'ember-views/views/text_field', 'ember-views/views/text_area', 'ember-views/views/checkbox', 'ember-views/views/legacy_each_view', 'ember-routing-views/components/link-to', 'ember-routing/services/routing', 'ember-extension-support/container_debug_adapter', 'ember-runtime/mixins/registry_proxy', 'ember-metal/environment', 'ember-runtime/ext/rsvp', 'ember-application/system/engine'], function (exports, _emberMetal, _emberMetalDebug, _emberMetalFeatures, _emberMetalProperty_get, _emberRuntimeSystemLazy_load, _emberMetalRun_loop, _emberRuntimeControllersController, _emberMetalViewsRenderer, _emberHtmlbarsSystemDomHelper, _emberViewsViewsSelect, _emberRoutingViewsViewsOutlet, _emberViewsViewsView, _emberViewsSystemEvent_dispatcher, _emberViewsSystemJquery, _emberRoutingSystemRoute, _emberRoutingSystemRouter, _emberRoutingLocationHash_location, _emberRoutingLocationHistory_location, _emberRoutingLocationAuto_location, _emberRoutingLocationNone_location, _emberRoutingSystemCache, _emberApplicationSystemApplicationInstance, _emberViewsViewsText_field, _emberViewsViewsText_area, _emberViewsViewsCheckbox, _emberViewsViewsLegacy_each_view, _emberRoutingViewsComponentsLinkTo, _emberRoutingServicesRouting, _emberExtensionSupportContainer_debug_adapter, _emberRuntimeMixinsRegistry_proxy, _emberMetalEnvironment, _emberRuntimeExtRsvp, _emberApplicationSystemEngine) {
4252
+ enifed('ember-application/system/application', ['exports', 'ember-metal', 'ember-metal/debug', 'ember-metal/features', 'ember-metal/property_get', 'ember-runtime/system/lazy_load', 'ember-metal/run_loop', 'ember-runtime/controllers/controller', 'ember-metal-views', 'ember-htmlbars/system/dom-helper', 'ember-views/views/select', 'ember-routing-views/views/outlet', 'ember-views/views/view', 'ember-views/system/event_dispatcher', 'ember-views/system/jquery', 'ember-routing/system/route', 'ember-routing/system/router', 'ember-routing/location/hash_location', 'ember-routing/location/history_location', 'ember-routing/location/auto_location', 'ember-routing/location/none_location', 'ember-routing/system/cache', 'ember-application/system/application-instance', 'ember-views/views/text_field', 'ember-views/views/text_area', 'ember-views/views/checkbox', 'ember-views/views/legacy_each_view', 'ember-routing-views/components/link-to', 'ember-routing/services/routing', 'ember-extension-support/container_debug_adapter', 'ember-runtime/mixins/registry_proxy', 'ember-metal/environment', 'ember-runtime/ext/rsvp', 'ember-application/system/engine'], function (exports, _emberMetal, _emberMetalDebug, _emberMetalFeatures, _emberMetalProperty_get, _emberRuntimeSystemLazy_load, _emberMetalRun_loop, _emberRuntimeControllersController, _emberMetalViews, _emberHtmlbarsSystemDomHelper, _emberViewsViewsSelect, _emberRoutingViewsViewsOutlet, _emberViewsViewsView, _emberViewsSystemEvent_dispatcher, _emberViewsSystemJquery, _emberRoutingSystemRoute, _emberRoutingSystemRouter, _emberRoutingLocationHash_location, _emberRoutingLocationHistory_location, _emberRoutingLocationAuto_location, _emberRoutingLocationNone_location, _emberRoutingSystemCache, _emberApplicationSystemApplicationInstance, _emberViewsViewsText_field, _emberViewsViewsText_area, _emberViewsViewsCheckbox, _emberViewsViewsLegacy_each_view, _emberRoutingViewsComponentsLinkTo, _emberRoutingServicesRouting, _emberExtensionSupportContainer_debug_adapter, _emberRuntimeMixinsRegistry_proxy, _emberMetalEnvironment, _emberRuntimeExtRsvp, _emberApplicationSystemEngine) {
4199
4253
  /**
4200
4254
  @module ember
4201
4255
  @submodule ember-application
4202
4256
  */
4203
4257
  'use strict';
4204
4258
 
4205
- exports._resetLegacyAddonWarnings = _resetLegacyAddonWarnings;
4206
-
4207
4259
  var librariesRegistered = false;
4208
4260
 
4209
- var warnedAboutLegacyViewAddon = false;
4210
- var warnedAboutLegacyControllerAddon = false;
4211
-
4212
- // For testing
4213
-
4214
- function _resetLegacyAddonWarnings() {
4215
- warnedAboutLegacyViewAddon = false;
4216
- warnedAboutLegacyControllerAddon = false;
4217
- }
4218
-
4219
4261
  /**
4220
4262
  An instance of `Ember.Application` is the starting point for every Ember
4221
4263
  application. It helps to instantiate, initialize and coordinate the many
@@ -4720,18 +4762,6 @@ enifed('ember-application/system/application', ['exports', 'ember-metal', 'ember
4720
4762
  return;
4721
4763
  }
4722
4764
 
4723
- if (_emberMetal.default.ENV._ENABLE_LEGACY_VIEW_SUPPORT && !warnedAboutLegacyViewAddon) {
4724
- _emberMetalDebug.deprecate('Support for the `ember-legacy-views` addon will end soon, please remove it from your application.', false, { id: 'ember-legacy-views', until: '2.6.0', url: 'http://emberjs.com/deprecations/v1.x/#toc_ember-view' });
4725
-
4726
- warnedAboutLegacyViewAddon = true;
4727
- }
4728
-
4729
- if (_emberMetal.default.ENV._ENABLE_LEGACY_CONTROLLER_SUPPORT && !warnedAboutLegacyControllerAddon) {
4730
- _emberMetalDebug.deprecate('Support for the `ember-legacy-controllers` addon will end soon, please remove it from your application.', false, { id: 'ember-legacy-controllers', until: '2.6.0', url: 'http://emberjs.com/deprecations/v1.x/#toc_objectcontroller' });
4731
-
4732
- warnedAboutLegacyControllerAddon = true;
4733
- }
4734
-
4735
4765
  // Even though this returns synchronously, we still need to make sure the
4736
4766
  // boot promise exists for book-keeping purposes: if anything went wrong in
4737
4767
  // the boot process, we need to store the error as a rejection on the boot
@@ -5112,7 +5142,7 @@ enifed('ember-application/system/application', ['exports', 'ember-metal', 'ember
5112
5142
  registry.register('controller:basic', _emberRuntimeControllersController.default, { instantiate: false });
5113
5143
 
5114
5144
  registry.register('renderer:-dom', { create: function () {
5115
- return new _emberMetalViewsRenderer.default(new _emberHtmlbarsSystemDomHelper.default());
5145
+ return new _emberMetalViews.Renderer(new _emberHtmlbarsSystemDomHelper.default());
5116
5146
  } });
5117
5147
 
5118
5148
  registry.injection('view', 'renderer', 'renderer:-dom');
@@ -5228,7 +5258,6 @@ enifed('ember-application/system/engine-instance', ['exports', 'ember-runtime/sy
5228
5258
  @extends Ember.Object
5229
5259
  @uses RegistryProxyMixin
5230
5260
  @uses ContainerProxyMixin
5231
- @category ember-application-engines
5232
5261
  */
5233
5262
 
5234
5263
  var EngineInstance = _emberRuntimeSystemObject.default.extend(_emberRuntimeMixinsRegistry_proxy.default, _emberRuntimeMixinsContainer_proxy.default, {
@@ -5315,7 +5344,6 @@ enifed('ember-application/system/engine', ['exports', 'ember-runtime/system/name
5315
5344
  @namespace Ember
5316
5345
  @extends Ember.Namespace
5317
5346
  @uses RegistryProxy
5318
- @category ember-application-engines
5319
5347
  @public
5320
5348
  */
5321
5349
  var Engine = _emberRuntimeSystemNamespace.default.extend(_emberRuntimeMixinsRegistry_proxy.default, {
@@ -6237,10 +6265,8 @@ enifed('ember-debug/deprecate', ['exports', 'ember-metal/core', 'ember-metal/err
6237
6265
 
6238
6266
  /**
6239
6267
  Display a deprecation warning with the provided message and a stack trace
6240
- (Chrome and Firefox only).
6241
-
6242
- * In a production build, this method is defined as an empty function (NOP).
6243
- Uses of this method in Ember itself are stripped from the ember.prod.js build.
6268
+ (Chrome and Firefox only). Ember build tools will remove any calls to
6269
+ `Ember.deprecate()` when doing a production build.
6244
6270
 
6245
6271
  @method deprecate
6246
6272
  @param {String} message A description of the deprecation.
@@ -6294,7 +6320,7 @@ enifed('ember-debug/handlers', ['exports', 'ember-debug/is-plain-function', 'emb
6294
6320
  exports.HANDLERS = HANDLERS;
6295
6321
 
6296
6322
  function generateTestAsFunctionDeprecation(source) {
6297
- return 'Calling `' + source + '` with a function argument is deprecated. Please ' + 'use `!!Constructor` for constructors, or an `IIFE` to compute the test for deprecation. ' + 'In a future version functions will be treated as truthy values instead of being executed.';
6323
+ return 'Calling `' + source + '` with a function argument is deprecated. Please ' + 'use `!!Constructor` for constructors, or an `IIFE` to compute the test for deprecation. ' + 'In a future version, functions will be treated as truthy values instead of being executed.';
6298
6324
  }
6299
6325
 
6300
6326
  function normalizeTest(test, source) {
@@ -6347,10 +6373,9 @@ enifed('ember-debug/index', ['exports', 'ember-metal/core', 'ember-metal/debug',
6347
6373
  */
6348
6374
 
6349
6375
  /**
6350
- Define an assertion that will throw an exception if the condition is not met.
6351
-
6352
- * In a production build, this method is defined as an empty function (NOP).
6353
- Uses of this method in Ember itself are stripped from the ember.prod.js build.
6376
+ Define an assertion that will throw an exception if the condition is not
6377
+ met. Ember build tools will remove any calls to `Ember.assert()` when
6378
+ doing a production build. Example:
6354
6379
 
6355
6380
  ```javascript
6356
6381
  // Test for truthiness
@@ -6384,10 +6409,8 @@ enifed('ember-debug/index', ['exports', 'ember-metal/core', 'ember-metal/debug',
6384
6409
  });
6385
6410
 
6386
6411
  /**
6387
- Display a debug notice.
6388
-
6389
- * In a production build, this method is defined as an empty function (NOP).
6390
- Uses of this method in Ember itself are stripped from the ember.prod.js build.
6412
+ Display a debug notice. Ember build tools will remove any calls to
6413
+ `Ember.debug()` when doing a production build.
6391
6414
 
6392
6415
  ```javascript
6393
6416
  Ember.debug('I\'m a debug notice!');
@@ -6404,9 +6427,6 @@ enifed('ember-debug/index', ['exports', 'ember-metal/core', 'ember-metal/debug',
6404
6427
  /**
6405
6428
  Display an info notice.
6406
6429
 
6407
- * In a production build, this method is defined as an empty function (NOP).
6408
- Uses of this method in Ember itself are stripped from the ember.prod.js build.
6409
-
6410
6430
  @method info
6411
6431
  @private
6412
6432
  */
@@ -6420,7 +6440,8 @@ enifed('ember-debug/index', ['exports', 'ember-metal/core', 'ember-metal/debug',
6420
6440
  Display a deprecation warning with the provided message and a stack trace
6421
6441
  (Chrome and Firefox only) when the assigned method is called.
6422
6442
 
6423
- * In a production build, this method is defined as an empty function (NOP).
6443
+ Ember build tools will not remove calls to `Ember.deprecateFunc()`, though
6444
+ no warnings will be shown in production.
6424
6445
 
6425
6446
  ```javascript
6426
6447
  Ember.oldMethod = Ember.deprecateFunc('Please use the new, updated method', Ember.newMethod);
@@ -6430,7 +6451,7 @@ enifed('ember-debug/index', ['exports', 'ember-metal/core', 'ember-metal/debug',
6430
6451
  @param {String} message A description of the deprecation.
6431
6452
  @param {Object} [options] The options object for Ember.deprecate.
6432
6453
  @param {Function} func The new function called to replace its deprecated counterpart.
6433
- @return {Function} a new function that wrapped the original function with a deprecation warning
6454
+ @return {Function} A new function that wraps the original function with a deprecation warning
6434
6455
  @private
6435
6456
  */
6436
6457
  _emberMetalDebug.setDebugFunction('deprecateFunc', function deprecateFunc() {
@@ -6471,10 +6492,8 @@ enifed('ember-debug/index', ['exports', 'ember-metal/core', 'ember-metal/debug',
6471
6492
  });
6472
6493
 
6473
6494
  /**
6474
- Run a function meant for debugging.
6475
-
6476
- * In a production build, this method is defined as an empty function (NOP).
6477
- Uses of this method in Ember itself are stripped from the ember.prod.js build.
6495
+ Run a function meant for debugging. Ember build tools will remove any calls to
6496
+ `Ember.runInDebug()` when doing a production build.
6478
6497
 
6479
6498
  ```javascript
6480
6499
  Ember.runInDebug(() => {
@@ -6514,18 +6533,14 @@ enifed('ember-debug/index', ['exports', 'ember-metal/core', 'ember-metal/debug',
6514
6533
  @return {void}
6515
6534
  */
6516
6535
 
6517
- function _warnIfUsingStrippedFeatureFlags(FEATURES, knownFeatures, featuresWereStripped) {
6536
+ function _warnIfUsingStrippedFeatureFlags(FEATURES, featuresWereStripped) {
6518
6537
  if (featuresWereStripped) {
6519
6538
  _emberMetalDebug.warn('Ember.ENV.ENABLE_OPTIONAL_FEATURES is only available in canary builds.', !_emberMetalCore.default.ENV.ENABLE_OPTIONAL_FEATURES, { id: 'ember-debug.feature-flag-with-features-stripped' });
6520
6539
 
6521
- var keys = Object.keys(FEATURES || {});
6522
- for (var i = 0; i < keys.length; i++) {
6523
- var key = keys[i];
6524
- if (key === 'isEnabled' || !(key in knownFeatures)) {
6525
- continue;
6540
+ for (var key in FEATURES) {
6541
+ if (FEATURES.hasOwnProperty(key) && key !== 'isEnabled') {
6542
+ _emberMetalDebug.warn('FEATURE["' + key + '"] is set as enabled, but FEATURE flags are only available in canary builds.', !FEATURES[key], { id: 'ember-debug.feature-flag-with-features-stripped' });
6526
6543
  }
6527
-
6528
- _emberMetalDebug.warn('FEATURE["' + key + '"] is set as enabled, but FEATURE flags are only available in canary builds.', !FEATURES[key], { id: 'ember-debug.feature-flag-with-features-stripped' });
6529
6544
  }
6530
6545
  }
6531
6546
  }
@@ -6535,8 +6550,12 @@ enifed('ember-debug/index', ['exports', 'ember-metal/core', 'ember-metal/debug',
6535
6550
  _emberMetalFeatures.FEATURES['features-stripped-test'] = true;
6536
6551
  var featuresWereStripped = true;
6537
6552
 
6553
+ if (_emberMetalFeatures.default('features-stripped-test')) {
6554
+ exports.featuresWereStripped = featuresWereStripped = false;
6555
+ }
6556
+
6538
6557
  delete _emberMetalFeatures.FEATURES['features-stripped-test'];
6539
- _warnIfUsingStrippedFeatureFlags(_emberMetalCore.default.ENV.FEATURES, _emberMetalFeatures.KNOWN_FEATURES, featuresWereStripped);
6558
+ _warnIfUsingStrippedFeatureFlags(_emberMetalCore.default.ENV.FEATURES, featuresWereStripped);
6540
6559
 
6541
6560
  // Inform the developer about the Ember Inspector if not installed.
6542
6561
  var isFirefox = _emberMetalEnvironment.default.isFirefox;
@@ -6581,18 +6600,18 @@ enifed('ember-debug/index', ['exports', 'ember-metal/core', 'ember-metal/debug',
6581
6600
  ```
6582
6601
  The handler function takes the following arguments:
6583
6602
  <ul>
6584
- <li> <code>message</code> - The message received from the deprecation call. </li>
6603
+ <li> <code>message</code> - The message received from the deprecation call.</li>
6585
6604
  <li> <code>options</code> - An object passed in with the deprecation call containing additional information including:</li>
6586
6605
  <ul>
6587
- <li> <code>id</code> - an id of the deprecation in the form of <code>package-name.specific-deprecation</code>.</li>
6588
- <li> <code>until</code> - is the version number Ember the feature and deprecation will be removed in.</li>
6606
+ <li> <code>id</code> - An id of the deprecation in the form of <code>package-name.specific-deprecation</code>.</li>
6607
+ <li> <code>until</code> - The Ember version number the feature and deprecation will be removed in.</li>
6589
6608
  </ul>
6590
- <li> <code>next</code> - a function that calls into the previously registered handler.</li>
6609
+ <li> <code>next</code> - A function that calls into the previously registered handler.</li>
6591
6610
  </ul>
6592
6611
  @public
6593
6612
  @static
6594
6613
  @method registerDeprecationHandler
6595
- @param handler {Function} a function to handle deprecation calls
6614
+ @param handler {Function} A function to handle deprecation calls.
6596
6615
  @since 2.1.0
6597
6616
  */
6598
6617
  _emberMetalCore.default.Debug.registerDeprecationHandler = _emberDebugDeprecate.registerHandler;
@@ -6610,14 +6629,14 @@ enifed('ember-debug/index', ['exports', 'ember-metal/core', 'ember-metal/debug',
6610
6629
  <li> <code>message</code> - The message received from the warn call. </li>
6611
6630
  <li> <code>options</code> - An object passed in with the warn call containing additional information including:</li>
6612
6631
  <ul>
6613
- <li> <code>id</code> - an id of the warning in the form of <code>package-name.specific-warning</code>.</li>
6632
+ <li> <code>id</code> - An id of the warning in the form of <code>package-name.specific-warning</code>.</li>
6614
6633
  </ul>
6615
- <li> <code>next</code> - a function that calls into the previously registered handler.</li>
6634
+ <li> <code>next</code> - A function that calls into the previously registered handler.</li>
6616
6635
  </ul>
6617
6636
  @public
6618
6637
  @static
6619
6638
  @method registerWarnHandler
6620
- @param handler {Function} a function to handle warnings
6639
+ @param handler {Function} A function to handle warnings.
6621
6640
  @since 2.1.0
6622
6641
  */
6623
6642
  _emberMetalCore.default.Debug.registerWarnHandler = _emberDebugWarn.registerHandler;
@@ -6674,16 +6693,14 @@ enifed('ember-debug/warn', ['exports', 'ember-metal/logger', 'ember-metal/debug'
6674
6693
  */
6675
6694
 
6676
6695
  /**
6677
- Display a warning with the provided message.
6678
-
6679
- * In a production build, this method is defined as an empty function (NOP).
6680
- Uses of this method in Ember itself are stripped from the ember.prod.js build.
6696
+ Display a warning with the provided message. Ember build tools will
6697
+ remove any calls to `Ember.warn()` when doing a production build.
6681
6698
 
6682
6699
  @method warn
6683
6700
  @param {String} message A warning to display.
6684
6701
  @param {Boolean} test An optional boolean. If falsy, the warning
6685
6702
  will be displayed.
6686
- @param {Object} options An ojbect that can be used to pass a unique
6703
+ @param {Object} options An object that can be used to pass a unique
6687
6704
  `id` for this warning. The `id` can be used by Ember debugging tools
6688
6705
  to change the behavior (raise, log, or silence) for that specific warning.
6689
6706
  The `id` should be namespaced by dots, e.g. "ember-debug.feature-flag-with-features-stripped"
@@ -6734,7 +6751,7 @@ enifed('ember-extension-support/container_debug_adapter', ['exports', 'ember-met
6734
6751
  * `catalogEntriesByType`
6735
6752
 
6736
6753
  The adapter will need to be registered
6737
- in the application's container as `container-debug-adapter:main`
6754
+ in the application's container as `container-debug-adapter:main`.
6738
6755
 
6739
6756
  Example:
6740
6757
 
@@ -6769,7 +6786,7 @@ enifed('ember-extension-support/container_debug_adapter', ['exports', 'ember-met
6769
6786
  Returns true if it is possible to catalog a list of available
6770
6787
  classes in the resolver for a given type.
6771
6788
  @method canCatalogEntriesByType
6772
- @param {String} type The type. e.g. "model", "controller", "route"
6789
+ @param {String} type The type. e.g. "model", "controller", "route".
6773
6790
  @return {boolean} whether a list is available for this type.
6774
6791
  @public
6775
6792
  */
@@ -6784,7 +6801,7 @@ enifed('ember-extension-support/container_debug_adapter', ['exports', 'ember-met
6784
6801
  /**
6785
6802
  Returns the available classes a given type.
6786
6803
  @method catalogEntriesByType
6787
- @param {String} type The type. e.g. "model", "controller", "route"
6804
+ @param {String} type The type. e.g. "model", "controller", "route".
6788
6805
  @return {Array} An array of strings.
6789
6806
  @public
6790
6807
  */
@@ -6843,7 +6860,7 @@ enifed('ember-extension-support/data_adapter', ['exports', 'ember-metal/property
6843
6860
  * `observeRecord`
6844
6861
 
6845
6862
  The adapter will need to be registered
6846
- in the application's container as `dataAdapter:main`
6863
+ in the application's container as `dataAdapter:main`.
6847
6864
 
6848
6865
  Example:
6849
6866
 
@@ -6879,7 +6896,7 @@ enifed('ember-extension-support/data_adapter', ['exports', 'ember-metal/property
6879
6896
  containerDebugAdapter: undefined,
6880
6897
 
6881
6898
  /**
6882
- Number of attributes to send
6899
+ The number of attributes to send
6883
6900
  as columns. (Enough to make the record
6884
6901
  identifiable).
6885
6902
  @private
@@ -6970,19 +6987,19 @@ enifed('ember-extension-support/data_adapter', ['exports', 'ember-metal/property
6970
6987
  Fetch the records of a given type and observe them for changes.
6971
6988
  @public
6972
6989
  @method watchRecords
6973
- @param {String} modelName The model name
6990
+ @param {String} modelName The model name.
6974
6991
  @param {Function} recordsAdded Callback to call to add records.
6975
6992
  Takes an array of objects containing wrapped records.
6976
6993
  The object should have the following properties:
6977
- columnValues: {Object} key and value of a table cell
6978
- object: {Object} the actual record object
6994
+ columnValues: {Object} The key and value of a table cell.
6995
+ object: {Object} The actual record object.
6979
6996
  @param {Function} recordsUpdated Callback to call when a record has changed.
6980
6997
  Takes an array of objects containing wrapped records.
6981
6998
  @param {Function} recordsRemoved Callback to call when a record has removed.
6982
6999
  Takes the following parameters:
6983
- index: the array index where the records were removed
6984
- count: the number of records removed
6985
- @return {Function} Method to call to remove all observers
7000
+ index: The array index where the records were removed.
7001
+ count: The number of records removed.
7002
+ @return {Function} Method to call to remove all observers.
6986
7003
  */
6987
7004
  watchRecords: function (modelName, recordsAdded, recordsUpdated, recordsRemoved) {
6988
7005
  var _this2 = this;
@@ -7048,11 +7065,11 @@ enifed('ember-extension-support/data_adapter', ['exports', 'ember-metal/property
7048
7065
  /**
7049
7066
  Detect whether a class is a model.
7050
7067
  Test that against the model class
7051
- of your persistence library
7068
+ of your persistence library.
7052
7069
  @private
7053
7070
  @method detect
7054
- @param {Class} klass The class to test
7055
- @return boolean Whether the class is a model class or not
7071
+ @param {Class} klass The class to test.
7072
+ @return boolean Whether the class is a model class or not.
7056
7073
  */
7057
7074
  detect: function (klass) {
7058
7075
  return false;
@@ -7062,10 +7079,10 @@ enifed('ember-extension-support/data_adapter', ['exports', 'ember-metal/property
7062
7079
  Get the columns for a given model type.
7063
7080
  @private
7064
7081
  @method columnsForType
7065
- @param {Class} type The model type
7082
+ @param {Class} type The model type.
7066
7083
  @return {Array} An array of columns of the following format:
7067
- name: {String} name of the column
7068
- desc: {String} Humanized description (what would show in a table column name)
7084
+ name: {String} The name of the column.
7085
+ desc: {String} Humanized description (what would show in a table column name).
7069
7086
  */
7070
7087
  columnsForType: function (type) {
7071
7088
  return _emberRuntimeSystemNative_array.A();
@@ -7075,9 +7092,9 @@ enifed('ember-extension-support/data_adapter', ['exports', 'ember-metal/property
7075
7092
  Adds observers to a model type class.
7076
7093
  @private
7077
7094
  @method observeModelType
7078
- @param {String} modelName The model type name
7095
+ @param {String} modelName The model type name.
7079
7096
  @param {Function} typesUpdated Called when a type is modified.
7080
- @return {Function} The function to call to remove observers
7097
+ @return {Function} The function to call to remove observers.
7081
7098
  */
7082
7099
 
7083
7100
  observeModelType: function (modelName, typesUpdated) {
@@ -7111,17 +7128,17 @@ enifed('ember-extension-support/data_adapter', ['exports', 'ember-metal/property
7111
7128
  Wraps a given model type and observes changes to it.
7112
7129
  @private
7113
7130
  @method wrapModelType
7114
- @param {Class} klass A model class
7115
- @param {String} modelName Name of the class
7116
- @return {Object} contains the wrapped type and the function to remove observers
7131
+ @param {Class} klass A model class.
7132
+ @param {String} modelName Name of the class.
7133
+ @return {Object} Contains the wrapped type and the function to remove observers
7117
7134
  Format:
7118
- type: {Object} the wrapped type
7135
+ type: {Object} The wrapped type.
7119
7136
  The wrapped type has the following format:
7120
- name: {String} name of the type
7121
- count: {Integer} number of records available
7122
- columns: {Columns} array of columns to describe the record
7123
- object: {Class} the actual Model type class
7124
- release: {Function} The function to remove observers
7137
+ name: {String} The name of the type.
7138
+ count: {Integer} The number of records available.
7139
+ columns: {Columns} An array of columns to describe the record.
7140
+ object: {Class} The actual Model type class.
7141
+ release: {Function} The function to remove observers.
7125
7142
  */
7126
7143
  wrapModelType: function (klass, name) {
7127
7144
  var records = this.getRecords(klass, name);
@@ -7141,7 +7158,7 @@ enifed('ember-extension-support/data_adapter', ['exports', 'ember-metal/property
7141
7158
  Fetches all models defined in the application.
7142
7159
  @private
7143
7160
  @method getModelTypes
7144
- @return {Array} Array of model types
7161
+ @return {Array} Array of model types.
7145
7162
  */
7146
7163
  getModelTypes: function () {
7147
7164
  var _this4 = this;
@@ -7155,7 +7172,7 @@ enifed('ember-extension-support/data_adapter', ['exports', 'ember-metal/property
7155
7172
  types = this._getObjectsOnNamespaces();
7156
7173
  }
7157
7174
 
7158
- // New adapters return strings instead of classes
7175
+ // New adapters return strings instead of classes.
7159
7176
  types = _emberRuntimeSystemNative_array.A(types).map(function (name) {
7160
7177
  return {
7161
7178
  klass: _this4._nameToClass(name),
@@ -7171,10 +7188,10 @@ enifed('ember-extension-support/data_adapter', ['exports', 'ember-metal/property
7171
7188
 
7172
7189
  /**
7173
7190
  Loops over all namespaces and all objects
7174
- attached to them
7191
+ attached to them.
7175
7192
  @private
7176
7193
  @method _getObjectsOnNamespaces
7177
- @return {Array} Array of model type strings
7194
+ @return {Array} Array of model type strings.
7178
7195
  */
7179
7196
  _getObjectsOnNamespaces: function () {
7180
7197
  var _this5 = this;
@@ -7260,8 +7277,8 @@ enifed('ember-extension-support/data_adapter', ['exports', 'ember-metal/property
7260
7277
  Returns the values of filters defined by `getFilters`.
7261
7278
  @private
7262
7279
  @method getRecordFilterValues
7263
- @param {Object} record The record instance
7264
- @return {Object} The filter values
7280
+ @param {Object} record The record instance.
7281
+ @return {Object} The filter values.
7265
7282
  */
7266
7283
  getRecordFilterValues: function (record) {
7267
7284
  return {};
@@ -7272,8 +7289,8 @@ enifed('ember-extension-support/data_adapter', ['exports', 'ember-metal/property
7272
7289
  @private
7273
7290
  @method getRecordColor
7274
7291
  @param {Object} record The record instance
7275
- @return {String} The record's color
7276
- Possible options: black, red, blue, green
7292
+ @return {String} The records color.
7293
+ Possible options: black, red, blue, green.
7277
7294
  */
7278
7295
  getRecordColor: function (record) {
7279
7296
  return null;
@@ -7284,7 +7301,7 @@ enifed('ember-extension-support/data_adapter', ['exports', 'ember-metal/property
7284
7301
  when a change occurs.
7285
7302
  @private
7286
7303
  @method observerRecord
7287
- @param {Object} record The record instance
7304
+ @param {Object} record The record instance.
7288
7305
  @param {Function} recordUpdated The callback to call when a record is updated.
7289
7306
  @return {Function} The function to call to remove all observers.
7290
7307
  */
@@ -7415,7 +7432,7 @@ enifed('ember-htmlbars/helper', ['exports', 'ember-runtime/system/object'], func
7415
7432
  <div>{{format-currency cents currency="$"}}</div>
7416
7433
  ```
7417
7434
 
7418
- Additionally a helper can be called as a nested helper (sometimes called a
7435
+ Additionally, a helper can be called as a nested helper (sometimes called a
7419
7436
  subexpression). In this example, the computed value of a helper is passed
7420
7437
  to a component named `show-money`:
7421
7438
 
@@ -7438,7 +7455,7 @@ enifed('ember-htmlbars/helper', ['exports', 'ember-runtime/system/object'], func
7438
7455
  Each time the input to a helper changes, the `compute` function will be
7439
7456
  called again.
7440
7457
 
7441
- As instances, these helpers also have access to the container and will accept
7458
+ As instances, these helpers also have access to the container an will accept
7442
7459
  injected dependencies.
7443
7460
 
7444
7461
  Additionally, class helpers can call `recompute` to force a new computation.
@@ -7519,36 +7536,6 @@ enifed('ember-htmlbars/helper', ['exports', 'ember-runtime/system/object'], func
7519
7536
 
7520
7537
  exports.default = Helper;
7521
7538
  });
7522
- enifed('ember-htmlbars/helpers/-concat', ['exports'], function (exports) {
7523
- /**
7524
- @module ember
7525
- @submodule ember-templates
7526
- */
7527
-
7528
- /**
7529
- Concatenates input params together.
7530
-
7531
- Example:
7532
-
7533
- ```handlebars
7534
- {{some-component name=(concat firstName " " lastName)}}
7535
-
7536
- {{! would pass name="<first name value> <last name value>" to the component}}
7537
- ```
7538
-
7539
- @public
7540
- @method concat
7541
- @for Ember.Templates.helpers
7542
- @since 1.13.0
7543
- */
7544
- 'use strict';
7545
-
7546
- exports.default = concat;
7547
-
7548
- function concat(params) {
7549
- return params.join('');
7550
- }
7551
- });
7552
7539
  enifed('ember-htmlbars/helpers/-html-safe', ['exports', 'htmlbars-util/safe-string'], function (exports, _htmlbarsUtilSafeString) {
7553
7540
  'use strict';
7554
7541
 
@@ -7569,7 +7556,7 @@ enifed('ember-htmlbars/helpers/-html-safe', ['exports', 'htmlbars-util/safe-stri
7569
7556
  });
7570
7557
  enifed('ember-htmlbars/helpers/-join-classes', ['exports'], function (exports) {
7571
7558
  /*
7572
- this private helper is used to join and compact a list of class names
7559
+ This private helper is used to join and compact a list of class names.
7573
7560
 
7574
7561
  @private
7575
7562
  */
@@ -7601,7 +7588,7 @@ enifed('ember-htmlbars/helpers/-legacy-each-with-controller', ['exports', 'ember
7601
7588
  var list = params[0];
7602
7589
  var keyPath = hash.key;
7603
7590
 
7604
- // TODO: Correct falsy semantics
7591
+ // TODO: Correct falsy semantics.
7605
7592
  if (!list || _emberMetalProperty_get.get(list, 'length') === 0) {
7606
7593
  if (blocks.inverse.yield) {
7607
7594
  blocks.inverse.yield();
@@ -7692,7 +7679,7 @@ enifed('ember-htmlbars/helpers/-normalize-class', ['exports', 'ember-runtime/sys
7692
7679
  var inactiveClass = hash.inactiveClass;
7693
7680
 
7694
7681
  // When using the colon syntax, evaluate the truthiness or falsiness
7695
- // of the value to determine which className to return
7682
+ // of the value to determine which className to return.
7696
7683
  if (activeClass || inactiveClass) {
7697
7684
  if (!!value) {
7698
7685
  return activeClass;
@@ -7703,7 +7690,7 @@ enifed('ember-htmlbars/helpers/-normalize-class', ['exports', 'ember-runtime/sys
7703
7690
  // If value is a Boolean and true, return the dasherized property
7704
7691
  // name.
7705
7692
  } else if (value === true) {
7706
- // Only apply to last segment in the path
7693
+ // Only apply to last segment in the path.
7707
7694
  if (propName && _emberMetalPath_cache.isPath(propName)) {
7708
7695
  var segments = propName.split('.');
7709
7696
  propName = segments[segments.length - 1];
@@ -7723,6 +7710,36 @@ enifed('ember-htmlbars/helpers/-normalize-class', ['exports', 'ember-runtime/sys
7723
7710
  }
7724
7711
  }
7725
7712
  });
7713
+ enifed('ember-htmlbars/helpers/concat', ['exports'], function (exports) {
7714
+ /**
7715
+ @module ember
7716
+ @submodule ember-templates
7717
+ */
7718
+
7719
+ /**
7720
+ Concatenates the given arguments into a string.
7721
+
7722
+ Example:
7723
+
7724
+ ```handlebars
7725
+ {{some-component name=(concat firstName " " lastName)}}
7726
+
7727
+ {{! would pass name="<first name value> <last name value>" to the component}}
7728
+ ```
7729
+
7730
+ @public
7731
+ @method concat
7732
+ @for Ember.Templates.helpers
7733
+ @since 1.13.0
7734
+ */
7735
+ 'use strict';
7736
+
7737
+ exports.default = concat;
7738
+
7739
+ function concat(args) {
7740
+ return args.join('');
7741
+ }
7742
+ });
7726
7743
  enifed('ember-htmlbars/helpers/each-in', ['exports', 'ember-views/streams/should_display'], function (exports, _emberViewsStreamsShould_display) {
7727
7744
  /**
7728
7745
  @module ember
@@ -7952,7 +7969,7 @@ enifed('ember-htmlbars/helpers/if_unless', ['exports', 'ember-metal/debug', 'emb
7952
7969
  the `else` helper.
7953
7970
 
7954
7971
  ```handlebars
7955
- {{! is it raining outside?}}
7972
+ {{!Is it raining outside?}}
7956
7973
  {{#if isRaining}}
7957
7974
  Yes, grab an umbrella!
7958
7975
  {{else}}
@@ -8070,7 +8087,7 @@ enifed('ember-htmlbars/helpers/loc', ['exports', 'ember-runtime/system/string'],
8070
8087
 
8071
8088
  @method loc
8072
8089
  @for Ember.Templates.helpers
8073
- @param {String} str The string to format
8090
+ @param {String} str The string to format.
8074
8091
  @see {Ember.String#loc}
8075
8092
  @public
8076
8093
  */
@@ -8184,7 +8201,7 @@ enifed('ember-htmlbars/helpers', ['exports', 'ember-metal/empty_object'], functi
8184
8201
  @method _registerHelper
8185
8202
  @for Ember.HTMLBars
8186
8203
  @param {String} name
8187
- @param {Object|Function} helperFunc the helper function to add
8204
+ @param {Object|Function} helperFunc The helper function to add.
8188
8205
  */
8189
8206
 
8190
8207
  function registerHelper(name, helperFunc) {
@@ -8416,7 +8433,7 @@ enifed('ember-htmlbars/hooks/component', ['exports', 'ember-metal/features', 'em
8416
8433
  }
8417
8434
  }
8418
8435
 
8419
- // Determine if this is an initial render or a re-render
8436
+ // Determine if this is an initial render or a re-render.
8420
8437
  if (state.manager) {
8421
8438
  state.manager.rerender(env, attrs, visitor);
8422
8439
  return;
@@ -8455,19 +8472,26 @@ enifed('ember-htmlbars/hooks/component', ['exports', 'ember-metal/features', 'em
8455
8472
  var isInvokedWithAngles = currentComponent && currentComponent._isAngleBracket;
8456
8473
  var isInvokedWithCurlies = currentComponent && !currentComponent._isAngleBracket;
8457
8474
 
8458
- // <div> at the top level of a <foo-bar> invocation
8475
+ // <div> at the top level of a <foo-bar> invocation.
8459
8476
  var isComponentHTMLElement = isAngleBracket && !isDasherized && isInvokedWithAngles;
8460
8477
 
8461
- // <foo-bar> at the top level of a <foo-bar> invocation
8478
+ // <foo-bar> at the top level of a <foo-bar> invocation.
8462
8479
  var isComponentIdentityElement = isAngleBracket && isTopLevel && tagName === env.view.tagName;
8463
8480
 
8464
- // <div> at the top level of a {{foo-bar}} invocation
8481
+ // <div> at the top level of a {{foo-bar}} invocation.
8465
8482
  var isNormalHTMLElement = isAngleBracket && !isDasherized && isInvokedWithCurlies;
8466
8483
 
8467
8484
  var component = undefined,
8468
8485
  layout = undefined;
8469
8486
  if (isDasherized || !isAngleBracket) {
8470
8487
  var options = {};
8488
+ if (_emberMetalFeatures.default('ember-htmlbars-local-lookup')) {
8489
+ var moduleName = env.meta && env.meta.moduleName;
8490
+
8491
+ if (moduleName) {
8492
+ options.source = 'template:' + moduleName;
8493
+ }
8494
+ }
8471
8495
 
8472
8496
  var result = _emberHtmlbarsUtilsLookupComponent.default(env.owner, tagName, options);
8473
8497
 
@@ -8853,11 +8877,11 @@ enifed('ember-htmlbars/hooks/get-cell-or-value', ['exports', 'ember-metal/stream
8853
8877
 
8854
8878
  function getCellOrValue(ref) {
8855
8879
  if (ref && ref[_emberHtmlbarsKeywordsMut.MUTABLE_REFERENCE]) {
8856
- // reify the mutable reference into a mutable cell
8880
+ // Reify the mutable reference into a mutable cell.
8857
8881
  return ref.cell();
8858
8882
  }
8859
8883
 
8860
- // get the value out of the reference
8884
+ // Get the value out of the reference.
8861
8885
  return _emberMetalStreamsUtils.read(ref);
8862
8886
  }
8863
8887
  });
@@ -8876,7 +8900,7 @@ enifed('ember-htmlbars/hooks/get-child', ['exports', 'ember-metal/streams/utils'
8876
8900
  return parent.getKey(key);
8877
8901
  }
8878
8902
 
8879
- // This should only happen when we are looking at an `attrs` hash
8903
+ // This should only happen when we are looking at an `attrs` hash.
8880
8904
  // That might change if it is possible to pass object literals
8881
8905
  // through the templating system.
8882
8906
  return parent[key];
@@ -8988,10 +9012,10 @@ enifed('ember-htmlbars/hooks/invoke-helper', ['exports', 'ember-htmlbars/system/
8988
9012
  function invokeHelper(morph, env, scope, visitor, params, hash, helper, templates, context) {
8989
9013
  var helperStream = _emberHtmlbarsSystemInvokeHelper.buildHelperStream(helper, params, hash, templates, env, scope);
8990
9014
 
8991
- // Ember.Helper helpers are pure values, thus linkable
9015
+ // Ember.Helper helpers are pure values, thus linkable.
8992
9016
  if (helperStream.linkable) {
8993
9017
  if (morph) {
8994
- // When processing an inline expression the params and hash have already
9018
+ // When processing an inline expression, the params and hash have already
8995
9019
  // been linked. Thus, HTMLBars will not link the returned helperStream.
8996
9020
  // We subscribe the morph to the helperStream here, and also subscribe
8997
9021
  // the helperStream to any params.
@@ -9012,7 +9036,7 @@ enifed('ember-htmlbars/hooks/invoke-helper', ['exports', 'ember-htmlbars/system/
9012
9036
  return { link: true, value: helperStream };
9013
9037
  }
9014
9038
 
9015
- // Built-in helpers are not linkable, they must run every rerender
9039
+ // Built-in helpers are not linkable. They must run on every rerender.
9016
9040
  return { value: helperStream.value() };
9017
9041
  }
9018
9042
  });
@@ -9048,7 +9072,7 @@ enifed('ember-htmlbars/hooks/link-render-node', ['exports', 'ember-htmlbars/util
9048
9072
  }
9049
9073
  }
9050
9074
 
9051
- // If has a dot in the path, we need to subscribe to the arguments in the
9075
+ // If there is a dot in the path, we need to subscribe to the arguments in the
9052
9076
  // closure component as well.
9053
9077
 
9054
9078
  if (_emberHtmlbarsSystemLookupHelper.CONTAINS_DOT_CACHE.get(path)) {
@@ -9076,7 +9100,7 @@ enifed('ember-htmlbars/hooks/link-render-node', ['exports', 'ember-htmlbars/util
9076
9100
  }
9077
9101
  }
9078
9102
 
9079
- // The params and hash can be reused; they don't need to be
9103
+ // The params and hash can be reused. They don't need to be
9080
9104
  // recomputed on subsequent re-renders because they are
9081
9105
  // streams.
9082
9106
  return true;
@@ -9104,11 +9128,11 @@ enifed('ember-htmlbars/hooks/link-render-node', ['exports', 'ember-htmlbars/util
9104
9128
  var isTruthyVal = _emberMetalStreamsUtils.read(isTruthy);
9105
9129
 
9106
9130
  if (_emberRuntimeUtils.isArray(predicateVal)) {
9107
- return lengthVal > 0 ? coercer(predicateVal) : false;
9131
+ return lengthVal > 0 ? predicateVal : false;
9108
9132
  }
9109
9133
 
9110
9134
  if (typeof isTruthyVal === 'boolean') {
9111
- return isTruthyVal ? coercer(predicateVal) : false;
9135
+ return isTruthyVal;
9112
9136
  }
9113
9137
 
9114
9138
  return coercer(predicateVal);
@@ -9252,7 +9276,7 @@ enifed("ember-htmlbars/hooks/will-cleanup-tree", ["exports"], function (exports)
9252
9276
 
9253
9277
  // When we go to clean up the render node and all of its children, we may
9254
9278
  // encounter views/components associated with those nodes along the way. In
9255
- // those cases, we need to make sure we need to sever the link between the
9279
+ // those cases, we need to sever the link between the
9256
9280
  // existing view hierarchy and those views.
9257
9281
  //
9258
9282
  // However, we do *not* need to remove the child views of child views, since
@@ -9280,7 +9304,7 @@ enifed("ember-htmlbars/hooks/will-cleanup-tree", ["exports"], function (exports)
9280
9304
  view.ownerView._destroyingSubtreeForView = view;
9281
9305
  }
9282
9306
  });
9283
- enifed('ember-htmlbars/index', ['exports', 'ember-metal/core', 'ember-metal/features', 'ember-template-compiler', 'ember-htmlbars/system/make_bound_helper', 'ember-htmlbars/helpers', 'ember-htmlbars/helpers/if_unless', 'ember-htmlbars/helpers/with', 'ember-htmlbars/helpers/loc', 'ember-htmlbars/helpers/log', 'ember-htmlbars/helpers/each', 'ember-htmlbars/helpers/each-in', 'ember-htmlbars/helpers/-normalize-class', 'ember-htmlbars/helpers/-concat', 'ember-htmlbars/helpers/-join-classes', 'ember-htmlbars/helpers/-legacy-each-with-controller', 'ember-htmlbars/helpers/-legacy-each-with-keyword', 'ember-htmlbars/helpers/-html-safe', 'ember-htmlbars/helpers/hash', 'ember-htmlbars/system/dom-helper', 'ember-htmlbars/helper', 'ember-htmlbars/glimmer-component', 'ember-htmlbars/template_registry', 'ember-htmlbars/system/bootstrap', 'ember-htmlbars/compat'], function (exports, _emberMetalCore, _emberMetalFeatures, _emberTemplateCompiler, _emberHtmlbarsSystemMake_bound_helper, _emberHtmlbarsHelpers, _emberHtmlbarsHelpersIf_unless, _emberHtmlbarsHelpersWith, _emberHtmlbarsHelpersLoc, _emberHtmlbarsHelpersLog, _emberHtmlbarsHelpersEach, _emberHtmlbarsHelpersEachIn, _emberHtmlbarsHelpersNormalizeClass, _emberHtmlbarsHelpersConcat, _emberHtmlbarsHelpersJoinClasses, _emberHtmlbarsHelpersLegacyEachWithController, _emberHtmlbarsHelpersLegacyEachWithKeyword, _emberHtmlbarsHelpersHtmlSafe, _emberHtmlbarsHelpersHash, _emberHtmlbarsSystemDomHelper, _emberHtmlbarsHelper, _emberHtmlbarsGlimmerComponent, _emberHtmlbarsTemplate_registry, _emberHtmlbarsSystemBootstrap, _emberHtmlbarsCompat) {
9307
+ enifed('ember-htmlbars/index', ['exports', 'ember-metal/core', 'ember-metal/features', 'ember-template-compiler', 'ember-htmlbars/system/make_bound_helper', 'ember-htmlbars/helpers', 'ember-htmlbars/helpers/if_unless', 'ember-htmlbars/helpers/with', 'ember-htmlbars/helpers/loc', 'ember-htmlbars/helpers/log', 'ember-htmlbars/helpers/each', 'ember-htmlbars/helpers/each-in', 'ember-htmlbars/helpers/-normalize-class', 'ember-htmlbars/helpers/concat', 'ember-htmlbars/helpers/-join-classes', 'ember-htmlbars/helpers/-legacy-each-with-controller', 'ember-htmlbars/helpers/-legacy-each-with-keyword', 'ember-htmlbars/helpers/-html-safe', 'ember-htmlbars/helpers/hash', 'ember-htmlbars/system/dom-helper', 'ember-htmlbars/helper', 'ember-htmlbars/template_registry', 'ember-htmlbars/system/bootstrap', 'ember-htmlbars/compat'], function (exports, _emberMetalCore, _emberMetalFeatures, _emberTemplateCompiler, _emberHtmlbarsSystemMake_bound_helper, _emberHtmlbarsHelpers, _emberHtmlbarsHelpersIf_unless, _emberHtmlbarsHelpersWith, _emberHtmlbarsHelpersLoc, _emberHtmlbarsHelpersLog, _emberHtmlbarsHelpersEach, _emberHtmlbarsHelpersEachIn, _emberHtmlbarsHelpersNormalizeClass, _emberHtmlbarsHelpersConcat, _emberHtmlbarsHelpersJoinClasses, _emberHtmlbarsHelpersLegacyEachWithController, _emberHtmlbarsHelpersLegacyEachWithKeyword, _emberHtmlbarsHelpersHtmlSafe, _emberHtmlbarsHelpersHash, _emberHtmlbarsSystemDomHelper, _emberHtmlbarsHelper, _emberHtmlbarsTemplate_registry, _emberHtmlbarsSystemBootstrap, _emberHtmlbarsCompat) {
9284
9308
  /**
9285
9309
  Ember templates are executed by [HTMLBars](https://github.com/tildeio/htmlbars),
9286
9310
  an HTML-friendly version of [Handlebars](http://handlebarsjs.com/). Any valid Handlebars syntax is valid in an Ember template.
@@ -9427,11 +9451,11 @@ enifed('ember-htmlbars/index', ['exports', 'ember-metal/core', 'ember-metal/feat
9427
9451
  });
9428
9452
  });
9429
9453
 
9430
- // importing adds template bootstrapping
9431
- // initializer to enable embedded templates
9454
+ // Importing adds template bootstrapping
9455
+ // initializer to enable embedded templates.
9432
9456
 
9433
- // importing ember-htmlbars/compat updates the
9434
- // Ember.Handlebars global if htmlbars is enabled
9457
+ // Importing ember-htmlbars/compat updates the
9458
+ // Ember.Handlebars global if htmlbars is enabled.
9435
9459
  enifed('ember-htmlbars/keywords/closure-component', ['exports', 'ember-metal/debug', 'ember-metal/is_none', 'ember-metal/symbol', 'ember-metal/streams/stream', 'ember-metal/empty_object', 'ember-metal/streams/utils', 'ember-htmlbars/hooks/subexpr', 'ember-metal/assign', 'ember-htmlbars/utils/extract-positional-params', 'ember-htmlbars/utils/lookup-component'], function (exports, _emberMetalDebug, _emberMetalIs_none, _emberMetalSymbol, _emberMetalStreamsStream, _emberMetalEmpty_object, _emberMetalStreamsUtils, _emberHtmlbarsHooksSubexpr, _emberMetalAssign, _emberHtmlbarsUtilsExtractPositionalParams, _emberHtmlbarsUtilsLookupComponent) {
9436
9460
  /**
9437
9461
  @module ember
@@ -9479,9 +9503,9 @@ enifed('ember-htmlbars/keywords/closure-component', ['exports', 'ember-metal/deb
9479
9503
  s.addDependency(path);
9480
9504
 
9481
9505
  // FIXME: If the stream invalidates on every params or hash change, then
9482
- // the {{component helper will be forces to rerender the whole component
9506
+ // the {{component helper will be forced to re-render the whole component
9483
9507
  // each time. Instead, these dependencies should not be required and the
9484
- // element component keyword should add the params and hash as dependencies
9508
+ // element component keyword should add the params and hash as dependencies.
9485
9509
  params.forEach(function (item) {
9486
9510
  return s.addDependency(item);
9487
9511
  });
@@ -9520,7 +9544,7 @@ enifed('ember-htmlbars/keywords/closure-component', ['exports', 'ember-metal/deb
9520
9544
  function createNestedClosureComponentCell(componentCell, params, hash) {
9521
9545
  var _ref;
9522
9546
 
9523
- // This needs to be done in each nesting level to avoid raising assertions
9547
+ // This needs to be done in each nesting level to avoid raising assertions.
9524
9548
  processPositionalParamsFromCell(componentCell, params, hash);
9525
9549
 
9526
9550
  return _ref = {}, _ref[COMPONENT_PATH] = componentCell[COMPONENT_PATH], _ref[COMPONENT_HASH] = mergeInNewHash(componentCell[COMPONENT_HASH], hash), _ref[COMPONENT_POSITIONAL_PARAMS] = componentCell[COMPONENT_POSITIONAL_PARAMS], _ref[COMPONENT_CELL] = true, _ref;
@@ -9537,7 +9561,7 @@ enifed('ember-htmlbars/keywords/closure-component', ['exports', 'ember-metal/deb
9537
9561
 
9538
9562
  var positionalParams = getPositionalParams(env.owner, componentPath);
9539
9563
 
9540
- // This needs to be done in each nesting level to avoid raising assertions
9564
+ // This needs to be done in each nesting level to avoid raising assertions.
9541
9565
  _emberHtmlbarsUtilsExtractPositionalParams.processPositionalParams(null, positionalParams, params, hash);
9542
9566
 
9543
9567
  return _ref2 = {}, _ref2[COMPONENT_PATH] = componentPath, _ref2[COMPONENT_HASH] = hash, _ref2[COMPONENT_POSITIONAL_PARAMS] = positionalParams, _ref2[COMPONENT_CELL] = true, _ref2;
@@ -9600,7 +9624,7 @@ enifed('ember-htmlbars/keywords/collection', ['exports', 'ember-views/streams/ut
9600
9624
  ```javascript
9601
9625
  App = Ember.Application.create();
9602
9626
  App.ApplicationRoute = Ember.Route.extend({
9603
- model: function() {
9627
+ model() {
9604
9628
  return [{name: 'Yehuda'},{name: 'Tom'},{name: 'Peter'}];
9605
9629
  }
9606
9630
  });
@@ -9618,8 +9642,8 @@ enifed('ember-htmlbars/keywords/collection', ['exports', 'ember-views/streams/ut
9618
9642
 
9619
9643
  ### Non-block version of collection
9620
9644
 
9621
- If you provide an `itemViewClass` option that has its own `template` you may
9622
- omit the block.
9645
+ If you provide an `itemViewClass` option that has its own `template`,
9646
+ then you may omit the block.
9623
9647
 
9624
9648
  The following template:
9625
9649
 
@@ -9633,7 +9657,7 @@ enifed('ember-htmlbars/keywords/collection', ['exports', 'ember-views/streams/ut
9633
9657
  ```javascript
9634
9658
  App = Ember.Application.create();
9635
9659
  App.ApplicationRoute = Ember.Route.extend({
9636
- model: function() {
9660
+ model() {
9637
9661
  return [{name: 'Yehuda'},{name: 'Tom'},{name: 'Peter'}];
9638
9662
  }
9639
9663
  });
@@ -10044,7 +10068,7 @@ enifed('ember-htmlbars/keywords/get', ['exports', 'ember-metal/debug', 'ember-me
10044
10068
 
10045
10069
  var DynamicKeyStream = _emberMetalStreamsStream.default.extend({
10046
10070
  init: function (source, keySource) {
10047
- // used to get the original path for debugging purposes
10071
+ // Used to get the original path for debugging purposes.
10048
10072
  var label = labelFor(source, keySource);
10049
10073
 
10050
10074
  this.label = label;
@@ -10379,7 +10403,7 @@ enifed('ember-htmlbars/keywords/legacy-yield', ['exports', 'ember-metal/streams/
10379
10403
  var block = scope.getBlock('default');
10380
10404
 
10381
10405
  if (block.arity === 0) {
10382
- // Typically, the `controller` local is persists through lexical scope.
10406
+ // Typically, the `controller` local persists through lexical scope.
10383
10407
  // However, in this case, the `{{legacy-yield}}` in the legacy each view
10384
10408
  // needs to override the controller local for the template it is yielding.
10385
10409
  // This megahaxx allows us to override the controller, and most importantly,
@@ -10452,7 +10476,7 @@ enifed('ember-htmlbars/keywords/mut', ['exports', 'ember-metal/debug', 'ember-me
10452
10476
  To specify that a parameter is mutable, when invoking the child `Component`:
10453
10477
 
10454
10478
  ```handlebars
10455
- {{my-child childClickCount=(mut totalClicks)}}
10479
+ <my-child child-click-count={{mut totalClicks}} />
10456
10480
  ```
10457
10481
 
10458
10482
  The child `Component` can then modify the parent's value as needed:
@@ -10461,31 +10485,11 @@ enifed('ember-htmlbars/keywords/mut', ['exports', 'ember-metal/debug', 'ember-me
10461
10485
  // my-child.js
10462
10486
  export default Component.extend({
10463
10487
  click() {
10464
- this.get('childClickCount').update(this.get('childClickCount').value + 1);
10465
- }
10466
- });
10467
- ```
10468
-
10469
- Additionally, the `mut` helper can be combined with the `action` helper to
10470
- mutate a value. For example:
10471
-
10472
- ```handlebars
10473
- {{my-child childClickCount=totalClicks click-count-change=(action (mut "totalClicks"))}}
10474
- ```
10475
-
10476
- The child `Component` would invoke the action with the new click value:
10477
-
10478
- ```javascript
10479
- // my-child.js
10480
- export default Component.extend({
10481
- click() {
10482
- this.get('clickCountChange')(this.get('childClickCount') + 1);
10488
+ this.attrs.childClickCount.update(this.attrs.childClickCount.value + 1);
10483
10489
  }
10484
10490
  });
10485
10491
  ```
10486
10492
 
10487
- The `mut` helper changes the `totalClicks` value to what was provided as the action argument.
10488
-
10489
10493
  See a [2.0 blog post](http://emberjs.com/blog/2015/05/10/run-up-to-two-oh.html#toc_the-code-mut-code-helper) for
10490
10494
  additional information on using `{{mut}}`.
10491
10495
 
@@ -10557,10 +10561,10 @@ enifed('ember-htmlbars/keywords/outlet', ['exports', 'ember-metal/debug', 'ember
10557
10561
 
10558
10562
  'use strict';
10559
10563
 
10560
- _emberHtmlbarsTemplatesTopLevelView.default.meta.revision = 'Ember@2.4.6';
10564
+ _emberHtmlbarsTemplatesTopLevelView.default.meta.revision = 'Ember@2.5.0-beta.1';
10561
10565
 
10562
10566
  /**
10563
- The `{{outlet}}` helper lets you specify where a child routes will render in
10567
+ The `{{outlet}}` helper lets you specify where a child route will render in
10564
10568
  your template. An important use of the `{{outlet}}` helper is in your
10565
10569
  application's `application.hbs` file:
10566
10570
 
@@ -10670,6 +10674,10 @@ enifed('ember-htmlbars/keywords/outlet', ['exports', 'ember-metal/debug', 'ember
10670
10674
 
10671
10675
  var Component;
10672
10676
 
10677
+ if (_emberMetalFeatures.default('ember-routing-routable-components')) {
10678
+ Component = outletState.render.Component;
10679
+ }
10680
+
10673
10681
  var options;
10674
10682
  var attrs = {};
10675
10683
  if (Component) {
@@ -10720,7 +10728,7 @@ enifed('ember-htmlbars/keywords/outlet', ['exports', 'ember-metal/debug', 'ember
10720
10728
  b = b.render;
10721
10729
  for (var key in a) {
10722
10730
  if (a.hasOwnProperty(key)) {
10723
- // name is only here for logging & debugging. If two different
10731
+ // Name is only here for logging & debugging. If two different
10724
10732
  // names result in otherwise identical states, they're still
10725
10733
  // identical.
10726
10734
  if (a[key] !== b[key] && key !== 'name') {
@@ -10776,7 +10784,7 @@ enifed('ember-htmlbars/keywords/partial', ['exports', 'ember-views/system/lookup
10776
10784
 
10777
10785
  @method partial
10778
10786
  @for Ember.Templates.helpers
10779
- @param {String} partialName the name of the template to render minus the leading underscore
10787
+ @param {String} partialName The name of the template to render minus the leading underscore.
10780
10788
  @public
10781
10789
  */
10782
10790
 
@@ -11457,7 +11465,7 @@ enifed('ember-htmlbars/keywords', ['exports', 'htmlbars-runtime'], function (exp
11457
11465
  @method _registerHelper
11458
11466
  @for Ember.HTMLBars
11459
11467
  @param {String} name
11460
- @param {Object|Function} keyword the keyword to add
11468
+ @param {Object|Function} keyword The keyword to add.
11461
11469
  */
11462
11470
 
11463
11471
  function registerKeyword(name, keyword) {
@@ -11598,7 +11606,8 @@ enifed('ember-htmlbars/node-managers/component-node-manager', ['exports', 'ember
11598
11606
 
11599
11607
  var tagName = options.tagName;
11600
11608
  var params = options.params;
11601
- var attrs = options.attrs;
11609
+ var _options$attrs = options.attrs;
11610
+ var attrs = _options$attrs === undefined ? {} : _options$attrs;
11602
11611
  var parentView = options.parentView;
11603
11612
  var parentScope = options.parentScope;
11604
11613
  var isAngleBracket = options.isAngleBracket;
@@ -11606,8 +11615,6 @@ enifed('ember-htmlbars/node-managers/component-node-manager', ['exports', 'ember
11606
11615
  var layout = options.layout;
11607
11616
  var templates = options.templates;
11608
11617
 
11609
- attrs = attrs || {};
11610
-
11611
11618
  component = component || (isAngleBracket ? _emberHtmlbarsGlimmerComponent.default : _emberViewsComponentsComponent.default);
11612
11619
 
11613
11620
  var createOptions = (_createOptions = {
@@ -12264,7 +12271,6 @@ enifed('ember-htmlbars/system/append-templated-view', ['exports', 'ember-metal/d
12264
12271
 
12265
12272
  // We only want to override the `_context` computed property if there is
12266
12273
  // no specified controller. See View#_context for more information.
12267
-
12268
12274
  var noControllerInProto = !viewProto.controller;
12269
12275
  if (viewProto.controller && viewProto.controller.isDescriptor) {
12270
12276
  noControllerInProto = true;
@@ -12313,7 +12319,7 @@ enifed('ember-htmlbars/system/bootstrap', ['exports', 'ember-views/component_loo
12313
12319
  var selectors = 'script[type="text/x-handlebars"], script[type="text/x-raw-handlebars"]';
12314
12320
 
12315
12321
  _emberViewsSystemJquery.default(selectors, ctx).each(function () {
12316
- // Get a reference to the script tag
12322
+ // Get a reference to the script tag.
12317
12323
  var script = _emberViewsSystemJquery.default(this);
12318
12324
 
12319
12325
  // Get the name of the script, used by Ember.View's templateName property.
@@ -12331,15 +12337,15 @@ enifed('ember-htmlbars/system/bootstrap', ['exports', 'ember-views/component_loo
12331
12337
  });
12332
12338
  }
12333
12339
 
12334
- // Check if template of same name already exists
12340
+ // Check if template of same name already exists.
12335
12341
  if (_emberHtmlbarsTemplate_registry.has(templateName)) {
12336
12342
  throw new _emberMetalError.default('Template named "' + templateName + '" already exists.');
12337
12343
  }
12338
12344
 
12339
- // For templates which have a name, we save them and then remove them from the DOM
12345
+ // For templates which have a name, we save them and then remove them from the DOM.
12340
12346
  _emberHtmlbarsTemplate_registry.set(templateName, template);
12341
12347
 
12342
- // Remove script tag from DOM
12348
+ // Remove script tag from DOM.
12343
12349
  script.remove();
12344
12350
  });
12345
12351
  }
@@ -12401,10 +12407,10 @@ enifed('ember-htmlbars/system/instrumentation-support', ['exports', 'ember-metal
12401
12407
  Wrap your node manager's render and re-render methods
12402
12408
  with this function.
12403
12409
 
12404
- @param {Object} component Component or View instance (optional)
12405
- @param {Function} callback The function to instrument
12406
- @param {Object} context The context to call the function with
12407
- @return {Object} Return value from the invoked callback
12410
+ @param {Object} component Component or View instance (optional).
12411
+ @param {Function} callback The function to instrument.
12412
+ @param {Object} context The context to call the function with.
12413
+ @return {Object} Return value from the invoked callback.
12408
12414
  @private
12409
12415
  */
12410
12416
 
@@ -12484,13 +12490,13 @@ enifed('ember-htmlbars/system/lookup-helper', ['exports', 'ember-metal/debug', '
12484
12490
 
12485
12491
  * Look for a registered helper
12486
12492
  * If a dash exists in the name:
12487
- * Look for a helper registed in the container
12493
+ * Look for a helper registed in the container.
12488
12494
  * Use Ember.ComponentLookup to find an Ember.Component that resolves
12489
- to the given name
12495
+ to the given name.
12490
12496
 
12491
12497
  @private
12492
12498
  @method resolveHelper
12493
- @param {String} name the name of the helper to lookup
12499
+ @param {String} name The name of the helper to lookup.
12494
12500
  @return {Helper}
12495
12501
  */
12496
12502
  function _findHelper(name, view, env, options) {
@@ -12500,10 +12506,7 @@ enifed('ember-htmlbars/system/lookup-helper', ['exports', 'ember-metal/debug', '
12500
12506
  var owner = env.owner;
12501
12507
  if (validateLazyHelperName(name, owner, env.hooks.keywords)) {
12502
12508
  var helperName = 'helper:' + name;
12503
- // See https://github.com/emberjs/ember.js/issues/13071
12504
- // See https://bugs.chromium.org/p/v8/issues/detail?id=4839
12505
- var registered = owner.hasRegistration(helperName, options);
12506
- if (registered) {
12509
+ if (owner.hasRegistration(helperName, options)) {
12507
12510
  helper = owner._lookupFactory(helperName, options);
12508
12511
  _emberMetalDebug.assert('Expected to find an Ember.Helper with the name ' + helperName + ', but found an object of type ' + typeof helper + ' instead.', helper.isHelperFactory || helper.isHelperInstance);
12509
12512
  }
@@ -12522,12 +12525,12 @@ enifed('ember-htmlbars/system/lookup-helper', ['exports', 'ember-metal/debug', '
12522
12525
 
12523
12526
  var localHelper = _findHelper(name, view, env, options);
12524
12527
 
12525
- // local match found, use it
12528
+ // Local match found, use it.
12526
12529
  if (localHelper) {
12527
12530
  return localHelper;
12528
12531
  }
12529
12532
 
12530
- // fallback to global
12533
+ // Fall back to global.
12531
12534
  return _findHelper(name, view, env);
12532
12535
  }
12533
12536
 
@@ -12550,7 +12553,7 @@ enifed('ember-htmlbars/system/make_bound_helper', ['exports', 'ember-metal/debug
12550
12553
 
12551
12554
  /**
12552
12555
  Create a bound helper. Accepts a function that receives the ordered and hash parameters
12553
- from the template. If a bound property was provided in the template it will be resolved to its
12556
+ from the template. If a bound property was provided in the template, it will be resolved to its
12554
12557
  value and any changes to the bound property cause the helper function to be re-run with the updated
12555
12558
  values.
12556
12559
 
@@ -12593,11 +12596,11 @@ enifed('ember-htmlbars/system/make_bound_helper', ['exports', 'ember-metal/debug
12593
12596
  */
12594
12597
 
12595
12598
  function makeBoundHelper(fn) {
12596
- _emberMetalDebug.deprecate('Using `Ember.HTMLBars.makeBoundHelper` is deprecated. Please refactor to using `Ember.Helper` or `Ember.Helper.helper`.', false, { id: 'ember-htmlbars.make-bound-helper', until: '3.0.0' });
12599
+ _emberMetalDebug.deprecate('Using `Ember.HTMLBars.makeBoundHelper` is deprecated. Please refactor to use `Ember.Helper` or `Ember.Helper.helper`.', false, { id: 'ember-htmlbars.make-bound-helper', until: '3.0.0' });
12597
12600
  return _emberHtmlbarsHelper.helper(fn);
12598
12601
  }
12599
12602
  });
12600
- enifed('ember-htmlbars/system/render-env', ['exports', 'ember-htmlbars/env', 'ember-metal-views/renderer', 'container/owner'], function (exports, _emberHtmlbarsEnv, _emberMetalViewsRenderer, _containerOwner) {
12603
+ enifed('ember-htmlbars/system/render-env', ['exports', 'ember-htmlbars/env', 'ember-metal-views', 'container/owner'], function (exports, _emberHtmlbarsEnv, _emberMetalViews, _containerOwner) {
12601
12604
  'use strict';
12602
12605
 
12603
12606
  exports.default = RenderEnv;
@@ -12605,7 +12608,7 @@ enifed('ember-htmlbars/system/render-env', ['exports', 'ember-htmlbars/env', 'em
12605
12608
  function RenderEnv(options) {
12606
12609
  this.lifecycleHooks = options.lifecycleHooks || [];
12607
12610
  this.renderedViews = options.renderedViews || [];
12608
- this.renderedNodes = options.renderedNodes || new _emberMetalViewsRenderer.MorphSet();
12611
+ this.renderedNodes = options.renderedNodes || new _emberMetalViews.MorphSet();
12609
12612
  this.hasParentOutlet = options.hasParentOutlet || false;
12610
12613
 
12611
12614
  this.view = options.view;
@@ -12704,7 +12707,7 @@ enifed('ember-htmlbars/system/render-view', ['exports', 'ember-htmlbars/node-man
12704
12707
  enifed("ember-htmlbars/template_registry", ["exports"], function (exports) {
12705
12708
  // STATE within a module is frowned apon, this exists
12706
12709
  // to support Ember.TEMPLATES but shield ember internals from this legacy
12707
- // global API
12710
+ // global API.
12708
12711
  "use strict";
12709
12712
 
12710
12713
  exports.setTemplates = setTemplates;
@@ -13689,29 +13692,52 @@ enifed('ember-htmlbars/utils/is-component', ['exports', 'ember-metal/features',
13689
13692
  if (hasComponentOrTemplate(owner, path)) {
13690
13693
  return true; // global component found
13691
13694
  } else {
13692
- return false;
13695
+ if (_emberMetalFeatures.default('ember-htmlbars-local-lookup')) {
13696
+ var moduleName = env.meta && env.meta.moduleName;
13697
+
13698
+ if (!moduleName) {
13699
+ // Without a source moduleName, we can not perform local lookups.
13700
+ return false;
13701
+ }
13702
+
13703
+ var options = { source: 'template:' + moduleName };
13704
+
13705
+ return hasComponentOrTemplate(owner, path, options);
13706
+ } else {
13707
+ return false;
13708
+ }
13693
13709
  }
13694
13710
  }
13695
13711
  }
13696
13712
  });
13697
-
13698
- // without a source moduleName we can not perform local lookups
13699
13713
  enifed('ember-htmlbars/utils/lookup-component', ['exports', 'ember-metal/features'], function (exports, _emberMetalFeatures) {
13700
13714
  'use strict';
13701
13715
 
13702
13716
  exports.default = lookupComponent;
13703
13717
 
13704
- function lookupComponentPair(componentLookup, owner, tagName, options) {
13718
+ function lookupComponentPair(componentLookup, owner, name, options) {
13705
13719
  return {
13706
- component: componentLookup.componentFor(tagName, owner, options),
13707
- layout: componentLookup.layoutFor(tagName, owner, options)
13720
+ component: componentLookup.componentFor(name, owner, options),
13721
+ layout: componentLookup.layoutFor(name, owner, options)
13708
13722
  };
13709
13723
  }
13710
13724
 
13711
- function lookupComponent(owner, tagName, options) {
13725
+ function lookupComponent(owner, name, options) {
13712
13726
  var componentLookup = owner.lookup('component-lookup:main');
13713
13727
 
13714
- return lookupComponentPair(componentLookup, owner, tagName);
13728
+ if (_emberMetalFeatures.default('ember-htmlbars-local-lookup')) {
13729
+ var source = options && options.source;
13730
+
13731
+ if (source) {
13732
+ var localResult = lookupComponentPair(componentLookup, owner, name, options);
13733
+
13734
+ if (localResult.component || localResult.layout) {
13735
+ return localResult;
13736
+ }
13737
+ }
13738
+ }
13739
+
13740
+ return lookupComponentPair(componentLookup, owner, name);
13715
13741
  }
13716
13742
  });
13717
13743
  enifed('ember-htmlbars/utils/new-stream', ['exports', 'ember-metal/streams/proxy-stream', 'ember-htmlbars/utils/subscribe'], function (exports, _emberMetalStreamsProxyStream, _emberHtmlbarsUtilsSubscribe) {
@@ -13760,7 +13786,7 @@ enifed('ember-htmlbars/utils/string', ['exports', 'ember-metal/core', 'ember-run
13760
13786
  @method htmlSafe
13761
13787
  @for Ember.String
13762
13788
  @static
13763
- @return {Handlebars.SafeString} a string that will not be html escaped by Handlebars
13789
+ @return {Handlebars.SafeString} A string that will not be HTML escaped by Handlebars.
13764
13790
  @public
13765
13791
  */
13766
13792
  function htmlSafe(str) {
@@ -13902,7 +13928,7 @@ enifed('ember-metal/alias', ['exports', 'ember-metal/debug', 'ember-metal/proper
13902
13928
  return _emberMetalProperty_set.set(obj, keyName, value);
13903
13929
  }
13904
13930
 
13905
- // Backwards compatibility with Ember Data
13931
+ // Backwards compatibility with Ember Data.
13906
13932
  AliasedProperty.prototype._meta = undefined;
13907
13933
  AliasedProperty.prototype.meta = _emberMetalComputed.ComputedProperty.prototype.meta;
13908
13934
  });
@@ -13950,7 +13976,7 @@ enifed("ember-metal/assign", ["exports"], function (exports) {
13950
13976
  return original;
13951
13977
  }
13952
13978
  });
13953
- enifed('ember-metal/binding', ['exports', 'ember-metal/core', 'ember-metal/logger', 'ember-metal/debug', 'ember-metal/property_get', 'ember-metal/property_set', 'ember-metal/utils', 'ember-metal/observer', 'ember-metal/run_loop', 'ember-metal/path_cache'], function (exports, _emberMetalCore, _emberMetalLogger, _emberMetalDebug, _emberMetalProperty_get, _emberMetalProperty_set, _emberMetalUtils, _emberMetalObserver, _emberMetalRun_loop, _emberMetalPath_cache) {
13979
+ enifed('ember-metal/binding', ['exports', 'ember-metal/core', 'ember-metal/logger', 'ember-metal/run_loop', 'ember-metal/debug', 'ember-metal/property_get', 'ember-metal/property_set', 'ember-metal/utils', 'ember-metal/events', 'ember-metal/observer', 'ember-metal/path_cache'], function (exports, _emberMetalCore, _emberMetalLogger, _emberMetalRun_loop, _emberMetalDebug, _emberMetalProperty_get, _emberMetalProperty_set, _emberMetalUtils, _emberMetalEvents, _emberMetalObserver, _emberMetalPath_cache) {
13954
13980
  'use strict';
13955
13981
 
13956
13982
  exports.bind = bind;
@@ -13978,31 +14004,22 @@ enifed('ember-metal/binding', ['exports', 'ember-metal/core', 'ember-metal/logge
13978
14004
  */
13979
14005
  _emberMetalCore.default.LOG_BINDINGS = false || !!_emberMetalCore.default.ENV.LOG_BINDINGS;
13980
14006
 
13981
- /**
13982
- Returns true if the provided path is global (e.g., `MyApp.fooController.bar`)
13983
- instead of local (`foo.bar.baz`).
13984
-
13985
- @method isGlobalPath
13986
- @for Ember
13987
- @private
13988
- @param {String} path
13989
- @return Boolean
13990
- */
13991
-
13992
- function getWithGlobals(obj, path) {
13993
- return _emberMetalProperty_get.get(_emberMetalPath_cache.isGlobal(path) ? _emberMetalCore.default.lookup : obj, path);
13994
- }
13995
-
13996
14007
  // ..........................................................
13997
14008
  // BINDING
13998
14009
  //
13999
14010
 
14000
14011
  function Binding(toPath, fromPath) {
14001
- this._direction = undefined;
14012
+ // Configuration
14002
14013
  this._from = fromPath;
14003
14014
  this._to = toPath;
14004
- this._readyToSync = undefined;
14005
14015
  this._oneWay = undefined;
14016
+
14017
+ // State
14018
+ this._direction = undefined;
14019
+ this._readyToSync = undefined;
14020
+ this._fromObj = undefined;
14021
+ this._fromPath = undefined;
14022
+ this._toObj = undefined;
14006
14023
  }
14007
14024
 
14008
14025
  /**
@@ -14038,7 +14055,7 @@ enifed('ember-metal/binding', ['exports', 'ember-metal/core', 'ember-metal/logge
14038
14055
  you pass when you `connect()` the binding. It follows the same rules as
14039
14056
  `get()` - see that method for more information.
14040
14057
  @method from
14041
- @param {String} path the property path to connect to
14058
+ @param {String} path The property path to connect to.
14042
14059
  @return {Ember.Binding} `this`
14043
14060
  @public
14044
14061
  */
@@ -14055,7 +14072,7 @@ enifed('ember-metal/binding', ['exports', 'ember-metal/core', 'ember-metal/logge
14055
14072
  you pass when you `connect()` the binding. It follows the same rules as
14056
14073
  `get()` - see that method for more information.
14057
14074
  @method to
14058
- @param {String|Tuple} path A property path or tuple
14075
+ @param {String|Tuple} path A property path or tuple.
14059
14076
  @return {Ember.Binding} `this`
14060
14077
  @public
14061
14078
  */
@@ -14104,19 +14121,42 @@ enifed('ember-metal/binding', ['exports', 'ember-metal/core', 'ember-metal/logge
14104
14121
  connect: function (obj) {
14105
14122
  _emberMetalDebug.assert('Must pass a valid object to Ember.Binding.connect()', !!obj);
14106
14123
 
14107
- var fromPath = this._from;
14108
- var toPath = this._to;
14109
- _emberMetalProperty_set.trySet(obj, toPath, getWithGlobals(obj, fromPath));
14124
+ var fromObj = undefined,
14125
+ fromPath = undefined;
14110
14126
 
14111
- // add an observer on the object to be notified when the binding should be updated
14112
- _emberMetalObserver.addObserver(obj, fromPath, this, this.fromDidChange);
14127
+ // If the binding's "from" path could be interpreted as a global, verify
14128
+ // whether the path refers to a global or not by consulting `Ember.lookup`.
14129
+ if (_emberMetalPath_cache.isGlobalPath(this._from)) {
14130
+ var _name = _emberMetalPath_cache.getFirstKey(this._from);
14131
+ var possibleGlobal = _emberMetalCore.default.lookup[_name];
14113
14132
 
14114
- // if the binding is a two-way binding, also set up an observer on the target
14133
+ if (possibleGlobal) {
14134
+ fromObj = possibleGlobal;
14135
+ fromPath = _emberMetalPath_cache.getTailPath(this._from);
14136
+ }
14137
+ }
14138
+
14139
+ if (fromObj === undefined) {
14140
+ fromObj = obj;
14141
+ fromPath = this._from;
14142
+ }
14143
+
14144
+ _emberMetalProperty_set.trySet(obj, this._to, _emberMetalProperty_get.get(fromObj, fromPath));
14145
+
14146
+ // Add an observer on the object to be notified when the binding should be updated.
14147
+ _emberMetalObserver.addObserver(fromObj, fromPath, this, 'fromDidChange');
14148
+
14149
+ // If the binding is a two-way binding, also set up an observer on the target.
14115
14150
  if (!this._oneWay) {
14116
- _emberMetalObserver.addObserver(obj, toPath, this, this.toDidChange);
14151
+ _emberMetalObserver.addObserver(obj, this._to, this, 'toDidChange');
14117
14152
  }
14118
14153
 
14154
+ _emberMetalEvents.addListener(obj, 'willDestroy', this, 'disconnect');
14155
+
14119
14156
  this._readyToSync = true;
14157
+ this._fromObj = fromObj;
14158
+ this._fromPath = fromPath;
14159
+ this._toObj = obj;
14120
14160
 
14121
14161
  return this;
14122
14162
  },
@@ -14125,25 +14165,22 @@ enifed('ember-metal/binding', ['exports', 'ember-metal/core', 'ember-metal/logge
14125
14165
  Disconnects the binding instance. Changes will no longer be relayed. You
14126
14166
  will not usually need to call this method.
14127
14167
  @method disconnect
14128
- @param {Object} obj The root object you passed when connecting the binding.
14129
14168
  @return {Ember.Binding} `this`
14130
14169
  @public
14131
14170
  */
14132
- disconnect: function (obj) {
14133
- _emberMetalDebug.assert('Must pass a valid object to Ember.Binding.disconnect()', !!obj);
14134
-
14135
- var twoWay = !this._oneWay;
14171
+ disconnect: function () {
14172
+ _emberMetalDebug.assert('Must pass a valid object to Ember.Binding.disconnect()', !!this._toObj);
14136
14173
 
14137
- // remove an observer on the object so we're no longer notified of
14174
+ // Remove an observer on the object so we're no longer notified of
14138
14175
  // changes that should update bindings.
14139
- _emberMetalObserver.removeObserver(obj, this._from, this, this.fromDidChange);
14176
+ _emberMetalObserver.removeObserver(this._fromObj, this._fromPath, this, 'fromDidChange');
14140
14177
 
14141
- // if the binding is two-way, remove the observer from the target as well
14142
- if (twoWay) {
14143
- _emberMetalObserver.removeObserver(obj, this._to, this, this.toDidChange);
14178
+ // If the binding is two-way, remove the observer from the target as well.
14179
+ if (!this._oneWay) {
14180
+ _emberMetalObserver.removeObserver(this._toObj, this._to, this, 'toDidChange');
14144
14181
  }
14145
14182
 
14146
- this._readyToSync = false; // disable scheduled syncs...
14183
+ this._readyToSync = false; // Disable scheduled syncs...
14147
14184
  return this;
14148
14185
  },
14149
14186
 
@@ -14151,22 +14188,22 @@ enifed('ember-metal/binding', ['exports', 'ember-metal/core', 'ember-metal/logge
14151
14188
  // PRIVATE
14152
14189
  //
14153
14190
 
14154
- /* called when the from side changes */
14191
+ /* Called when the from side changes. */
14155
14192
  fromDidChange: function (target) {
14156
- this._scheduleSync(target, 'fwd');
14193
+ this._scheduleSync('fwd');
14157
14194
  },
14158
14195
 
14159
- /* called when the to side changes */
14196
+ /* Called when the to side changes. */
14160
14197
  toDidChange: function (target) {
14161
- this._scheduleSync(target, 'back');
14198
+ this._scheduleSync('back');
14162
14199
  },
14163
14200
 
14164
- _scheduleSync: function (obj, dir) {
14201
+ _scheduleSync: function (dir) {
14165
14202
  var existingDir = this._direction;
14166
14203
 
14167
- // if we haven't scheduled the binding yet, schedule it
14204
+ // If we haven't scheduled the binding yet, schedule it.
14168
14205
  if (existingDir === undefined) {
14169
- _emberMetalRun_loop.default.schedule('sync', this, this._sync, obj);
14206
+ _emberMetalRun_loop.default.schedule('sync', this, '_sync');
14170
14207
  this._direction = dir;
14171
14208
  }
14172
14209
 
@@ -14177,44 +14214,46 @@ enifed('ember-metal/binding', ['exports', 'ember-metal/core', 'ember-metal/logge
14177
14214
  }
14178
14215
  },
14179
14216
 
14180
- _sync: function (obj) {
14217
+ _sync: function () {
14181
14218
  var log = _emberMetalCore.default.LOG_BINDINGS;
14182
14219
 
14183
- // don't synchronize destroyed objects or disconnected bindings
14184
- if (obj.isDestroyed || !this._readyToSync) {
14220
+ var toObj = this._toObj;
14221
+
14222
+ // Don't synchronize destroyed objects or disconnected bindings.
14223
+ if (toObj.isDestroyed || !this._readyToSync) {
14185
14224
  return;
14186
14225
  }
14187
14226
 
14188
- // get the direction of the binding for the object we are
14189
- // synchronizing from
14227
+ // Get the direction of the binding for the object we are
14228
+ // synchronizing from.
14190
14229
  var direction = this._direction;
14191
14230
 
14192
- var fromPath = this._from;
14193
- var toPath = this._to;
14231
+ var fromObj = this._fromObj;
14232
+ var fromPath = this._fromPath;
14194
14233
 
14195
14234
  this._direction = undefined;
14196
14235
 
14197
- // if we're synchronizing from the remote object...
14236
+ // If we're synchronizing from the remote object...
14198
14237
  if (direction === 'fwd') {
14199
- var fromValue = getWithGlobals(obj, this._from);
14238
+ var fromValue = _emberMetalProperty_get.get(fromObj, fromPath);
14200
14239
  if (log) {
14201
- _emberMetalLogger.default.log(' ', this.toString(), '->', fromValue, obj);
14240
+ _emberMetalLogger.default.log(' ', this.toString(), '->', fromValue, fromObj);
14202
14241
  }
14203
14242
  if (this._oneWay) {
14204
- _emberMetalProperty_set.trySet(obj, toPath, fromValue);
14243
+ _emberMetalProperty_set.trySet(toObj, this._to, fromValue);
14205
14244
  } else {
14206
- _emberMetalObserver._suspendObserver(obj, toPath, this, this.toDidChange, function () {
14207
- _emberMetalProperty_set.trySet(obj, toPath, fromValue);
14245
+ _emberMetalObserver._suspendObserver(toObj, this._to, this, 'toDidChange', function () {
14246
+ _emberMetalProperty_set.trySet(toObj, this._to, fromValue);
14208
14247
  });
14209
14248
  }
14210
- // if we're synchronizing *to* the remote object
14249
+ // If we're synchronizing *to* the remote object.
14211
14250
  } else if (direction === 'back') {
14212
- var toValue = _emberMetalProperty_get.get(obj, this._to);
14251
+ var toValue = _emberMetalProperty_get.get(toObj, this._to);
14213
14252
  if (log) {
14214
- _emberMetalLogger.default.log(' ', this.toString(), '<-', toValue, obj);
14253
+ _emberMetalLogger.default.log(' ', this.toString(), '<-', toValue, toObj);
14215
14254
  }
14216
- _emberMetalObserver._suspendObserver(obj, fromPath, this, this.fromDidChange, function () {
14217
- _emberMetalProperty_set.trySet(_emberMetalPath_cache.isGlobal(fromPath) ? _emberMetalCore.default.lookup : obj, fromPath, toValue);
14255
+ _emberMetalObserver._suspendObserver(fromObj, fromPath, this, 'fromDidChange', function () {
14256
+ _emberMetalProperty_set.trySet(fromObj, fromPath, toValue);
14218
14257
  });
14219
14258
  }
14220
14259
  }
@@ -14255,7 +14294,7 @@ enifed('ember-metal/binding', ['exports', 'ember-metal/core', 'ember-metal/logge
14255
14294
  An `Ember.Binding` connects the properties of two objects so that whenever
14256
14295
  the value of one property changes, the other property will be changed also.
14257
14296
 
14258
- ## Automatic Creation of Bindings with `/^*Binding/`-named Properties
14297
+ ## Automatic Creation of Bindings with `/^*Binding/`-named Properties.
14259
14298
 
14260
14299
  You do not usually create Binding objects directly but instead describe
14261
14300
  bindings in your class or object definition using automatic binding
@@ -14304,7 +14343,7 @@ enifed('ember-metal/binding', ['exports', 'ember-metal/core', 'ember-metal/logge
14304
14343
  All of the examples above show you how to configure a custom binding, but the
14305
14344
  result of these customizations will be a binding template, not a fully active
14306
14345
  Binding instance. The binding will actually become active only when you
14307
- instantiate the object the binding belongs to. It is useful however, to
14346
+ instantiate the object the binding belongs to. It is useful, however, to
14308
14347
  understand what actually happens when the binding is activated.
14309
14348
 
14310
14349
  For a binding to function it must have at least a `from` property and a `to`
@@ -14403,7 +14442,6 @@ enifed('ember-metal/binding', ['exports', 'ember-metal/core', 'ember-metal/logge
14403
14442
  }
14404
14443
 
14405
14444
  exports.Binding = Binding;
14406
- exports.isGlobalPath = _emberMetalPath_cache.isGlobal;
14407
14445
  });
14408
14446
  // Ember.LOG_BINDINGS
14409
14447
  enifed('ember-metal/cache', ['exports', 'ember-metal/empty_object'], function (exports, _emberMetalEmpty_object) {
@@ -14461,10 +14499,9 @@ enifed('ember-metal/cache', ['exports', 'ember-metal/empty_object'], function (e
14461
14499
  }
14462
14500
  };
14463
14501
  });
14464
- enifed('ember-metal/chains', ['exports', 'ember-metal/debug', 'ember-metal/property_get', 'ember-metal/meta', 'ember-metal/watch_key', 'ember-metal/empty_object'], function (exports, _emberMetalDebug, _emberMetalProperty_get, _emberMetalMeta, _emberMetalWatch_key, _emberMetalEmpty_object) {
14502
+ enifed('ember-metal/chains', ['exports', 'ember-metal/property_get', 'ember-metal/meta', 'ember-metal/watch_key', 'ember-metal/empty_object'], function (exports, _emberMetalProperty_get, _emberMetalMeta, _emberMetalWatch_key, _emberMetalEmpty_object) {
14465
14503
  'use strict';
14466
14504
 
14467
- exports.flushPendingChains = flushPendingChains;
14468
14505
  exports.finishChains = finishChains;
14469
14506
 
14470
14507
  var FIRST_KEY = /^([^\.]+)/;
@@ -14481,9 +14518,7 @@ enifed('ember-metal/chains', ['exports', 'ember-metal/debug', 'ember-metal/prope
14481
14518
  return !(isObject(obj) && obj.isDescriptor && obj._volatile === false);
14482
14519
  }
14483
14520
 
14484
- function ChainWatchers(obj) {
14485
- // this obj would be the referencing chain node's parent node's value
14486
- this.obj = obj;
14521
+ function ChainWatchers() {
14487
14522
  // chain nodes that reference a key in this obj by key
14488
14523
  // we only create ChainWatchers when we are going to add them
14489
14524
  // so create this upfront
@@ -14568,29 +14603,8 @@ enifed('ember-metal/chains', ['exports', 'ember-metal/debug', 'ember-metal/prope
14568
14603
  }
14569
14604
  };
14570
14605
 
14571
- var pendingQueue = [];
14572
-
14573
- // attempts to add the pendingQueue chains again. If some of them end up
14574
- // back in the queue and reschedule is true, schedules a timeout to try
14575
- // again.
14576
-
14577
- function flushPendingChains() {
14578
- if (pendingQueue.length === 0) {
14579
- return;
14580
- }
14581
-
14582
- var queue = pendingQueue;
14583
- pendingQueue = [];
14584
-
14585
- queue.forEach(function (q) {
14586
- return q[0].add(q[1]);
14587
- });
14588
-
14589
- _emberMetalDebug.warn('Watching an undefined global, Ember expects watched globals to be ' + 'setup by the time the run loop is flushed, check for typos', pendingQueue.length === 0, { id: 'ember-metal.chains-flush-pending-chains' });
14590
- }
14591
-
14592
- function makeChainWatcher(obj) {
14593
- return new ChainWatchers(obj);
14606
+ function makeChainWatcher() {
14607
+ return new ChainWatchers();
14594
14608
  }
14595
14609
 
14596
14610
  function addChainWatcher(obj, keyName, node) {
@@ -14713,65 +14727,30 @@ enifed('ember-metal/chains', ['exports', 'ember-metal/debug', 'ember-metal/prope
14713
14727
  // called on the root node of a chain to setup watchers on the specified
14714
14728
  // path.
14715
14729
  add: function (path) {
14716
- var obj, tuple, key, src, paths;
14717
-
14718
- paths = this._paths;
14730
+ var paths = this._paths;
14719
14731
  paths[path] = (paths[path] || 0) + 1;
14720
14732
 
14721
- obj = this.value();
14722
- tuple = _emberMetalProperty_get.normalizeTuple(obj, path);
14723
-
14724
- // the path was a local path
14725
- if (tuple[0] && tuple[0] === obj) {
14726
- path = tuple[1];
14727
- key = firstKey(path);
14728
- path = path.slice(key.length + 1);
14729
-
14730
- // global path, but object does not exist yet.
14731
- // put into a queue and try to connect later.
14732
- } else if (!tuple[0]) {
14733
- pendingQueue.push([this, path]);
14734
- tuple.length = 0;
14735
- return;
14733
+ var key = firstKey(path);
14734
+ var tail = path.slice(key.length + 1);
14736
14735
 
14737
- // global path, and object already exists
14738
- } else {
14739
- src = tuple[0];
14740
- key = path.slice(0, 0 - (tuple[1].length + 1));
14741
- path = tuple[1];
14742
- }
14743
-
14744
- tuple.length = 0;
14745
- this.chain(key, path, src);
14736
+ this.chain(key, tail);
14746
14737
  },
14747
14738
 
14748
14739
  // called on the root node of a chain to teardown watcher on the specified
14749
14740
  // path
14750
14741
  remove: function (path) {
14751
- var obj, tuple, key, src, paths;
14752
-
14753
- paths = this._paths;
14742
+ var paths = this._paths;
14754
14743
  if (paths[path] > 0) {
14755
14744
  paths[path]--;
14756
14745
  }
14757
14746
 
14758
- obj = this.value();
14759
- tuple = _emberMetalProperty_get.normalizeTuple(obj, path);
14760
- if (tuple[0] === obj) {
14761
- path = tuple[1];
14762
- key = firstKey(path);
14763
- path = path.slice(key.length + 1);
14764
- } else {
14765
- src = tuple[0];
14766
- key = path.slice(0, 0 - (tuple[1].length + 1));
14767
- path = tuple[1];
14768
- }
14747
+ var key = firstKey(path);
14748
+ var tail = path.slice(key.length + 1);
14769
14749
 
14770
- tuple.length = 0;
14771
- this.unchain(key, path);
14750
+ this.unchain(key, tail);
14772
14751
  },
14773
14752
 
14774
- chain: function (key, path, src) {
14753
+ chain: function (key, path) {
14775
14754
  var chains = this._chains;
14776
14755
  var node;
14777
14756
  if (chains === undefined) {
@@ -14781,7 +14760,7 @@ enifed('ember-metal/chains', ['exports', 'ember-metal/debug', 'ember-metal/prope
14781
14760
  }
14782
14761
 
14783
14762
  if (node === undefined) {
14784
- node = chains[key] = new ChainNode(this, key, src);
14763
+ node = chains[key] = new ChainNode(this, key, undefined);
14785
14764
  }
14786
14765
 
14787
14766
  node.count++; // count chains...
@@ -14790,7 +14769,7 @@ enifed('ember-metal/chains', ['exports', 'ember-metal/debug', 'ember-metal/prope
14790
14769
  if (path) {
14791
14770
  key = firstKey(path);
14792
14771
  path = path.slice(key.length + 1);
14793
- node.chain(key, path); // NOTE: no src means it will observe changes...
14772
+ node.chain(key, path);
14794
14773
  }
14795
14774
  },
14796
14775
 
@@ -14837,25 +14816,21 @@ enifed('ember-metal/chains', ['exports', 'ember-metal/debug', 'ember-metal/prope
14837
14816
  }
14838
14817
 
14839
14818
  if (affected && this._parent) {
14840
- this._parent.populateAffected(this, this._key, 1, affected);
14819
+ this._parent.populateAffected(this._key, 1, affected);
14841
14820
  }
14842
14821
  },
14843
14822
 
14844
- populateAffected: function (chain, path, depth, affected) {
14823
+ populateAffected: function (path, depth, affected) {
14845
14824
  if (this._key) {
14846
14825
  path = this._key + '.' + path;
14847
14826
  }
14848
14827
 
14849
14828
  if (this._parent) {
14850
- this._parent.populateAffected(this, path, depth + 1, affected);
14829
+ this._parent.populateAffected(path, depth + 1, affected);
14851
14830
  } else {
14852
14831
  if (depth > 1) {
14853
14832
  affected.push(this.value(), path);
14854
14833
  }
14855
- path = 'this.' + path;
14856
- if (this._paths[path] > 0) {
14857
- affected.push(this.value(), path);
14858
- }
14859
14834
  }
14860
14835
  }
14861
14836
  };
@@ -14896,6 +14871,10 @@ enifed('ember-metal/computed', ['exports', 'ember-metal/debug', 'ember-metal/pro
14896
14871
 
14897
14872
  var DEEP_EACH_REGEX = /\.@each\.[^.]+\./;
14898
14873
 
14874
+ // ..........................................................
14875
+ // COMPUTED PROPERTY
14876
+ //
14877
+
14899
14878
  /**
14900
14879
  A computed property transforms an object literal with object's accessor function(s) into a property.
14901
14880
 
@@ -14998,6 +14977,7 @@ enifed('ember-metal/computed', ['exports', 'ember-metal/debug', 'ember-metal/pro
14998
14977
 
14999
14978
  @class ComputedProperty
15000
14979
  @namespace Ember
14980
+ @constructor
15001
14981
  @public
15002
14982
  */
15003
14983
  function ComputedProperty(config, opts) {
@@ -15156,6 +15136,7 @@ enifed('ember-metal/computed', ['exports', 'ember-metal/debug', 'ember-metal/pro
15156
15136
  @chainable
15157
15137
  @public
15158
15138
  */
15139
+
15159
15140
  ComputedPropertyPrototype.meta = function (meta) {
15160
15141
  if (arguments.length === 0) {
15161
15142
  return this._meta || {};
@@ -15186,6 +15167,33 @@ enifed('ember-metal/computed', ['exports', 'ember-metal/debug', 'ember-metal/pro
15186
15167
  }
15187
15168
  };
15188
15169
 
15170
+ /**
15171
+ Access the value of the function backing the computed property.
15172
+ If this property has already been cached, return the cached result.
15173
+ Otherwise, call the function passing the property name as an argument.
15174
+
15175
+ ```javascript
15176
+ let Person = Ember.Object.extend({
15177
+ fullName: Ember.computed('firstName', 'lastName', function(keyName) {
15178
+ // the keyName parameter is 'fullName' in this case.
15179
+ return this.get('firstName') + ' ' + this.get('lastName');
15180
+ })
15181
+ });
15182
+
15183
+
15184
+ let tom = Person.create({
15185
+ firstName: 'Tom',
15186
+ lastName: 'Dale'
15187
+ });
15188
+
15189
+ tom.get('fullName') // 'Tom Dale'
15190
+ ```
15191
+
15192
+ @method get
15193
+ @param {String} keyName The key being accessed.
15194
+ @return {Object} The return value of the function backing the CP.
15195
+ @public
15196
+ */
15189
15197
  ComputedPropertyPrototype.get = function (obj, keyName) {
15190
15198
  if (this._volatile) {
15191
15199
  return this._getter.call(obj, keyName);
@@ -15217,6 +15225,54 @@ enifed('ember-metal/computed', ['exports', 'ember-metal/debug', 'ember-metal/pro
15217
15225
  return ret;
15218
15226
  };
15219
15227
 
15228
+ /**
15229
+ Set the value of a computed property. If the function that backs your
15230
+ computed property does not accept arguments then the default action for
15231
+ setting would be to define the property on the current object, and set
15232
+ the value of the property to the value being set.
15233
+
15234
+ Generally speaking if you intend for your computed property to be set
15235
+ you should pass `set(key, value)` function in hash as argument to `Ember.computed()` along with `get(key)` function.
15236
+
15237
+ ```javascript
15238
+ let Person = Ember.Object.extend({
15239
+ // these will be supplied by `create`
15240
+ firstName: null,
15241
+ lastName: null,
15242
+
15243
+ fullName: Ember.computed('firstName', 'lastName', {
15244
+ // getter
15245
+ get() {
15246
+ let firstName = this.get('firstName');
15247
+ let lastName = this.get('lastName');
15248
+
15249
+ return firstName + ' ' + lastName;
15250
+ },
15251
+ // setter
15252
+ set(key, value) {
15253
+ let [firstName, lastName] = value.split(' ');
15254
+
15255
+ this.set('firstName', firstName);
15256
+ this.set('lastName', lastName);
15257
+
15258
+ return value;
15259
+ }
15260
+ })
15261
+ });
15262
+
15263
+ let person = Person.create();
15264
+
15265
+ person.set('fullName', 'Peter Wagenet');
15266
+ person.get('firstName'); // 'Peter'
15267
+ person.get('lastName'); // 'Wagenet'
15268
+ ```
15269
+
15270
+ @method set
15271
+ @param {String} keyName The key being accessed.
15272
+ @param {Object} newValue The new value being assigned.
15273
+ @return {Object} The return value of the function backing the CP.
15274
+ @public
15275
+ */
15220
15276
  ComputedPropertyPrototype.set = function computedPropertySetEntry(obj, keyName, value) {
15221
15277
  if (this._readOnly) {
15222
15278
  this._throwReadOnlyError(obj, keyName);
@@ -15360,7 +15416,7 @@ enifed('ember-metal/computed', ['exports', 'ember-metal/debug', 'ember-metal/pro
15360
15416
  this.lastName = 'Jones';
15361
15417
  },
15362
15418
 
15363
- fullName: Ember.computed('firstName', 'lastName', {
15419
+ fullName: Ember.computed({
15364
15420
  get(key) {
15365
15421
  return `${this.get('firstName')} ${this.get('lastName')}`;
15366
15422
  },
@@ -16138,6 +16194,8 @@ enifed('ember-metal/core', ['exports', 'require'], function (exports, _require)
16138
16194
  Ember may overwrite this namespace and therefore, you should avoid adding any
16139
16195
  new properties.
16140
16196
 
16197
+ You can also use the shorthand `Em` instead of `Ember`.
16198
+
16141
16199
  At the heart of Ember is Ember-Runtime, a set of core functions that provide
16142
16200
  cross-platform compatibility and object property observing. Ember-Runtime is
16143
16201
  small and performance-focused so you can use it alongside other
@@ -16146,7 +16204,7 @@ enifed('ember-metal/core', ['exports', 'require'], function (exports, _require)
16146
16204
 
16147
16205
  @class Ember
16148
16206
  @static
16149
- @version 2.4.6
16207
+ @version 2.5.0-beta.1
16150
16208
  @public
16151
16209
  */
16152
16210
 
@@ -16188,11 +16246,11 @@ enifed('ember-metal/core', ['exports', 'require'], function (exports, _require)
16188
16246
 
16189
16247
  @property VERSION
16190
16248
  @type String
16191
- @default '2.4.6'
16249
+ @default '2.5.0-beta.1'
16192
16250
  @static
16193
16251
  @public
16194
16252
  */
16195
- Ember.VERSION = '2.4.6';
16253
+ Ember.VERSION = '2.5.0-beta.1';
16196
16254
 
16197
16255
  /**
16198
16256
  The hash of environment variables used to control various configuration
@@ -16923,7 +16981,7 @@ enifed('ember-metal/events', ['exports', 'ember-metal/debug', 'ember-metal/utils
16923
16981
  return func;
16924
16982
  }
16925
16983
  });
16926
- enifed('ember-metal/expand_properties', ['exports', 'ember-metal/error'], function (exports, _emberMetalError) {
16984
+ enifed('ember-metal/expand_properties', ['exports', 'ember-metal/debug'], function (exports, _emberMetalDebug) {
16927
16985
  'use strict';
16928
16986
 
16929
16987
  exports.default = expandProperties;
@@ -16934,7 +16992,6 @@ enifed('ember-metal/expand_properties', ['exports', 'ember-metal/error'], functi
16934
16992
  */
16935
16993
 
16936
16994
  var SPLIT_REGEX = /\{|\}/;
16937
-
16938
16995
  var END_WITH_EACH_REGEX = /\.@each$/;
16939
16996
 
16940
16997
  /**
@@ -16966,25 +17023,21 @@ enifed('ember-metal/expand_properties', ['exports', 'ember-metal/error'], functi
16966
17023
  */
16967
17024
 
16968
17025
  function expandProperties(pattern, callback) {
16969
- if (pattern.indexOf(' ') > -1) {
16970
- throw new _emberMetalError.default('Brace expanded properties cannot contain spaces, e.g. \'user.{firstName, lastName}\' should be \'user.{firstName,lastName}\'');
16971
- }
17026
+ _emberMetalDebug.assert('A computed property key must be a string', typeof pattern === 'string');
17027
+ _emberMetalDebug.assert('Brace expanded properties cannot contain spaces, e.g. "user.{firstName, lastName}" should be "user.{firstName,lastName}"', pattern.indexOf(' ') === -1);
16972
17028
 
16973
- if ('string' === typeof pattern) {
16974
- var parts = pattern.split(SPLIT_REGEX);
16975
- var properties = [parts];
17029
+ var parts = pattern.split(SPLIT_REGEX);
17030
+ var properties = [parts];
16976
17031
 
16977
- parts.forEach(function (part, index) {
16978
- if (part.indexOf(',') >= 0) {
16979
- properties = duplicateAndReplace(properties, part.split(','), index);
16980
- }
16981
- });
17032
+ for (var i = 0; i < parts.length; i++) {
17033
+ var part = parts[i];
17034
+ if (part.indexOf(',') >= 0) {
17035
+ properties = duplicateAndReplace(properties, part.split(','), i);
17036
+ }
17037
+ }
16982
17038
 
16983
- properties.forEach(function (property) {
16984
- callback(property.join('').replace(END_WITH_EACH_REGEX, '.[]'));
16985
- });
16986
- } else {
16987
- callback(pattern.replace(END_WITH_EACH_REGEX, '.[]'));
17039
+ for (var i = 0; i < properties.length; i++) {
17040
+ callback(properties[i].join('').replace(END_WITH_EACH_REGEX, '.[]'));
16988
17041
  }
16989
17042
  }
16990
17043
 
@@ -17020,11 +17073,9 @@ enifed('ember-metal/features', ['exports', 'ember-metal/core', 'ember-metal/assi
17020
17073
  @since 1.1.0
17021
17074
  @public
17022
17075
  */
17023
- var KNOWN_FEATURES = {};exports.KNOWN_FEATURES = KNOWN_FEATURES;
17076
+ var FEATURES = _emberMetalAssign.default({}, _emberMetalCore.default.ENV.FEATURES);exports.FEATURES = FEATURES;
17024
17077
  // jshint ignore:line
17025
- var FEATURES = _emberMetalAssign.default(KNOWN_FEATURES, _emberMetalCore.default.ENV.FEATURES);
17026
17078
 
17027
- exports.FEATURES = FEATURES;
17028
17079
  /**
17029
17080
  Determine whether the specified `feature` is enabled. Used by Ember's
17030
17081
  build tools to exclude experimental features from beta/stable builds.
@@ -17098,7 +17149,7 @@ enifed('ember-metal/get_properties', ['exports', 'ember-metal/property_get'], fu
17098
17149
  return ret;
17099
17150
  }
17100
17151
  });
17101
- enifed('ember-metal/index', ['exports', 'require', 'ember-metal/core', 'ember-metal/debug', 'ember-metal/features', 'ember-metal/assign', 'ember-metal/merge', 'ember-metal/instrumentation', 'ember-metal/utils', 'ember-metal/meta', 'ember-metal/error', 'ember-metal/cache', 'ember-metal/logger', 'ember-metal/property_get', 'ember-metal/events', 'ember-metal/observer_set', 'ember-metal/property_events', 'ember-metal/properties', 'ember-metal/property_set', 'ember-metal/map', 'ember-metal/get_properties', 'ember-metal/set_properties', 'ember-metal/watch_key', 'ember-metal/chains', 'ember-metal/watch_path', 'ember-metal/watching', 'ember-metal/expand_properties', 'ember-metal/computed', 'ember-metal/alias', 'ember-metal/computed_macros', 'ember-metal/observer', 'ember-metal/mixin', 'ember-metal/binding', 'ember-metal/run_loop', 'ember-metal/libraries', 'ember-metal/is_none', 'ember-metal/is_empty', 'ember-metal/is_blank', 'ember-metal/is_present', 'backburner'], function (exports, _require, _emberMetalCore, _emberMetalDebug, _emberMetalFeatures, _emberMetalAssign, _emberMetalMerge, _emberMetalInstrumentation, _emberMetalUtils, _emberMetalMeta, _emberMetalError, _emberMetalCache, _emberMetalLogger, _emberMetalProperty_get, _emberMetalEvents, _emberMetalObserver_set, _emberMetalProperty_events, _emberMetalProperties, _emberMetalProperty_set, _emberMetalMap, _emberMetalGet_properties, _emberMetalSet_properties, _emberMetalWatch_key, _emberMetalChains, _emberMetalWatch_path, _emberMetalWatching, _emberMetalExpand_properties, _emberMetalComputed, _emberMetalAlias, _emberMetalComputed_macros, _emberMetalObserver, _emberMetalMixin, _emberMetalBinding, _emberMetalRun_loop, _emberMetalLibraries, _emberMetalIs_none, _emberMetalIs_empty, _emberMetalIs_blank, _emberMetalIs_present, _backburner) {
17152
+ enifed('ember-metal/index', ['exports', 'require', 'ember-metal/core', 'ember-metal/debug', 'ember-metal/features', 'ember-metal/assign', 'ember-metal/merge', 'ember-metal/instrumentation', 'ember-metal/utils', 'ember-metal/meta', 'ember-metal/error', 'ember-metal/cache', 'ember-metal/logger', 'ember-metal/property_get', 'ember-metal/events', 'ember-metal/observer_set', 'ember-metal/property_events', 'ember-metal/properties', 'ember-metal/property_set', 'ember-metal/map', 'ember-metal/get_properties', 'ember-metal/set_properties', 'ember-metal/watch_key', 'ember-metal/chains', 'ember-metal/watch_path', 'ember-metal/watching', 'ember-metal/expand_properties', 'ember-metal/computed', 'ember-metal/alias', 'ember-metal/computed_macros', 'ember-metal/observer', 'ember-metal/mixin', 'ember-metal/binding', 'ember-metal/path_cache', 'ember-metal/run_loop', 'ember-metal/libraries', 'ember-metal/is_none', 'ember-metal/is_empty', 'ember-metal/is_blank', 'ember-metal/is_present', 'backburner'], function (exports, _require, _emberMetalCore, _emberMetalDebug, _emberMetalFeatures, _emberMetalAssign, _emberMetalMerge, _emberMetalInstrumentation, _emberMetalUtils, _emberMetalMeta, _emberMetalError, _emberMetalCache, _emberMetalLogger, _emberMetalProperty_get, _emberMetalEvents, _emberMetalObserver_set, _emberMetalProperty_events, _emberMetalProperties, _emberMetalProperty_set, _emberMetalMap, _emberMetalGet_properties, _emberMetalSet_properties, _emberMetalWatch_key, _emberMetalChains, _emberMetalWatch_path, _emberMetalWatching, _emberMetalExpand_properties, _emberMetalComputed, _emberMetalAlias, _emberMetalComputed_macros, _emberMetalObserver, _emberMetalMixin, _emberMetalBinding, _emberMetalPath_cache, _emberMetalRun_loop, _emberMetalLibraries, _emberMetalIs_none, _emberMetalIs_empty, _emberMetalIs_blank, _emberMetalIs_present, _backburner) {
17102
17153
  /**
17103
17154
  @module ember
17104
17155
  @submodule ember-metal
@@ -17168,7 +17219,6 @@ enifed('ember-metal/index', ['exports', 'require', 'ember-metal/core', 'ember-me
17168
17219
 
17169
17220
  _emberMetalCore.default.get = _emberMetalProperty_get.get;
17170
17221
  _emberMetalCore.default.getWithDefault = _emberMetalProperty_get.getWithDefault;
17171
- _emberMetalCore.default.normalizeTuple = _emberMetalProperty_get.normalizeTuple;
17172
17222
  _emberMetalCore.default._getPath = _emberMetalProperty_get._getPath;
17173
17223
 
17174
17224
  _emberMetalCore.default.on = _emberMetalEvents.on;
@@ -17206,7 +17256,6 @@ enifed('ember-metal/index', ['exports', 'require', 'ember-metal/core', 'ember-me
17206
17256
  _emberMetalCore.default.watchKey = _emberMetalWatch_key.watchKey;
17207
17257
  _emberMetalCore.default.unwatchKey = _emberMetalWatch_key.unwatchKey;
17208
17258
 
17209
- _emberMetalCore.default.flushPendingChains = _emberMetalChains.flushPendingChains;
17210
17259
  _emberMetalCore.default.removeChainWatcher = _emberMetalChains.removeChainWatcher;
17211
17260
  _emberMetalCore.default._ChainNode = _emberMetalChains.ChainNode;
17212
17261
  _emberMetalCore.default.finishChains = _emberMetalChains.finishChains;
@@ -17242,7 +17291,7 @@ enifed('ember-metal/index', ['exports', 'require', 'ember-metal/core', 'ember-me
17242
17291
 
17243
17292
  _emberMetalCore.default.bind = _emberMetalBinding.bind;
17244
17293
  _emberMetalCore.default.Binding = _emberMetalBinding.Binding;
17245
- _emberMetalCore.default.isGlobalPath = _emberMetalBinding.isGlobalPath;
17294
+ _emberMetalCore.default.isGlobalPath = _emberMetalPath_cache.isGlobalPath;
17246
17295
 
17247
17296
  _emberMetalCore.default.run = _emberMetalRun_loop.default;
17248
17297
 
@@ -17264,6 +17313,7 @@ enifed('ember-metal/index', ['exports', 'require', 'ember-metal/core', 'ember-me
17264
17313
  _emberMetalCore.default.isBlank = _emberMetalIs_blank.default;
17265
17314
  _emberMetalCore.default.isPresent = _emberMetalIs_present.default;
17266
17315
 
17316
+ _emberMetalCore.default.assign = Object.assign || _emberMetalAssign.default;
17267
17317
  _emberMetalCore.default.merge = _emberMetalMerge.default;
17268
17318
 
17269
17319
  _emberMetalCore.default.FEATURES = _emberMetalFeatures.FEATURES;
@@ -17305,6 +17355,10 @@ enifed('ember-metal/index', ['exports', 'require', 'ember-metal/core', 'ember-me
17305
17355
  _emberMetalCore.default.Debug.registerWarnHandler = function () {};
17306
17356
  }
17307
17357
 
17358
+ _emberMetalDebug.deprecate('Support for the `ember-legacy-views` addon will end soon, please remove it from your application.', !!_emberMetalCore.default.ENV._ENABLE_LEGACY_VIEW_SUPPORT, { id: 'ember-legacy-views', until: '2.6.0', url: 'http://emberjs.com/deprecations/v1.x/#toc_ember-view' });
17359
+
17360
+ _emberMetalDebug.deprecate('Support for the `ember-legacy-controllers` addon will end soon, please remove it from your application.', !!_emberMetalCore.default.ENV._ENABLE_LEGACY_CONTROLLER_SUPPORT, { id: 'ember-legacy-controllers', until: '2.6.0', url: 'http://emberjs.com/deprecations/v1.x/#toc_objectcontroller' });
17361
+
17308
17362
  _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);
17309
17363
  _emberMetalCore.default.keys = _emberMetalDebug.deprecateFunc('Ember.keys is deprecated in favor of Object.keys', { id: 'ember-metal.ember.keys', until: '3.0.0' }, Object.keys);
17310
17364
 
@@ -17835,6 +17889,12 @@ enifed('ember-metal/libraries', ['exports', 'ember-metal/debug', 'ember-metal/fe
17835
17889
  }
17836
17890
  };
17837
17891
 
17892
+ if (_emberMetalFeatures.default('ember-libraries-isregistered')) {
17893
+ Libraries.prototype.isRegistered = function (name) {
17894
+ return !!this._getLibraryByName(name);
17895
+ };
17896
+ }
17897
+
17838
17898
  exports.default = Libraries;
17839
17899
  });
17840
17900
  enifed('ember-metal/logger', ['exports', 'ember-metal/core', 'ember-metal/error'], function (exports, _emberMetalCore, _emberMetalError) {
@@ -18506,6 +18566,9 @@ enifed('ember-metal/merge', ['exports', 'ember-metal/debug', 'ember-metal/featur
18506
18566
  */
18507
18567
 
18508
18568
  function merge(original, updates) {
18569
+ if (_emberMetalFeatures.default('ember-metal-ember-assign')) {
18570
+ _emberMetalDebug.deprecate('Usage of `Ember.merge` is deprecated, use `Ember.assign` instead.', false, { id: 'ember-metal.merge', until: '3.0.0' });
18571
+ }
18509
18572
 
18510
18573
  if (!updates || typeof updates !== 'object') {
18511
18574
  return original;
@@ -20361,9 +20424,9 @@ enifed('ember-metal/properties', ['exports', 'ember-metal/debug', 'ember-metal/f
20361
20424
  Ember.defineProperty(contact, 'lastName', undefined, 'Jolley');
20362
20425
 
20363
20426
  // define a computed property
20364
- Ember.defineProperty(contact, 'fullName', Ember.computed('firstName', 'lastName', function() {
20427
+ Ember.defineProperty(contact, 'fullName', Ember.computed(function() {
20365
20428
  return this.firstName+' '+this.lastName;
20366
- }));
20429
+ }).property('firstName', 'lastName'));
20367
20430
  ```
20368
20431
 
20369
20432
  @private
@@ -20745,7 +20808,7 @@ enifed('ember-metal/property_events', ['exports', 'ember-metal/utils', 'ember-me
20745
20808
  exports.endPropertyChanges = endPropertyChanges;
20746
20809
  exports.changeProperties = changeProperties;
20747
20810
  });
20748
- enifed('ember-metal/property_get', ['exports', 'ember-metal/core', 'ember-metal/debug', 'ember-metal/error', 'ember-metal/path_cache'], function (exports, _emberMetalCore, _emberMetalDebug, _emberMetalError, _emberMetalPath_cache) {
20811
+ enifed('ember-metal/property_get', ['exports', 'ember-metal/debug', 'ember-metal/path_cache'], function (exports, _emberMetalDebug, _emberMetalPath_cache) {
20749
20812
  /**
20750
20813
  @module ember-metal
20751
20814
  */
@@ -20753,12 +20816,9 @@ enifed('ember-metal/property_get', ['exports', 'ember-metal/core', 'ember-metal/
20753
20816
  'use strict';
20754
20817
 
20755
20818
  exports.get = get;
20756
- exports.normalizeTuple = normalizeTuple;
20757
20819
  exports._getPath = _getPath;
20758
20820
  exports.getWithDefault = getWithDefault;
20759
20821
 
20760
- var FIRST_KEY = /^([^\.]+)/;
20761
-
20762
20822
  // ..........................................................
20763
20823
  // GET AND SET
20764
20824
  //
@@ -20824,77 +20884,24 @@ enifed('ember-metal/property_get', ['exports', 'ember-metal/core', 'ember-metal/
20824
20884
  }
20825
20885
  }
20826
20886
 
20827
- /**
20828
- Normalizes a target/path pair to reflect that actual target/path that should
20829
- be observed, etc. This takes into account passing in global property
20830
- paths (i.e. a path beginning with a capital letter not defined on the
20831
- target).
20832
-
20833
- @private
20834
- @method normalizeTuple
20835
- @for Ember
20836
- @param {Object} target The current target. May be `null`.
20837
- @param {String} path A path on the target or a global property path.
20838
- @return {Array} a temporary array with the normalized target/path pair.
20839
- */
20840
-
20841
- function normalizeTuple(target, path) {
20842
- var hasThis = _emberMetalPath_cache.hasThis(path);
20843
- var isGlobal = !hasThis && _emberMetalPath_cache.isGlobal(path);
20844
- var key;
20845
-
20846
- if (!target && !isGlobal) {
20847
- return [undefined, ''];
20848
- }
20849
-
20850
- if (hasThis) {
20851
- path = path.slice(5);
20852
- }
20853
-
20854
- if (!target || isGlobal) {
20855
- target = _emberMetalCore.default.lookup;
20856
- }
20857
-
20858
- if (isGlobal && _emberMetalPath_cache.isPath(path)) {
20859
- key = path.match(FIRST_KEY)[0];
20860
- target = get(target, key);
20861
- path = path.slice(key.length + 1);
20862
- }
20863
-
20864
- // must return some kind of path to be valid else other things will break.
20865
- validateIsPath(path);
20866
-
20867
- return [target, path];
20868
- }
20869
-
20870
- function validateIsPath(path) {
20871
- if (!path || path.length === 0) {
20872
- throw new _emberMetalError.default('Object in path ' + path + ' could not be found or was destroyed.');
20873
- }
20874
- }
20875
-
20876
20887
  function _getPath(root, path) {
20877
- var hasThis, parts, tuple, idx, len;
20888
+ var obj = root;
20889
+ var parts = path.split('.');
20890
+ var len = parts.length;
20878
20891
 
20879
- // detect complicated paths and normalize them
20880
- hasThis = _emberMetalPath_cache.hasThis(path);
20892
+ for (var i = 0; i < len; i++) {
20893
+ if (obj == null) {
20894
+ return obj;
20895
+ }
20881
20896
 
20882
- if (!root || hasThis) {
20883
- tuple = normalizeTuple(root, path);
20884
- root = tuple[0];
20885
- path = tuple[1];
20886
- tuple.length = 0;
20887
- }
20897
+ obj = get(obj, parts[i]);
20888
20898
 
20889
- parts = path.split('.');
20890
- len = parts.length;
20891
- for (idx = 0; root != null && idx < len; idx++) {
20892
- root = get(root, parts[idx]);
20893
- if (root && root.isDestroyed) {
20899
+ if (obj && obj.isDestroyed) {
20894
20900
  return undefined;
20895
20901
  }
20896
20902
  }
20897
- return root;
20903
+
20904
+ return obj;
20898
20905
  }
20899
20906
 
20900
20907
  /**
@@ -20964,7 +20971,7 @@ enifed('ember-metal/property_set', ['exports', 'ember-metal/debug', 'ember-metal
20964
20971
  return setPath(obj, keyName, value, tolerant);
20965
20972
  }
20966
20973
 
20967
- _emberMetalDebug.assert('calling set on destroyed object', !obj.isDestroyed);
20974
+ _emberMetalDebug.assert('calling set on destroyed object: ' + _emberMetalUtils.toString(obj) + '.' + keyName + ' = ' + _emberMetalUtils.toString(value), !obj.isDestroyed);
20968
20975
 
20969
20976
  if (desc) {
20970
20977
  desc.set(obj, keyName, value);
@@ -22458,13 +22465,13 @@ enifed('ember-metal/streams/utils', ['exports', 'ember-metal/debug', 'ember-meta
22458
22465
  exports.setValue = setValue;
22459
22466
 
22460
22467
  /*
22461
- Check whether an object is a stream or not
22468
+ Check whether an object is a stream or not.
22462
22469
 
22463
22470
  @private
22464
22471
  @for Ember.stream
22465
22472
  @function isStream
22466
- @param {Object|Stream} object object to check whether it is a stream
22467
- @return {Boolean} `true` if the object is a stream, `false` otherwise
22473
+ @param {Object|Stream} object Object to check whether it is a stream.
22474
+ @return {Boolean} `true` if the object is a stream, `false` otherwise.
22468
22475
  */
22469
22476
 
22470
22477
  function isStream(object) {
@@ -22478,10 +22485,10 @@ enifed('ember-metal/streams/utils', ['exports', 'ember-metal/debug', 'ember-meta
22478
22485
  @public
22479
22486
  @for Ember.stream
22480
22487
  @function subscribe
22481
- @param {Object|Stream} object object or stream to potentially subscribe to
22482
- @param {Function} callback function to run when stream value changes
22488
+ @param {Object|Stream} object Object or stream to potentially subscribe to.
22489
+ @param {Function} callback Function to run when stream value changes.
22483
22490
  @param {Object} [context] the callback will be executed with this context if it
22484
- is provided
22491
+ is provided.
22485
22492
  */
22486
22493
 
22487
22494
  function subscribe(object, callback, context) {
@@ -22497,9 +22504,9 @@ enifed('ember-metal/streams/utils', ['exports', 'ember-metal/debug', 'ember-meta
22497
22504
  @private
22498
22505
  @for Ember.stream
22499
22506
  @function unsubscribe
22500
- @param {Object|Stream} object object or stream to potentially unsubscribe from
22501
- @param {Function} callback function originally passed to `subscribe()`
22502
- @param {Object} [context] object originally passed to `subscribe()`
22507
+ @param {Object|Stream} object Object or stream to potentially unsubscribe from.
22508
+ @param {Function} callback Function originally passed to `subscribe()`.
22509
+ @param {Object} [context] Object originally passed to `subscribe()`.
22503
22510
  */
22504
22511
 
22505
22512
  function unsubscribe(object, callback, context) {
@@ -22509,14 +22516,14 @@ enifed('ember-metal/streams/utils', ['exports', 'ember-metal/debug', 'ember-meta
22509
22516
  }
22510
22517
 
22511
22518
  /*
22512
- Retrieve the value of a stream, or in the case a non-stream object is passed,
22519
+ Retrieve the value of a stream, or in the case where a non-stream object is passed,
22513
22520
  return the object itself.
22514
22521
 
22515
22522
  @private
22516
22523
  @for Ember.stream
22517
22524
  @function read
22518
- @param {Object|Stream} object object to return the value of
22519
- @return the stream's current value, or the non-stream object itself
22525
+ @param {Object|Stream} object Object to return the value of.
22526
+ @return The stream's current value, or the non-stream object itself.
22520
22527
  */
22521
22528
 
22522
22529
  function read(object) {
@@ -22534,7 +22541,7 @@ enifed('ember-metal/streams/utils', ['exports', 'ember-metal/debug', 'ember-meta
22534
22541
  @for Ember.stream
22535
22542
  @function readArray
22536
22543
  @param {Array} array The array to read values from
22537
- @return {Array} a new array of the same length with the values of non-stream
22544
+ @return {Array} A new array of the same length with the values of non-stream
22538
22545
  objects mapped from their original positions untouched, and
22539
22546
  the values of stream objects retaining their original position
22540
22547
  and replaced with the stream's current value.
@@ -22556,8 +22563,8 @@ enifed('ember-metal/streams/utils', ['exports', 'ember-metal/debug', 'ember-meta
22556
22563
  @private
22557
22564
  @for Ember.stream
22558
22565
  @function readHash
22559
- @param {Object} object The hash to read keys and values from
22560
- @return {Object} a new object with the same keys as the passed object. The
22566
+ @param {Object} object The hash to read keys and values from.
22567
+ @return {Object} A new object with the same keys as the passed object. The
22561
22568
  property values in the new object are the original values in
22562
22569
  the case of non-stream objects, and the streams' current
22563
22570
  values in the case of stream objects.
@@ -22572,14 +22579,14 @@ enifed('ember-metal/streams/utils', ['exports', 'ember-metal/debug', 'ember-meta
22572
22579
  }
22573
22580
 
22574
22581
  /*
22575
- Check whether an array contains any stream values
22582
+ Check whether an array contains any stream values.
22576
22583
 
22577
22584
  @private
22578
22585
  @for Ember.stream
22579
22586
  @function scanArray
22580
- @param {Array} array array given to a handlebars helper
22587
+ @param {Array} array Array given to a handlebars helper.
22581
22588
  @return {Boolean} `true` if the array contains a stream/bound value, `false`
22582
- otherwise
22589
+ otherwise.
22583
22590
  */
22584
22591
 
22585
22592
  function scanArray(array) {
@@ -22597,14 +22604,14 @@ enifed('ember-metal/streams/utils', ['exports', 'ember-metal/debug', 'ember-meta
22597
22604
  }
22598
22605
 
22599
22606
  /*
22600
- Check whether a hash has any stream property values
22607
+ Check whether a hash has any stream property values.
22601
22608
 
22602
22609
  @private
22603
22610
  @for Ember.stream
22604
22611
  @function scanHash
22605
- @param {Object} hash "hash" argument given to a handlebars helper
22612
+ @param {Object} hash "hash" argument given to a handlebars helper.
22606
22613
  @return {Boolean} `true` if the object contains a stream/bound value, `false`
22607
- otherwise
22614
+ otherwise.
22608
22615
  */
22609
22616
 
22610
22617
  function scanHash(hash) {
@@ -22625,8 +22632,8 @@ enifed('ember-metal/streams/utils', ['exports', 'ember-metal/debug', 'ember-meta
22625
22632
  this.array = array;
22626
22633
  this.separator = separator;
22627
22634
 
22628
- // used by angle bracket components to detect an attribute was provided
22629
- // as a string literal
22635
+ // Used by angle bracket components to detect an attribute was provided
22636
+ // as a string literal.
22630
22637
  this.isConcat = true;
22631
22638
  },
22632
22639
 
@@ -22641,17 +22648,17 @@ enifed('ember-metal/streams/utils', ['exports', 'ember-metal/debug', 'ember-meta
22641
22648
  });
22642
22649
 
22643
22650
  /*
22644
- Join an array, with any streams replaced by their current values
22651
+ Join an array, with any streams replaced by their current values.
22645
22652
 
22646
22653
  @private
22647
22654
  @for Ember.stream
22648
22655
  @function concat
22649
22656
  @param {Array} array An array containing zero or more stream objects and
22650
- zero or more non-stream objects
22651
- @param {String} separator string to be used to join array elements
22657
+ zero or more non-stream objects.
22658
+ @param {String} separator String to be used to join array elements.
22652
22659
  @return {String} String with array elements concatenated and joined by the
22653
22660
  provided separator, and any stream array members having been
22654
- replaced by the current value of the stream
22661
+ replaced by the current value of the stream.
22655
22662
  */
22656
22663
 
22657
22664
  function concat(array, separator) {
@@ -22791,9 +22798,9 @@ enifed('ember-metal/streams/utils', ['exports', 'ember-metal/debug', 'ember-meta
22791
22798
  @private
22792
22799
  @for Ember.stream
22793
22800
  @function chain
22794
- @param {Object|Stream} value A stream or non-stream object
22795
- @param {Function} fn function to be run when the stream value changes, or to
22796
- be run once in the case of a non-stream object
22801
+ @param {Object|Stream} value A stream or non-stream object.
22802
+ @param {Function} fn Function to be run when the stream value changes, or to
22803
+ be run once in the case of a non-stream object.
22797
22804
  @return {Object|Stream} In the case of a stream `value` parameter, a new
22798
22805
  stream that will be updated with the return value of
22799
22806
  the provided function `fn`. In the case of a
@@ -22860,6 +22867,7 @@ enifed('ember-metal/utils', ['exports'], function (exports) {
22860
22867
  exports.apply = apply;
22861
22868
  exports.applyStr = applyStr;
22862
22869
  exports.lookupDescriptor = lookupDescriptor;
22870
+ exports.toString = toString;
22863
22871
  var _uuid = 0;
22864
22872
 
22865
22873
  /**
@@ -23244,7 +23252,7 @@ enifed('ember-metal/utils', ['exports'], function (exports) {
23244
23252
  // TYPING & ARRAY MESSAGING
23245
23253
  //
23246
23254
 
23247
- var toString = Object.prototype.toString;
23255
+ var objectToString = Object.prototype.toString;
23248
23256
 
23249
23257
  /**
23250
23258
  Forces the passed object to be part of an array. If the object is already
@@ -23308,7 +23316,7 @@ enifed('ember-metal/utils', ['exports'], function (exports) {
23308
23316
  return '' + obj;
23309
23317
  }
23310
23318
  // overridden toString
23311
- if (typeof obj.toString === 'function' && obj.toString !== toString) {
23319
+ if (typeof obj.toString === 'function' && obj.toString !== objectToString) {
23312
23320
  return obj.toString();
23313
23321
  }
23314
23322
 
@@ -23326,7 +23334,7 @@ enifed('ember-metal/utils', ['exports'], function (exports) {
23326
23334
  }
23327
23335
 
23328
23336
  if (v && typeof v.toString !== 'function') {
23329
- ret.push(key + ': ' + toString.call(v));
23337
+ ret.push(key + ': ' + objectToString.call(v));
23330
23338
  } else {
23331
23339
  ret.push(key + ': ' + v);
23332
23340
  }
@@ -23408,6 +23416,17 @@ enifed('ember-metal/utils', ['exports'], function (exports) {
23408
23416
  return null;
23409
23417
  }
23410
23418
 
23419
+ // A `toString` util function that supports objects without a `toString`
23420
+ // method, e.g. an object created with `Object.create(null)`.
23421
+
23422
+ function toString(obj) {
23423
+ if (obj && obj.toString) {
23424
+ return obj.toString();
23425
+ } else {
23426
+ return objectToString.call(obj);
23427
+ }
23428
+ }
23429
+
23411
23430
  exports.GUID_KEY = GUID_KEY;
23412
23431
  exports.makeArray = makeArray;
23413
23432
  exports.canInvoke = canInvoke;
@@ -23627,8 +23646,6 @@ enifed('ember-metal/watching', ['exports', 'ember-metal/chains', 'ember-metal/wa
23627
23646
  return meta && meta.peekWatching(key) || 0;
23628
23647
  }
23629
23648
 
23630
- watch.flushPending = _emberMetalChains.flushPendingChains;
23631
-
23632
23649
  function unwatch(obj, _keyPath, m) {
23633
23650
  // can't watch length on Array - it is special...
23634
23651
  if (_keyPath === 'length' && Array.isArray(obj)) {
@@ -23784,17 +23801,17 @@ enifed('ember-metal/weak_map', ['exports', 'ember-metal/debug', 'ember-metal/uti
23784
23801
  }
23785
23802
  };
23786
23803
  });
23787
- enifed('ember-metal-views/index', ['exports', 'ember-metal-views/renderer'], function (exports, _emberMetalViewsRenderer) {
23788
- 'use strict';
23789
-
23790
- exports.Renderer = _emberMetalViewsRenderer.default;
23791
- });
23792
- enifed('ember-metal-views/renderer', ['exports', 'ember-metal/run_loop', 'ember-metal/property_get', 'ember-metal/property_set', 'ember-metal/assign', 'ember-metal/set_properties', 'ember-views/system/build-component-template', 'ember-metal/environment'], function (exports, _emberMetalRun_loop, _emberMetalProperty_get, _emberMetalProperty_set, _emberMetalAssign, _emberMetalSet_properties, _emberViewsSystemBuildComponentTemplate, _emberMetalEnvironment) {
23804
+ enifed('ember-metal-views/htmlbars-renderer', ['exports', 'ember-metal/run_loop', 'ember-metal/property_get', 'ember-metal/property_set', 'ember-metal/assign', 'ember-metal/set_properties', 'ember-views/system/build-component-template', 'ember-metal/environment', 'htmlbars-runtime'], function (exports, _emberMetalRun_loop, _emberMetalProperty_get, _emberMetalProperty_set, _emberMetalAssign, _emberMetalSet_properties, _emberViewsSystemBuildComponentTemplate, _emberMetalEnvironment, _htmlbarsRuntime) {
23793
23805
  'use strict';
23794
23806
 
23807
+ exports.Renderer = Renderer;
23795
23808
  exports.MorphSet = MorphSet;
23796
23809
 
23797
- function Renderer(domHelper, destinedForDOM) {
23810
+ function Renderer(domHelper) {
23811
+ var _ref = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];
23812
+
23813
+ var destinedForDOM = _ref.destinedForDOM;
23814
+
23798
23815
  this._dom = domHelper;
23799
23816
 
23800
23817
  // This flag indicates whether the resulting rendered element will be
@@ -23829,7 +23846,7 @@ enifed('ember-metal-views/renderer', ['exports', 'ember-metal/run_loop', 'ember-
23829
23846
  };
23830
23847
 
23831
23848
  Renderer.prototype.renderTopLevelView = function Renderer_renderTopLevelView(view, renderNode) {
23832
- // Check to see if insertion has been canceled
23849
+ // Check to see if insertion has been canceled.
23833
23850
  if (view._willInsert) {
23834
23851
  view._willInsert = false;
23835
23852
  this.prerenderTopLevelView(view, renderNode);
@@ -23908,7 +23925,7 @@ enifed('ember-metal-views/renderer', ['exports', 'ember-metal/run_loop', 'ember-
23908
23925
  env.renderedViews.length = 0;
23909
23926
  };
23910
23927
 
23911
- // This entry point is called from top-level `view.appendTo`
23928
+ // This entry point is called from top-level `view.appendTo`.
23912
23929
  Renderer.prototype.appendTo = function Renderer_appendTo(view, target) {
23913
23930
  var morph = this._dom.appendMorph(target);
23914
23931
  morph.ownerNode = morph;
@@ -23943,16 +23960,16 @@ enifed('ember-metal-views/renderer', ['exports', 'ember-metal/run_loop', 'ember-
23943
23960
  if (view.trigger) {
23944
23961
  view.trigger('willInsertElement');
23945
23962
  }
23946
- }; // will place into DOM
23963
+ }; // Will place into DOM.
23947
23964
 
23948
23965
  Renderer.prototype.setAttrs = function (view, attrs) {
23949
23966
  _emberMetalProperty_set.set(view, 'attrs', attrs);
23950
- }; // set attrs the first time
23967
+ }; // Set attrs the first time.
23951
23968
 
23952
23969
  Renderer.prototype.componentInitAttrs = function (component, attrs) {
23953
23970
  component.trigger('didInitAttrs', { attrs: attrs });
23954
23971
  component.trigger('didReceiveAttrs', { newAttrs: attrs });
23955
- }; // set attrs the first time
23972
+ }; // Set attrs the first time.
23956
23973
 
23957
23974
  Renderer.prototype.didInsertElement = function (view) {
23958
23975
  if (view._transitionTo) {
@@ -23962,7 +23979,7 @@ enifed('ember-metal-views/renderer', ['exports', 'ember-metal/run_loop', 'ember-
23962
23979
  if (view.trigger) {
23963
23980
  view.trigger('didInsertElement');
23964
23981
  }
23965
- }; // inDOM // placed into DOM
23982
+ }; // inDOM // Placed into DOM.
23966
23983
 
23967
23984
  Renderer.prototype.didUpdate = function (view) {
23968
23985
  if (view.trigger) {
@@ -23978,7 +23995,7 @@ enifed('ember-metal-views/renderer', ['exports', 'ember-metal/run_loop', 'ember-
23978
23995
 
23979
23996
  Renderer.prototype.updateAttrs = function (view, attrs) {
23980
23997
  this.setAttrs(view, attrs);
23981
- }; // setting new attrs
23998
+ }; // Setting new attrs.
23982
23999
 
23983
24000
  Renderer.prototype.componentUpdateAttrs = function (component, newAttrs) {
23984
24001
  var oldAttrs = null;
@@ -24014,6 +24031,20 @@ enifed('ember-metal-views/renderer', ['exports', 'ember-metal/run_loop', 'ember-
24014
24031
  component.trigger('willRender');
24015
24032
  };
24016
24033
 
24034
+ Renderer.prototype.rerender = function (view) {
24035
+ var renderNode = view._renderNode;
24036
+
24037
+ renderNode.isDirty = true;
24038
+ _htmlbarsRuntime.internal.visitChildren(renderNode.childNodes, function (node) {
24039
+ if (node.getState().manager) {
24040
+ node.shouldReceiveAttrs = true;
24041
+ }
24042
+ node.isDirty = true;
24043
+ });
24044
+
24045
+ renderNode.ownerNode.emberView.scheduleRevalidate(renderNode, view.toString(), 'rerendering');
24046
+ };
24047
+
24017
24048
  Renderer.prototype.remove = function (view, shouldDestroy) {
24018
24049
  this.willDestroyElement(view);
24019
24050
 
@@ -24065,10 +24096,19 @@ enifed('ember-metal-views/renderer', ['exports', 'ember-metal/run_loop', 'ember-
24065
24096
  if (view.trigger) {
24066
24097
  view.trigger('didDestroyElement');
24067
24098
  }
24068
- }; // element destroyed so view.destroy shouldn't try to remove it removedFromDOM
24099
+ }; // Element destroyed so view.destroy shouldn't try to remove it removedFromDOM
24069
24100
 
24070
24101
  exports.default = Renderer;
24071
24102
  });
24103
+ enifed('ember-metal-views/index', ['exports', 'ember-metal-views/htmlbars-renderer'], function (exports, _emberMetalViewsHtmlbarsRenderer) {
24104
+ 'use strict';
24105
+
24106
+ function _interopExportWildcard(obj, defaults) { var newObj = defaults({}, obj); delete newObj['default']; return newObj; }
24107
+
24108
+ function _defaults(obj, defaults) { var keys = Object.getOwnPropertyNames(defaults); for (var i = 0; i < keys.length; i++) { var key = keys[i]; var value = Object.getOwnPropertyDescriptor(defaults, key); if (value && value.configurable && obj[key] === undefined) { Object.defineProperty(obj, key, value); } } return obj; }
24109
+
24110
+ _defaults(exports, _interopExportWildcard(_emberMetalViewsHtmlbarsRenderer, _defaults));
24111
+ });
24072
24112
  enifed('ember-routing/ext/controller', ['exports', 'ember-metal/property_get', 'ember-runtime/mixins/controller'], function (exports, _emberMetalProperty_get, _emberRuntimeMixinsController) {
24073
24113
  'use strict';
24074
24114
 
@@ -25743,6 +25783,12 @@ enifed('ember-routing/system/route', ['exports', 'ember-metal/core', 'ember-meta
25743
25783
  var controllerDefinedQueryParameterConfiguration = _emberMetalProperty_get.get(controllerProto, 'queryParams');
25744
25784
  var normalizedControllerQueryParameterConfiguration = _emberRoutingUtils.normalizeControllerQueryParams(controllerDefinedQueryParameterConfiguration);
25745
25785
  combinedQueryParameterConfiguration = mergeEachQueryParams(normalizedControllerQueryParameterConfiguration, queryParameterConfiguraton);
25786
+
25787
+ if (_emberMetalFeatures.default('ember-routing-route-configured-query-params')) {
25788
+ if (controllerDefinedQueryParameterConfiguration.length) {
25789
+ _emberMetalDebug.deprecate('Configuring query parameters on a controller is deprecated. Migrate the query parameters configuration from the \'' + controllerName + '\' controller to the \'' + this.routeName + '\' route: ' + combinedQueryParameterConfiguration, false, { id: 'ember-routing.controller-configured-query-params', until: '3.0.0' });
25790
+ }
25791
+ }
25746
25792
  } else if (hasRouterDefinedQueryParams) {
25747
25793
  // the developer has not defined a controller but *has* supplied route query params.
25748
25794
  // Generate a class for them so we can later insert default values
@@ -25769,6 +25815,19 @@ enifed('ember-routing/system/route', ['exports', 'ember-metal/core', 'ember-meta
25769
25815
 
25770
25816
  var desc = combinedQueryParameterConfiguration[propName];
25771
25817
 
25818
+ if (_emberMetalFeatures.default('ember-routing-route-configured-query-params')) {
25819
+ // apply default values to controllers
25820
+ // detect that default value defined on router config
25821
+ if (desc.hasOwnProperty('defaultValue')) {
25822
+ // detect that property was not defined on controller
25823
+ if (controllerProto[propName] === undefined) {
25824
+ controllerProto[propName] = desc.defaultValue;
25825
+ } else {
25826
+ deprecateQueryParamDefaultValuesSetOnController(controllerName, this.routeName, propName);
25827
+ }
25828
+ }
25829
+ }
25830
+
25772
25831
  var scope = desc.scope || 'model';
25773
25832
  var parts;
25774
25833
 
@@ -27347,7 +27406,7 @@ enifed('ember-routing/system/route', ['exports', 'ember-metal/core', 'ember-meta
27347
27406
  //
27348
27407
  this.render('post', { // the template name associated with 'post' Route
27349
27408
  into: 'application', // the parent route to 'post' Route
27350
- outlet: 'main', // {{outlet}} and {{outlet 'main'}} are synonymous,
27409
+ outlet: 'main', // {{outlet}} and {{outlet 'main' are synonymous}},
27351
27410
  view: 'post', // the view associated with the 'post' Route
27352
27411
  controller: 'post', // the controller associated with the 'post' Route
27353
27412
  })
@@ -27576,6 +27635,17 @@ enifed('ember-routing/system/route', ['exports', 'ember-metal/core', 'ember-meta
27576
27635
  };
27577
27636
 
27578
27637
  var Component = undefined;
27638
+ if (_emberMetalFeatures.default('ember-routing-routable-components')) {
27639
+ var componentName = options && options.component || namePassed && name || route.componentName || name;
27640
+ var componentLookup = owner.lookup('component-lookup:main');
27641
+ Component = componentLookup.lookupFactory(componentName);
27642
+ var isGlimmerComponent = Component && Component.proto().isGlimmerComponent;
27643
+ if (!template && !ViewClass && Component && isGlimmerComponent) {
27644
+ renderOptions.Component = Component;
27645
+ renderOptions.ViewClass = undefined;
27646
+ renderOptions.attrs = { model: _emberMetalProperty_get.get(controller, 'model') };
27647
+ }
27648
+ }
27579
27649
 
27580
27650
  if (!ViewClass && !template && !Component) {
27581
27651
  _emberMetalDebug.assert('Could not find "' + name + '" template, view, or component.', isDefaultRender);
@@ -27643,12 +27713,16 @@ enifed('ember-routing/system/route', ['exports', 'ember-metal/core', 'ember-meta
27643
27713
  var keysAlreadyMergedOrSkippable;
27644
27714
  var qps = {};
27645
27715
 
27646
- keysAlreadyMergedOrSkippable = {
27647
- defaultValue: true,
27648
- type: true,
27649
- scope: true,
27650
- as: true
27651
- };
27716
+ if (_emberMetalFeatures.default('ember-routing-route-configured-query-params')) {
27717
+ keysAlreadyMergedOrSkippable = {};
27718
+ } else {
27719
+ keysAlreadyMergedOrSkippable = {
27720
+ defaultValue: true,
27721
+ type: true,
27722
+ scope: true,
27723
+ as: true
27724
+ };
27725
+ }
27652
27726
 
27653
27727
  // first loop over all controller qps, merging them with any matching route qps
27654
27728
  // into a new empty object to avoid mutating.
@@ -27695,11 +27769,6 @@ enifed('ember-routing/system/route', ['exports', 'ember-metal/core', 'ember-meta
27695
27769
  exports.default = Route;
27696
27770
  });
27697
27771
  // FEATURES, A, deprecate, assert, Logger
27698
-
27699
- // apply default values to controllers
27700
- // detect that default value defined on router config
27701
-
27702
- // detect that property was not defined on controller
27703
27772
  enifed('ember-routing/system/router', ['exports', 'ember-metal/logger', 'ember-metal/debug', 'ember-metal/error', 'ember-metal/property_get', 'ember-metal/property_set', 'ember-metal/properties', 'ember-metal/empty_object', 'ember-metal/computed', 'ember-metal/assign', 'ember-metal/run_loop', 'ember-runtime/system/object', 'ember-runtime/mixins/evented', 'ember-routing/system/dsl', 'ember-routing/location/api', 'ember-routing/utils', 'ember-metal/utils', 'ember-routing/system/router_state', 'container/owner', 'ember-metal/dictionary', 'router', 'router/transition'], function (exports, _emberMetalLogger, _emberMetalDebug, _emberMetalError, _emberMetalProperty_get, _emberMetalProperty_set, _emberMetalProperties, _emberMetalEmpty_object, _emberMetalComputed, _emberMetalAssign, _emberMetalRun_loop, _emberRuntimeSystemObject, _emberRuntimeMixinsEvented, _emberRoutingSystemDsl, _emberRoutingLocationApi, _emberRoutingUtils, _emberMetalUtils, _emberRoutingSystemRouter_state, _containerOwner, _emberMetalDictionary, _router4, _routerTransition) {
27704
27773
  'use strict';
27705
27774
 
@@ -27880,9 +27949,9 @@ enifed('ember-routing/system/router', ['exports', 'ember-metal/logger', 'ember-m
27880
27949
  didTransition: function() {
27881
27950
  this._super(...arguments);
27882
27951
  return ga('send', 'pageview', {
27883
- 'page': this.get('url'),
27884
- 'title': this.get('url')
27885
- });
27952
+ 'page': this.get('url'),
27953
+ 'title': this.get('url')
27954
+ });
27886
27955
  }
27887
27956
  });
27888
27957
  ```
@@ -27984,7 +28053,7 @@ enifed('ember-routing/system/router', ['exports', 'ember-metal/logger', 'ember-m
27984
28053
  containing a mapping of query parameters
27985
28054
  @return {Transition} the transition object associated with this
27986
28055
  attempted transition
27987
- @private
28056
+ @public
27988
28057
  */
27989
28058
  transitionTo: function () {
27990
28059
  var queryParams;
@@ -29186,13 +29255,13 @@ enifed('ember-routing-htmlbars/keywords/action', ['exports', 'htmlbars-runtime/h
29186
29255
  ```
29187
29256
 
29188
29257
  In these contexts,
29189
- the helper is called a "closure action" helper. It's behavior is simple:
29258
+ the helper is called a "closure action" helper. Its behavior is simple:
29190
29259
  If passed a function name, read that function off the `actions` property
29191
29260
  of the current context. Once that function is read (or if a function was
29192
29261
  passed), create a closure over that function and any arguments.
29193
29262
 
29194
29263
  The resulting value of an action helper used this way is simply a function.
29195
- For example with this attribute context example:
29264
+ For example, in the attribute context:
29196
29265
 
29197
29266
  ```handlebars
29198
29267
  {{! An example of attribute context }}
@@ -29213,7 +29282,7 @@ enifed('ember-routing-htmlbars/keywords/action', ['exports', 'htmlbars-runtime/h
29213
29282
 
29214
29283
  Thus when the div is clicked, the action on that context is called.
29215
29284
  Because the `actionFunction` is just a function, closure actions can be
29216
- passed between components the still execute in the correct context.
29285
+ passed between components and still execute in the correct context.
29217
29286
 
29218
29287
  Here is an example action handler on a component:
29219
29288
 
@@ -29261,8 +29330,8 @@ enifed('ember-routing-htmlbars/keywords/action', ['exports', 'htmlbars-runtime/h
29261
29330
  ```
29262
29331
 
29263
29332
  The first argument (`model`) was curried over, and the run-time argument (`event`)
29264
- becomes a second argument. Action calls be nested this way because each simply
29265
- returns a function. Any function can be passed to the `{{action` helper, including
29333
+ becomes a second argument. Action calls can be nested this way because each simply
29334
+ returns a function. Any function can be passed to the `{{action}}` helper, including
29266
29335
  other actions.
29267
29336
 
29268
29337
  Actions invoked with `sendAction` have the same currying behavior as demonstrated
@@ -29292,9 +29361,9 @@ enifed('ember-routing-htmlbars/keywords/action', ['exports', 'htmlbars-runtime/h
29292
29361
  });
29293
29362
  ```
29294
29363
 
29295
- ### Attaching actions to DOM
29364
+ ### Attaching actions to DOM elements
29296
29365
 
29297
- The third context the `{{action` helper can be used in we call "element space".
29366
+ The third context of the `{{action}}` helper can be called "element space".
29298
29367
  For example:
29299
29368
 
29300
29369
  ```handlebars
@@ -29303,7 +29372,7 @@ enifed('ember-routing-htmlbars/keywords/action', ['exports', 'htmlbars-runtime/h
29303
29372
  ```
29304
29373
 
29305
29374
  Used this way, the `{{action}}` helper provides a useful shortcut for
29306
- registering an HTML element within a template for a single DOM event and
29375
+ registering an HTML element in a template for a single DOM event and
29307
29376
  forwarding that interaction to the template's context (controller or component).
29308
29377
 
29309
29378
  If the context of a template is a controller, actions used this way will
@@ -29312,8 +29381,7 @@ enifed('ember-routing-htmlbars/keywords/action', ['exports', 'htmlbars-runtime/h
29312
29381
 
29313
29382
  ### Event Propagation
29314
29383
 
29315
- `{{action}}` helpers called in element space can control event bubbling. Note
29316
- that the closure style actions cannot.
29384
+ `{{action}}` helpers called in element space can control event bubbling.
29317
29385
 
29318
29386
  Events triggered through the action helper will automatically have
29319
29387
  `.preventDefault()` called on them. You do not need to do so in your event
@@ -29333,35 +29401,14 @@ enifed('ember-routing-htmlbars/keywords/action', ['exports', 'htmlbars-runtime/h
29333
29401
  <button {{action 'edit' post bubbles=false}}>Edit</button>
29334
29402
  ```
29335
29403
 
29336
- To disable bubbling with closure style actions you must create your own
29337
- wrapper helper that makes use of `event.stopPropagation()`:
29338
-
29339
- ```handlebars
29340
- <div onclick={{disable-bubbling (action "sayHello")}}>Hello</div>
29341
- ```
29342
-
29343
- ```js
29344
- // app/helpers/disable-bubbling.js
29345
- import Ember from 'ember';
29346
-
29347
- export function disableBubbling([action]) {
29348
- return function(event) {
29349
- event.stopPropagation();
29350
-
29351
- return action(event);
29352
- };
29353
- }
29354
-
29355
- export default Ember.Helper.helper(disableBubbling);
29356
- ```
29357
-
29358
29404
  If you need the default handler to trigger you should either register your
29359
- own event handler, or use event methods on your view class. See [Ember.View](/api/classes/Ember.View.html)
29360
- 'Responding to Browser Events' for more information.
29405
+ own event handler, or use event methods on your view class. See
29406
+ ["Responding to Browser Events"](/api/classes/Ember.View.html#toc_responding-to-browser-events)
29407
+ in the documentation for Ember.View for more information.
29361
29408
 
29362
29409
  ### Specifying DOM event type
29363
29410
 
29364
- `{{action` helpers called in element space can specify an event type.
29411
+ `{{action}}` helpers called in element space can specify an event type.
29365
29412
 
29366
29413
  By default the `{{action}}` helper registers for DOM `click` events. You can
29367
29414
  supply an `on` option to the helper to specify a different DOM event name:
@@ -29372,14 +29419,14 @@ enifed('ember-routing-htmlbars/keywords/action', ['exports', 'htmlbars-runtime/h
29372
29419
  </div>
29373
29420
  ```
29374
29421
 
29375
- See [Event Names](/api/classes/Ember.View.html#toc_event-names) for a list of
29422
+ See ["Event Names"](/api/classes/Ember.View.html#toc_event-names) for a list of
29376
29423
  acceptable DOM event names.
29377
29424
 
29378
29425
  ### Specifying whitelisted modifier keys
29379
29426
 
29380
- `{{action` helpers called in element space can specify modifier keys.
29427
+ `{{action}}` helpers called in element space can specify modifier keys.
29381
29428
 
29382
- By default the `{{action}}` helper will ignore click event with pressed modifier
29429
+ By default the `{{action}}` helper will ignore click events with pressed modifier
29383
29430
  keys. You can supply an `allowedKeys` option to specify which keys should not be ignored.
29384
29431
 
29385
29432
  ```handlebars
@@ -29388,7 +29435,7 @@ enifed('ember-routing-htmlbars/keywords/action', ['exports', 'htmlbars-runtime/h
29388
29435
  </div>
29389
29436
  ```
29390
29437
 
29391
- This way the `{{action}}` will fire when clicking with the alt key pressed down.
29438
+ This way the action will fire when clicking with the alt key pressed down.
29392
29439
 
29393
29440
  Alternatively, supply "any" to the `allowedKeys` option to accept any combination of modifier keys.
29394
29441
 
@@ -29475,9 +29522,6 @@ enifed('ember-routing-htmlbars/keywords/closure-action', ['exports', 'ember-meta
29475
29522
  if (!action) {
29476
29523
  throw new _emberMetalError.default('An action named \'' + actionName + '\' was not found in ' + target + '.');
29477
29524
  }
29478
- } else if (action && typeof action[INVOKE] === 'function') {
29479
- target = action;
29480
- action = action[INVOKE];
29481
29525
  } else if (actionType !== 'function') {
29482
29526
  throw new _emberMetalError.default('An action could not be made for `' + rawAction.label + '` in ' + target + '. Please confirm that you are using either a quoted action name (i.e. `(action \'' + rawAction.label + '\')`) or a function available in ' + target + '.');
29483
29527
  }
@@ -29849,7 +29893,6 @@ enifed('ember-routing-htmlbars/keywords/render', ['exports', 'ember-metal/debug'
29849
29893
  }
29850
29894
 
29851
29895
  var parentController = _emberMetalStreamsUtils.read(scope.getLocal('controller'));
29852
- var target = parentController || router;
29853
29896
  var controller;
29854
29897
 
29855
29898
  // choose name
@@ -29859,7 +29902,7 @@ enifed('ember-routing-htmlbars/keywords/render', ['exports', 'ember-metal/debug'
29859
29902
  controller = factory.create({
29860
29903
  model: _emberMetalStreamsUtils.read(context),
29861
29904
  parentController: parentController,
29862
- target: target
29905
+ target: parentController
29863
29906
  });
29864
29907
 
29865
29908
  node.addDestruction(controller);
@@ -29867,7 +29910,7 @@ enifed('ember-routing-htmlbars/keywords/render', ['exports', 'ember-metal/debug'
29867
29910
  controller = owner.lookup(controllerFullName) || _emberRoutingSystemGenerate_controller.default(owner, controllerName);
29868
29911
 
29869
29912
  controller.setProperties({
29870
- target: target,
29913
+ target: parentController,
29871
29914
  parentController: parentController
29872
29915
  });
29873
29916
  }
@@ -30287,7 +30330,7 @@ enifed('ember-routing-views/components/link-to', ['exports', 'ember-metal/logger
30287
30330
 
30288
30331
  'use strict';
30289
30332
 
30290
- _emberHtmlbarsTemplatesLinkTo.default.meta.revision = 'Ember@2.4.6';
30333
+ _emberHtmlbarsTemplatesLinkTo.default.meta.revision = 'Ember@2.5.0-beta.1';
30291
30334
 
30292
30335
  /**
30293
30336
  `Ember.LinkComponent` renders an element whose `click` event triggers a
@@ -30726,7 +30769,7 @@ enifed('ember-routing-views/components/link-to', ['exports', 'ember-metal/logger
30726
30769
  _emberMetalDebug.assert('You must provide one or more parameters to the link-to component.', params.length);
30727
30770
 
30728
30771
  var disabledWhen = _emberMetalProperty_get.get(this, 'disabledWhen');
30729
- if (disabledWhen !== undefined) {
30772
+ if (disabledWhen) {
30730
30773
  this.set('disabled', disabledWhen);
30731
30774
  }
30732
30775
 
@@ -30790,7 +30833,7 @@ enifed('ember-routing-views/views/outlet', ['exports', 'ember-views/views/view',
30790
30833
 
30791
30834
  'use strict';
30792
30835
 
30793
- _emberHtmlbarsTemplatesTopLevelView.default.meta.revision = 'Ember@2.4.6';
30836
+ _emberHtmlbarsTemplatesTopLevelView.default.meta.revision = 'Ember@2.5.0-beta.1';
30794
30837
 
30795
30838
  var CoreOutletView = _emberViewsViewsView.default.extend({
30796
30839
  defaultTemplate: _emberHtmlbarsTemplatesTopLevelView.default,
@@ -30941,7 +30984,18 @@ enifed('ember-runtime/compare', ['exports', 'ember-runtime/utils', 'ember-runtim
30941
30984
  return spaceship(v, w);
30942
30985
 
30943
30986
  case 'string':
30944
- return spaceship(v.localeCompare(w), 0);
30987
+ // We are comparing Strings using operators instead of `String#localeCompare`
30988
+ // because of unexpected behavior for certain edge cases.
30989
+ // For example `'Z'.localeCompare('a')` returns `1`.
30990
+ //
30991
+ // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/localeCompare#Description
30992
+ if (v < w) {
30993
+ return -1;
30994
+ } else if (v === w) {
30995
+ return 0;
30996
+ }
30997
+
30998
+ return 1;
30945
30999
 
30946
31000
  case 'array':
30947
31001
  var vLen = v.length;
@@ -33258,19 +33312,8 @@ enifed('ember-runtime/mixins/array', ['exports', 'ember-metal/core', 'ember-meta
33258
33312
  on the array. Just get an equivalent property on this object and it will
33259
33313
  return an enumerable that maps automatically to the named key on the
33260
33314
  member objects.
33261
- `@each` should only be used in a non-terminal context. Example:
33262
- ```javascript
33263
- myMethod: computed('posts.@each.author', function(){
33264
- ...
33265
- });
33266
- ```
33267
- If you merely want to watch for the array being changed, like an object being
33268
- replaced, added or removed, use `[]` instead of `@each`.
33269
- ```javascript
33270
- myMethod: computed('posts.[]', function(){
33271
- ...
33272
- });
33273
- ```
33315
+ If you merely want to watch for any items being added or removed to the array,
33316
+ use the `[]` property instead of `@each`.
33274
33317
  @property @each
33275
33318
  @public
33276
33319
  */
@@ -33727,7 +33770,6 @@ enifed('ember-runtime/mixins/enumerable', ['exports', 'ember-metal/property_get'
33727
33770
  ```
33728
33771
  @property firstObject
33729
33772
  @return {Object} the object or undefined
33730
- @readOnly
33731
33773
  @public
33732
33774
  */
33733
33775
  firstObject: _emberMetalComputed.computed('[]', function () {
@@ -33756,7 +33798,6 @@ enifed('ember-runtime/mixins/enumerable', ['exports', 'ember-metal/property_get'
33756
33798
  ```
33757
33799
  @property lastObject
33758
33800
  @return {Object} the last object or undefined
33759
- @readOnly
33760
33801
  @public
33761
33802
  */
33762
33803
  lastObject: _emberMetalComputed.computed('[]', function () {
@@ -36284,8 +36325,9 @@ enifed('ember-runtime/mixins/target_action_support', ['exports', 'ember-metal/co
36284
36325
  @return {Boolean} true if the action was sent successfully and did not return false
36285
36326
  @private
36286
36327
  */
36287
- triggerAction: function (opts) {
36288
- opts = opts || {};
36328
+ triggerAction: function () {
36329
+ var opts = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];
36330
+
36289
36331
  var action = opts.action || _emberMetalProperty_get.get(this, 'action');
36290
36332
  var target = opts.target || _emberMetalProperty_get.get(this, 'targetObject');
36291
36333
  var actionContext = opts.actionContext;
@@ -36829,7 +36871,7 @@ enifed('ember-runtime/system/core_object', ['exports', 'ember-metal/debug', 'emb
36829
36871
  if (mergedProperties && mergedProperties.length && mergedProperties.indexOf(keyName) >= 0) {
36830
36872
  var originalValue = this[keyName];
36831
36873
 
36832
- value = _emberMetalAssign.default({}, originalValue, value);
36874
+ value = _emberMetalAssign.default(originalValue, value);
36833
36875
  }
36834
36876
 
36835
36877
  if (desc) {
@@ -38118,14 +38160,14 @@ enifed('ember-runtime/system/native_array', ['exports', 'ember-metal/core', 'emb
38118
38160
  if (_emberMetalCore.default.EXTEND_PROTOTYPES === true || _emberMetalCore.default.EXTEND_PROTOTYPES.Array) {
38119
38161
  NativeArray.apply(Array.prototype);
38120
38162
  exports. // ES6TODO: Setting A onto the object returned by ember-metal/core to avoid circles
38121
- A = A = function (arr) {
38122
- return arr || [];
38163
+ A = A = function () {
38164
+ var arr = arguments.length <= 0 || arguments[0] === undefined ? [] : arguments[0];
38165
+ return arr;
38123
38166
  };
38124
38167
  } else {
38125
- exports.A = A = function (arr) {
38126
- if (arr === undefined) {
38127
- arr = [];
38128
- }
38168
+ exports.A = A = function () {
38169
+ var arr = arguments.length <= 0 || arguments[0] === undefined ? [] : arguments[0];
38170
+
38129
38171
  return _emberRuntimeMixinsArray.default.detect(arr) ? arr : NativeArray.apply(arr);
38130
38172
  };
38131
38173
  }
@@ -38776,20 +38818,19 @@ enifed('ember-template-compiler/compat', ['exports', 'ember-metal/core', 'ember-
38776
38818
  EmberHandlebars.compile = _emberTemplateCompilerSystemCompile.default;
38777
38819
  EmberHandlebars.template = _emberTemplateCompilerSystemTemplate.default;
38778
38820
  });
38779
- enifed('ember-template-compiler/index', ['exports', 'ember-metal', 'ember-template-compiler/system/precompile', 'ember-template-compiler/system/compile', 'ember-template-compiler/system/template', 'ember-template-compiler/plugins', 'ember-template-compiler/plugins/transform-old-binding-syntax', 'ember-template-compiler/plugins/transform-old-class-binding-syntax', 'ember-template-compiler/plugins/transform-item-class', 'ember-template-compiler/plugins/transform-closure-component-attrs-into-mut', 'ember-template-compiler/plugins/transform-component-attrs-into-mut', 'ember-template-compiler/plugins/transform-component-curly-to-readonly', 'ember-template-compiler/plugins/transform-angle-bracket-components', 'ember-template-compiler/plugins/transform-input-on-to-onEvent', 'ember-template-compiler/plugins/transform-top-level-components', 'ember-template-compiler/plugins/transform-each-into-collection', 'ember-template-compiler/plugins/transform-unescaped-inline-link-to', 'ember-template-compiler/plugins/deprecate-render-block', 'ember-template-compiler/plugins/assert-no-view-and-controller-paths', 'ember-template-compiler/plugins/assert-no-view-helper', 'ember-template-compiler/compat'], function (exports, _emberMetal, _emberTemplateCompilerSystemPrecompile, _emberTemplateCompilerSystemCompile, _emberTemplateCompilerSystemTemplate, _emberTemplateCompilerPlugins, _emberTemplateCompilerPluginsTransformOldBindingSyntax, _emberTemplateCompilerPluginsTransformOldClassBindingSyntax, _emberTemplateCompilerPluginsTransformItemClass, _emberTemplateCompilerPluginsTransformClosureComponentAttrsIntoMut, _emberTemplateCompilerPluginsTransformComponentAttrsIntoMut, _emberTemplateCompilerPluginsTransformComponentCurlyToReadonly, _emberTemplateCompilerPluginsTransformAngleBracketComponents, _emberTemplateCompilerPluginsTransformInputOnToOnEvent, _emberTemplateCompilerPluginsTransformTopLevelComponents, _emberTemplateCompilerPluginsTransformEachIntoCollection, _emberTemplateCompilerPluginsTransformUnescapedInlineLinkTo, _emberTemplateCompilerPluginsDeprecateRenderBlock, _emberTemplateCompilerPluginsAssertNoViewAndControllerPaths, _emberTemplateCompilerPluginsAssertNoViewHelper, _emberTemplateCompilerCompat) {
38821
+ enifed('ember-template-compiler/index', ['exports', 'ember-metal', 'ember-template-compiler/system/precompile', 'ember-template-compiler/system/compile', 'ember-template-compiler/system/template', 'ember-template-compiler/plugins', 'ember-template-compiler/plugins/transform-old-binding-syntax', 'ember-template-compiler/plugins/transform-old-class-binding-syntax', 'ember-template-compiler/plugins/transform-item-class', 'ember-template-compiler/plugins/transform-component-attrs-into-mut', 'ember-template-compiler/plugins/transform-component-curly-to-readonly', 'ember-template-compiler/plugins/transform-angle-bracket-components', 'ember-template-compiler/plugins/transform-input-on-to-onEvent', 'ember-template-compiler/plugins/transform-top-level-components', 'ember-template-compiler/plugins/transform-each-into-collection', 'ember-template-compiler/plugins/transform-unescaped-inline-link-to', 'ember-template-compiler/plugins/assert-no-view-and-controller-paths', 'ember-template-compiler/plugins/assert-no-view-helper', 'ember-template-compiler/plugins/assert-no-each-in', 'ember-template-compiler/compat'], function (exports, _emberMetal, _emberTemplateCompilerSystemPrecompile, _emberTemplateCompilerSystemCompile, _emberTemplateCompilerSystemTemplate, _emberTemplateCompilerPlugins, _emberTemplateCompilerPluginsTransformOldBindingSyntax, _emberTemplateCompilerPluginsTransformOldClassBindingSyntax, _emberTemplateCompilerPluginsTransformItemClass, _emberTemplateCompilerPluginsTransformComponentAttrsIntoMut, _emberTemplateCompilerPluginsTransformComponentCurlyToReadonly, _emberTemplateCompilerPluginsTransformAngleBracketComponents, _emberTemplateCompilerPluginsTransformInputOnToOnEvent, _emberTemplateCompilerPluginsTransformTopLevelComponents, _emberTemplateCompilerPluginsTransformEachIntoCollection, _emberTemplateCompilerPluginsTransformUnescapedInlineLinkTo, _emberTemplateCompilerPluginsAssertNoViewAndControllerPaths, _emberTemplateCompilerPluginsAssertNoViewHelper, _emberTemplateCompilerPluginsAssertNoEachIn, _emberTemplateCompilerCompat) {
38780
38822
  'use strict';
38781
38823
 
38782
38824
  _emberTemplateCompilerPlugins.registerPlugin('ast', _emberTemplateCompilerPluginsTransformOldBindingSyntax.default);
38783
38825
  _emberTemplateCompilerPlugins.registerPlugin('ast', _emberTemplateCompilerPluginsTransformOldClassBindingSyntax.default);
38784
38826
  _emberTemplateCompilerPlugins.registerPlugin('ast', _emberTemplateCompilerPluginsTransformItemClass.default);
38785
- _emberTemplateCompilerPlugins.registerPlugin('ast', _emberTemplateCompilerPluginsTransformClosureComponentAttrsIntoMut.default);
38786
38827
  _emberTemplateCompilerPlugins.registerPlugin('ast', _emberTemplateCompilerPluginsTransformComponentAttrsIntoMut.default);
38787
38828
  _emberTemplateCompilerPlugins.registerPlugin('ast', _emberTemplateCompilerPluginsTransformComponentCurlyToReadonly.default);
38788
38829
  _emberTemplateCompilerPlugins.registerPlugin('ast', _emberTemplateCompilerPluginsTransformAngleBracketComponents.default);
38789
38830
  _emberTemplateCompilerPlugins.registerPlugin('ast', _emberTemplateCompilerPluginsTransformInputOnToOnEvent.default);
38790
38831
  _emberTemplateCompilerPlugins.registerPlugin('ast', _emberTemplateCompilerPluginsTransformTopLevelComponents.default);
38791
38832
  _emberTemplateCompilerPlugins.registerPlugin('ast', _emberTemplateCompilerPluginsTransformUnescapedInlineLinkTo.default);
38792
- _emberTemplateCompilerPlugins.registerPlugin('ast', _emberTemplateCompilerPluginsDeprecateRenderBlock.default);
38833
+ _emberTemplateCompilerPlugins.registerPlugin('ast', _emberTemplateCompilerPluginsAssertNoEachIn.default);
38793
38834
 
38794
38835
  if (_emberMetal.default.ENV._ENABLE_LEGACY_VIEW_SUPPORT) {
38795
38836
  _emberTemplateCompilerPlugins.registerPlugin('ast', _emberTemplateCompilerPluginsTransformEachIntoCollection.default);
@@ -38806,13 +38847,56 @@ enifed('ember-template-compiler/index', ['exports', 'ember-metal', 'ember-templa
38806
38847
  });
38807
38848
 
38808
38849
  // used for adding Ember.Handlebars.compile for backwards compat
38850
+ enifed('ember-template-compiler/plugins/assert-no-each-in', ['exports', 'ember-metal/core', 'ember-metal/debug', 'ember-template-compiler/system/calculate-location-display'], function (exports, _emberMetalCore, _emberMetalDebug, _emberTemplateCompilerSystemCalculateLocationDisplay) {
38851
+ 'use strict';
38852
+
38853
+ function AssertNoEachIn() {
38854
+ var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];
38855
+
38856
+ this.syntax = null;
38857
+ this.options = options;
38858
+ }
38859
+
38860
+ AssertNoEachIn.prototype.transform = function AssertNoEachIn_transform(ast) {
38861
+ if (!!_emberMetalCore.default.ENV._ENABLE_LEGACY_VIEW_SUPPORT) {
38862
+ return ast;
38863
+ }
38864
+ var walker = new this.syntax.Walker();
38865
+ var moduleName = this.options && this.options.moduleName;
38866
+
38867
+ walker.visit(ast, function (node) {
38868
+ if (!validate(node)) {
38869
+ return;
38870
+ }
38871
+ assertHelper(moduleName, node);
38872
+ });
38873
+
38874
+ return ast;
38875
+ };
38876
+
38877
+ function assertHelper(moduleName, node) {
38878
+ var moduleInfo = _emberTemplateCompilerSystemCalculateLocationDisplay.default(moduleName, node.loc);
38879
+ var singular = node.params[0].original;
38880
+ var plural = node.params[2].original;
38881
+
38882
+ _emberMetalDebug.assert('Using {{#each ' + singular + ' in ' + plural + '}} ' + moduleInfo + 'is no longer supported in Ember 2.0+, please use {{#each ' + plural + ' as |' + singular + '|}}');
38883
+ }
38884
+
38885
+ function validate(node) {
38886
+ return (node.type === 'BlockStatement' || node.type === 'MustacheStatement') && node.path.original === 'each' && node.params.length === 3 && node.params[1].type === 'PathExpression' && node.params[1].original === 'in';
38887
+ }
38888
+
38889
+ exports.default = AssertNoEachIn;
38890
+ });
38809
38891
  enifed('ember-template-compiler/plugins/assert-no-view-and-controller-paths', ['exports', 'ember-metal/core', 'ember-metal/debug', 'ember-template-compiler/system/calculate-location-display'], function (exports, _emberMetalCore, _emberMetalDebug, _emberTemplateCompilerSystemCalculateLocationDisplay) {
38810
38892
  'use strict';
38811
38893
 
38812
- function AssertNoViewAndControllerPaths(options) {
38894
+ function AssertNoViewAndControllerPaths() {
38895
+ var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];
38896
+
38813
38897
  // set later within HTMLBars to the syntax package
38814
38898
  this.syntax = null;
38815
- this.options = options || {};
38899
+ this.options = options;
38816
38900
  }
38817
38901
 
38818
38902
  /**
@@ -38887,10 +38971,12 @@ enifed('ember-template-compiler/plugins/assert-no-view-and-controller-paths', ['
38887
38971
  enifed('ember-template-compiler/plugins/assert-no-view-helper', ['exports', 'ember-metal/core', 'ember-metal/debug', 'ember-template-compiler/system/calculate-location-display'], function (exports, _emberMetalCore, _emberMetalDebug, _emberTemplateCompilerSystemCalculateLocationDisplay) {
38888
38972
  'use strict';
38889
38973
 
38890
- function AssertNoViewHelper(options) {
38974
+ function AssertNoViewHelper() {
38975
+ var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];
38976
+
38891
38977
  // set later within HTMLBars to the syntax package
38892
38978
  this.syntax = null;
38893
- this.options = options || {};
38979
+ this.options = options;
38894
38980
  }
38895
38981
 
38896
38982
  /**
@@ -38932,45 +39018,6 @@ enifed('ember-template-compiler/plugins/assert-no-view-helper', ['exports', 'emb
38932
39018
 
38933
39019
  exports.default = AssertNoViewHelper;
38934
39020
  });
38935
- enifed('ember-template-compiler/plugins/deprecate-render-block', ['exports', 'ember-metal/debug', 'ember-template-compiler/system/calculate-location-display'], function (exports, _emberMetalDebug, _emberTemplateCompilerSystemCalculateLocationDisplay) {
38936
- 'use strict';
38937
-
38938
- exports.default = DeprecateRenderBlock;
38939
-
38940
- function DeprecateRenderBlock(options) {
38941
- this.syntax = null;
38942
- this.options = options;
38943
- }
38944
-
38945
- DeprecateRenderBlock.prototype.transform = function DeprecateRenderBlock_transform(ast) {
38946
- var moduleName = this.options.moduleName;
38947
- var walker = new this.syntax.Walker();
38948
-
38949
- walker.visit(ast, function (node) {
38950
- if (!validate(node)) {
38951
- return;
38952
- }
38953
-
38954
- _emberMetalDebug.deprecate(deprecationMessage(moduleName, node), false, {
38955
- id: 'ember-template-compiler.deprecate-render-block',
38956
- until: '2.4.0',
38957
- url: 'http://emberjs.com/deprecations/v2.x#toc_render-helper-with-block'
38958
- });
38959
- });
38960
-
38961
- return ast;
38962
- };
38963
-
38964
- function validate(node) {
38965
- return node.type === 'BlockStatement' && node.path.original === 'render';
38966
- }
38967
-
38968
- function deprecationMessage(moduleName, node) {
38969
- var sourceInformation = _emberTemplateCompilerSystemCalculateLocationDisplay.default(moduleName, node.loc);
38970
-
38971
- return 'Usage of `render` in block form is deprecated ' + sourceInformation + '.';
38972
- }
38973
- });
38974
39021
  enifed('ember-template-compiler/plugins/transform-angle-bracket-components', ['exports'], function (exports) {
38975
39022
  'use strict';
38976
39023
 
@@ -39004,88 +39051,6 @@ enifed('ember-template-compiler/plugins/transform-angle-bracket-components', ['e
39004
39051
 
39005
39052
  exports.default = TransformAngleBracketComponents;
39006
39053
  });
39007
- enifed('ember-template-compiler/plugins/transform-closure-component-attrs-into-mut', ['exports'], function (exports) {
39008
- 'use strict';
39009
-
39010
- function TransformClosureComponentAttrsIntoMut() {
39011
- // set later within HTMLBars to the syntax package
39012
- this.syntax = null;
39013
- }
39014
-
39015
- /**
39016
- @private
39017
- @method transform
39018
- @param {AST} ast The AST to be transformed.
39019
- */
39020
- TransformClosureComponentAttrsIntoMut.prototype.transform = function TransformClosureComponentAttrsIntoMut_transform(ast) {
39021
- var b = this.syntax.builders;
39022
- var walker = new this.syntax.Walker();
39023
-
39024
- walker.visit(ast, function (node) {
39025
- if (validate(node)) {
39026
- processExpression(b, node);
39027
- }
39028
- });
39029
-
39030
- return ast;
39031
- };
39032
-
39033
- function processExpression(builder, node) {
39034
- processSubExpressionsInNode(builder, node);
39035
-
39036
- if (isComponentClosure(node)) {
39037
- mutParameters(builder, node);
39038
- }
39039
- }
39040
-
39041
- function processSubExpressionsInNode(builder, node) {
39042
- for (var i = 0; i < node.params.length; i++) {
39043
- if (node.params[i].type === 'SubExpression') {
39044
- processExpression(builder, node.params[i]);
39045
- }
39046
- }
39047
-
39048
- each(node.hash.pairs, function (pair) {
39049
- var value = pair.value;
39050
-
39051
- if (value.type === 'SubExpression') {
39052
- processExpression(builder, value);
39053
- }
39054
- });
39055
- }
39056
-
39057
- function isComponentClosure(node) {
39058
- return node.type === 'SubExpression' && node.path.original === 'component';
39059
- }
39060
-
39061
- function mutParameters(builder, node) {
39062
- for (var i = 1; i < node.params.length; i++) {
39063
- if (node.params[i].type === 'PathExpression') {
39064
- node.params[i] = builder.sexpr(builder.path('@mut'), [node.params[i]]);
39065
- }
39066
- }
39067
-
39068
- each(node.hash.pairs, function (pair) {
39069
- var value = pair.value;
39070
-
39071
- if (value.type === 'PathExpression') {
39072
- pair.value = builder.sexpr(builder.path('@mut'), [pair.value]);
39073
- }
39074
- });
39075
- }
39076
-
39077
- function validate(node) {
39078
- return node.type === 'BlockStatement' || node.type === 'MustacheStatement';
39079
- }
39080
-
39081
- function each(list, callback) {
39082
- for (var i = 0, l = list.length; i < l; i++) {
39083
- callback(list[i]);
39084
- }
39085
- }
39086
-
39087
- exports.default = TransformClosureComponentAttrsIntoMut;
39088
- });
39089
39054
  enifed('ember-template-compiler/plugins/transform-component-attrs-into-mut', ['exports'], function (exports) {
39090
39055
  'use strict';
39091
39056
 
@@ -39181,75 +39146,6 @@ enifed('ember-template-compiler/plugins/transform-component-curly-to-readonly',
39181
39146
 
39182
39147
  exports.default = TransformComponentCurlyToReadonly;
39183
39148
  });
39184
- enifed('ember-template-compiler/plugins/transform-each-in-to-hash', ['exports'], function (exports) {
39185
- /**
39186
- @module ember
39187
- @submodule ember-htmlbars
39188
- */
39189
-
39190
- /**
39191
- An HTMLBars AST transformation that replaces all instances of
39192
-
39193
- ```handlebars
39194
- {{#each item in items}}
39195
- {{/each}}
39196
- ```
39197
-
39198
- with
39199
-
39200
- ```handlebars
39201
- {{#each items keyword="item"}}
39202
- {{/each}}
39203
- ```
39204
-
39205
- @class TransformEachInToHash
39206
- @private
39207
- */
39208
- 'use strict';
39209
-
39210
- function TransformEachInToHash(options) {
39211
- // set later within HTMLBars to the syntax package
39212
- this.syntax = null;
39213
- this.options = options || {};
39214
- }
39215
-
39216
- /**
39217
- @private
39218
- @method transform
39219
- @param {AST} ast The AST to be transformed.
39220
- */
39221
- TransformEachInToHash.prototype.transform = function TransformEachInToHash_transform(ast) {
39222
- var pluginContext = this;
39223
- var walker = new pluginContext.syntax.Walker();
39224
- var b = pluginContext.syntax.builders;
39225
-
39226
- walker.visit(ast, function (node) {
39227
- if (pluginContext.validate(node)) {
39228
- if (node.program && node.program.blockParams.length) {
39229
- throw new Error('You cannot use keyword (`{{each foo in bar}}`) and block params (`{{each bar as |foo|}}`) at the same time.');
39230
- }
39231
-
39232
- var removedParams = node.sexpr.params.splice(0, 2);
39233
- var keyword = removedParams[0].original;
39234
-
39235
- // TODO: This may not be necessary.
39236
- if (!node.sexpr.hash) {
39237
- node.sexpr.hash = b.hash();
39238
- }
39239
-
39240
- node.sexpr.hash.pairs.push(b.pair('keyword', b.string(keyword)));
39241
- }
39242
- });
39243
-
39244
- return ast;
39245
- };
39246
-
39247
- TransformEachInToHash.prototype.validate = function TransformEachInToHash_validate(node) {
39248
- return (node.type === 'BlockStatement' || node.type === 'MustacheStatement') && node.sexpr.path.original === 'each' && node.sexpr.params.length === 3 && node.sexpr.params[1].type === 'PathExpression' && node.sexpr.params[1].original === 'in';
39249
- };
39250
-
39251
- exports.default = TransformEachInToHash;
39252
- });
39253
39149
  enifed('ember-template-compiler/plugins/transform-each-into-collection', ['exports', 'ember-metal/debug', 'ember-template-compiler/system/calculate-location-display'], function (exports, _emberMetalDebug, _emberTemplateCompilerSystemCalculateLocationDisplay) {
39254
39150
  'use strict';
39255
39151
 
@@ -39339,10 +39235,12 @@ enifed('ember-template-compiler/plugins/transform-input-on-to-onEvent', ['export
39339
39235
  @private
39340
39236
  @class TransformInputOnToOnEvent
39341
39237
  */
39342
- function TransformInputOnToOnEvent(options) {
39238
+ function TransformInputOnToOnEvent() {
39239
+ var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];
39240
+
39343
39241
  // set later within HTMLBars to the syntax package
39344
39242
  this.syntax = null;
39345
- this.options = options || {};
39243
+ this.options = options;
39346
39244
  }
39347
39245
 
39348
39246
  /**
@@ -39691,7 +39589,7 @@ enifed('ember-template-compiler/plugins/transform-old-class-binding-syntax', ['e
39691
39589
  return segments;
39692
39590
  }
39693
39591
  });
39694
- enifed('ember-template-compiler/plugins/transform-top-level-components', ['exports', 'ember-metal/features'], function (exports, _emberMetalFeatures) {
39592
+ enifed('ember-template-compiler/plugins/transform-top-level-components', ['exports'], function (exports) {
39695
39593
  'use strict';
39696
39594
 
39697
39595
  function TransformTopLevelComponents() {
@@ -39842,8 +39740,8 @@ enifed('ember-template-compiler/system/calculate-location-display', ['exports'],
39842
39740
 
39843
39741
  exports.default = calculateLocationDisplay;
39844
39742
 
39845
- function calculateLocationDisplay(moduleName, _loc) {
39846
- var loc = _loc || {};
39743
+ function calculateLocationDisplay(moduleName) {
39744
+ var loc = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];
39847
39745
 
39848
39746
  var _ref = loc.start || {};
39849
39747
 
@@ -39905,7 +39803,7 @@ enifed('ember-template-compiler/system/compile', ['exports', 'require', 'ember-t
39905
39803
  return _emberTemplateCompilerSystemTemplate.default(templateSpec);
39906
39804
  };
39907
39805
  });
39908
- enifed('ember-template-compiler/system/compile_options', ['exports', 'ember-metal/features', 'ember-metal/assign', 'ember-template-compiler/plugins'], function (exports, _emberMetalFeatures, _emberMetalAssign, _emberTemplateCompilerPlugins) {
39806
+ enifed('ember-template-compiler/system/compile_options', ['exports', 'ember-metal/assign', 'ember-template-compiler/plugins'], function (exports, _emberMetalAssign, _emberTemplateCompilerPlugins) {
39909
39807
  /**
39910
39808
  @module ember
39911
39809
  @submodule ember-template-compiler
@@ -39945,7 +39843,7 @@ enifed('ember-template-compiler/system/compile_options', ['exports', 'ember-meta
39945
39843
  options.buildMeta = function buildMeta(program) {
39946
39844
  return {
39947
39845
  fragmentReason: fragmentReason(program),
39948
- revision: 'Ember@2.4.6',
39846
+ revision: 'Ember@2.5.0-beta.1',
39949
39847
  loc: program.loc,
39950
39848
  moduleName: options.moduleName
39951
39849
  };
@@ -40153,7 +40051,7 @@ enifed('ember-testing/adapters/qunit', ['exports', 'ember-testing/adapters/adapt
40153
40051
  }
40154
40052
  });
40155
40053
  });
40156
- enifed('ember-testing/helpers', ['exports', 'ember-metal/property_get', 'ember-metal/error', 'ember-metal/run_loop', 'ember-views/system/jquery', 'ember-testing/test', 'ember-runtime/ext/rsvp'], function (exports, _emberMetalProperty_get, _emberMetalError, _emberMetalRun_loop, _emberViewsSystemJquery, _emberTestingTest, _emberRuntimeExtRsvp) {
40054
+ enifed('ember-testing/helpers', ['exports', 'ember-metal/property_get', 'ember-metal/error', 'ember-metal/run_loop', 'ember-views/system/jquery', 'ember-testing/test', 'ember-runtime/ext/rsvp', 'ember-metal/features'], function (exports, _emberMetalProperty_get, _emberMetalError, _emberMetalRun_loop, _emberViewsSystemJquery, _emberTestingTest, _emberRuntimeExtRsvp, _emberMetalFeatures) {
40157
40055
  'use strict';
40158
40056
 
40159
40057
  /**
@@ -40164,45 +40062,119 @@ enifed('ember-testing/helpers', ['exports', 'ember-metal/property_get', 'ember-m
40164
40062
  var helper = _emberTestingTest.default.registerHelper;
40165
40063
  var asyncHelper = _emberTestingTest.default.registerAsyncHelper;
40166
40064
 
40167
- function currentRouteName(app) {
40168
- var appController = app.__container__.lookup('controller:application');
40065
+ var keyboardEventTypes, mouseEventTypes, buildKeyboardEvent, buildMouseEvent, buildBasicEvent, fireEvent, focus;
40169
40066
 
40170
- return _emberMetalProperty_get.get(appController, 'currentRouteName');
40171
- }
40067
+ var defaultEventOptions = { canBubble: true, cancelable: true };
40068
+ keyboardEventTypes = ['keydown', 'keypress', 'keyup'];
40069
+ mouseEventTypes = ['click', 'mousedown', 'mouseup', 'dblclick', 'mousenter', 'mouseleave', 'mousemove', 'mouseout', 'mouseover'];
40172
40070
 
40173
- function currentPath(app) {
40174
- var appController = app.__container__.lookup('controller:application');
40071
+ buildKeyboardEvent = function buildKeyboardEvent(type) {
40072
+ var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];
40175
40073
 
40176
- return _emberMetalProperty_get.get(appController, 'currentPath');
40177
- }
40074
+ var event = undefined;
40075
+ try {
40076
+ event = document.createEvent('KeyEvents');
40077
+ var eventOpts = _emberViewsSystemJquery.default.extend({}, defaultEventOptions, options);
40078
+ event.initKeyEvent(type, eventOpts.canBubble, eventOpts.cancelable, window, eventOpts.ctrlKey, eventOpts.altKey, eventOpts.shiftKey, eventOpts.metaKey, eventOpts.keyCode, eventOpts.charCode);
40079
+ } catch (e) {
40080
+ event = buildBasicEvent(type, options);
40081
+ }
40082
+ return event;
40083
+ };
40178
40084
 
40179
- function currentURL(app) {
40180
- var router = app.__container__.lookup('router:main');
40085
+ buildMouseEvent = function buildMouseEvent(type) {
40086
+ var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];
40181
40087
 
40182
- return _emberMetalProperty_get.get(router, 'location').getURL();
40183
- }
40088
+ var event = undefined;
40089
+ try {
40090
+ event = document.createEvent('MouseEvents');
40091
+ var eventOpts = _emberViewsSystemJquery.default.extend({}, defaultEventOptions, options);
40092
+ event.initMouseEvent(type, eventOpts.canBubble, eventOpts.cancelable, window, eventOpts.detail, eventOpts.screenX, eventOpts.screenY, eventOpts.clientX, eventOpts.clientY, eventOpts.ctrlKey, eventOpts.altKey, eventOpts.shiftKey, eventOpts.metaKey, eventOpts.button, eventOpts.relatedTarget);
40093
+ } catch (e) {
40094
+ event = buildBasicEvent(type, options);
40095
+ }
40096
+ return event;
40097
+ };
40184
40098
 
40185
- function pauseTest() {
40186
- _emberTestingTest.default.adapter.asyncStart();
40187
- return new _emberRuntimeExtRsvp.default.Promise(function () {}, 'TestAdapter paused promise');
40188
- }
40099
+ buildBasicEvent = function buildBasicEvent(type) {
40100
+ var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];
40189
40101
 
40190
- function focus(el) {
40191
- if (el && el.is(':input, [contenteditable=true]')) {
40192
- var type = el.prop('type');
40102
+ var event = document.createEvent('Events');
40103
+ event.initEvent(type, true, true);
40104
+ _emberViewsSystemJquery.default.extend(event, options);
40105
+ return event;
40106
+ };
40107
+
40108
+ fireEvent = function fireEvent(element, type) {
40109
+ var options = arguments.length <= 2 || arguments[2] === undefined ? {} : arguments[2];
40110
+
40111
+ if (!element) {
40112
+ return;
40113
+ }
40114
+ var event = undefined;
40115
+ if (keyboardEventTypes.indexOf(type) > -1) {
40116
+ event = buildKeyboardEvent(type, options);
40117
+ } else if (mouseEventTypes.indexOf(type) > -1) {
40118
+ var rect = element.getBoundingClientRect();
40119
+ var x = rect.left + 1;
40120
+ var y = rect.top + 1;
40121
+ var simulatedCoordinates = {
40122
+ screenX: x + 5,
40123
+ screenY: y + 95,
40124
+ clientX: x,
40125
+ clientY: y
40126
+ };
40127
+ event = buildMouseEvent(type, _emberViewsSystemJquery.default.extend(simulatedCoordinates, options));
40128
+ } else {
40129
+ event = buildBasicEvent(type, options);
40130
+ }
40131
+ element.dispatchEvent(event);
40132
+ };
40133
+
40134
+ focus = function focus(el) {
40135
+ if (!el) {
40136
+ return;
40137
+ }
40138
+ var $el = _emberViewsSystemJquery.default(el);
40139
+ if ($el.is(':input, [contenteditable=true]')) {
40140
+ var type = $el.prop('type');
40193
40141
  if (type !== 'checkbox' && type !== 'radio' && type !== 'hidden') {
40194
- _emberMetalRun_loop.default(el, function () {
40142
+ _emberMetalRun_loop.default(null, function () {
40195
40143
  // Firefox does not trigger the `focusin` event if the window
40196
40144
  // does not have focus. If the document doesn't have focus just
40197
40145
  // use trigger('focusin') instead.
40146
+
40198
40147
  if (!document.hasFocus || document.hasFocus()) {
40199
- this.focus();
40148
+ el.focus();
40200
40149
  } else {
40201
- this.trigger('focusin');
40150
+ $el.trigger('focusin');
40202
40151
  }
40203
40152
  });
40204
40153
  }
40205
40154
  }
40155
+ };
40156
+
40157
+ function currentRouteName(app) {
40158
+ var routingService = app.__container__.lookup('service:-routing');
40159
+
40160
+ return _emberMetalProperty_get.get(routingService, 'currentRouteName');
40161
+ }
40162
+
40163
+ function currentPath(app) {
40164
+ var routingService = app.__container__.lookup('service:-routing');
40165
+
40166
+ return _emberMetalProperty_get.get(routingService, 'currentPath');
40167
+ }
40168
+
40169
+ function currentURL(app) {
40170
+ var router = app.__container__.lookup('router:main');
40171
+
40172
+ return _emberMetalProperty_get.get(router, 'location').getURL();
40173
+ }
40174
+
40175
+ function pauseTest() {
40176
+ _emberTestingTest.default.adapter.asyncStart();
40177
+ return new _emberRuntimeExtRsvp.default.Promise(function () {}, 'TestAdapter paused promise');
40206
40178
  }
40207
40179
 
40208
40180
  function visit(app, url) {
@@ -40230,12 +40202,14 @@ enifed('ember-testing/helpers', ['exports', 'ember-metal/property_get', 'ember-m
40230
40202
 
40231
40203
  function click(app, selector, context) {
40232
40204
  var $el = app.testHelpers.findWithAssert(selector, context);
40233
- _emberMetalRun_loop.default($el, 'mousedown');
40205
+ var el = $el[0];
40234
40206
 
40235
- focus($el);
40207
+ _emberMetalRun_loop.default(null, fireEvent, el, 'mousedown');
40236
40208
 
40237
- _emberMetalRun_loop.default($el, 'mouseup');
40238
- _emberMetalRun_loop.default($el, 'click');
40209
+ focus(el);
40210
+
40211
+ _emberMetalRun_loop.default(null, fireEvent, el, 'mouseup');
40212
+ _emberMetalRun_loop.default(null, fireEvent, el, 'click');
40239
40213
 
40240
40214
  return app.testHelpers.wait();
40241
40215
  }
@@ -40272,10 +40246,9 @@ enifed('ember-testing/helpers', ['exports', 'ember-metal/property_get', 'ember-m
40272
40246
  }
40273
40247
 
40274
40248
  var $el = app.testHelpers.findWithAssert(selector, context);
40249
+ var el = $el[0];
40275
40250
 
40276
- var event = _emberViewsSystemJquery.default.Event(type, options);
40277
-
40278
- _emberMetalRun_loop.default($el, 'trigger', event);
40251
+ _emberMetalRun_loop.default(null, fireEvent, el, type, options);
40279
40252
 
40280
40253
  return app.testHelpers.wait();
40281
40254
  }
@@ -40296,18 +40269,19 @@ enifed('ember-testing/helpers', ['exports', 'ember-metal/property_get', 'ember-m
40296
40269
  }
40297
40270
 
40298
40271
  function fillIn(app, selector, contextOrText, text) {
40299
- var $el, context;
40272
+ var $el, el, context;
40300
40273
  if (typeof text === 'undefined') {
40301
40274
  text = contextOrText;
40302
40275
  } else {
40303
40276
  context = contextOrText;
40304
40277
  }
40305
40278
  $el = app.testHelpers.findWithAssert(selector, context);
40306
- focus($el);
40279
+ el = $el[0];
40280
+ focus(el);
40307
40281
  _emberMetalRun_loop.default(function () {
40308
40282
  $el.val(text);
40309
- $el.trigger('input');
40310
- $el.change();
40283
+ fireEvent(el, 'input');
40284
+ fireEvent(el, 'change');
40311
40285
  });
40312
40286
  return app.testHelpers.wait();
40313
40287
  }
@@ -40334,10 +40308,10 @@ enifed('ember-testing/helpers', ['exports', 'ember-metal/property_get', 'ember-m
40334
40308
 
40335
40309
  function wait(app, value) {
40336
40310
  return new _emberRuntimeExtRsvp.default.Promise(function (resolve) {
40311
+ var router = app.__container__.lookup('router:main');
40312
+
40337
40313
  // Every 10ms, poll for the async thing to have finished
40338
40314
  var watcher = setInterval(function () {
40339
- var router = app.__container__.lookup('router:main');
40340
-
40341
40315
  // 1. If the router is loading, keep polling
40342
40316
  var routerIsLoading = router.router && !!router.router.activeTransition;
40343
40317
  if (routerIsLoading) {
@@ -40618,6 +40592,10 @@ enifed('ember-testing/helpers', ['exports', 'ember-metal/property_get', 'ember-m
40618
40592
  */
40619
40593
  asyncHelper('triggerEvent', triggerEvent);
40620
40594
  });
40595
+
40596
+ // Firefox does not trigger the `focusin` event if the window
40597
+ // does not have focus. If the document doesn't have focus just
40598
+ // use trigger('focusin') instead.
40621
40599
  enifed('ember-testing/index', ['exports', 'ember-metal/core', 'ember-testing/initializers', 'ember-testing/support', 'ember-testing/setup_for_testing', 'ember-testing/test', 'ember-testing/adapters/adapter', 'ember-testing/adapters/qunit', 'ember-testing/helpers'], function (exports, _emberMetalCore, _emberTestingInitializers, _emberTestingSupport, _emberTestingSetup_for_testing, _emberTestingTest, _emberTestingAdaptersAdapter, _emberTestingAdaptersQunit, _emberTestingHelpers) {
40622
40600
  'use strict';
40623
40601
 
@@ -41515,7 +41493,6 @@ enifed('ember-views/components/component', ['exports', 'ember-metal/debug', 'emb
41515
41493
  @class Component
41516
41494
  @namespace Ember
41517
41495
  @extends Ember.View
41518
- @uses Ember.ViewTargetActionSupport
41519
41496
  @public
41520
41497
  */
41521
41498
  var Component = _emberViewsViewsView.default.extend(_emberRuntimeMixinsTarget_action_support.default, {
@@ -41842,106 +41819,6 @@ enifed('ember-views/components/component', ['exports', 'ember-metal/debug', 'emb
41842
41819
  @property positionalParams
41843
41820
  @since 1.13.0
41844
41821
  */
41845
-
41846
- /**
41847
- Called when the attributes passed into the component have been updated.
41848
- Called both during the initial render of a container and during a rerender.
41849
- Can be used in place of an observer; code placed here will be executed
41850
- every time any attribute updates.
41851
- @method didReceiveAttrs
41852
- @public
41853
- @since 1.13.0
41854
- */
41855
-
41856
- /**
41857
- Called when the attributes passed into the component have been updated.
41858
- Called both during the initial render of a container and during a rerender.
41859
- Can be used in place of an observer; code placed here will be executed
41860
- every time any attribute updates.
41861
- @event didReceiveAttrs
41862
- @public
41863
- @since 1.13.0
41864
- */
41865
-
41866
- /**
41867
- Called after a component has been rendered, both on initial render and
41868
- in subsequent rerenders.
41869
- @method didRender
41870
- @public
41871
- @since 1.13.0
41872
- */
41873
-
41874
- /**
41875
- Called after a component has been rendered, both on initial render and
41876
- in subsequent rerenders.
41877
- @event didRender
41878
- @public
41879
- @since 1.13.0
41880
- */
41881
-
41882
- /**
41883
- Called before a component has been rendered, both on initial render and
41884
- in subsequent rerenders.
41885
- @method willRender
41886
- @public
41887
- @since 1.13.0
41888
- */
41889
-
41890
- /**
41891
- Called before a component has been rendered, both on initial render and
41892
- in subsequent rerenders.
41893
- @event willRender
41894
- @public
41895
- @since 1.13.0
41896
- */
41897
-
41898
- /**
41899
- Called when the attributes passed into the component have been changed.
41900
- Called only during a rerender, not during an initial render.
41901
- @method didUpdateAttrs
41902
- @public
41903
- @since 1.13.0
41904
- */
41905
-
41906
- /**
41907
- Called when the attributes passed into the component have been changed.
41908
- Called only during a rerender, not during an initial render.
41909
- @event didUpdateAttrs
41910
- @public
41911
- @since 1.13.0
41912
- */
41913
-
41914
- /**
41915
- Called when the component is about to update and rerender itself.
41916
- Called only during a rerender, not during an initial render.
41917
- @method willUpdate
41918
- @public
41919
- @since 1.13.0
41920
- */
41921
-
41922
- /**
41923
- Called when the component is about to update and rerender itself.
41924
- Called only during a rerender, not during an initial render.
41925
- @event willUpdate
41926
- @public
41927
- @since 1.13.0
41928
- */
41929
-
41930
- /**
41931
- Called when the component has updated and rerendered itself.
41932
- Called only during a rerender, not during an initial render.
41933
- @event didUpdate
41934
- @public
41935
- @since 1.13.0
41936
- */
41937
-
41938
- /**
41939
- Called when the component has updated and rerendered itself.
41940
- Called only during a rerender, not during an initial render.
41941
- @event didUpdate
41942
- @public
41943
- @since 1.13.0
41944
- */
41945
41822
  });
41946
41823
 
41947
41824
  Component.reopenClass({
@@ -41950,7 +41827,7 @@ enifed('ember-views/components/component', ['exports', 'ember-metal/debug', 'emb
41950
41827
 
41951
41828
  exports.default = Component;
41952
41829
  });
41953
- enifed('ember-views/index', ['exports', 'ember-runtime', 'ember-views/system/jquery', 'ember-views/system/utils', 'ember-views/system/ext', 'ember-views/views/states', 'ember-metal-views/renderer', 'ember-views/views/core_view', 'ember-views/views/view', 'ember-views/views/container_view', 'ember-views/views/collection_view', 'ember-views/components/component', 'ember-views/system/event_dispatcher', 'ember-views/mixins/view_target_action_support', 'ember-views/component_lookup', 'ember-views/views/checkbox', 'ember-views/mixins/text_support', 'ember-views/views/text_field', 'ember-views/views/text_area', 'ember-views/views/select', 'ember-views/compat/metamorph_view', 'ember-views/views/legacy_each_view'], function (exports, _emberRuntime, _emberViewsSystemJquery, _emberViewsSystemUtils, _emberViewsSystemExt, _emberViewsViewsStates, _emberMetalViewsRenderer, _emberViewsViewsCore_view, _emberViewsViewsView, _emberViewsViewsContainer_view, _emberViewsViewsCollection_view, _emberViewsComponentsComponent, _emberViewsSystemEvent_dispatcher, _emberViewsMixinsView_target_action_support, _emberViewsComponent_lookup, _emberViewsViewsCheckbox, _emberViewsMixinsText_support, _emberViewsViewsText_field, _emberViewsViewsText_area, _emberViewsViewsSelect, _emberViewsCompatMetamorph_view, _emberViewsViewsLegacy_each_view) {
41830
+ enifed('ember-views/index', ['exports', 'ember-runtime', 'ember-views/system/jquery', 'ember-views/system/utils', 'ember-views/system/ext', 'ember-views/views/states', 'ember-metal-views', 'ember-views/views/core_view', 'ember-views/views/view', 'ember-views/views/container_view', 'ember-views/views/collection_view', 'ember-views/components/component', 'ember-views/system/event_dispatcher', 'ember-views/mixins/view_target_action_support', 'ember-views/component_lookup', 'ember-views/views/checkbox', 'ember-views/mixins/text_support', 'ember-views/views/text_field', 'ember-views/views/text_area', 'ember-views/views/select', 'ember-views/compat/metamorph_view', 'ember-views/views/legacy_each_view'], function (exports, _emberRuntime, _emberViewsSystemJquery, _emberViewsSystemUtils, _emberViewsSystemExt, _emberViewsViewsStates, _emberMetalViews, _emberViewsViewsCore_view, _emberViewsViewsView, _emberViewsViewsContainer_view, _emberViewsViewsCollection_view, _emberViewsComponentsComponent, _emberViewsSystemEvent_dispatcher, _emberViewsMixinsView_target_action_support, _emberViewsComponent_lookup, _emberViewsViewsCheckbox, _emberViewsMixinsText_support, _emberViewsViewsText_field, _emberViewsViewsText_area, _emberViewsViewsSelect, _emberViewsCompatMetamorph_view, _emberViewsViewsLegacy_each_view) {
41954
41831
  /**
41955
41832
  @module ember
41956
41833
  @submodule ember-views
@@ -41984,12 +41861,12 @@ enifed('ember-views/index', ['exports', 'ember-runtime', 'ember-views/system/jqu
41984
41861
  _emberRuntime.default.View = _emberViewsViewsView.DeprecatedView;
41985
41862
  _emberRuntime.default.View.states = _emberViewsViewsStates.states;
41986
41863
  _emberRuntime.default.View.cloneStates = _emberViewsViewsStates.cloneStates;
41987
- _emberRuntime.default.View._Renderer = _emberMetalViewsRenderer.default;
41864
+ _emberRuntime.default.View._Renderer = _emberMetalViews.Renderer;
41988
41865
  _emberRuntime.default.ContainerView = _emberViewsViewsContainer_view.DeprecatedContainerView;
41989
41866
  _emberRuntime.default.CollectionView = _emberViewsViewsCollection_view.default;
41990
41867
  }
41991
41868
 
41992
- _emberRuntime.default._Renderer = _emberMetalViewsRenderer.default;
41869
+ _emberRuntime.default._Renderer = _emberMetalViews.Renderer;
41993
41870
 
41994
41871
  _emberRuntime.default.Checkbox = _emberViewsViewsCheckbox.default;
41995
41872
  _emberRuntime.default.TextField = _emberViewsViewsText_field.default;
@@ -42790,7 +42667,9 @@ enifed('ember-views/mixins/view_child_views_support', ['exports', 'ember-metal/d
42790
42667
  @return {Ember.View} new instance
42791
42668
  @private
42792
42669
  */
42793
- createChildView: function (maybeViewClass, _attrs) {
42670
+ createChildView: function (maybeViewClass) {
42671
+ var attrs = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];
42672
+
42794
42673
  if (!maybeViewClass) {
42795
42674
  throw new TypeError('createChildViews first argument must exist');
42796
42675
  }
@@ -42801,7 +42680,6 @@ enifed('ember-views/mixins/view_child_views_support', ['exports', 'ember-metal/d
42801
42680
  return maybeViewClass;
42802
42681
  }
42803
42682
 
42804
- var attrs = _attrs || {};
42805
42683
  var view;
42806
42684
 
42807
42685
  attrs.parentView = this;
@@ -45386,7 +45264,7 @@ enifed('ember-views/views/collection_view', ['exports', 'ember-metal/core', 'emb
45386
45264
  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) {
45387
45265
  'use strict';
45388
45266
 
45389
- _emberHtmlbarsTemplatesContainerView.default.meta.revision = 'Ember@2.4.6';
45267
+ _emberHtmlbarsTemplatesContainerView.default.meta.revision = 'Ember@2.5.0-beta.1';
45390
45268
 
45391
45269
  /**
45392
45270
  @module ember
@@ -45711,7 +45589,7 @@ enifed('ember-views/views/container_view', ['exports', 'ember-metal/core', 'embe
45711
45589
 
45712
45590
  exports.default = ContainerView;
45713
45591
  });
45714
- enifed('ember-views/views/core_view', ['exports', 'ember-metal/debug', 'ember-metal/property_get', 'ember-runtime/system/object', 'ember-runtime/mixins/evented', 'ember-runtime/mixins/action_handler', 'ember-runtime/utils', 'ember-metal-views/renderer', 'ember-views/views/states', 'htmlbars-runtime', 'require'], function (exports, _emberMetalDebug, _emberMetalProperty_get, _emberRuntimeSystemObject, _emberRuntimeMixinsEvented, _emberRuntimeMixinsAction_handler, _emberRuntimeUtils, _emberMetalViewsRenderer, _emberViewsViewsStates, _htmlbarsRuntime, _require) {
45592
+ enifed('ember-views/views/core_view', ['exports', 'ember-metal/debug', 'ember-metal/property_get', 'ember-runtime/system/object', 'ember-runtime/mixins/evented', 'ember-runtime/mixins/action_handler', 'ember-runtime/utils', 'ember-metal-views', 'ember-views/views/states', 'htmlbars-runtime', 'require'], function (exports, _emberMetalDebug, _emberMetalProperty_get, _emberRuntimeSystemObject, _emberRuntimeMixinsEvented, _emberRuntimeMixinsAction_handler, _emberRuntimeUtils, _emberMetalViews, _emberViewsViewsStates, _htmlbarsRuntime, _require) {
45715
45593
  'use strict';
45716
45594
 
45717
45595
  function K() {
@@ -45756,7 +45634,7 @@ enifed('ember-views/views/core_view', ['exports', 'ember-metal/debug', 'ember-me
45756
45634
  // via `create()` instead of going through the container.
45757
45635
  if (!this.renderer) {
45758
45636
  var DOMHelper = domHelper();
45759
- renderer = renderer || new _emberMetalViewsRenderer.default(new DOMHelper());
45637
+ renderer = renderer || new _emberMetalViews.Renderer(new DOMHelper());
45760
45638
  this.renderer = renderer;
45761
45639
  }
45762
45640
 
@@ -46617,7 +46495,7 @@ enifed('ember-views/views/states/destroying', ['exports', 'ember-metal/assign',
46617
46495
 
46618
46496
  exports.default = destroying;
46619
46497
  });
46620
- enifed('ember-views/views/states/has_element', ['exports', 'ember-views/views/states/default', 'ember-metal/assign', 'ember-views/system/jquery', 'ember-metal/run_loop', 'ember-metal/property_get', 'htmlbars-runtime'], function (exports, _emberViewsViewsStatesDefault, _emberMetalAssign, _emberViewsSystemJquery, _emberMetalRun_loop, _emberMetalProperty_get, _htmlbarsRuntime) {
46498
+ enifed('ember-views/views/states/has_element', ['exports', 'ember-views/views/states/default', 'ember-metal/assign', 'ember-views/system/jquery', 'ember-metal/run_loop', 'ember-metal/property_get'], function (exports, _emberViewsViewsStatesDefault, _emberMetalAssign, _emberViewsSystemJquery, _emberMetalRun_loop, _emberMetalProperty_get) {
46621
46499
  'use strict';
46622
46500
 
46623
46501
  var hasElement = Object.create(_emberViewsViewsStatesDefault.default);
@@ -46643,18 +46521,7 @@ enifed('ember-views/views/states/has_element', ['exports', 'ember-views/views/st
46643
46521
  // deferred to allow bindings to synchronize.
46644
46522
  rerender: function (view) {
46645
46523
  view.renderer.ensureViewNotRendering(view);
46646
-
46647
- var renderNode = view._renderNode;
46648
-
46649
- renderNode.isDirty = true;
46650
- _htmlbarsRuntime.internal.visitChildren(renderNode.childNodes, function (node) {
46651
- if (node.getState().manager) {
46652
- node.shouldReceiveAttrs = true;
46653
- }
46654
- node.isDirty = true;
46655
- });
46656
-
46657
- renderNode.ownerNode.emberView.scheduleRevalidate(renderNode, view.toString(), 'rerendering');
46524
+ view.renderer.rerender(view);
46658
46525
  },
46659
46526
 
46660
46527
  cleanup: function (view) {
@@ -47195,20 +47062,21 @@ enifed('ember-views/views/view', ['exports', 'ember-metal/core', 'ember-metal/de
47195
47062
  ```
47196
47063
 
47197
47064
  If the return value of an `attributeBindings` monitored property is a boolean
47198
- the property's value will be set as a coerced string:
47065
+ the property will follow HTML's pattern of repeating the attribute's name as
47066
+ its value:
47199
47067
 
47200
47068
  ```javascript
47201
47069
  MyTextInput = Ember.View.extend({
47202
47070
  tagName: 'input',
47203
47071
  attributeBindings: ['disabled'],
47204
- disabled: false
47072
+ disabled: true
47205
47073
  });
47206
47074
  ```
47207
47075
 
47208
- Will result in a view instance with an HTML representation of:
47076
+ Will result in view instances with an HTML representation of:
47209
47077
 
47210
47078
  ```html
47211
- <input id="ember1" class="ember-view" disabled="false" />
47079
+ <input id="ember1" class="ember-view" disabled="disabled" />
47212
47080
  ```
47213
47081
 
47214
47082
  `attributeBindings` can refer to computed properties:
@@ -47227,17 +47095,6 @@ enifed('ember-views/views/view', ['exports', 'ember-metal/core', 'ember-metal/de
47227
47095
  });
47228
47096
  ```
47229
47097
 
47230
- To prevent setting an attribute altogether, use `null` or `undefined` as the
47231
- return value of the `attributeBindings` monitored property:
47232
-
47233
- ```javascript
47234
- MyTextInput = Ember.View.extend({
47235
- tagName: 'form',
47236
- attributeBindings: ['novalidate'],
47237
- novalidate: null
47238
- });
47239
- ```
47240
-
47241
47098
  Updates to the property of an attribute binding will result in automatic
47242
47099
  update of the HTML attribute in the view's rendered HTML representation.
47243
47100
 
@@ -47566,7 +47423,6 @@ enifed('ember-views/views/view', ['exports', 'ember-metal/core', 'ember-metal/de
47566
47423
  @namespace Ember
47567
47424
  @extends Ember.CoreView
47568
47425
  @deprecated See http://emberjs.com/deprecations/v1.x/#toc_ember-view
47569
- @uses Ember.ViewSupport
47570
47426
  @uses Ember.ViewContextSupport
47571
47427
  @uses Ember.ViewChildViewsSupport
47572
47428
  @uses Ember.TemplateRenderingSupport
@@ -54943,6 +54799,8 @@ enifed('rsvp/node', ['exports', 'rsvp/promise', 'rsvp/-internal', 'rsvp/utils'],
54943
54799
 
54944
54800
  exports.default = denodeify;
54945
54801
 
54802
+ function _defaults(obj, defaults) { var keys = Object.getOwnPropertyNames(defaults); for (var i = 0; i < keys.length; i++) { var key = keys[i]; var value = Object.getOwnPropertyDescriptor(defaults, key); if (value && value.configurable && obj[key] === undefined) { Object.defineProperty(obj, key, value); } } return obj; }
54803
+
54946
54804
  function Result() {
54947
54805
  this.value = undefined;
54948
54806
  }
@@ -55173,7 +55031,7 @@ enifed('rsvp/node', ['exports', 'rsvp/promise', 'rsvp/-internal', 'rsvp/utils'],
55173
55031
  }
55174
55032
  };
55175
55033
 
55176
- fn.__proto__ = nodeFunc;
55034
+ _defaults(fn, nodeFunc);
55177
55035
 
55178
55036
  return fn;
55179
55037
  }