ember-source 2.3.0.beta.1 → 2.3.0.beta.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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.3.0-beta.1
9
+ * @version 2.3.0-beta.3
10
10
  */
11
11
 
12
12
  var enifed, requireModule, require, requirejs, Ember;
@@ -1189,9 +1189,11 @@ enifed('backburner', ['exports', 'backburner/utils', 'backburner/platform', 'bac
1189
1189
  clearTimeout(item[2]);
1190
1190
  }
1191
1191
  });
1192
- enifed('container/container', ['exports', 'ember-metal/core', 'ember-metal/debug', 'ember-metal/dictionary', 'ember-metal/features', 'container/owner', 'ember-runtime/mixins/container_proxy'], function (exports, _emberMetalCore, _emberMetalDebug, _emberMetalDictionary, _emberMetalFeatures, _containerOwner, _emberRuntimeMixinsContainer_proxy) {
1192
+ enifed('container/container', ['exports', 'ember-metal/core', 'ember-metal/debug', 'ember-metal/dictionary', 'ember-metal/features', 'container/owner', 'ember-runtime/mixins/container_proxy', 'ember-metal/symbol'], function (exports, _emberMetalCore, _emberMetalDebug, _emberMetalDictionary, _emberMetalFeatures, _containerOwner, _emberRuntimeMixinsContainer_proxy, _emberMetalSymbol) {
1193
1193
  'use strict';
1194
1194
 
1195
+ var CONTAINER_OVERRIDE = _emberMetalSymbol.default('CONTAINER_OVERRIDE');
1196
+
1195
1197
  /**
1196
1198
  A container used to instantiate and cache objects.
1197
1199
 
@@ -1213,6 +1215,7 @@ enifed('container/container', ['exports', 'ember-metal/core', 'ember-metal/debug
1213
1215
  this.validationCache = _emberMetalDictionary.default(options && options.validationCache ? options.validationCache : null);
1214
1216
 
1215
1217
  this._fakeContainerToInject = _emberRuntimeMixinsContainer_proxy.buildFakeContainerWithDeprecations(this);
1218
+ this[CONTAINER_OVERRIDE] = undefined;
1216
1219
  }
1217
1220
 
1218
1221
  Container.prototype = {
@@ -1328,6 +1331,19 @@ enifed('container/container', ['exports', 'ember-metal/core', 'ember-metal/debug
1328
1331
  } else {
1329
1332
  resetCache(this);
1330
1333
  }
1334
+ },
1335
+
1336
+ /**
1337
+ Returns an object that can be used to provide an owner to a
1338
+ manually created instance.
1339
+ @private
1340
+ @method ownerInjection
1341
+ @returns { Object }
1342
+ */
1343
+ ownerInjection: function () {
1344
+ var _ref;
1345
+
1346
+ return _ref = {}, _ref[_containerOwner.OWNER] = this.owner, _ref;
1331
1347
  }
1332
1348
  };
1333
1349
 
@@ -1510,7 +1526,9 @@ enifed('container/container', ['exports', 'ember-metal/core', 'ember-metal/debug
1510
1526
 
1511
1527
  // TODO - remove when Ember reaches v3.0.0
1512
1528
 
1513
- injectDeprecatedContainer(obj, container);
1529
+ if (!Object.isFrozen(obj) && 'container' in obj) {
1530
+ injectDeprecatedContainer(obj, container);
1531
+ }
1514
1532
  }
1515
1533
 
1516
1534
  return obj;
@@ -1524,7 +1542,15 @@ enifed('container/container', ['exports', 'ember-metal/core', 'ember-metal/debug
1524
1542
  enumerable: false,
1525
1543
  get: function () {
1526
1544
  _emberMetalDebug.deprecate('Using the injected `container` is deprecated. Please use the `getOwner` helper instead to access the owner of this object.', false, { id: 'ember-application.injected-container', until: '3.0.0', url: 'http://emberjs.com/deprecations/v2.x#toc_injected-container-access' });
1527
- return container;
1545
+ return this[CONTAINER_OVERRIDE] || container;
1546
+ },
1547
+
1548
+ set: function (value) {
1549
+ _emberMetalDebug.deprecate('Providing the `container` property to ' + this + ' is deprecated. Please use `Ember.setOwner` or `owner.ownerInjection()` instead to provide an owner to the instance being created.', false, { id: 'ember-application.injected-container', until: '3.0.0', url: 'http://emberjs.com/deprecations/v2.x#toc_injected-container-access' });
1550
+
1551
+ this[CONTAINER_OVERRIDE] = value;
1552
+
1553
+ return value;
1528
1554
  }
1529
1555
  });
1530
1556
  }
@@ -1663,7 +1689,13 @@ enifed('container/registry', ['exports', 'ember-metal/debug', 'ember-metal/dicti
1663
1689
  function Registry(options) {
1664
1690
  this.fallback = options && options.fallback ? options.fallback : null;
1665
1691
 
1666
- this.resolver = options && options.resolver ? options.resolver : function () {};
1692
+ if (options && options.resolver) {
1693
+ this.resolver = options.resolver;
1694
+
1695
+ if (typeof this.resolver === 'function') {
1696
+ deprecateResolverFunction(this);
1697
+ }
1698
+ }
1667
1699
 
1668
1700
  this.registrations = _emberMetalDictionary.default(options && options.registrations ? options.registrations : null);
1669
1701
 
@@ -1690,9 +1722,10 @@ enifed('container/registry', ['exports', 'ember-metal/debug', 'ember-metal/dicti
1690
1722
  fallback: null,
1691
1723
 
1692
1724
  /**
1693
- @private
1725
+ An object that has a `resolve` method that resolves a name.
1726
+ @private
1694
1727
  @property resolver
1695
- @type function
1728
+ @type Resolver
1696
1729
  */
1697
1730
  resolver: null,
1698
1731
 
@@ -1874,7 +1907,13 @@ enifed('container/registry', ['exports', 'ember-metal/debug', 'ember-metal/dicti
1874
1907
  @return {string} described fullName
1875
1908
  */
1876
1909
  describe: function (fullName) {
1877
- return fullName;
1910
+ if (this.resolver && this.resolver.lookupDescription) {
1911
+ return this.resolver.lookupDescription(fullName);
1912
+ } else if (this.fallback) {
1913
+ return this.fallback.describe(fullName);
1914
+ } else {
1915
+ return fullName;
1916
+ }
1878
1917
  },
1879
1918
 
1880
1919
  /**
@@ -1885,7 +1924,13 @@ enifed('container/registry', ['exports', 'ember-metal/debug', 'ember-metal/dicti
1885
1924
  @return {string} normalized fullName
1886
1925
  */
1887
1926
  normalizeFullName: function (fullName) {
1888
- return fullName;
1927
+ if (this.resolver && this.resolver.normalize) {
1928
+ return this.resolver.normalize(fullName);
1929
+ } else if (this.fallback) {
1930
+ return this.fallback.normalizeFullName(fullName);
1931
+ } else {
1932
+ return fullName;
1933
+ }
1889
1934
  },
1890
1935
 
1891
1936
  /**
@@ -1907,7 +1952,13 @@ enifed('container/registry', ['exports', 'ember-metal/debug', 'ember-metal/dicti
1907
1952
  @return {function} toString function
1908
1953
  */
1909
1954
  makeToString: function (factory, fullName) {
1910
- return factory.toString();
1955
+ if (this.resolver && this.resolver.makeToString) {
1956
+ return this.resolver.makeToString(factory, fullName);
1957
+ } else if (this.fallback) {
1958
+ return this.fallback.makeToString(factory, fullName);
1959
+ } else {
1960
+ return factory.toString();
1961
+ }
1911
1962
  },
1912
1963
 
1913
1964
  /**
@@ -2198,7 +2249,7 @@ enifed('container/registry', ['exports', 'ember-metal/debug', 'ember-metal/dicti
2198
2249
  fallbackKnown = this.fallback.knownForType(type);
2199
2250
  }
2200
2251
 
2201
- if (this.resolver.knownForType) {
2252
+ if (this.resolver && this.resolver.knownForType) {
2202
2253
  resolverKnown = this.resolver.knownForType(type);
2203
2254
  }
2204
2255
 
@@ -2278,6 +2329,13 @@ enifed('container/registry', ['exports', 'ember-metal/debug', 'ember-metal/dicti
2278
2329
  }
2279
2330
  };
2280
2331
 
2332
+ function deprecateResolverFunction(registry) {
2333
+ _emberMetalDebug.deprecate('Passing a `resolver` function into a Registry is deprecated. Please pass in a Resolver object with a `resolve` method.', false, { id: 'ember-application.registry-resolver-as-function', until: '3.0.0', url: 'http://emberjs.com/deprecations/v2.x#toc_registry-resolver-as-function' });
2334
+ registry.resolver = {
2335
+ resolve: registry.resolver
2336
+ };
2337
+ }
2338
+
2281
2339
  function resolve(registry, normalizedName) {
2282
2340
  var cached = registry._resolveCache[normalizedName];
2283
2341
  if (cached) {
@@ -2287,7 +2345,13 @@ enifed('container/registry', ['exports', 'ember-metal/debug', 'ember-metal/dicti
2287
2345
  return;
2288
2346
  }
2289
2347
 
2290
- var resolved = registry.resolver(normalizedName) || registry.registrations[normalizedName];
2348
+ var resolved = undefined;
2349
+
2350
+ if (registry.resolver) {
2351
+ resolved = registry.resolver.resolve(normalizedName);
2352
+ }
2353
+
2354
+ resolved = resolved || registry.registrations[normalizedName];
2291
2355
 
2292
2356
  if (resolved) {
2293
2357
  registry._resolveCache[normalizedName] = resolved;
@@ -2965,6 +3029,8 @@ enifed('dom-helper/prop', ['exports'], function (exports) {
2965
3029
  }
2966
3030
  });
2967
3031
  enifed("dom-helper", ["exports", "htmlbars-runtime/morph", "morph-attr", "dom-helper/build-html-dom", "dom-helper/classes", "dom-helper/prop"], function (exports, _htmlbarsRuntimeMorph, _morphAttr, _domHelperBuildHtmlDom, _domHelperClasses, _domHelperProp) {
3032
+ /*globals module, URL*/
3033
+
2968
3034
  "use strict";
2969
3035
 
2970
3036
  var doc = typeof document === 'undefined' ? false : document;
@@ -3115,6 +3181,8 @@ enifed("dom-helper", ["exports", "htmlbars-runtime/morph", "morph-attr", "dom-he
3115
3181
  }
3116
3182
  this.canClone = canClone;
3117
3183
  this.namespace = null;
3184
+
3185
+ installEnvironmentSpecificMethods(this);
3118
3186
  }
3119
3187
 
3120
3188
  var prototype = DOMHelper.prototype;
@@ -3514,17 +3582,57 @@ enifed("dom-helper", ["exports", "htmlbars-runtime/morph", "morph-attr", "dom-he
3514
3582
  return fragment;
3515
3583
  };
3516
3584
 
3585
+ var nodeURL;
3517
3586
  var parsingNode;
3518
3587
 
3519
- // Used to determine whether a URL needs to be sanitized.
3520
- prototype.protocolForURL = function (url) {
3588
+ function installEnvironmentSpecificMethods(domHelper) {
3589
+ var protocol = browserProtocolForURL.call(domHelper, 'foobar:baz');
3590
+
3591
+ // Test to see if our DOM implementation parses
3592
+ // and normalizes URLs.
3593
+ if (protocol === 'foobar:') {
3594
+ // Swap in the method that doesn't do this test now that
3595
+ // we know it works.
3596
+ domHelper.protocolForURL = browserProtocolForURL;
3597
+ } else if (typeof URL === 'object') {
3598
+ // URL globally provided, likely from FastBoot's sandbox
3599
+ nodeURL = URL;
3600
+ domHelper.protocolForURL = nodeProtocolForURL;
3601
+ } else if (typeof module === 'object' && typeof module.require === 'function') {
3602
+ // Otherwise, we need to fall back to our own URL parsing.
3603
+ // Global `require` is shadowed by Ember's loader so we have to use the fully
3604
+ // qualified `module.require`.
3605
+ nodeURL = module.require('url');
3606
+ domHelper.protocolForURL = nodeProtocolForURL;
3607
+ } else {
3608
+ throw new Error("DOM Helper could not find valid URL parsing mechanism");
3609
+ }
3610
+
3611
+ // A SimpleDOM-specific extension that allows us to place HTML directly
3612
+ // into the DOM tree, for when the output target is always serialized HTML.
3613
+ if (domHelper.document.createRawHTMLSection) {
3614
+ domHelper.setMorphHTML = nodeSetMorphHTML;
3615
+ }
3616
+ }
3617
+
3618
+ function nodeSetMorphHTML(morph, html) {
3619
+ var section = this.document.createRawHTMLSection(html);
3620
+ morph.setNode(section);
3621
+ }
3622
+
3623
+ function browserProtocolForURL(url) {
3521
3624
  if (!parsingNode) {
3522
3625
  parsingNode = this.document.createElement('a');
3523
3626
  }
3524
3627
 
3525
3628
  parsingNode.href = url;
3526
3629
  return parsingNode.protocol;
3527
- };
3630
+ }
3631
+
3632
+ function nodeProtocolForURL(url) {
3633
+ var protocol = nodeURL.parse(url).protocol;
3634
+ return protocol === null ? ':' : protocol;
3635
+ }
3528
3636
 
3529
3637
  exports.default = DOMHelper;
3530
3638
  });
@@ -3604,8 +3712,6 @@ enifed('ember-application/system/application-instance', ['exports', 'ember-metal
3604
3712
  var registry = this.__registry__ = new _containerRegistry.default({
3605
3713
  fallback: applicationRegistry
3606
3714
  });
3607
- registry.normalizeFullName = applicationRegistry.normalizeFullName;
3608
- registry.makeToString = applicationRegistry.makeToString;
3609
3715
 
3610
3716
  // Create a per-instance container from the instance's registry
3611
3717
  this.__container__ = registry.container({ owner: this });
@@ -3780,6 +3886,19 @@ enifed('ember-application/system/application-instance', ['exports', 'ember-metal
3780
3886
  willDestroy: function () {
3781
3887
  this._super.apply(this, arguments);
3782
3888
  _emberMetalRun_loop.default(this.__container__, 'destroy');
3889
+ },
3890
+
3891
+ /**
3892
+ Unregister a factory.
3893
+ Overrides `RegistryProxy#unregister` in order to clear any cached instances
3894
+ of the unregistered factory.
3895
+ @public
3896
+ @method unregister
3897
+ @param {String} fullName
3898
+ */
3899
+ unregister: function (fullName) {
3900
+ this.__container__.reset(fullName);
3901
+ this._super.apply(this, arguments);
3783
3902
  }
3784
3903
  });
3785
3904
 
@@ -5180,13 +5299,11 @@ enifed('ember-application/system/application', ['exports', 'dag-map', 'container
5180
5299
  @public
5181
5300
  */
5182
5301
  buildRegistry: function (namespace) {
5183
- var registry = new _containerRegistry.default();
5302
+ var registry = new _containerRegistry.default({
5303
+ resolver: resolverFor(namespace)
5304
+ });
5184
5305
 
5185
5306
  registry.set = _emberMetalProperty_set.set;
5186
- registry.resolver = resolverFor(namespace);
5187
- registry.normalizeFullName = registry.resolver.normalize;
5188
- registry.describe = registry.resolver.describe;
5189
- registry.makeToString = registry.resolver.makeToString;
5190
5307
 
5191
5308
  registry.optionsForType('component', { singleton: false });
5192
5309
  registry.optionsForType('view', { singleton: false });
@@ -5247,7 +5364,7 @@ enifed('ember-application/system/application', ['exports', 'dag-map', 'container
5247
5364
  registry.injection('service:-routing', 'router', 'router:main');
5248
5365
 
5249
5366
  // DEBUGGING
5250
- registry.register('resolver-for-debugging:main', registry.resolver.__resolver__, { instantiate: false });
5367
+ registry.register('resolver-for-debugging:main', registry.resolver, { instantiate: false });
5251
5368
  registry.injection('container-debug-adapter:main', 'resolver', 'resolver-for-debugging:main');
5252
5369
  registry.injection('data-adapter:main', 'containerDebugAdapter', 'container-debug-adapter:main');
5253
5370
  // Custom resolver authors may want to register their own ContainerDebugAdapter with this key
@@ -5276,39 +5393,10 @@ enifed('ember-application/system/application', ['exports', 'dag-map', 'container
5276
5393
  */
5277
5394
  function resolverFor(namespace) {
5278
5395
  var ResolverClass = namespace.get('Resolver') || _emberApplicationSystemResolver.default;
5279
- var resolver = ResolverClass.create({
5396
+
5397
+ return ResolverClass.create({
5280
5398
  namespace: namespace
5281
5399
  });
5282
-
5283
- function resolve(fullName) {
5284
- return resolver.resolve(fullName);
5285
- }
5286
-
5287
- resolve.describe = function (fullName) {
5288
- return resolver.lookupDescription(fullName);
5289
- };
5290
-
5291
- resolve.makeToString = function (factory, fullName) {
5292
- return resolver.makeToString(factory, fullName);
5293
- };
5294
-
5295
- resolve.normalize = function (fullName) {
5296
- if (resolver.normalize) {
5297
- return resolver.normalize(fullName);
5298
- }
5299
- };
5300
-
5301
- resolve.knownForType = function knownForType(type) {
5302
- if (resolver.knownForType) {
5303
- return resolver.knownForType(type);
5304
- }
5305
- };
5306
-
5307
- resolve.moduleBasedResolver = resolver.moduleBasedResolver;
5308
-
5309
- resolve.__resolver__ = resolver;
5310
-
5311
- return resolve;
5312
5400
  }
5313
5401
 
5314
5402
  function registerLibraries() {
@@ -6282,7 +6370,7 @@ enifed('ember-debug', ['exports', 'ember-metal/core', 'ember-metal/debug', 'embe
6282
6370
  _emberMetalDebug.setDebugFunction('warn', _emberDebugWarn.default);
6283
6371
 
6284
6372
  /**
6285
- Will call `Ember.warn()` if ENABLE_ALL_FEATURES, ENABLE_OPTIONAL_FEATURES, or
6373
+ Will call `Ember.warn()` if ENABLE_OPTIONAL_FEATURES or
6286
6374
  any specific FEATURES flag is truthy.
6287
6375
 
6288
6376
  This method is called automatically in debug canary builds.
@@ -6294,7 +6382,6 @@ enifed('ember-debug', ['exports', 'ember-metal/core', 'ember-metal/debug', 'embe
6294
6382
 
6295
6383
  function _warnIfUsingStrippedFeatureFlags(FEATURES, featuresWereStripped) {
6296
6384
  if (featuresWereStripped) {
6297
- _emberMetalDebug.warn('Ember.ENV.ENABLE_ALL_FEATURES is only available in canary builds.', !_emberMetalCore.default.ENV.ENABLE_ALL_FEATURES, { id: 'ember-debug.feature-flag-with-features-stripped' });
6298
6385
  _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' });
6299
6386
 
6300
6387
  for (var key in FEATURES) {
@@ -6310,10 +6397,6 @@ enifed('ember-debug', ['exports', 'ember-metal/core', 'ember-metal/debug', 'embe
6310
6397
  _emberMetalFeatures.FEATURES['features-stripped-test'] = true;
6311
6398
  var featuresWereStripped = true;
6312
6399
 
6313
- if (_emberMetalFeatures.default('features-stripped-test')) {
6314
- exports.featuresWereStripped = featuresWereStripped = false;
6315
- }
6316
-
6317
6400
  delete _emberMetalFeatures.FEATURES['features-stripped-test'];
6318
6401
  _warnIfUsingStrippedFeatureFlags(_emberMetalCore.default.ENV.FEATURES, featuresWereStripped);
6319
6402
 
@@ -7816,7 +7899,7 @@ enifed('ember-htmlbars/helpers/with', ['exports', 'ember-views/streams/should_di
7816
7899
  for semantic clarity as it allows you to retain default scope or to reference a property from another
7817
7900
  `{{with}}` block.
7818
7901
 
7819
- If the aliased property is "falsey", for example: `false`, `undefined` `null`, `""`, `0` or
7902
+ If the aliased property is "falsey", for example: `false`, `undefined` `null`, `""`, `0`, NaN or
7820
7903
  an empty array, the block will not be rendered.
7821
7904
 
7822
7905
  ```handlebars
@@ -8084,22 +8167,37 @@ enifed('ember-htmlbars/hooks/component', ['exports', 'ember-metal/debug', 'ember
8084
8167
  function componentHook(renderNode, env, scope, _tagName, params, attrs, templates, visitor) {
8085
8168
  var state = renderNode.getState();
8086
8169
 
8087
- // Determine if this is an initial render or a re-render
8088
- if (state.manager) {
8089
- state.manager.rerender(env, attrs, visitor);
8090
- return;
8091
- }
8092
-
8093
8170
  var tagName = _tagName;
8094
8171
  if (_emberHtmlbarsSystemLookupHelper.CONTAINS_DOT_CACHE.get(tagName)) {
8095
8172
  var stream = env.hooks.get(env, scope, tagName);
8096
8173
  var componentCell = stream.value();
8097
8174
  if (_emberHtmlbarsKeywordsClosureComponent.isComponentCell(componentCell)) {
8098
8175
  tagName = componentCell[_emberHtmlbarsKeywordsClosureComponent.COMPONENT_PATH];
8176
+
8177
+ /*
8178
+ * Processing positional params before merging into a hash must be done
8179
+ * here to avoid problems with rest positional parameters rendered using
8180
+ * the dot notation.
8181
+ *
8182
+ * Closure components (for the contextual component feature) do not
8183
+ * actually keep the positional params, but process them at each level.
8184
+ * Therefore, when rendering a closure component with the component
8185
+ * helper we process the parameters and attributes and then merge those
8186
+ * on top of the closure component attributes.
8187
+ *
8188
+ */
8189
+ _emberHtmlbarsKeywordsClosureComponent.processPositionalParamsFromCell(componentCell, params, attrs);
8190
+ params = [];
8099
8191
  attrs = _emberHtmlbarsKeywordsClosureComponent.mergeInNewHash(componentCell[_emberHtmlbarsKeywordsClosureComponent.COMPONENT_HASH], attrs);
8100
8192
  }
8101
8193
  }
8102
8194
 
8195
+ // Determine if this is an initial render or a re-render
8196
+ if (state.manager) {
8197
+ state.manager.rerender(env, attrs, visitor);
8198
+ return;
8199
+ }
8200
+
8103
8201
  var isAngleBracket = false;
8104
8202
  var isTopLevel = false;
8105
8203
  var isDasherized = false;
@@ -8681,7 +8779,7 @@ enifed('ember-htmlbars/hooks/invoke-helper', ['exports', 'ember-htmlbars/system/
8681
8779
  return { value: helperStream.value() };
8682
8780
  }
8683
8781
  });
8684
- enifed('ember-htmlbars/hooks/link-render-node', ['exports', 'ember-htmlbars/utils/subscribe', 'ember-runtime/utils', 'ember-metal/streams/utils'], function (exports, _emberHtmlbarsUtilsSubscribe, _emberRuntimeUtils, _emberMetalStreamsUtils) {
8782
+ enifed('ember-htmlbars/hooks/link-render-node', ['exports', 'ember-htmlbars/utils/subscribe', 'ember-runtime/utils', 'ember-metal/streams/utils', 'ember-htmlbars/system/lookup-helper', 'ember-htmlbars/keywords/closure-component'], function (exports, _emberHtmlbarsUtilsSubscribe, _emberRuntimeUtils, _emberMetalStreamsUtils, _emberHtmlbarsSystemLookupHelper, _emberHtmlbarsKeywordsClosureComponent) {
8685
8783
  /**
8686
8784
  @module ember
8687
8785
  @submodule ember-htmlbars
@@ -8711,6 +8809,22 @@ enifed('ember-htmlbars/hooks/link-render-node', ['exports', 'ember-htmlbars/util
8711
8809
  }
8712
8810
  }
8713
8811
 
8812
+ // If has a dot in the path, we need to subscribe to the arguments in the
8813
+ // closure component as well.
8814
+
8815
+ if (_emberHtmlbarsSystemLookupHelper.CONTAINS_DOT_CACHE.get(path)) {
8816
+ var stream = env.hooks.get(env, scope, path);
8817
+ var componentCell = stream.value();
8818
+
8819
+ if (_emberHtmlbarsKeywordsClosureComponent.isComponentCell(componentCell)) {
8820
+ var closureAttrs = _emberHtmlbarsKeywordsClosureComponent.mergeInNewHash(componentCell[_emberHtmlbarsKeywordsClosureComponent.COMPONENT_HASH], hash);
8821
+
8822
+ for (var key in closureAttrs) {
8823
+ _emberHtmlbarsUtilsSubscribe.default(renderNode, env, scope, closureAttrs[key]);
8824
+ }
8825
+ }
8826
+ }
8827
+
8714
8828
  if (params && params.length) {
8715
8829
  for (var i = 0; i < params.length; i++) {
8716
8830
  _emberHtmlbarsUtilsSubscribe.default(renderNode, env, scope, params[i]);
@@ -8929,6 +9043,7 @@ enifed('ember-htmlbars/keywords/closure-component', ['exports', 'ember-metal/deb
8929
9043
 
8930
9044
  exports.default = closureComponent;
8931
9045
  exports.isComponentCell = isComponentCell;
9046
+ exports.processPositionalParamsFromCell = processPositionalParamsFromCell;
8932
9047
  exports.mergeInNewHash = mergeInNewHash;
8933
9048
  var COMPONENT_REFERENCE = _emberMetalSymbol.default('COMPONENT_REFERENCE');
8934
9049
  exports.COMPONENT_REFERENCE = COMPONENT_REFERENCE;
@@ -9004,12 +9119,16 @@ enifed('ember-htmlbars/keywords/closure-component', ['exports', 'ember-metal/deb
9004
9119
  function createNestedClosureComponentCell(componentCell, params, hash) {
9005
9120
  var _ref;
9006
9121
 
9122
+ // This needs to be done in each nesting level to avoid raising assertions
9123
+ processPositionalParamsFromCell(componentCell, params, hash);
9124
+
9125
+ 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;
9126
+ }
9127
+
9128
+ function processPositionalParamsFromCell(componentCell, params, hash) {
9007
9129
  var positionalParams = componentCell[COMPONENT_POSITIONAL_PARAMS];
9008
9130
 
9009
- // This needs to be done in each nesting level to avoid raising assertions
9010
9131
  _emberHtmlbarsUtilsExtractPositionalParams.processPositionalParams(null, positionalParams, params, hash);
9011
-
9012
- return _ref = {}, _ref[COMPONENT_PATH] = componentCell[COMPONENT_PATH], _ref[COMPONENT_HASH] = mergeInNewHash(componentCell[COMPONENT_HASH], hash), _ref[COMPONENT_POSITIONAL_PARAMS] = positionalParams, _ref[COMPONENT_CELL] = true, _ref;
9013
9132
  }
9014
9133
 
9015
9134
  function createNewClosureComponentCell(env, componentPath, params, hash) {
@@ -9424,7 +9543,7 @@ enifed('ember-htmlbars/keywords/each', ['exports'], function (exports) {
9424
9543
  return false;
9425
9544
  }
9426
9545
  });
9427
- enifed('ember-htmlbars/keywords/element-component', ['exports', 'ember-metal/assign', 'ember-htmlbars/keywords/closure-component', 'ember-htmlbars/utils/extract-positional-params'], function (exports, _emberMetalAssign, _emberHtmlbarsKeywordsClosureComponent, _emberHtmlbarsUtilsExtractPositionalParams) {
9546
+ enifed('ember-htmlbars/keywords/element-component', ['exports', 'ember-metal/assign', 'ember-htmlbars/keywords/closure-component'], function (exports, _emberMetalAssign, _emberHtmlbarsKeywordsClosureComponent) {
9428
9547
  'use strict';
9429
9548
 
9430
9549
  exports.default = {
@@ -9485,10 +9604,9 @@ enifed('ember-htmlbars/keywords/element-component', ['exports', 'ember-metal/ass
9485
9604
 
9486
9605
  if (_emberHtmlbarsKeywordsClosureComponent.isComponentCell(path)) {
9487
9606
  var closureComponent = env.hooks.getValue(path);
9488
- var positionalParams = closureComponent[_emberHtmlbarsKeywordsClosureComponent.COMPONENT_POSITIONAL_PARAMS];
9489
9607
 
9490
9608
  // This needs to be done in each nesting level to avoid raising assertions
9491
- _emberHtmlbarsUtilsExtractPositionalParams.processPositionalParams(null, positionalParams, params, hash);
9609
+ _emberHtmlbarsKeywordsClosureComponent.processPositionalParamsFromCell(closureComponent, params, hash);
9492
9610
  params = [];
9493
9611
  hash = _emberHtmlbarsKeywordsClosureComponent.mergeInNewHash(closureComponent[_emberHtmlbarsKeywordsClosureComponent.COMPONENT_HASH], hash);
9494
9612
  }
@@ -10006,7 +10124,7 @@ enifed('ember-htmlbars/keywords/outlet', ['exports', 'ember-metal/debug', 'ember
10006
10124
 
10007
10125
  'use strict';
10008
10126
 
10009
- _emberHtmlbarsTemplatesTopLevelView.default.meta.revision = 'Ember@2.3.0-beta.1';
10127
+ _emberHtmlbarsTemplatesTopLevelView.default.meta.revision = 'Ember@2.3.0-beta.3';
10010
10128
 
10011
10129
  /**
10012
10130
  The `{{outlet}}` helper lets you specify where a child routes will render in
@@ -10115,10 +10233,6 @@ enifed('ember-htmlbars/keywords/outlet', ['exports', 'ember-metal/debug', 'ember
10115
10233
 
10116
10234
  var Component;
10117
10235
 
10118
- if (_emberMetalFeatures.default('ember-routing-routable-components')) {
10119
- Component = outletState.render.Component;
10120
- }
10121
-
10122
10236
  var options;
10123
10237
  var attrs = {};
10124
10238
  if (Component) {
@@ -10915,7 +11029,7 @@ enifed('ember-htmlbars/keywords', ['exports', 'htmlbars-runtime'], function (exp
10915
11029
 
10916
11030
  exports.default = keywords;
10917
11031
  });
10918
- enifed('ember-htmlbars/morphs/attr-morph', ['exports', 'ember-metal/debug', 'dom-helper'], function (exports, _emberMetalDebug, _domHelper) {
11032
+ enifed('ember-htmlbars/morphs/attr-morph', ['exports', 'ember-metal/debug', 'dom-helper', 'ember-metal/is_none'], function (exports, _emberMetalDebug, _domHelper, _emberMetalIs_none) {
10919
11033
  'use strict';
10920
11034
 
10921
11035
  var HTMLBarsAttrMorph = _domHelper.default.prototype.AttrMorphClass;
@@ -10934,7 +11048,7 @@ enifed('ember-htmlbars/morphs/attr-morph', ['exports', 'ember-metal/debug', 'dom
10934
11048
  function deprecateEscapedStyle(morph, value) {
10935
11049
  _emberMetalDebug.warn(styleWarning, (function (name, value, escaped) {
10936
11050
  // SafeString
10937
- if (value && value.toHTML) {
11051
+ if (_emberMetalIs_none.default(value) || value && value.toHTML) {
10938
11052
  return true;
10939
11053
  }
10940
11054
 
@@ -12999,9 +13113,9 @@ enifed('ember-htmlbars/utils/extract-positional-params', ['exports', 'ember-meta
12999
13113
  }
13000
13114
 
13001
13115
  function processPositionalParams(renderNode, positionalParams, params, attrs) {
13002
- var isNamed = typeof positionalParams === 'string';
13116
+ var isRest = typeof positionalParams === 'string';
13003
13117
 
13004
- if (isNamed) {
13118
+ if (isRest) {
13005
13119
  processRestPositionalParameters(renderNode, positionalParams, params, attrs);
13006
13120
  } else {
13007
13121
  processNamedPositionalParameters(renderNode, positionalParams, params, attrs);
@@ -13341,10 +13455,6 @@ enifed('ember-htmlbars', ['exports', 'ember-metal/core', 'ember-metal/features',
13341
13455
  DOMHelper: _emberHtmlbarsSystemDomHelper.default
13342
13456
  };
13343
13457
 
13344
- if (_emberMetalFeatures.default('ember-htmlbars-component-generation')) {
13345
- _emberMetalCore.default.GlimmerComponent = _emberHtmlbarsGlimmerComponent.default;
13346
- }
13347
-
13348
13458
  _emberHtmlbarsHelper.default.helper = _emberHtmlbarsHelper.helper;
13349
13459
  _emberMetalCore.default.Helper = _emberHtmlbarsHelper.default;
13350
13460
 
@@ -15761,7 +15871,7 @@ enifed('ember-metal/core', ['exports'], function (exports) {
15761
15871
 
15762
15872
  @class Ember
15763
15873
  @static
15764
- @version 2.3.0-beta.1
15874
+ @version 2.3.0-beta.3
15765
15875
  @public
15766
15876
  */
15767
15877
 
@@ -15805,11 +15915,11 @@ enifed('ember-metal/core', ['exports'], function (exports) {
15805
15915
 
15806
15916
  @property VERSION
15807
15917
  @type String
15808
- @default '2.3.0-beta.1'
15918
+ @default '2.3.0-beta.3'
15809
15919
  @static
15810
15920
  @public
15811
15921
  */
15812
- Ember.VERSION = '2.3.0-beta.1';
15922
+ Ember.VERSION = '2.3.0-beta.3';
15813
15923
 
15814
15924
  /**
15815
15925
  The hash of environment variables used to control various configuration
@@ -15834,13 +15944,13 @@ enifed('ember-metal/core', ['exports'], function (exports) {
15834
15944
  Ember.ENV = {};
15835
15945
  }
15836
15946
 
15837
- Ember.config = Ember.config || {};
15838
-
15839
- // We disable the RANGE API by default for performance reasons
15840
- if ('undefined' === typeof Ember.ENV.DISABLE_RANGE_API) {
15841
- Ember.ENV.DISABLE_RANGE_API = true;
15947
+ // ENABLE_ALL_FEATURES was documented, but you can't actually enable non optional features.
15948
+ if (Ember.ENV.ENABLE_ALL_FEATURES) {
15949
+ Ember.ENV.ENABLE_OPTIONAL_FEATURES = Ember.ENV.ENABLE_ALL_FEATURES;
15842
15950
  }
15843
15951
 
15952
+ Ember.config = Ember.config || {};
15953
+
15844
15954
  // ..........................................................
15845
15955
  // BOOTSTRAP
15846
15956
  //
@@ -15881,17 +15991,6 @@ enifed('ember-metal/core', ['exports'], function (exports) {
15881
15991
  */
15882
15992
  Ember.LOG_STACKTRACE_ON_DEPRECATION = Ember.ENV.LOG_STACKTRACE_ON_DEPRECATION !== false;
15883
15993
 
15884
- /**
15885
- The `SHIM_ES5` property, when true, tells Ember to add ECMAScript 5 Array
15886
- shims to older browsers.
15887
-
15888
- @property SHIM_ES5
15889
- @type Boolean
15890
- @default Ember.EXTEND_PROTOTYPES
15891
- @public
15892
- */
15893
- Ember.SHIM_ES5 = Ember.ENV.SHIM_ES5 === false ? false : Ember.EXTEND_PROTOTYPES;
15894
-
15895
15994
  /**
15896
15995
  The `LOG_VERSION` property, when true, tells Ember to log versions of all
15897
15996
  dependent libraries in use.
@@ -16649,7 +16748,6 @@ enifed('ember-metal/features', ['exports', 'ember-metal/core', 'ember-metal/assi
16649
16748
 
16650
16749
  You can define the following configuration options:
16651
16750
 
16652
- * `EmberENV.ENABLE_ALL_FEATURES` - force all features to be enabled.
16653
16751
  * `EmberENV.ENABLE_OPTIONAL_FEATURES` - enable any features that have not been explicitly
16654
16752
  enabled/disabled.
16655
16753
 
@@ -16664,9 +16762,7 @@ enifed('ember-metal/features', ['exports', 'ember-metal/core', 'ember-metal/assi
16664
16762
  function isEnabled(feature) {
16665
16763
  var featureValue = FEATURES[feature];
16666
16764
 
16667
- if (_emberMetalCore.default.ENV.ENABLE_ALL_FEATURES) {
16668
- return true;
16669
- } else if (featureValue === true || featureValue === false || featureValue === undefined) {
16765
+ if (featureValue === true || featureValue === false || featureValue === undefined) {
16670
16766
  return featureValue;
16671
16767
  } else if (_emberMetalCore.default.ENV.ENABLE_OPTIONAL_FEATURES) {
16672
16768
  return true;
@@ -19064,6 +19160,10 @@ enifed('ember-metal/mixin', ['exports', 'ember-metal/core', 'ember-metal/error',
19064
19160
  return applyMixin(obj, [this], true);
19065
19161
  };
19066
19162
 
19163
+ MixinPrototype.toString = function Mixin_toString() {
19164
+ return '(unknown mixin)';
19165
+ };
19166
+
19067
19167
  function _detect(curMixin, targetMixin, seen) {
19068
19168
  var guid = _emberMetalUtils.guidFor(curMixin);
19069
19169
 
@@ -23260,7 +23360,6 @@ enifed('ember-metal', ['exports', 'ember-metal/core', 'ember-metal/debug', 'embe
23260
23360
  _emberMetalComputed.computed.and = _emberMetalComputed_macros.and;
23261
23361
  _emberMetalComputed.computed.or = _emberMetalComputed_macros.or;
23262
23362
  _emberMetalComputed.computed.any = _emberMetalComputed_macros.any;
23263
- _emberMetalComputed.computed.collect = _emberMetalComputed_macros.collect;
23264
23363
 
23265
23364
  // END IMPORTS
23266
23365
 
@@ -23398,12 +23497,7 @@ enifed('ember-metal', ['exports', 'ember-metal/core', 'ember-metal/debug', 'embe
23398
23497
  _emberMetalCore.default.isBlank = _emberMetalIs_blank.default;
23399
23498
  _emberMetalCore.default.isPresent = _emberMetalIs_present.default;
23400
23499
 
23401
- if (_emberMetalFeatures.default('ember-metal-ember-assign')) {
23402
- _emberMetalCore.default.assign = Object.assign || _emberMetalAssign.default;
23403
- _emberMetalCore.default.merge = _emberMetalMerge.default;
23404
- } else {
23405
- _emberMetalCore.default.merge = _emberMetalMerge.default;
23406
- }
23500
+ _emberMetalCore.default.merge = _emberMetalMerge.default;
23407
23501
 
23408
23502
  _emberMetalCore.default.FEATURES = _emberMetalFeatures.FEATURES;
23409
23503
  _emberMetalCore.default.FEATURES.isEnabled = _emberMetalFeatures.default;
@@ -25097,12 +25191,6 @@ enifed('ember-routing/system/route', ['exports', 'ember-metal/core', 'ember-meta
25097
25191
  var controllerDefinedQueryParameterConfiguration = _emberMetalProperty_get.get(controllerProto, 'queryParams');
25098
25192
  var normalizedControllerQueryParameterConfiguration = _emberRoutingUtils.normalizeControllerQueryParams(controllerDefinedQueryParameterConfiguration);
25099
25193
  combinedQueryParameterConfiguration = mergeEachQueryParams(normalizedControllerQueryParameterConfiguration, queryParameterConfiguraton);
25100
-
25101
- if (_emberMetalFeatures.default('ember-routing-route-configured-query-params')) {
25102
- if (controllerDefinedQueryParameterConfiguration.length) {
25103
- _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' });
25104
- }
25105
- }
25106
25194
  } else if (hasRouterDefinedQueryParams) {
25107
25195
  // the developer has not defined a controller but *has* supplied route query params.
25108
25196
  // Generate a class for them so we can later insert default values
@@ -25129,19 +25217,6 @@ enifed('ember-routing/system/route', ['exports', 'ember-metal/core', 'ember-meta
25129
25217
 
25130
25218
  var desc = combinedQueryParameterConfiguration[propName];
25131
25219
 
25132
- if (_emberMetalFeatures.default('ember-routing-route-configured-query-params')) {
25133
- // apply default values to controllers
25134
- // detect that default value defined on router config
25135
- if (desc.hasOwnProperty('defaultValue')) {
25136
- // detect that property was not defined on controller
25137
- if (controllerProto[propName] === undefined) {
25138
- controllerProto[propName] = desc.defaultValue;
25139
- } else {
25140
- deprecateQueryParamDefaultValuesSetOnController(controllerName, this.routeName, propName);
25141
- }
25142
- }
25143
- }
25144
-
25145
25220
  var scope = desc.scope || 'model';
25146
25221
  var parts;
25147
25222
 
@@ -25370,7 +25445,7 @@ enifed('ember-routing/system/route', ['exports', 'ember-metal/core', 'ember-meta
25370
25445
  ```javascript
25371
25446
  App.ArticlesRoute = Ember.Route.extend({
25372
25447
  // ...
25373
- resetController: function (controller, isExiting, transition) {
25448
+ resetController: function(controller, isExiting, transition) {
25374
25449
  if (isExiting) {
25375
25450
  controller.set('page', 1);
25376
25451
  }
@@ -26464,7 +26539,7 @@ enifed('ember-routing/system/route', ['exports', 'ember-metal/core', 'ember-meta
26464
26539
  model: function() {
26465
26540
  return this.store.find('photo');
26466
26541
  },
26467
- setupController: function (controller, model) {
26542
+ setupController: function(controller, model) {
26468
26543
  // Call _super for default behavior
26469
26544
  this._super(controller, model);
26470
26545
  // Implement your custom setup after
@@ -26944,17 +27019,6 @@ enifed('ember-routing/system/route', ['exports', 'ember-metal/core', 'ember-meta
26944
27019
  };
26945
27020
 
26946
27021
  var Component = undefined;
26947
- if (_emberMetalFeatures.default('ember-routing-routable-components')) {
26948
- var componentName = options && options.component || namePassed && name || route.componentName || name;
26949
- var componentLookup = owner.lookup('component-lookup:main');
26950
- Component = componentLookup.lookupFactory(componentName);
26951
- var isGlimmerComponent = Component && Component.proto().isGlimmerComponent;
26952
- if (!template && !ViewClass && Component && isGlimmerComponent) {
26953
- renderOptions.Component = Component;
26954
- renderOptions.ViewClass = undefined;
26955
- renderOptions.attrs = { model: _emberMetalProperty_get.get(controller, 'model') };
26956
- }
26957
- }
26958
27022
 
26959
27023
  if (!ViewClass && !template && !Component) {
26960
27024
  _emberMetalDebug.assert('Could not find "' + name + '" template, view, or component.', isDefaultRender);
@@ -27022,16 +27086,12 @@ enifed('ember-routing/system/route', ['exports', 'ember-metal/core', 'ember-meta
27022
27086
  var keysAlreadyMergedOrSkippable;
27023
27087
  var qps = {};
27024
27088
 
27025
- if (_emberMetalFeatures.default('ember-routing-route-configured-query-params')) {
27026
- keysAlreadyMergedOrSkippable = {};
27027
- } else {
27028
- keysAlreadyMergedOrSkippable = {
27029
- defaultValue: true,
27030
- type: true,
27031
- scope: true,
27032
- as: true
27033
- };
27034
- }
27089
+ keysAlreadyMergedOrSkippable = {
27090
+ defaultValue: true,
27091
+ type: true,
27092
+ scope: true,
27093
+ as: true
27094
+ };
27035
27095
 
27036
27096
  // first loop over all controller qps, merging them with any matching route qps
27037
27097
  // into a new empty object to avoid mutating.
@@ -27078,6 +27138,11 @@ enifed('ember-routing/system/route', ['exports', 'ember-metal/core', 'ember-meta
27078
27138
  exports.default = Route;
27079
27139
  });
27080
27140
  // FEATURES, A, deprecate, assert, Logger
27141
+
27142
+ // apply default values to controllers
27143
+ // detect that default value defined on router config
27144
+
27145
+ // detect that property was not defined on controller
27081
27146
  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-routing/system/router_state', 'container/owner', 'router', 'router/transition'], function (exports, _emberMetalLogger, _emberMetalDebug, _emberMetalError, _emberMetalProperty_get, _emberMetalProperty_set, _emberMetalProperties, _emberMetalEmpty_object, _emberMetalComputed, _emberMetalAssign, _emberMetalRun_loop, _emberRuntimeSystemObject, _emberRuntimeMixinsEvented, _emberRoutingSystemDsl, _emberRoutingLocationApi, _emberRoutingUtils, _emberRoutingSystemRouter_state, _containerOwner, _router4, _routerTransition) {
27082
27147
  'use strict';
27083
27148
 
@@ -29571,7 +29636,7 @@ enifed('ember-routing-views/components/link-to', ['exports', 'ember-metal/logger
29571
29636
 
29572
29637
  'use strict';
29573
29638
 
29574
- _emberHtmlbarsTemplatesLinkTo.default.meta.revision = 'Ember@2.3.0-beta.1';
29639
+ _emberHtmlbarsTemplatesLinkTo.default.meta.revision = 'Ember@2.3.0-beta.3';
29575
29640
 
29576
29641
  /**
29577
29642
  `Ember.LinkComponent` renders an element whose `click` event triggers a
@@ -30061,7 +30126,7 @@ enifed('ember-routing-views/views/outlet', ['exports', 'ember-views/views/view',
30061
30126
 
30062
30127
  'use strict';
30063
30128
 
30064
- _emberHtmlbarsTemplatesTopLevelView.default.meta.revision = 'Ember@2.3.0-beta.1';
30129
+ _emberHtmlbarsTemplatesTopLevelView.default.meta.revision = 'Ember@2.3.0-beta.3';
30065
30130
 
30066
30131
  var CoreOutletView = _emberViewsViewsView.default.extend({
30067
30132
  defaultTemplate: _emberHtmlbarsTemplatesTopLevelView.default,
@@ -32450,6 +32515,23 @@ enifed('ember-runtime/mixins/container_proxy', ['exports', 'ember-metal/run_loop
32450
32515
  */
32451
32516
  __container__: null,
32452
32517
 
32518
+ /**
32519
+ Returns an object that can be used to provide an owner to a
32520
+ manually created instance.
32521
+ Example:
32522
+ ```
32523
+ let owner = Ember.getOwner(this);
32524
+ User.create(
32525
+ owner.ownerInjection(),
32526
+ { username: 'rwjblue' }
32527
+ )
32528
+ ```
32529
+ @public
32530
+ @method ownerInjection
32531
+ @return {Object}
32532
+ */
32533
+ ownerInjection: containerAlias('ownerInjection'),
32534
+
32453
32535
  /**
32454
32536
  Given a fullName return a corresponding instance.
32455
32537
  The default behaviour is for lookup to return a singleton instance.
@@ -36372,14 +36454,13 @@ enifed('ember-runtime/system/core_object', ['exports', 'ember-metal/debug', 'emb
36372
36454
  @private
36373
36455
  */
36374
36456
  eachComputedProperty: function (callback, binding) {
36375
- var property, name;
36457
+ var property;
36376
36458
  var empty = {};
36377
36459
 
36378
36460
  var properties = _emberMetalProperty_get.get(this, '_computedProperties');
36379
36461
 
36380
36462
  for (var i = 0, length = properties.length; i < length; i++) {
36381
36463
  property = properties[i];
36382
- name = property.name;
36383
36464
  callback.call(binding || this, property.name, property.meta || empty);
36384
36465
  }
36385
36466
  }
@@ -37291,7 +37372,7 @@ enifed('ember-runtime/system/object_proxy', ['exports', 'ember-runtime/system/ob
37291
37372
 
37292
37373
  ```javascript
37293
37374
  ProxyWithComputedProperty = Ember.ObjectProxy.extend({
37294
- fullName: function () {
37375
+ fullName: function() {
37295
37376
  var firstName = this.get('firstName'),
37296
37377
  lastName = this.get('lastName');
37297
37378
  if (firstName && lastName) {
@@ -37454,7 +37535,7 @@ enifed('ember-runtime/system/string', ['exports', 'ember-metal/debug', 'ember-me
37454
37535
  }
37455
37536
 
37456
37537
  function fmt(str, formats) {
37457
- _emberMetalDebug.deprecate('Ember.String.fmt is deprecated, use ES6 template strings instead.', false, { id: 'ember-string-utils.fmt', until: '3.0.0', url: 'https://babeljs.io/docs/learn-es6/#template-strings' });
37538
+ _emberMetalDebug.deprecate('Ember.String.fmt is deprecated, use ES6 template strings instead.', false, { id: 'ember-string-utils.fmt', until: '3.0.0', url: 'http://babeljs.io/docs/learn-es2015/#template-strings' });
37458
37539
  return _fmt.apply(undefined, arguments);
37459
37540
  }
37460
37541
 
@@ -37523,7 +37604,7 @@ enifed('ember-runtime/system/string', ['exports', 'ember-metal/debug', 'ember-me
37523
37604
  @param {Array} formats An array of parameters to interpolate into string.
37524
37605
  @return {String} formatted string
37525
37606
  @public
37526
- @deprecated Use ES6 template strings instead: https://babeljs.io/docs/learn-es6/#template-strings');
37607
+ @deprecated Use ES6 template strings instead: http://babeljs.io/docs/learn-es2015/#template-strings
37527
37608
  */
37528
37609
  fmt: fmt,
37529
37610
 
@@ -37657,7 +37738,7 @@ enifed('ember-runtime/system/string', ['exports', 'ember-metal/debug', 'ember-me
37657
37738
  'action_name'.capitalize() // 'Action_name'
37658
37739
  'css-class-name'.capitalize() // 'Css-class-name'
37659
37740
  'my favorite items'.capitalize() // 'My favorite items'
37660
- 'privateDocs/ownerInvoice'.capitalize(); // 'PrivateDocs/OwnerInvoice'
37741
+ 'privateDocs/ownerInvoice'.capitalize(); // 'PrivateDocs/ownerInvoice'
37661
37742
  ```
37662
37743
  @method capitalize
37663
37744
  @param {String} str The string to capitalize.
@@ -37878,6 +37959,7 @@ enifed('ember-runtime', ['exports', 'ember-metal', 'ember-runtime/is-equal', 'em
37878
37959
  EmComputed.uniq = _emberRuntimeComputedReduce_computed_macros.uniq;
37879
37960
  EmComputed.union = _emberRuntimeComputedReduce_computed_macros.union;
37880
37961
  EmComputed.intersect = _emberRuntimeComputedReduce_computed_macros.intersect;
37962
+ EmComputed.collect = _emberRuntimeComputedReduce_computed_macros.collect;
37881
37963
 
37882
37964
  _emberMetal.default.String = _emberRuntimeSystemString.default;
37883
37965
  _emberMetal.default.Object = _emberRuntimeSystemObject.default;
@@ -38993,7 +39075,7 @@ enifed('ember-template-compiler/system/compile_options', ['exports', 'ember-meta
38993
39075
  options.buildMeta = function buildMeta(program) {
38994
39076
  return {
38995
39077
  fragmentReason: fragmentReason(program),
38996
- revision: 'Ember@2.3.0-beta.1',
39078
+ revision: 'Ember@2.3.0-beta.3',
38997
39079
  loc: program.loc,
38998
39080
  moduleName: options.moduleName
38999
39081
  };
@@ -44283,7 +44365,7 @@ enifed('ember-views/views/collection_view', ['exports', 'ember-metal/core', 'emb
44283
44365
  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) {
44284
44366
  'use strict';
44285
44367
 
44286
- _emberHtmlbarsTemplatesContainerView.default.meta.revision = 'Ember@2.3.0-beta.1';
44368
+ _emberHtmlbarsTemplatesContainerView.default.meta.revision = 'Ember@2.3.0-beta.3';
44287
44369
 
44288
44370
  /**
44289
44371
  @module ember
@@ -45851,10 +45933,6 @@ enifed('ember-views/views/view', ['exports', 'ember-metal/core', 'ember-metal/de
45851
45933
  @submodule ember-views
45852
45934
  */
45853
45935
 
45854
- _emberMetalDebug.warn('The VIEW_PRESERVES_CONTEXT flag has been removed and the functionality can no longer be disabled.', _emberMetalCore.default.ENV.VIEW_PRESERVES_CONTEXT !== false, {
45855
- id: 'ember-views.view-preserves-context-flag',
45856
- until: '2.0.0'
45857
- });
45858
45936
  /**
45859
45937
  `Ember.View` is the class in Ember responsible for encapsulating templates of
45860
45938
  HTML content, combining templates with data to render as sections of a page's
@@ -46901,7 +46979,7 @@ enifed("htmlbars-runtime/hooks", ["exports", "htmlbars-runtime/render", "morph-r
46901
46979
  return {
46902
46980
  meta: template.meta,
46903
46981
  arity: template.arity,
46904
- yield: yieldArgs,
46982
+ 'yield': yieldArgs, // quoted since it's a reserved word, see issue #420
46905
46983
  yieldItem: yieldItem(template, env, scope, morph, renderState, visitor),
46906
46984
  raw: template,
46907
46985
 
@@ -47088,7 +47166,7 @@ enifed("htmlbars-runtime/hooks", ["exports", "htmlbars-runtime/render", "morph-r
47088
47166
  function thisFor(options) {
47089
47167
  return {
47090
47168
  arity: options.template.arity,
47091
- yield: options.template.yield,
47169
+ 'yield': options.template.yield, // quoted since it's a reserved word, see issue #420
47092
47170
  yieldItem: options.template.yieldItem,
47093
47171
  yieldIn: options.template.yieldIn
47094
47172
  };
@@ -47577,7 +47655,8 @@ enifed("htmlbars-runtime/hooks", ["exports", "htmlbars-runtime/render", "morph-r
47577
47655
  return true;
47578
47656
  },
47579
47657
 
47580
- yield: function (morph, env, scope, params, hash, template, inverse, visitor) {
47658
+ // quoted since it's a reserved word, see issue #420
47659
+ 'yield': function (morph, env, scope, params, hash, template, inverse, visitor) {
47581
47660
  // the current scope is provided purely for the creation of shadow
47582
47661
  // scopes; it should not be provided to user code.
47583
47662
 
@@ -49077,7 +49156,7 @@ enifed("htmlbars-util/template-utils", ["exports", "htmlbars-util/morph-utils",
49077
49156
  // If we don't see the key in handledMorphs, it wasn't
49078
49157
  // yielded in and we can safely remove it from DOM.
49079
49158
  if (!(item.key in handledMorphs)) {
49080
- delete morphMap[item.key];
49159
+ morphMap[item.key] = undefined;
49081
49160
  clearMorph(item, env, true);
49082
49161
  item.destroy();
49083
49162
  }
@@ -49140,7 +49219,7 @@ enifed("htmlbars-util/template-utils", ["exports", "htmlbars-util/morph-utils",
49140
49219
 
49141
49220
  while (item) {
49142
49221
  var next = item.nextMorph;
49143
- delete morph.morphMap[item.key];
49222
+ morph.morphMap[item.key] = undefined;
49144
49223
  clearMorph(item, env, true);
49145
49224
  item.destroy();
49146
49225