dist/ember-template-compiler.js in ember-source-2.2.1 vs dist/ember-template-compiler.js in ember-source-2.3.0.beta.1
- old
+ new
@@ -4,11 +4,11 @@
* @copyright Copyright 2011-2015 Tilde Inc. and contributors
* Portions Copyright 2006-2011 Strobe Inc.
* Portions Copyright 2008-2011 Apple Inc. All rights reserved.
* @license Licensed under MIT license
* See https://raw.github.com/emberjs/ember.js/master/LICENSE
- * @version 2.2.1
+ * @version 2.3.0-beta.1
*/
var enifed, requireModule, require, requirejs, Ember;
var mainContext = this;
@@ -41,39 +41,46 @@
};
requirejs = require = requireModule = function(name) {
return internalRequire(name, null);
}
+ require['default'] = require;
+ function missingModule(name, referrerName) {
+ if (referrerName) {
+ throw new Error('Could not find module ' + name + ' required by: ' + referrerName);
+ } else {
+ throw new Error('Could not find module ' + name);
+ }
+ }
+
function internalRequire(name, referrerName) {
var exports = seen[name];
if (exports !== undefined) {
return exports;
}
exports = seen[name] = {};
if (!registry[name]) {
- if (referrerName) {
- throw new Error('Could not find module ' + name + ' required by: ' + referrerName);
- } else {
- throw new Error('Could not find module ' + name);
- }
+ missingModule(name, referrerName);
}
var mod = registry[name];
var deps = mod.deps;
var callback = mod.callback;
- var reified = [];
var length = deps.length;
+ var reified = new Array(length);;
for (var i = 0; i < length; i++) {
if (deps[i] === 'exports') {
- reified.push(exports);
+ reified[i] = exports;
+ } else if (deps[i] === 'require') {
+ reified[i] = require;
} else {
- reified.push(internalRequire(deps[i], name));
+ reified[i] = internalRequire(deps[i], name);
}
}
callback.apply(this, reified);
@@ -1630,10 +1637,14 @@
if (!_emberMetalCore.default.testing) {
// Complain if they're using FEATURE flags in builds other than canary
_emberMetalFeatures.FEATURES['features-stripped-test'] = true;
var featuresWereStripped = true;
+ if (_emberMetalFeatures.default('features-stripped-test')) {
+ exports.featuresWereStripped = featuresWereStripped = false;
+ }
+
delete _emberMetalFeatures.FEATURES['features-stripped-test'];
_warnIfUsingStrippedFeatureFlags(_emberMetalCore.default.ENV.FEATURES, featuresWereStripped);
// Inform the developer about the Ember Inspector if not installed.
var isFirefox = _emberMetalEnvironment.default.isFirefox;
@@ -2505,11 +2516,11 @@
function removeChainWatcher(obj, keyName, node) {
if (!isObject(obj)) {
return;
}
- var m = obj.__ember_meta__;
+ var m = _emberMetalMeta.peekMeta(obj);
if (!m || !m.readableChainWatchers()) {
return;
}
@@ -2553,11 +2564,11 @@
function lazyGet(obj, key) {
if (!obj) {
return;
}
- var meta = obj['__ember_meta__'];
+ var meta = _emberMetalMeta.peekMeta(obj);
// check if object meant only to be a prototype
if (meta && meta.proto === obj) {
return;
}
@@ -2759,11 +2770,11 @@
}
};
function finishChains(obj) {
// We only create meta if we really have to
- var m = obj.__ember_meta__;
+ var m = _emberMetalMeta.peekMeta(obj);
if (m) {
m = _emberMetalMeta.meta(obj);
// finish any current chains node watchers that reference obj
var chainWatchers = m.readableChainWatchers();
@@ -3075,11 +3086,11 @@
if (this._volatile || this._suspended === obj) {
return;
}
// don't create objects just to invalidate
- var meta = obj.__ember_meta__;
+ var meta = _emberMetalMeta.peekMeta(obj);
if (!meta || meta.source !== obj) {
return;
}
var cache = meta.readableCache();
@@ -3299,26 +3310,24 @@
/**
This helper returns a new property descriptor that wraps the passed
computed property function. You can use this helper to define properties
with mixins or via `Ember.defineProperty()`.
- If you pass function as argument - it will be used as getter.
- You can pass hash with two functions - instead of single function - as argument to provide both getter and setter.
+ If you pass a function as an argument, it will be used as a getter. A computed
+ property defined in this way might look like this:
- The `get` function should accept two parameters, `key` and `value`. If `value` is not
- undefined you should set the `value` first. In either case return the
- current value of the property.
-
- A computed property defined in this way might look like this:
-
```js
let Person = Ember.Object.extend({
- firstName: 'Betty',
- lastName: 'Jones',
+ init() {
+ this._super(...arguments);
+ this.firstName = 'Betty';
+ this.lastName = 'Jones';
+ },
+
fullName: Ember.computed('firstName', 'lastName', function() {
- return this.get('firstName') + ' ' + this.get('lastName');
+ return `${this.get('firstName')} ${this.get('lastName')}`;
})
});
let client = Person.create();
@@ -3326,18 +3335,49 @@
client.set('lastName', 'Fuller');
client.get('fullName'); // 'Betty Fuller'
```
+ You can pass a hash with two functions, `get` and `set`, as an
+ argument to provide both a getter and setter:
+
+ ```js
+ let Person = Ember.Object.extend({
+ init() {
+ this._super(...arguments);
+
+ this.firstName = 'Betty';
+ this.lastName = 'Jones';
+ },
+
+ fullName: Ember.computed({
+ get(key) {
+ return `${this.get('firstName')} ${this.get('lastName')}`;
+ },
+ set(key, value) {
+ let [firstName, lastName] = value.split(/\s+/);
+ this.setProperties({ firstName, lastName });
+ return value;
+ }
+ });
+ })
+
+ let client = Person.create();
+ client.get('firstName'); // 'Betty'
+
+ client.set('fullName', 'Carroll Fuller');
+ client.get('firstName'); // 'Carroll'
+ ```
+
+ The `set` function should accept two parameters, `key` and `value`. The value
+ returned from `set` will be the new value of the property.
+
_Note: This is the preferred way to define computed properties when writing third-party
libraries that depend on or use Ember, since there is no guarantee that the user
- will have prototype extensions enabled._
+ will have [prototype Extensions](http://emberjs.com/guides/configuring-ember/disabling-prototype-extensions/) enabled._
- You might use this method if you disabled
- [Prototype Extensions](http://emberjs.com/guides/configuring-ember/disabling-prototype-extensions/).
- The alternative syntax might look like this
- (if prototype extensions are enabled, which is the default behavior):
+ The alternative syntax, with prototype extensions, might look like:
```js
fullName() {
return this.get('firstName') + ' ' + this.get('lastName');
}.property('firstName', 'lastName')
@@ -3383,11 +3423,11 @@
to return
@return {Object} the cached value
@public
*/
function cacheFor(obj, key) {
- var meta = obj.__ember_meta__;
+ var meta = _emberMetalMeta.peekMeta(obj);
var cache = meta && meta.source === obj && meta.readableCache();
var ret = cache && cache[key];
if (ret === UNDEFINED) {
return undefined;
@@ -3417,11 +3457,11 @@
exports.ComputedProperty = ComputedProperty;
exports.computed = computed;
exports.cacheFor = cacheFor;
});
-enifed('ember-metal/computed_macros', ['exports', 'ember-metal/core', 'ember-metal/debug', 'ember-metal/property_get', 'ember-metal/property_set', 'ember-metal/computed', 'ember-metal/is_empty', 'ember-metal/is_none', 'ember-metal/alias'], function (exports, _emberMetalCore, _emberMetalDebug, _emberMetalProperty_get, _emberMetalProperty_set, _emberMetalComputed, _emberMetalIs_empty, _emberMetalIs_none, _emberMetalAlias) {
+enifed('ember-metal/computed_macros', ['exports', 'ember-metal/debug', 'ember-metal/property_get', 'ember-metal/property_set', 'ember-metal/computed', 'ember-metal/is_empty', 'ember-metal/is_none', 'ember-metal/alias'], function (exports, _emberMetalDebug, _emberMetalProperty_get, _emberMetalProperty_set, _emberMetalComputed, _emberMetalIs_empty, _emberMetalIs_none, _emberMetalAlias) {
'use strict';
exports.empty = empty;
exports.notEmpty = notEmpty;
exports.none = none;
@@ -3924,51 +3964,10 @@
return value;
});
exports.or = or;
/**
- A computed property that returns the array of values
- for the provided dependent properties.
-
- Example
-
- ```javascript
- var Hamster = Ember.Object.extend({
- clothes: Ember.computed.collect('hat', 'shirt')
- });
-
- var hamster = Hamster.create();
-
- hamster.get('clothes'); // [null, null]
- hamster.set('hat', 'Camp Hat');
- hamster.set('shirt', 'Camp Shirt');
- hamster.get('clothes'); // ['Camp Hat', 'Camp Shirt']
- ```
-
- @method collect
- @for Ember.computed
- @param {String} dependentKey*
- @return {Ember.ComputedProperty} computed property which maps
- values of all passed in properties to an array.
- @public
- */
- var collect = generateComputedWithProperties(function (properties) {
- var res = _emberMetalCore.default.A();
- for (var key in properties) {
- if (properties.hasOwnProperty(key)) {
- if (_emberMetalIs_none.default(properties[key])) {
- res.push(null);
- } else {
- res.push(properties[key]);
- }
- }
- }
- return res;
- });
-
- exports.collect = collect;
- /**
Creates a new property that is an alias for another property
on an object. Calls to `get` or `set` this property behave as
though they were called on the original property.
```javascript
@@ -4134,11 +4133,11 @@
cross-platform libraries such as jQuery. For more details, see
[Ember-Runtime](http://emberjs.com/api/modules/ember-runtime.html).
@class Ember
@static
- @version 2.2.1
+ @version 2.3.0-beta.1
@public
*/
'use strict';
@@ -4178,15 +4177,15 @@
/**
The semantic version.
@property VERSION
@type String
- @default '2.2.1'
+ @default '2.3.0-beta.1'
@static
@public
*/
- Ember.VERSION = '2.2.1';
+ Ember.VERSION = '2.3.0-beta.1';
/**
The hash of environment variables used to control various configuration
settings. To specify your own or override default settings, add the
desired properties to a global hash named `EmberENV` (or `ENV` for
@@ -4637,11 +4636,11 @@
}
return index;
}
function accumulateListeners(obj, eventName, otherActions) {
- var meta = obj['__ember_meta__'];
+ var meta = _emberMetalMeta.peekMeta(obj);
if (!meta) {
return;
}
var actions = meta.matchingListeners(eventName);
var newActions = [];
@@ -4797,11 +4796,11 @@
@public
*/
function sendEvent(obj, eventName, params, actions) {
if (!actions) {
- var meta = obj['__ember_meta__'];
+ var meta = _emberMetalMeta.peekMeta(obj);
actions = meta && meta.matchingListeners(eventName);
}
if (!actions || actions.length === 0) {
return;
@@ -4849,11 +4848,11 @@
@param obj
@param {String} eventName
*/
function hasListeners(obj, eventName) {
- var meta = obj['__ember_meta__'];
+ var meta = _emberMetalMeta.peekMeta(obj);
if (!meta) {
return false;
}
return meta.matchingListeners(eventName).length > 0;
}
@@ -4866,11 +4865,11 @@
@param {String} eventName
*/
function listenersFor(obj, eventName) {
var ret = [];
- var meta = obj['__ember_meta__'];
+ var meta = _emberMetalMeta.peekMeta(obj);
var actions = meta && meta.matchingListeners(eventName);
if (!actions) {
return ret;
}
@@ -5092,11 +5091,11 @@
ret[propertyNames[i]] = _emberMetalProperty_get.get(obj, propertyNames[i]);
}
return ret;
}
});
-enifed('ember-metal/injected_property', ['exports', 'ember-metal/debug', 'ember-metal/computed', 'ember-metal/alias', 'ember-metal/properties'], function (exports, _emberMetalDebug, _emberMetalComputed, _emberMetalAlias, _emberMetalProperties) {
+enifed('ember-metal/injected_property', ['exports', 'ember-metal/debug', 'ember-metal/computed', 'ember-metal/alias', 'ember-metal/properties', 'container/owner'], function (exports, _emberMetalDebug, _emberMetalComputed, _emberMetalAlias, _emberMetalProperties, _containerOwner) {
'use strict';
/**
Read-only property that returns the result of a container lookup.
@@ -5116,15 +5115,16 @@
AliasedPropertyPrototype.oneWay.call(this);
}
function injectedPropertyGet(keyName) {
var desc = this[keyName];
+ var owner = _containerOwner.getOwner(this);
_emberMetalDebug.assert('InjectedProperties should be defined with the Ember.inject computed property macros.', desc && desc.isDescriptor && desc.type);
- _emberMetalDebug.assert('Attempting to lookup an injected property on an object without a container, ensure that the object was instantiated via a container.', this.container);
+ _emberMetalDebug.assert('Attempting to lookup an injected property on an object without a container, ensure that the object was instantiated via a container.', owner);
- return this.container.lookup(desc.type + ':' + (desc.name || keyName));
+ return owner.lookup(desc.type + ':' + (desc.name || keyName));
}
InjectedProperty.prototype = Object.create(_emberMetalProperties.Descriptor.prototype);
var InjectedPropertyPrototype = InjectedProperty.prototype;
@@ -5443,10 +5443,12 @@
Ember.isEmpty(''); // true
Ember.isEmpty([]); // true
Ember.isEmpty({}); // false
Ember.isEmpty('Adam Hawkins'); // false
Ember.isEmpty([0,1,2]); // false
+ Ember.isEmpty('\n\t'); // false
+ Ember.isEmpty(' '); // false
```
@method isEmpty
@for Ember
@param {Object} obj Value to test
@@ -5609,10 +5611,16 @@
this._registry.splice(index, 1);
}
}
};
+ if (_emberMetalFeatures.default('ember-libraries-isregistered')) {
+ Libraries.prototype.isRegistered = function (name) {
+ return !!this._getLibraryByName(name);
+ };
+ }
+
exports.default = Libraries;
});
enifed('ember-metal/logger', ['exports', 'ember-metal/core', 'ember-metal/error'], function (exports, _emberMetalCore, _emberMetalError) {
'use strict';
@@ -6280,10 +6288,13 @@
@return {Object}
@public
*/
function merge(original, updates) {
+ if (_emberMetalFeatures.default('ember-metal-ember-assign')) {
+ _emberMetalDebug.deprecate('Usage of `Ember.merge` is deprecated, use `Ember.assign` instead.', false, { id: 'ember-metal.merge', until: '3.0.0' });
+ }
if (!updates || typeof updates !== 'object') {
return original;
}
@@ -6303,10 +6314,12 @@
'no use strict';
// Remove "use strict"; from transpiled module until
// https://bugs.webkit.org/show_bug.cgi?id=138038 is fixed
exports.meta = meta;
+ exports.peekMeta = peekMeta;
+ exports.deleteMeta = deleteMeta;
/**
@module ember-metal
*/
@@ -6341,10 +6354,11 @@
chainWatchers: ownCustomObject,
chains: inheritedCustomObject
};
var memberNames = Object.keys(members);
+ var META_FIELD = '__ember_meta__';
function Meta(obj, parentMeta) {
this._cache = undefined;
this._watching = undefined;
this._mixins = undefined;
@@ -6599,18 +6613,29 @@
value: null
};
exports.META_DESC = META_DESC;
var EMBER_META_PROPERTY = {
- name: '__ember_meta__',
+ name: META_FIELD,
descriptor: META_DESC
};
- // Placeholder for non-writable metas.
- var EMPTY_META = new Meta(null);
+ // choose the one appropriate for given platform
+ var setMeta = function (obj, meta) {
+ // if `null` already, just set it to the new value
+ // otherwise define property first
+ if (obj[META_FIELD] !== null) {
+ if (obj.__defineNonEnumerable) {
+ obj.__defineNonEnumerable(EMBER_META_PROPERTY);
+ } else {
+ Object.defineProperty(obj, META_FIELD, META_DESC);
+ }
+ }
- exports.EMPTY_META = EMPTY_META;
+ obj[META_FIELD] = meta;
+ };
+
/**
Retrieves the meta hash for an object. If `writable` is true ensures the
hash is writable for this object as well.
The meta object contains information about computed property descriptors as
@@ -6626,38 +6651,36 @@
@param {Boolean} [writable=true] Pass `false` if you do not intend to modify
the meta hash, allowing the method to avoid making an unnecessary copy.
@return {Object} the meta hash for an object
*/
- function meta(obj, writable) {
- var ret = obj.__ember_meta__;
- if (writable === false) {
- return ret || EMPTY_META;
- }
+ function meta(obj) {
+ var maybeMeta = peekMeta(obj);
+ var parent = undefined;
- if (ret && ret.source === obj) {
- return ret;
+ // remove this code, in-favor of explicit parent
+ if (maybeMeta) {
+ if (maybeMeta.source === obj) {
+ return maybeMeta;
+ }
+ parent = maybeMeta;
}
- if (!ret) {
- ret = new Meta(obj);
- } else {
- ret = new Meta(obj, ret);
- }
+ var newMeta = new Meta(obj, parent);
+ setMeta(obj, newMeta);
+ return newMeta;
+ }
- // if `null` already, just set it to the new value
- // otherwise define property first
- if (obj.__ember_meta__ !== null) {
- if (obj.__defineNonEnumerable) {
- obj.__defineNonEnumerable(EMBER_META_PROPERTY);
- } else {
- Object.defineProperty(obj, '__ember_meta__', META_DESC);
- }
- }
- obj.__ember_meta__ = ret;
+ function peekMeta(obj) {
+ return obj[META_FIELD];
+ }
- return ret;
+ function deleteMeta(obj) {
+ if (typeof obj[META_FIELD] !== 'object') {
+ return;
+ }
+ obj[META_FIELD] = null;
}
});
enifed('ember-metal/meta_listeners', ['exports'], function (exports) {
/*
When we render a rich template hierarchy, the set of events that
@@ -6838,11 +6861,10 @@
/**
@module ember
@submodule ember-metal
*/
-
exports.mixin = mixin;
exports.default = Mixin;
exports.required = required;
exports.aliasMethod = aliasMethod;
exports.observer = observer;
@@ -7328,10 +7350,14 @@
this.mixins = m;
} else {
this.mixins = undefined;
}
this.ownerConstructor = undefined;
+ this._without = undefined;
+ this[_emberMetalUtils.GUID_KEY] = null;
+ this[_emberMetalUtils.GUID_KEY + '_name'] = null;
+ _emberMetalDebug.debugSeal(this);
}
Mixin._apply = applyMixin;
Mixin.applyPartial = function (obj) {
@@ -7444,11 +7470,11 @@
return false;
}
if (obj instanceof Mixin) {
return _detect(obj, this, {});
}
- var m = obj.__ember_meta__;
+ var m = _emberMetalMeta.peekMeta(obj);
if (!m) {
return false;
}
return !!m.peekMixins(_emberMetalUtils.guidFor(this));
};
@@ -7495,14 +7521,16 @@
}
}
return ret;
};
+ _emberMetalDebug.debugSeal(MixinPrototype);
+
// returns the mixins currently applied to the specified object
// TODO: Make Ember.mixin
Mixin.mixins = function (obj) {
- var m = obj['__ember_meta__'];
+ var m = _emberMetalMeta.peekMeta(obj);
var ret = [];
if (!m) {
return ret;
}
@@ -7589,11 +7617,11 @@
@method observer
@for Ember
@param {String} propertyNames*
@param {Function} func
@return func
- @private
+ @public
*/
function observer() {
for (var _len4 = arguments.length, args = Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {
args[_key4] = arguments[_key4];
@@ -8098,14 +8126,14 @@
}
return this;
}
});
-enifed('ember-metal/property_events', ['exports', 'ember-metal/utils', 'ember-metal/events', 'ember-metal/observer_set'], function (exports, _emberMetalUtils, _emberMetalEvents, _emberMetalObserver_set) {
+enifed('ember-metal/property_events', ['exports', 'ember-metal/utils', 'ember-metal/meta', 'ember-metal/events', 'ember-metal/observer_set', 'ember-metal/symbol'], function (exports, _emberMetalUtils, _emberMetalMeta, _emberMetalEvents, _emberMetalObserver_set, _emberMetalSymbol) {
'use strict';
- var PROPERTY_DID_CHANGE = _emberMetalUtils.symbol('PROPERTY_DID_CHANGE');
+ var PROPERTY_DID_CHANGE = _emberMetalSymbol.default('PROPERTY_DID_CHANGE');
exports.PROPERTY_DID_CHANGE = PROPERTY_DID_CHANGE;
var beforeObserverSet = new _emberMetalObserver_set.default();
var observerSet = new _emberMetalObserver_set.default();
var deferred = 0;
@@ -8129,11 +8157,11 @@
@param {String} keyName The property key (or path) that will change.
@return {void}
@private
*/
function propertyWillChange(obj, keyName) {
- var m = obj['__ember_meta__'];
+ var m = _emberMetalMeta.peekMeta(obj);
var watching = m && m.peekWatching(keyName) > 0 || keyName === 'length';
var proto = m && m.proto;
var possibleDesc = obj[keyName];
var desc = possibleDesc !== null && typeof possibleDesc === 'object' && possibleDesc.isDescriptor ? possibleDesc : undefined;
@@ -8169,11 +8197,11 @@
@param {String} keyName The property key (or path) that will change.
@return {void}
@private
*/
function propertyDidChange(obj, keyName) {
- var m = obj['__ember_meta__'];
+ var m = _emberMetalMeta.peekMeta(obj);
var watching = m && m.peekWatching(keyName) > 0 || keyName === 'length';
var proto = m && m.proto;
var possibleDesc = obj[keyName];
var desc = possibleDesc !== null && typeof possibleDesc === 'object' && possibleDesc.isDescriptor ? possibleDesc : undefined;
@@ -8381,11 +8409,11 @@
exports.overrideChains = overrideChains;
exports.beginPropertyChanges = beginPropertyChanges;
exports.endPropertyChanges = endPropertyChanges;
exports.changeProperties = changeProperties;
});
-enifed('ember-metal/property_get', ['exports', 'ember-metal/core', 'ember-metal/debug', 'ember-metal/features', 'ember-metal/error', 'ember-metal/path_cache'], function (exports, _emberMetalCore, _emberMetalDebug, _emberMetalFeatures, _emberMetalError, _emberMetalPath_cache) {
+enifed('ember-metal/property_get', ['exports', 'ember-metal/core', 'ember-metal/debug', 'ember-metal/features', 'ember-metal/error', 'ember-metal/path_cache', 'ember-metal/meta'], function (exports, _emberMetalCore, _emberMetalDebug, _emberMetalFeatures, _emberMetalError, _emberMetalPath_cache, _emberMetalMeta) {
/**
@module ember-metal
*/
'use strict';
@@ -8439,13 +8467,13 @@
// Helpers that operate with 'this' within an #each
if (keyName === '') {
return obj;
}
- var meta = obj['__ember_meta__'];
- var possibleDesc = obj[keyName];
- var desc = possibleDesc !== null && typeof possibleDesc === 'object' && possibleDesc.isDescriptor ? possibleDesc : undefined;
+ var meta = _emberMetalMeta.peekMeta(obj);
+ var value = obj[keyName];
+ var desc = value !== null && typeof value === 'object' && value.isDescriptor ? value : undefined;
var ret;
if (desc === undefined && _emberMetalPath_cache.isPath(keyName)) {
return _getPath(obj, keyName);
}
@@ -8454,11 +8482,11 @@
return desc.get(obj, keyName);
} else {
if (meta && meta.peekWatching(keyName) > 0) {
ret = meta.peekValues(keyName);
} else {
- ret = obj[keyName];
+ ret = value;
}
if (ret === undefined && 'object' === typeof obj && !(keyName in obj) && 'function' === typeof obj.unknownProperty) {
return obj.unknownProperty(keyName);
}
@@ -8538,10 +8566,27 @@
}
}
return root;
}
+ /**
+ Retrieves the value of a property from an Object, or a default value in the
+ case that the property returns `undefined`.
+
+ ```javascript
+ Ember.getWithDefault(person, 'lastName', 'Doe');
+ ```
+
+ @method getWithDefault
+ @for Ember
+ @param {Object} obj The object to retrieve from.
+ @param {String} keyName The name of the property to retrieve
+ @param {Object} defaultValue The value to return if the property value is undefined
+ @return {Object} The property value or the defaultValue.
+ @public
+ */
+
function getWithDefault(root, key, defaultValue) {
var value = get(root, key);
if (value === undefined) {
return defaultValue;
@@ -8549,11 +8594,11 @@
return value;
}
exports.default = get;
});
-enifed('ember-metal/property_set', ['exports', 'ember-metal/debug', 'ember-metal/features', 'ember-metal/property_get', 'ember-metal/property_events', 'ember-metal/properties', 'ember-metal/error', 'ember-metal/path_cache'], function (exports, _emberMetalDebug, _emberMetalFeatures, _emberMetalProperty_get, _emberMetalProperty_events, _emberMetalProperties, _emberMetalError, _emberMetalPath_cache) {
+enifed('ember-metal/property_set', ['exports', 'ember-metal/debug', 'ember-metal/features', 'ember-metal/property_get', 'ember-metal/property_events', 'ember-metal/properties', 'ember-metal/error', 'ember-metal/path_cache', 'ember-metal/meta'], function (exports, _emberMetalDebug, _emberMetalFeatures, _emberMetalProperty_get, _emberMetalProperty_events, _emberMetalProperties, _emberMetalError, _emberMetalPath_cache, _emberMetalMeta) {
'use strict';
exports.set = set;
exports.trySet = trySet;
@@ -8578,11 +8623,11 @@
_emberMetalDebug.assert('The key provided to set must be a string, you passed ' + keyName, typeof keyName === 'string');
_emberMetalDebug.assert('\'this\' in paths is not supported', !_emberMetalPath_cache.hasThis(keyName));
var meta, possibleDesc, desc;
if (obj) {
- meta = obj['__ember_meta__'];
+ meta = _emberMetalMeta.peekMeta(obj);
possibleDesc = obj[keyName];
desc = possibleDesc !== null && typeof possibleDesc === 'object' && possibleDesc.isDescriptor ? possibleDesc : undefined;
}
var isUnknown, currentValue;
@@ -9546,11 +9591,15 @@
exports.default = Dependency;
});
enifed('ember-metal/streams/key-stream', ['exports', 'ember-metal/debug', 'ember-metal/property_get', 'ember-metal/property_set', 'ember-metal/observer', 'ember-metal/streams/stream', 'ember-metal/streams/utils'], function (exports, _emberMetalDebug, _emberMetalProperty_get, _emberMetalProperty_set, _emberMetalObserver, _emberMetalStreamsStream, _emberMetalStreamsUtils) {
'use strict';
- var KeyStream = _emberMetalStreamsStream.default.extend({
+ function labelFor(source, key) {
+ return source.label ? source.label + '.' + key : key;
+ }
+
+ exports.default = _emberMetalStreamsStream.default.extend({
init: function (source, key) {
_emberMetalDebug.assert('KeyStream error: source must be a stream', _emberMetalStreamsUtils.isStream(source)); // TODO: This isn't necessary.
_emberMetalDebug.assert('KeyStream error: key must be a non-empty string', typeof key === 'string' && key.length > 0);
_emberMetalDebug.assert('KeyStream error: key must not have a \'.\'', key.indexOf('.') === -1);
@@ -9563,13 +9612,21 @@
this.label = label;
},
compute: function () {
var object = this.sourceDep.getValue();
- if (object) {
+ var type = typeof object;
+
+ if (!object || type === 'boolean') {
+ return;
+ }
+
+ if (type === 'object') {
return _emberMetalProperty_get.get(object, this.key);
}
+
+ return object[this.key];
},
setValue: function (value) {
var object = this.sourceDep.getValue();
if (object) {
@@ -9610,16 +9667,10 @@
deactivate: function () {
this._super$deactivate();
this._clearObservedObject();
}
});
-
- function labelFor(source, key) {
- return source.label ? source.label + '.' + key : key;
- }
-
- exports.default = KeyStream;
});
enifed('ember-metal/streams/proxy-stream', ['exports', 'ember-runtime/system/object', 'ember-metal/streams/stream'], function (exports, _emberRuntimeSystemObject, _emberMetalStreamsStream) {
'use strict';
var ProxyStream = _emberMetalStreamsStream.default.extend({
@@ -9649,11 +9700,11 @@
ProxyStream.extend = _emberMetalStreamsStream.default.extend;
exports.default = ProxyStream;
});
-enifed('ember-metal/streams/stream', ['exports', 'ember-metal/core', 'ember-metal/assign', 'ember-metal/debug', 'ember-metal/path_cache', 'ember-metal/observer', 'ember-metal/streams/utils', 'ember-metal/empty_object', 'ember-metal/streams/subscriber', 'ember-metal/streams/dependency', 'ember-metal/utils'], function (exports, _emberMetalCore, _emberMetalAssign, _emberMetalDebug, _emberMetalPath_cache, _emberMetalObserver, _emberMetalStreamsUtils, _emberMetalEmpty_object, _emberMetalStreamsSubscriber, _emberMetalStreamsDependency, _emberMetalUtils) {
+enifed('ember-metal/streams/stream', ['exports', 'ember-metal/assign', 'ember-metal/debug', 'ember-metal/path_cache', 'ember-metal/observer', 'ember-metal/streams/utils', 'ember-metal/empty_object', 'ember-metal/streams/subscriber', 'ember-metal/streams/dependency', 'ember-metal/utils', 'require'], function (exports, _emberMetalAssign, _emberMetalDebug, _emberMetalPath_cache, _emberMetalObserver, _emberMetalStreamsUtils, _emberMetalEmpty_object, _emberMetalStreamsSubscriber, _emberMetalStreamsDependency, _emberMetalUtils, _require) {
'use strict';
exports.wrap = wrap;
/**
@@ -9691,11 +9742,11 @@
this.__ember_meta__ = null;
this[_emberMetalUtils.GUID_KEY] = null;
},
_makeChildStream: function (key) {
- KeyStream = KeyStream || _emberMetalCore.default.__loader.require('ember-metal/streams/key-stream').default;
+ KeyStream = KeyStream || _require.default('ember-metal/streams/key-stream').default;
return new KeyStream(this, key);
},
removeChild: function (key) {
delete this.children[key];
@@ -9831,11 +9882,11 @@
revalidate: function (value) {
if (value !== this.observedProxy) {
this._clearObservedProxy();
- ProxyMixin = ProxyMixin || _emberMetalCore.default.__loader.require('ember-runtime/mixins/-proxy').default;
+ ProxyMixin = ProxyMixin || _require.default('ember-runtime/mixins/-proxy').default;
if (ProxyMixin.detect(value)) {
_emberMetalObserver.addObserver(value, 'content', this, this.notify);
this.observedProxy = value;
}
@@ -10426,12 +10477,22 @@
if (object && object.isStream) {
object.setValue(value);
}
}
});
-enifed("ember-metal/symbol", ["exports"], function (exports) {
- "use strict";
+enifed('ember-metal/symbol', ['exports', 'ember-metal/utils'], function (exports, _emberMetalUtils) {
+ 'use strict';
+
+ exports.default = symbol;
+
+ function symbol(debugName) {
+ // TODO: Investigate using platform symbols, but we do not
+ // want to require non-enumerability for this API, which
+ // would introduce a large cost.
+
+ return _emberMetalUtils.intern(debugName + ' [id=' + _emberMetalUtils.GUID_KEY + Math.floor(Math.random() * new Date()) + ']');
+ }
});
enifed('ember-metal/utils', ['exports'], function (exports) {
'no use strict';
// Remove "use strict"; from transpiled module until
// https://bugs.webkit.org/show_bug.cgi?id=138038 is fixed
@@ -10446,11 +10507,11 @@
@private
@return {Number} the uuid
*/
exports.uuid = uuid;
- exports.symbol = symbol;
+ exports.intern = intern;
exports.generateGuid = generateGuid;
exports.guidFor = guidFor;
exports.wrap = wrap;
exports.tryInvoke = tryInvoke;
exports.makeArray = makeArray;
@@ -10523,10 +10584,11 @@
Known Trickā¢
@private
@return {String} interned version of the provided string
*/
+
function intern(str) {
var obj = {};
obj[str] = 1;
for (var key in obj) {
if (key === str) {
@@ -10534,18 +10596,10 @@
}
}
return str;
}
- function symbol(debugName) {
- // TODO: Investigate using platform symbols, but we do not
- // want to require non-enumerability for this API, which
- // would introduce a large cost.
-
- return intern(debugName + ' [id=' + GUID_KEY + Math.floor(Math.random() * new Date()) + ']');
- }
-
/**
A unique key used to assign guids and other private metadata to objects.
If you inspect an object in your browser debugger you will often see these.
They can be safely ignored.
@@ -11004,10 +11058,13 @@
'use strict';
exports.watchKey = watchKey;
exports.unwatchKey = unwatchKey;
+ var handleMandatorySetter = undefined,
+ lookupDescriptor = undefined;
+
function watchKey(obj, keyName, meta) {
// can't watch length on Array - it is special...
if (keyName === 'length' && Array.isArray(obj)) {
return;
}
@@ -11032,12 +11089,27 @@
} else {
m.writeWatching(keyName, (m.peekWatching(keyName) || 0) + 1);
}
}
- var handleMandatorySetter = function handleMandatorySetter(m, obj, keyName) {
- var descriptor = Object.getOwnPropertyDescriptor && Object.getOwnPropertyDescriptor(obj, keyName);
+ lookupDescriptor = function lookupDescriptor(obj, keyName) {
+ var current = obj;
+ while (current) {
+ var descriptor = Object.getOwnPropertyDescriptor(current, keyName);
+
+ if (descriptor) {
+ return descriptor;
+ }
+
+ current = Object.getPrototypeOf(current);
+ }
+
+ return null;
+ };
+
+ handleMandatorySetter = function handleMandatorySetter(m, obj, keyName) {
+ var descriptor = lookupDescriptor(obj, keyName);
var configurable = descriptor ? descriptor.configurable : true;
var isWritable = descriptor ? descriptor.writable : true;
var hasValue = descriptor ? 'value' in descriptor : true;
var possibleDesc = descriptor && descriptor.value;
var isDescriptor = possibleDesc !== null && typeof possibleDesc === 'object' && possibleDesc.isDescriptor;
@@ -11140,11 +11212,11 @@
} else if (counter > 1) {
m.writeWatching(keyPath, counter - 1);
}
}
});
-enifed('ember-metal/watching', ['exports', 'ember-metal/chains', 'ember-metal/watch_key', 'ember-metal/watch_path', 'ember-metal/path_cache'], function (exports, _emberMetalChains, _emberMetalWatch_key, _emberMetalWatch_path, _emberMetalPath_cache) {
+enifed('ember-metal/watching', ['exports', 'ember-metal/chains', 'ember-metal/watch_key', 'ember-metal/watch_path', 'ember-metal/path_cache', 'ember-metal/meta'], function (exports, _emberMetalChains, _emberMetalWatch_key, _emberMetalWatch_path, _emberMetalPath_cache, _emberMetalMeta) {
/**
@module ember-metal
*/
'use strict';
@@ -11180,11 +11252,11 @@
}
exports.watch = watch;
function isWatching(obj, key) {
- var meta = obj['__ember_meta__'];
+ var meta = _emberMetalMeta.peekMeta(obj);
return (meta && meta.peekWatching(key)) > 0;
}
watch.flushPending = _emberMetalChains.flushPendingChains;
@@ -11213,15 +11285,15 @@
@return {void}
@private
*/
function destroy(obj) {
- var meta = obj['__ember_meta__'];
+ var meta = _emberMetalMeta.peekMeta(obj);
var node, nodes, key, nodeObject;
if (meta) {
- obj['__ember_meta__'] = null;
+ _emberMetalMeta.deleteMeta(obj);
// remove chainWatchers to remove circular references that would prevent GC
node = meta.readableChains();
if (node) {
NODE_STACK.push(node);
// process tree
@@ -11301,13 +11373,13 @@
};
_emberMetalCore.default.Error = _emberMetalError.default;
_emberMetalCore.default.guidFor = _emberMetalUtils.guidFor;
_emberMetalCore.default.META_DESC = _emberMetalMeta.META_DESC;
- _emberMetalCore.default.EMPTY_META = _emberMetalMeta.EMPTY_META;
_emberMetalCore.default.meta = _emberMetalMeta.meta;
_emberMetalCore.default.inspect = _emberMetalUtils.inspect;
+
_emberMetalCore.default.tryCatchFinally = _emberMetalUtils.deprecatedTryCatchFinally;
_emberMetalCore.default.makeArray = _emberMetalUtils.makeArray;
_emberMetalCore.default.canInvoke = _emberMetalUtils.canInvoke;
_emberMetalCore.default.tryInvoke = _emberMetalUtils.tryInvoke;
_emberMetalCore.default.wrap = _emberMetalUtils.wrap;
@@ -11413,11 +11485,16 @@
_emberMetalCore.default.isNone = _emberMetalIs_none.default;
_emberMetalCore.default.isEmpty = _emberMetalIs_empty.default;
_emberMetalCore.default.isBlank = _emberMetalIs_blank.default;
_emberMetalCore.default.isPresent = _emberMetalIs_present.default;
- _emberMetalCore.default.merge = _emberMetalMerge.default;
+ if (_emberMetalFeatures.default('ember-metal-ember-assign')) {
+ _emberMetalCore.default.assign = Object.assign || _emberMetalAssign.default;
+ _emberMetalCore.default.merge = _emberMetalMerge.default;
+ } else {
+ _emberMetalCore.default.merge = _emberMetalMerge.default;
+ }
_emberMetalCore.default.FEATURES = _emberMetalFeatures.FEATURES;
_emberMetalCore.default.FEATURES.isEnabled = _emberMetalFeatures.default;
/**
@@ -12336,10 +12413,13 @@
return;
}
if (lastComponentNode.type === 'ComponentNode') {
componentCallback(lastComponentNode);
+ } else if (_emberMetalFeatures.default('ember-htmlbars-component-generation')) {
+ var component = elementCallback(lastComponentNode);
+ body.splice(lastIndex, 1, component);
}
}
exports.default = TransformTopLevelComponents;
});
@@ -12488,10 +12568,13 @@
@property compileOptions
*/
exports.default = function (_options) {
var disableComponentGeneration = true;
+ if (_emberMetalFeatures.default('ember-htmlbars-component-generation')) {
+ disableComponentGeneration = false;
+ }
var options = undefined;
// When calling `Ember.Handlebars.compile()` a second argument of `true`
// had a special meaning (long since lost), this just gaurds against
// `options` being true, and causing an error during compilation.
@@ -12513,11 +12596,11 @@
options.plugins = plugins;
options.buildMeta = function buildMeta(program) {
return {
fragmentReason: fragmentReason(program),
- revision: 'Ember@2.2.1',
+ revision: 'Ember@2.3.0-beta.1',
loc: program.loc,
moduleName: options.moduleName
};
};
@@ -19590,11 +19673,11 @@
case 'object':
if (typeof content.nodeType === 'number') {
return this.setNode(content);
}
/* Handlebars.SafeString */
- if (typeof content.toHTML === 'function') {
- return this.setHTML(content.toHTML());
+ if (typeof content.string === 'string') {
+ return this.setHTML(content.string);
}
if (this.parseTextAsHTML) {
return this.setHTML(content.toString());
}
/* falls through */
\ No newline at end of file