ember-source 2.5.0.beta.1 → 2.5.0.beta.4

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.5.0-beta.1
9
+ * @version 2.5.0-beta.4
10
10
  */
11
11
 
12
12
  var enifed, requireModule, require, requirejs, Ember;
@@ -1322,14 +1322,12 @@ enifed('container/container', ['exports', 'ember-metal/core', 'ember-metal/debug
1322
1322
  function lookup(container, fullName) {
1323
1323
  var options = arguments.length <= 2 || arguments[2] === undefined ? {} : arguments[2];
1324
1324
 
1325
- if (_emberMetalFeatures.default('ember-htmlbars-local-lookup')) {
1326
- if (options.source) {
1327
- fullName = container.registry.expandLocalLookup(fullName, options);
1325
+ if (options.source) {
1326
+ fullName = container.registry.expandLocalLookup(fullName, options);
1328
1327
 
1329
- // if expandLocalLookup returns falsey, we do not support local lookup
1330
- if (!fullName) {
1331
- return;
1332
- }
1328
+ // if expandLocalLookup returns falsey, we do not support local lookup
1329
+ if (!fullName) {
1330
+ return;
1333
1331
  }
1334
1332
  }
1335
1333
 
@@ -1391,14 +1389,12 @@ enifed('container/container', ['exports', 'ember-metal/core', 'ember-metal/debug
1391
1389
 
1392
1390
  var registry = container.registry;
1393
1391
 
1394
- if (_emberMetalFeatures.default('ember-htmlbars-local-lookup')) {
1395
- if (options.source) {
1396
- fullName = registry.expandLocalLookup(fullName, options);
1392
+ if (options.source) {
1393
+ fullName = registry.expandLocalLookup(fullName, options);
1397
1394
 
1398
- // if expandLocalLookup returns falsey, we do not support local lookup
1399
- if (!fullName) {
1400
- return;
1401
- }
1395
+ // if expandLocalLookup returns falsey, we do not support local lookup
1396
+ if (!fullName) {
1397
+ return;
1402
1398
  }
1403
1399
  }
1404
1400
 
@@ -2003,9 +1999,8 @@ enifed('container/registry', ['exports', 'ember-metal/features', 'ember-metal/de
2003
1999
  _emberMetalDebug.assert('fullName must be a proper full name', this.validateFullName(fullName));
2004
2000
 
2005
2001
  var source = undefined;
2006
- if (_emberMetalFeatures.default('ember-htmlbars-local-lookup')) {
2007
- source = options && options.source && this.normalize(options.source);
2008
- }
2002
+
2003
+ source = options && options.source && this.normalize(options.source);
2009
2004
 
2010
2005
  return has(this, this.normalize(fullName), source);
2011
2006
  },
@@ -2373,39 +2368,37 @@ enifed('container/registry', ['exports', 'ember-metal/features', 'ember-metal/de
2373
2368
  };
2374
2369
  }
2375
2370
 
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
- }
2371
+ /**
2372
+ Given a fullName and a source fullName returns the fully resolved
2373
+ fullName. Used to allow for local lookup.
2374
+ ```javascript
2375
+ var registry = new Registry();
2376
+ // the twitter factory is added to the module system
2377
+ registry.expandLocalLookup('component:post-title', { source: 'template:post' }) // => component:post/post-title
2378
+ ```
2379
+ @private
2380
+ @method expandLocalLookup
2381
+ @param {String} fullName
2382
+ @param {Object} [options]
2383
+ @param {String} [options.source] the fullname of the request source (used for local lookups)
2384
+ @return {String} fullName
2385
+ */
2386
+ Registry.prototype.expandLocalLookup = function Registry_expandLocalLookup(fullName, options) {
2387
+ if (this.resolver && this.resolver.expandLocalLookup) {
2388
+ _emberMetalDebug.assert('fullName must be a proper full name', this.validateFullName(fullName));
2389
+ _emberMetalDebug.assert('options.source must be provided to expandLocalLookup', options && options.source);
2390
+ _emberMetalDebug.assert('options.source must be a proper full name', this.validateFullName(options.source));
2391
+
2392
+ var normalizedFullName = this.normalize(fullName);
2393
+ var normalizedSource = this.normalize(options.source);
2394
+
2395
+ return expandLocalLookup(this, normalizedFullName, normalizedSource);
2396
+ } else if (this.fallback) {
2397
+ return this.fallback.expandLocalLookup(fullName, options);
2398
+ } else {
2399
+ return null;
2400
+ }
2401
+ };
2409
2402
 
2410
2403
  function expandLocalLookup(registry, normalizedName, normalizedSource) {
2411
2404
  var cache = registry._localLookupCache;
@@ -2427,16 +2420,14 @@ enifed('container/registry', ['exports', 'ember-metal/features', 'ember-metal/de
2427
2420
  }
2428
2421
 
2429
2422
  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
- }
2423
+ if (options && options.source) {
2424
+ // when `source` is provided expand normalizedName
2425
+ // and source into the full normalizedName
2426
+ normalizedName = registry.expandLocalLookup(normalizedName, options);
2427
+
2428
+ // if expandLocalLookup returns falsey, we do not support local lookup
2429
+ if (!normalizedName) {
2430
+ return;
2440
2431
  }
2441
2432
  }
2442
2433
 
@@ -3743,15 +3734,6 @@ enifed('ember-application/index', ['exports', 'ember-metal/core', 'ember-metal/f
3743
3734
  _emberMetalCore.default.Resolver = _emberApplicationSystemResolver.Resolver;
3744
3735
  _emberMetalCore.default.DefaultResolver = _emberApplicationSystemResolver.default;
3745
3736
 
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
-
3755
3737
  _emberRuntimeSystemLazy_load.runLoadHooks('Ember.Application', _emberApplicationSystemApplication.default);
3756
3738
  });
3757
3739
 
@@ -3759,6 +3741,9 @@ enifed('ember-application/index', ['exports', 'ember-metal/core', 'ember-metal/f
3759
3741
  @module ember
3760
3742
  @submodule ember-application
3761
3743
  */
3744
+
3745
+ // Expose `EngineInstance` and `ApplicationInstance` for easy overriding.
3746
+ // Reanalyze whether to continue exposing these after feature flag is removed.
3762
3747
  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) {
3763
3748
  /**
3764
3749
  @module ember
@@ -4256,8 +4241,20 @@ enifed('ember-application/system/application', ['exports', 'ember-metal', 'ember
4256
4241
  */
4257
4242
  'use strict';
4258
4243
 
4244
+ exports._resetLegacyAddonWarnings = _resetLegacyAddonWarnings;
4245
+
4259
4246
  var librariesRegistered = false;
4260
4247
 
4248
+ var warnedAboutLegacyViewAddon = false;
4249
+ var warnedAboutLegacyControllerAddon = false;
4250
+
4251
+ // For testing
4252
+
4253
+ function _resetLegacyAddonWarnings() {
4254
+ warnedAboutLegacyViewAddon = false;
4255
+ warnedAboutLegacyControllerAddon = false;
4256
+ }
4257
+
4261
4258
  /**
4262
4259
  An instance of `Ember.Application` is the starting point for every Ember
4263
4260
  application. It helps to instantiate, initialize and coordinate the many
@@ -4762,6 +4759,18 @@ enifed('ember-application/system/application', ['exports', 'ember-metal', 'ember
4762
4759
  return;
4763
4760
  }
4764
4761
 
4762
+ if (_emberMetal.default.ENV._ENABLE_LEGACY_VIEW_SUPPORT && !warnedAboutLegacyViewAddon) {
4763
+ _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' });
4764
+
4765
+ warnedAboutLegacyViewAddon = true;
4766
+ }
4767
+
4768
+ if (_emberMetal.default.ENV._ENABLE_LEGACY_CONTROLLER_SUPPORT && !warnedAboutLegacyControllerAddon) {
4769
+ _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' });
4770
+
4771
+ warnedAboutLegacyControllerAddon = true;
4772
+ }
4773
+
4765
4774
  // Even though this returns synchronously, we still need to make sure the
4766
4775
  // boot promise exists for book-keeping purposes: if anything went wrong in
4767
4776
  // the boot process, we need to store the error as a rejection on the boot
@@ -6375,7 +6384,8 @@ enifed('ember-debug/index', ['exports', 'ember-metal/core', 'ember-metal/debug',
6375
6384
  /**
6376
6385
  Define an assertion that will throw an exception if the condition is not
6377
6386
  met. Ember build tools will remove any calls to `Ember.assert()` when
6378
- doing a production build. Example:
6387
+ doing an Ember.js framework production build and will make the assertion a
6388
+ no-op for an application production build. Example:
6379
6389
 
6380
6390
  ```javascript
6381
6391
  // Test for truthiness
@@ -6550,10 +6560,6 @@ enifed('ember-debug/index', ['exports', 'ember-metal/core', 'ember-metal/debug',
6550
6560
  _emberMetalFeatures.FEATURES['features-stripped-test'] = true;
6551
6561
  var featuresWereStripped = true;
6552
6562
 
6553
- if (_emberMetalFeatures.default('features-stripped-test')) {
6554
- exports.featuresWereStripped = featuresWereStripped = false;
6555
- }
6556
-
6557
6563
  delete _emberMetalFeatures.FEATURES['features-stripped-test'];
6558
6564
  _warnIfUsingStrippedFeatureFlags(_emberMetalCore.default.ENV.FEATURES, featuresWereStripped);
6559
6565
 
@@ -7455,7 +7461,7 @@ enifed('ember-htmlbars/helper', ['exports', 'ember-runtime/system/object'], func
7455
7461
  Each time the input to a helper changes, the `compute` function will be
7456
7462
  called again.
7457
7463
 
7458
- As instances, these helpers also have access to the container an will accept
7464
+ As instances, these helpers also have access to the container and will accept
7459
7465
  injected dependencies.
7460
7466
 
7461
7467
  Additionally, class helpers can call `recompute` to force a new computation.
@@ -7969,7 +7975,7 @@ enifed('ember-htmlbars/helpers/if_unless', ['exports', 'ember-metal/debug', 'emb
7969
7975
  the `else` helper.
7970
7976
 
7971
7977
  ```handlebars
7972
- {{!Is it raining outside?}}
7978
+ {{! is it raining outside?}}
7973
7979
  {{#if isRaining}}
7974
7980
  Yes, grab an umbrella!
7975
7981
  {{else}}
@@ -8485,12 +8491,11 @@ enifed('ember-htmlbars/hooks/component', ['exports', 'ember-metal/features', 'em
8485
8491
  layout = undefined;
8486
8492
  if (isDasherized || !isAngleBracket) {
8487
8493
  var options = {};
8488
- if (_emberMetalFeatures.default('ember-htmlbars-local-lookup')) {
8489
- var moduleName = env.meta && env.meta.moduleName;
8490
8494
 
8491
- if (moduleName) {
8492
- options.source = 'template:' + moduleName;
8493
- }
8495
+ var moduleName = env.meta && env.meta.moduleName;
8496
+
8497
+ if (moduleName) {
8498
+ options.source = 'template:' + moduleName;
8494
8499
  }
8495
8500
 
8496
8501
  var result = _emberHtmlbarsUtilsLookupComponent.default(env.owner, tagName, options);
@@ -9128,11 +9133,11 @@ enifed('ember-htmlbars/hooks/link-render-node', ['exports', 'ember-htmlbars/util
9128
9133
  var isTruthyVal = _emberMetalStreamsUtils.read(isTruthy);
9129
9134
 
9130
9135
  if (_emberRuntimeUtils.isArray(predicateVal)) {
9131
- return lengthVal > 0 ? predicateVal : false;
9136
+ return lengthVal > 0 ? coercer(predicateVal) : false;
9132
9137
  }
9133
9138
 
9134
9139
  if (typeof isTruthyVal === 'boolean') {
9135
- return isTruthyVal;
9140
+ return isTruthyVal ? coercer(predicateVal) : false;
9136
9141
  }
9137
9142
 
9138
9143
  return coercer(predicateVal);
@@ -10561,7 +10566,7 @@ enifed('ember-htmlbars/keywords/outlet', ['exports', 'ember-metal/debug', 'ember
10561
10566
 
10562
10567
  'use strict';
10563
10568
 
10564
- _emberHtmlbarsTemplatesTopLevelView.default.meta.revision = 'Ember@2.5.0-beta.1';
10569
+ _emberHtmlbarsTemplatesTopLevelView.default.meta.revision = 'Ember@2.5.0-beta.4';
10565
10570
 
10566
10571
  /**
10567
10572
  The `{{outlet}}` helper lets you specify where a child route will render in
@@ -10674,10 +10679,6 @@ enifed('ember-htmlbars/keywords/outlet', ['exports', 'ember-metal/debug', 'ember
10674
10679
 
10675
10680
  var Component;
10676
10681
 
10677
- if (_emberMetalFeatures.default('ember-routing-routable-components')) {
10678
- Component = outletState.render.Component;
10679
- }
10680
-
10681
10682
  var options;
10682
10683
  var attrs = {};
10683
10684
  if (Component) {
@@ -12506,7 +12507,10 @@ enifed('ember-htmlbars/system/lookup-helper', ['exports', 'ember-metal/debug', '
12506
12507
  var owner = env.owner;
12507
12508
  if (validateLazyHelperName(name, owner, env.hooks.keywords)) {
12508
12509
  var helperName = 'helper:' + name;
12509
- if (owner.hasRegistration(helperName, options)) {
12510
+ // See https://github.com/emberjs/ember.js/issues/13071
12511
+ // See https://bugs.chromium.org/p/v8/issues/detail?id=4839
12512
+ var registered = owner.hasRegistration(helperName, options);
12513
+ if (registered) {
12510
12514
  helper = owner._lookupFactory(helperName, options);
12511
12515
  _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);
12512
12516
  }
@@ -13692,20 +13696,16 @@ enifed('ember-htmlbars/utils/is-component', ['exports', 'ember-metal/features',
13692
13696
  if (hasComponentOrTemplate(owner, path)) {
13693
13697
  return true; // global component found
13694
13698
  } else {
13695
- if (_emberMetalFeatures.default('ember-htmlbars-local-lookup')) {
13696
- var moduleName = env.meta && env.meta.moduleName;
13699
+ var moduleName = env.meta && env.meta.moduleName;
13697
13700
 
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 {
13701
+ if (!moduleName) {
13702
+ // Without a source moduleName, we can not perform local lookups.
13707
13703
  return false;
13708
13704
  }
13705
+
13706
+ var options = { source: 'template:' + moduleName };
13707
+
13708
+ return hasComponentOrTemplate(owner, path, options);
13709
13709
  }
13710
13710
  }
13711
13711
  }
@@ -13725,15 +13725,13 @@ enifed('ember-htmlbars/utils/lookup-component', ['exports', 'ember-metal/feature
13725
13725
  function lookupComponent(owner, name, options) {
13726
13726
  var componentLookup = owner.lookup('component-lookup:main');
13727
13727
 
13728
- if (_emberMetalFeatures.default('ember-htmlbars-local-lookup')) {
13729
- var source = options && options.source;
13728
+ var source = options && options.source;
13730
13729
 
13731
- if (source) {
13732
- var localResult = lookupComponentPair(componentLookup, owner, name, options);
13730
+ if (source) {
13731
+ var localResult = lookupComponentPair(componentLookup, owner, name, options);
13733
13732
 
13734
- if (localResult.component || localResult.layout) {
13735
- return localResult;
13736
- }
13733
+ if (localResult.component || localResult.layout) {
13734
+ return localResult;
13737
13735
  }
13738
13736
  }
13739
13737
 
@@ -15416,7 +15414,7 @@ enifed('ember-metal/computed', ['exports', 'ember-metal/debug', 'ember-metal/pro
15416
15414
  this.lastName = 'Jones';
15417
15415
  },
15418
15416
 
15419
- fullName: Ember.computed({
15417
+ fullName: Ember.computed('firstName', 'lastName', {
15420
15418
  get(key) {
15421
15419
  return `${this.get('firstName')} ${this.get('lastName')}`;
15422
15420
  },
@@ -16204,7 +16202,7 @@ enifed('ember-metal/core', ['exports', 'require'], function (exports, _require)
16204
16202
 
16205
16203
  @class Ember
16206
16204
  @static
16207
- @version 2.5.0-beta.1
16205
+ @version 2.5.0-beta.4
16208
16206
  @public
16209
16207
  */
16210
16208
 
@@ -16246,11 +16244,11 @@ enifed('ember-metal/core', ['exports', 'require'], function (exports, _require)
16246
16244
 
16247
16245
  @property VERSION
16248
16246
  @type String
16249
- @default '2.5.0-beta.1'
16247
+ @default '2.5.0-beta.4'
16250
16248
  @static
16251
16249
  @public
16252
16250
  */
16253
- Ember.VERSION = '2.5.0-beta.1';
16251
+ Ember.VERSION = '2.5.0-beta.4';
16254
16252
 
16255
16253
  /**
16256
16254
  The hash of environment variables used to control various configuration
@@ -17355,10 +17353,6 @@ enifed('ember-metal/index', ['exports', 'require', 'ember-metal/core', 'ember-me
17355
17353
  _emberMetalCore.default.Debug.registerWarnHandler = function () {};
17356
17354
  }
17357
17355
 
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
-
17362
17356
  _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);
17363
17357
  _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);
17364
17358
 
@@ -17889,12 +17883,6 @@ enifed('ember-metal/libraries', ['exports', 'ember-metal/debug', 'ember-metal/fe
17889
17883
  }
17890
17884
  };
17891
17885
 
17892
- if (_emberMetalFeatures.default('ember-libraries-isregistered')) {
17893
- Libraries.prototype.isRegistered = function (name) {
17894
- return !!this._getLibraryByName(name);
17895
- };
17896
- }
17897
-
17898
17886
  exports.default = Libraries;
17899
17887
  });
17900
17888
  enifed('ember-metal/logger', ['exports', 'ember-metal/core', 'ember-metal/error'], function (exports, _emberMetalCore, _emberMetalError) {
@@ -18566,9 +18554,7 @@ enifed('ember-metal/merge', ['exports', 'ember-metal/debug', 'ember-metal/featur
18566
18554
  */
18567
18555
 
18568
18556
  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
- }
18557
+ _emberMetalDebug.deprecate('Usage of `Ember.merge` is deprecated, use `Ember.assign` instead.', false, { id: 'ember-metal.merge', until: '3.0.0' });
18572
18558
 
18573
18559
  if (!updates || typeof updates !== 'object') {
18574
18560
  return original;
@@ -25783,12 +25769,6 @@ enifed('ember-routing/system/route', ['exports', 'ember-metal/core', 'ember-meta
25783
25769
  var controllerDefinedQueryParameterConfiguration = _emberMetalProperty_get.get(controllerProto, 'queryParams');
25784
25770
  var normalizedControllerQueryParameterConfiguration = _emberRoutingUtils.normalizeControllerQueryParams(controllerDefinedQueryParameterConfiguration);
25785
25771
  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
- }
25792
25772
  } else if (hasRouterDefinedQueryParams) {
25793
25773
  // the developer has not defined a controller but *has* supplied route query params.
25794
25774
  // Generate a class for them so we can later insert default values
@@ -25815,19 +25795,6 @@ enifed('ember-routing/system/route', ['exports', 'ember-metal/core', 'ember-meta
25815
25795
 
25816
25796
  var desc = combinedQueryParameterConfiguration[propName];
25817
25797
 
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
-
25831
25798
  var scope = desc.scope || 'model';
25832
25799
  var parts;
25833
25800
 
@@ -26362,7 +26329,7 @@ enifed('ember-routing/system/route', ['exports', 'ember-metal/core', 'ember-meta
26362
26329
  var totalChanged = Object.keys(changed).concat(Object.keys(removed));
26363
26330
  for (var i = 0, len = totalChanged.length; i < len; ++i) {
26364
26331
  var qp = qpMap[totalChanged[i]];
26365
- if (qp && _emberMetalProperty_get.get(this._optionsForQueryParam(qp), 'refreshModel')) {
26332
+ if (qp && _emberMetalProperty_get.get(this._optionsForQueryParam(qp), 'refreshModel') && this.router.currentState) {
26366
26333
  this.refresh();
26367
26334
  }
26368
26335
  }
@@ -27406,7 +27373,7 @@ enifed('ember-routing/system/route', ['exports', 'ember-metal/core', 'ember-meta
27406
27373
  //
27407
27374
  this.render('post', { // the template name associated with 'post' Route
27408
27375
  into: 'application', // the parent route to 'post' Route
27409
- outlet: 'main', // {{outlet}} and {{outlet 'main' are synonymous}},
27376
+ outlet: 'main', // {{outlet}} and {{outlet 'main'}} are synonymous,
27410
27377
  view: 'post', // the view associated with the 'post' Route
27411
27378
  controller: 'post', // the controller associated with the 'post' Route
27412
27379
  })
@@ -27635,17 +27602,6 @@ enifed('ember-routing/system/route', ['exports', 'ember-metal/core', 'ember-meta
27635
27602
  };
27636
27603
 
27637
27604
  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
- }
27649
27605
 
27650
27606
  if (!ViewClass && !template && !Component) {
27651
27607
  _emberMetalDebug.assert('Could not find "' + name + '" template, view, or component.', isDefaultRender);
@@ -27713,16 +27669,12 @@ enifed('ember-routing/system/route', ['exports', 'ember-metal/core', 'ember-meta
27713
27669
  var keysAlreadyMergedOrSkippable;
27714
27670
  var qps = {};
27715
27671
 
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
- }
27672
+ keysAlreadyMergedOrSkippable = {
27673
+ defaultValue: true,
27674
+ type: true,
27675
+ scope: true,
27676
+ as: true
27677
+ };
27726
27678
 
27727
27679
  // first loop over all controller qps, merging them with any matching route qps
27728
27680
  // into a new empty object to avoid mutating.
@@ -27769,6 +27721,11 @@ enifed('ember-routing/system/route', ['exports', 'ember-metal/core', 'ember-meta
27769
27721
  exports.default = Route;
27770
27722
  });
27771
27723
  // FEATURES, A, deprecate, assert, Logger
27724
+
27725
+ // apply default values to controllers
27726
+ // detect that default value defined on router config
27727
+
27728
+ // detect that property was not defined on controller
27772
27729
  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) {
27773
27730
  'use strict';
27774
27731
 
@@ -27949,9 +27906,9 @@ enifed('ember-routing/system/router', ['exports', 'ember-metal/logger', 'ember-m
27949
27906
  didTransition: function() {
27950
27907
  this._super(...arguments);
27951
27908
  return ga('send', 'pageview', {
27952
- 'page': this.get('url'),
27953
- 'title': this.get('url')
27954
- });
27909
+ 'page': this.get('url'),
27910
+ 'title': this.get('url')
27911
+ });
27955
27912
  }
27956
27913
  });
27957
27914
  ```
@@ -28368,6 +28325,12 @@ enifed('ember-routing/system/router', ['exports', 'ember-metal/logger', 'ember-m
28368
28325
  _emberMetalDebug.assert('The route ' + targetRouteName + ' was not found', targetRouteName && this.router.hasRoute(targetRouteName));
28369
28326
 
28370
28327
  var queryParams = {};
28328
+ // merge in any queryParams from the active transition which could include
28329
+ // queryparams from the url on initial load.
28330
+ if (this.router.activeTransition) {
28331
+ _emberMetalAssign.default(queryParams, this.router.activeTransition.queryParams);
28332
+ }
28333
+
28371
28334
  _emberMetalAssign.default(queryParams, _queryParams);
28372
28335
  this._prepareQueryParams(targetRouteName, models, queryParams);
28373
28336
 
@@ -28460,6 +28423,11 @@ enifed('ember-routing/system/router', ['exports', 'ember-metal/logger', 'ember-m
28460
28423
  currentState: null,
28461
28424
  targetState: null,
28462
28425
 
28426
+ _resetTargetState: function () {
28427
+ var currentState = this.get('currentState');
28428
+ this.set('targetState', currentState);
28429
+ },
28430
+
28463
28431
  _handleSlowTransition: function (transition, originRoute) {
28464
28432
  if (!this.router.activeTransition) {
28465
28433
  // Don't fire an event if we've since moved on from
@@ -28833,6 +28801,7 @@ enifed('ember-routing/system/router', ['exports', 'ember-metal/logger', 'ember-m
28833
28801
  if (router._isErrorHandled(errorId)) {
28834
28802
  router._clearHandledError(errorId);
28835
28803
  } else {
28804
+ router._resetTargetState();
28836
28805
  throw error;
28837
28806
  }
28838
28807
  });
@@ -29381,7 +29350,8 @@ enifed('ember-routing-htmlbars/keywords/action', ['exports', 'htmlbars-runtime/h
29381
29350
 
29382
29351
  ### Event Propagation
29383
29352
 
29384
- `{{action}}` helpers called in element space can control event bubbling.
29353
+ `{{action}}` helpers called in element space can control event bubbling. Note
29354
+ that the closure style actions cannot.
29385
29355
 
29386
29356
  Events triggered through the action helper will automatically have
29387
29357
  `.preventDefault()` called on them. You do not need to do so in your event
@@ -29401,6 +29371,28 @@ enifed('ember-routing-htmlbars/keywords/action', ['exports', 'htmlbars-runtime/h
29401
29371
  <button {{action 'edit' post bubbles=false}}>Edit</button>
29402
29372
  ```
29403
29373
 
29374
+ To disable bubbling with closure style actions you must create your own
29375
+ wrapper helper that makes use of `event.stopPropagation()`:
29376
+
29377
+ ```handlebars
29378
+ <div onclick={{disable-bubbling (action "sayHello")}}>Hello</div>
29379
+ ```
29380
+
29381
+ ```js
29382
+ // app/helpers/disable-bubbling.js
29383
+ import Ember from 'ember';
29384
+
29385
+ export function disableBubbling([action]) {
29386
+ return function(event) {
29387
+ event.stopPropagation();
29388
+
29389
+ return action(event);
29390
+ };
29391
+ }
29392
+
29393
+ export default Ember.Helper.helper(disableBubbling);
29394
+ ```
29395
+
29404
29396
  If you need the default handler to trigger you should either register your
29405
29397
  own event handler, or use event methods on your view class. See
29406
29398
  ["Responding to Browser Events"](/api/classes/Ember.View.html#toc_responding-to-browser-events)
@@ -29522,6 +29514,9 @@ enifed('ember-routing-htmlbars/keywords/closure-action', ['exports', 'ember-meta
29522
29514
  if (!action) {
29523
29515
  throw new _emberMetalError.default('An action named \'' + actionName + '\' was not found in ' + target + '.');
29524
29516
  }
29517
+ } else if (action && typeof action[INVOKE] === 'function') {
29518
+ target = action;
29519
+ action = action[INVOKE];
29525
29520
  } else if (actionType !== 'function') {
29526
29521
  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 + '.');
29527
29522
  }
@@ -29893,6 +29888,7 @@ enifed('ember-routing-htmlbars/keywords/render', ['exports', 'ember-metal/debug'
29893
29888
  }
29894
29889
 
29895
29890
  var parentController = _emberMetalStreamsUtils.read(scope.getLocal('controller'));
29891
+ var target = parentController || router;
29896
29892
  var controller;
29897
29893
 
29898
29894
  // choose name
@@ -29902,7 +29898,7 @@ enifed('ember-routing-htmlbars/keywords/render', ['exports', 'ember-metal/debug'
29902
29898
  controller = factory.create({
29903
29899
  model: _emberMetalStreamsUtils.read(context),
29904
29900
  parentController: parentController,
29905
- target: parentController
29901
+ target: target
29906
29902
  });
29907
29903
 
29908
29904
  node.addDestruction(controller);
@@ -29910,7 +29906,7 @@ enifed('ember-routing-htmlbars/keywords/render', ['exports', 'ember-metal/debug'
29910
29906
  controller = owner.lookup(controllerFullName) || _emberRoutingSystemGenerate_controller.default(owner, controllerName);
29911
29907
 
29912
29908
  controller.setProperties({
29913
- target: parentController,
29909
+ target: target,
29914
29910
  parentController: parentController
29915
29911
  });
29916
29912
  }
@@ -30330,7 +30326,7 @@ enifed('ember-routing-views/components/link-to', ['exports', 'ember-metal/logger
30330
30326
 
30331
30327
  'use strict';
30332
30328
 
30333
- _emberHtmlbarsTemplatesLinkTo.default.meta.revision = 'Ember@2.5.0-beta.1';
30329
+ _emberHtmlbarsTemplatesLinkTo.default.meta.revision = 'Ember@2.5.0-beta.4';
30334
30330
 
30335
30331
  /**
30336
30332
  `Ember.LinkComponent` renders an element whose `click` event triggers a
@@ -30769,7 +30765,7 @@ enifed('ember-routing-views/components/link-to', ['exports', 'ember-metal/logger
30769
30765
  _emberMetalDebug.assert('You must provide one or more parameters to the link-to component.', params.length);
30770
30766
 
30771
30767
  var disabledWhen = _emberMetalProperty_get.get(this, 'disabledWhen');
30772
- if (disabledWhen) {
30768
+ if (disabledWhen !== undefined) {
30773
30769
  this.set('disabled', disabledWhen);
30774
30770
  }
30775
30771
 
@@ -30833,7 +30829,7 @@ enifed('ember-routing-views/views/outlet', ['exports', 'ember-views/views/view',
30833
30829
 
30834
30830
  'use strict';
30835
30831
 
30836
- _emberHtmlbarsTemplatesTopLevelView.default.meta.revision = 'Ember@2.5.0-beta.1';
30832
+ _emberHtmlbarsTemplatesTopLevelView.default.meta.revision = 'Ember@2.5.0-beta.4';
30837
30833
 
30838
30834
  var CoreOutletView = _emberViewsViewsView.default.extend({
30839
30835
  defaultTemplate: _emberHtmlbarsTemplatesTopLevelView.default,
@@ -30984,18 +30980,7 @@ enifed('ember-runtime/compare', ['exports', 'ember-runtime/utils', 'ember-runtim
30984
30980
  return spaceship(v, w);
30985
30981
 
30986
30982
  case 'string':
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;
30983
+ return spaceship(v.localeCompare(w), 0);
30999
30984
 
31000
30985
  case 'array':
31001
30986
  var vLen = v.length;
@@ -33312,8 +33297,19 @@ enifed('ember-runtime/mixins/array', ['exports', 'ember-metal/core', 'ember-meta
33312
33297
  on the array. Just get an equivalent property on this object and it will
33313
33298
  return an enumerable that maps automatically to the named key on the
33314
33299
  member objects.
33315
- If you merely want to watch for any items being added or removed to the array,
33316
- use the `[]` property instead of `@each`.
33300
+ @each should only be used in a non-terminal context. Example:
33301
+ ```javascript
33302
+ myMethod: computed('posts.@each.author', function(){
33303
+ ...
33304
+ });
33305
+ ```
33306
+ If you merely want to watch for the array being changed, like an object being
33307
+ replaced, added or removed, use `[]` instead of `@each`.
33308
+ ```javascript
33309
+ myMethod: computed('posts.[]', function(){
33310
+ ...
33311
+ });
33312
+ ```
33317
33313
  @property @each
33318
33314
  @public
33319
33315
  */
@@ -36871,7 +36867,7 @@ enifed('ember-runtime/system/core_object', ['exports', 'ember-metal/debug', 'emb
36871
36867
  if (mergedProperties && mergedProperties.length && mergedProperties.indexOf(keyName) >= 0) {
36872
36868
  var originalValue = this[keyName];
36873
36869
 
36874
- value = _emberMetalAssign.default(originalValue, value);
36870
+ value = _emberMetalAssign.default({}, originalValue, value);
36875
36871
  }
36876
36872
 
36877
36873
  if (desc) {
@@ -38818,12 +38814,13 @@ enifed('ember-template-compiler/compat', ['exports', 'ember-metal/core', 'ember-
38818
38814
  EmberHandlebars.compile = _emberTemplateCompilerSystemCompile.default;
38819
38815
  EmberHandlebars.template = _emberTemplateCompilerSystemTemplate.default;
38820
38816
  });
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) {
38817
+ 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/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, _emberTemplateCompilerPluginsTransformClosureComponentAttrsIntoMut, _emberTemplateCompilerPluginsTransformComponentAttrsIntoMut, _emberTemplateCompilerPluginsTransformComponentCurlyToReadonly, _emberTemplateCompilerPluginsTransformAngleBracketComponents, _emberTemplateCompilerPluginsTransformInputOnToOnEvent, _emberTemplateCompilerPluginsTransformTopLevelComponents, _emberTemplateCompilerPluginsTransformEachIntoCollection, _emberTemplateCompilerPluginsTransformUnescapedInlineLinkTo, _emberTemplateCompilerPluginsAssertNoViewAndControllerPaths, _emberTemplateCompilerPluginsAssertNoViewHelper, _emberTemplateCompilerPluginsAssertNoEachIn, _emberTemplateCompilerCompat) {
38822
38818
  'use strict';
38823
38819
 
38824
38820
  _emberTemplateCompilerPlugins.registerPlugin('ast', _emberTemplateCompilerPluginsTransformOldBindingSyntax.default);
38825
38821
  _emberTemplateCompilerPlugins.registerPlugin('ast', _emberTemplateCompilerPluginsTransformOldClassBindingSyntax.default);
38826
38822
  _emberTemplateCompilerPlugins.registerPlugin('ast', _emberTemplateCompilerPluginsTransformItemClass.default);
38823
+ _emberTemplateCompilerPlugins.registerPlugin('ast', _emberTemplateCompilerPluginsTransformClosureComponentAttrsIntoMut.default);
38827
38824
  _emberTemplateCompilerPlugins.registerPlugin('ast', _emberTemplateCompilerPluginsTransformComponentAttrsIntoMut.default);
38828
38825
  _emberTemplateCompilerPlugins.registerPlugin('ast', _emberTemplateCompilerPluginsTransformComponentCurlyToReadonly.default);
38829
38826
  _emberTemplateCompilerPlugins.registerPlugin('ast', _emberTemplateCompilerPluginsTransformAngleBracketComponents.default);
@@ -39051,6 +39048,88 @@ enifed('ember-template-compiler/plugins/transform-angle-bracket-components', ['e
39051
39048
 
39052
39049
  exports.default = TransformAngleBracketComponents;
39053
39050
  });
39051
+ enifed('ember-template-compiler/plugins/transform-closure-component-attrs-into-mut', ['exports'], function (exports) {
39052
+ 'use strict';
39053
+
39054
+ function TransformClosureComponentAttrsIntoMut() {
39055
+ // set later within HTMLBars to the syntax package
39056
+ this.syntax = null;
39057
+ }
39058
+
39059
+ /**
39060
+ @private
39061
+ @method transform
39062
+ @param {AST} ast The AST to be transformed.
39063
+ */
39064
+ TransformClosureComponentAttrsIntoMut.prototype.transform = function TransformClosureComponentAttrsIntoMut_transform(ast) {
39065
+ var b = this.syntax.builders;
39066
+ var walker = new this.syntax.Walker();
39067
+
39068
+ walker.visit(ast, function (node) {
39069
+ if (validate(node)) {
39070
+ processExpression(b, node);
39071
+ }
39072
+ });
39073
+
39074
+ return ast;
39075
+ };
39076
+
39077
+ function processExpression(builder, node) {
39078
+ processSubExpressionsInNode(builder, node);
39079
+
39080
+ if (isComponentClosure(node)) {
39081
+ mutParameters(builder, node);
39082
+ }
39083
+ }
39084
+
39085
+ function processSubExpressionsInNode(builder, node) {
39086
+ for (var i = 0; i < node.params.length; i++) {
39087
+ if (node.params[i].type === 'SubExpression') {
39088
+ processExpression(builder, node.params[i]);
39089
+ }
39090
+ }
39091
+
39092
+ each(node.hash.pairs, function (pair) {
39093
+ var value = pair.value;
39094
+
39095
+ if (value.type === 'SubExpression') {
39096
+ processExpression(builder, value);
39097
+ }
39098
+ });
39099
+ }
39100
+
39101
+ function isComponentClosure(node) {
39102
+ return node.type === 'SubExpression' && node.path.original === 'component';
39103
+ }
39104
+
39105
+ function mutParameters(builder, node) {
39106
+ for (var i = 1; i < node.params.length; i++) {
39107
+ if (node.params[i].type === 'PathExpression') {
39108
+ node.params[i] = builder.sexpr(builder.path('@mut'), [node.params[i]]);
39109
+ }
39110
+ }
39111
+
39112
+ each(node.hash.pairs, function (pair) {
39113
+ var value = pair.value;
39114
+
39115
+ if (value.type === 'PathExpression') {
39116
+ pair.value = builder.sexpr(builder.path('@mut'), [pair.value]);
39117
+ }
39118
+ });
39119
+ }
39120
+
39121
+ function validate(node) {
39122
+ return node.type === 'BlockStatement' || node.type === 'MustacheStatement';
39123
+ }
39124
+
39125
+ function each(list, callback) {
39126
+ for (var i = 0, l = list.length; i < l; i++) {
39127
+ callback(list[i]);
39128
+ }
39129
+ }
39130
+
39131
+ exports.default = TransformClosureComponentAttrsIntoMut;
39132
+ });
39054
39133
  enifed('ember-template-compiler/plugins/transform-component-attrs-into-mut', ['exports'], function (exports) {
39055
39134
  'use strict';
39056
39135
 
@@ -39843,7 +39922,7 @@ enifed('ember-template-compiler/system/compile_options', ['exports', 'ember-meta
39843
39922
  options.buildMeta = function buildMeta(program) {
39844
39923
  return {
39845
39924
  fragmentReason: fragmentReason(program),
39846
- revision: 'Ember@2.5.0-beta.1',
39925
+ revision: 'Ember@2.5.0-beta.4',
39847
39926
  loc: program.loc,
39848
39927
  moduleName: options.moduleName
39849
39928
  };
@@ -41493,6 +41572,7 @@ enifed('ember-views/components/component', ['exports', 'ember-metal/debug', 'emb
41493
41572
  @class Component
41494
41573
  @namespace Ember
41495
41574
  @extends Ember.View
41575
+ @uses Ember.ViewTargetActionSupport
41496
41576
  @public
41497
41577
  */
41498
41578
  var Component = _emberViewsViewsView.default.extend(_emberRuntimeMixinsTarget_action_support.default, {
@@ -45264,7 +45344,7 @@ enifed('ember-views/views/collection_view', ['exports', 'ember-metal/core', 'emb
45264
45344
  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) {
45265
45345
  'use strict';
45266
45346
 
45267
- _emberHtmlbarsTemplatesContainerView.default.meta.revision = 'Ember@2.5.0-beta.1';
45347
+ _emberHtmlbarsTemplatesContainerView.default.meta.revision = 'Ember@2.5.0-beta.4';
45268
45348
 
45269
45349
  /**
45270
45350
  @module ember
@@ -47062,21 +47142,20 @@ enifed('ember-views/views/view', ['exports', 'ember-metal/core', 'ember-metal/de
47062
47142
  ```
47063
47143
 
47064
47144
  If the return value of an `attributeBindings` monitored property is a boolean
47065
- the property will follow HTML's pattern of repeating the attribute's name as
47066
- its value:
47145
+ the property's value will be set as a coerced string:
47067
47146
 
47068
47147
  ```javascript
47069
47148
  MyTextInput = Ember.View.extend({
47070
47149
  tagName: 'input',
47071
47150
  attributeBindings: ['disabled'],
47072
- disabled: true
47151
+ disabled: false
47073
47152
  });
47074
47153
  ```
47075
47154
 
47076
- Will result in view instances with an HTML representation of:
47155
+ Will result in a view instance with an HTML representation of:
47077
47156
 
47078
47157
  ```html
47079
- <input id="ember1" class="ember-view" disabled="disabled" />
47158
+ <input id="ember1" class="ember-view" disabled="false" />
47080
47159
  ```
47081
47160
 
47082
47161
  `attributeBindings` can refer to computed properties:
@@ -47095,6 +47174,17 @@ enifed('ember-views/views/view', ['exports', 'ember-metal/core', 'ember-metal/de
47095
47174
  });
47096
47175
  ```
47097
47176
 
47177
+ To prevent setting an attribute altogether, use `null` or `undefined` as the
47178
+ return value of the `attributeBindings` monitored property:
47179
+
47180
+ ```javascript
47181
+ MyTextInput = Ember.View.extend({
47182
+ tagName: 'form',
47183
+ attributeBindings: ['novalidate'],
47184
+ novalidate: null
47185
+ });
47186
+ ```
47187
+
47098
47188
  Updates to the property of an attribute binding will result in automatic
47099
47189
  update of the HTML attribute in the view's rendered HTML representation.
47100
47190
 
@@ -47423,6 +47513,7 @@ enifed('ember-views/views/view', ['exports', 'ember-metal/core', 'ember-metal/de
47423
47513
  @namespace Ember
47424
47514
  @extends Ember.CoreView
47425
47515
  @deprecated See http://emberjs.com/deprecations/v1.x/#toc_ember-view
47516
+ @uses Ember.ViewSupport
47426
47517
  @uses Ember.ViewContextSupport
47427
47518
  @uses Ember.ViewChildViewsSupport
47428
47519
  @uses Ember.TemplateRenderingSupport