ember-source 2.13.0.beta.1 → 2.13.0.beta.2

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.13.0-beta.1
9
+ * @version 2.13.0-beta.2
10
10
  */
11
11
 
12
12
  var enifed, requireModule, Ember;
@@ -3697,6 +3697,7 @@ enifed('container/container', ['exports', 'ember-debug', 'ember-utils', 'ember-e
3697
3697
  this.fullName = fullName;
3698
3698
  this.normalizedName = normalizedName;
3699
3699
  this.madeToString = undefined;
3700
+ this.injections = undefined;
3700
3701
  }
3701
3702
 
3702
3703
  FactoryManager.prototype.create = function create() {
@@ -3704,7 +3705,13 @@ enifed('container/container', ['exports', 'ember-debug', 'ember-utils', 'ember-e
3704
3705
 
3705
3706
  var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];
3706
3707
 
3707
- var injections = injectionsFor(this.container, this.normalizedName);
3708
+ var injections = this.injections;
3709
+ if (injections === undefined) {
3710
+ injections = injectionsFor(this.container, this.normalizedName);
3711
+ if (areInjectionsDynamic(injections) === false) {
3712
+ this.injections = injections;
3713
+ }
3714
+ }
3708
3715
  var props = _emberUtils.assign({}, injections, options);
3709
3716
 
3710
3717
  props[_emberUtils.NAME_KEY] = this.madeToString || (this.madeToString = this.container.registry.makeToString(this.class, this.fullName));
@@ -8347,6 +8354,10 @@ enifed('ember-debug/warn', ['exports', 'ember-console', 'ember-debug/deprecate',
8347
8354
  */
8348
8355
 
8349
8356
  function warn(message, test, options) {
8357
+ if (arguments.length === 2 && typeof test === 'object') {
8358
+ options = test;
8359
+ test = false;
8360
+ }
8350
8361
  if (!options) {
8351
8362
  _emberDebugDeprecate.default(missingOptionsDeprecation, false, {
8352
8363
  id: 'ember-debug.warn-options-missing',
@@ -8363,7 +8374,7 @@ enifed('ember-debug/warn', ['exports', 'ember-console', 'ember-debug/deprecate',
8363
8374
  });
8364
8375
  }
8365
8376
 
8366
- _emberDebugHandlers.invoke.apply(undefined, ['warn'].concat(babelHelpers.slice.call(arguments)));
8377
+ _emberDebugHandlers.invoke('warn', message, test, options);
8367
8378
  }
8368
8379
  });
8369
8380
  enifed('ember-environment/global', ['exports'], function (exports) {
@@ -18759,18 +18770,18 @@ enifed('ember-metal/chains', ['exports', 'ember-metal/property_get', 'ember-meta
18759
18770
  // It is false for the root of a chain (because we have no parent)
18760
18771
  // and for global paths (because the parent node is the object with
18761
18772
  // the observer on it)
18762
- this._watching = value === undefined;
18773
+ var isWatching = this._watching = value === undefined;
18763
18774
 
18764
18775
  this._chains = undefined;
18765
18776
  this._object = undefined;
18766
18777
  this.count = 0;
18767
18778
 
18768
18779
  this._value = value;
18769
- this._paths = {};
18770
- if (this._watching) {
18780
+ this._paths = undefined;
18781
+ if (isWatching === true) {
18771
18782
  var obj = parent.value();
18772
18783
 
18773
- if (!isObject(obj)) {
18784
+ if (!isObject(obj) === true) {
18774
18785
  return;
18775
18786
  }
18776
18787
 
@@ -18781,7 +18792,7 @@ enifed('ember-metal/chains', ['exports', 'ember-metal/property_get', 'ember-meta
18781
18792
  }
18782
18793
 
18783
18794
  ChainNode.prototype.value = function value() {
18784
- if (this._value === undefined && this._watching) {
18795
+ if (this._value === undefined && this._watching === true) {
18785
18796
  var obj = this._parent.value();
18786
18797
  this._value = lazyGet(obj, this._key);
18787
18798
  }
@@ -18789,7 +18800,7 @@ enifed('ember-metal/chains', ['exports', 'ember-metal/property_get', 'ember-meta
18789
18800
  };
18790
18801
 
18791
18802
  ChainNode.prototype.destroy = function destroy() {
18792
- if (this._watching) {
18803
+ if (this._watching === true) {
18793
18804
  var obj = this._object;
18794
18805
  if (obj) {
18795
18806
  removeChainWatcher(obj, this._key, this);
@@ -18804,13 +18815,14 @@ enifed('ember-metal/chains', ['exports', 'ember-metal/property_get', 'ember-meta
18804
18815
  var ret = new ChainNode(null, null, obj);
18805
18816
  var paths = this._paths;
18806
18817
  var path = undefined;
18807
-
18808
- for (path in paths) {
18809
- // this check will also catch non-number vals.
18810
- if (paths[path] <= 0) {
18811
- continue;
18818
+ if (paths !== undefined) {
18819
+ for (path in paths) {
18820
+ // this check will also catch non-number vals.
18821
+ if (paths[path] <= 0) {
18822
+ continue;
18823
+ }
18824
+ ret.add(path);
18812
18825
  }
18813
- ret.add(path);
18814
18826
  }
18815
18827
  return ret;
18816
18828
  };
@@ -18819,7 +18831,7 @@ enifed('ember-metal/chains', ['exports', 'ember-metal/property_get', 'ember-meta
18819
18831
  // path.
18820
18832
 
18821
18833
  ChainNode.prototype.add = function add(path) {
18822
- var paths = this._paths;
18834
+ var paths = this._paths || (this._paths = {});
18823
18835
  paths[path] = (paths[path] || 0) + 1;
18824
18836
 
18825
18837
  var key = firstKey(path);
@@ -18833,6 +18845,9 @@ enifed('ember-metal/chains', ['exports', 'ember-metal/property_get', 'ember-meta
18833
18845
 
18834
18846
  ChainNode.prototype.remove = function remove(path) {
18835
18847
  var paths = this._paths;
18848
+ if (paths === undefined) {
18849
+ return;
18850
+ }
18836
18851
  if (paths[path] > 0) {
18837
18852
  paths[path]--;
18838
18853
  }
@@ -18886,11 +18901,11 @@ enifed('ember-metal/chains', ['exports', 'ember-metal/property_get', 'ember-meta
18886
18901
  };
18887
18902
 
18888
18903
  ChainNode.prototype.notify = function notify(revalidate, affected) {
18889
- if (revalidate && this._watching) {
18904
+ if (revalidate && this._watching === true) {
18890
18905
  var parentValue = this._parent.value();
18891
18906
 
18892
18907
  if (parentValue !== this._object) {
18893
- if (this._object) {
18908
+ if (this._object !== undefined) {
18894
18909
  removeChainWatcher(this._object, this._key, this);
18895
18910
  }
18896
18911
 
@@ -18907,7 +18922,7 @@ enifed('ember-metal/chains', ['exports', 'ember-metal/property_get', 'ember-meta
18907
18922
  // then notify chains...
18908
18923
  var chains = this._chains;
18909
18924
  var node = undefined;
18910
- if (chains) {
18925
+ if (chains !== undefined) {
18911
18926
  for (var key in chains) {
18912
18927
  node = chains[key];
18913
18928
  if (node !== undefined) {
@@ -18946,12 +18961,12 @@ enifed('ember-metal/chains', ['exports', 'ember-metal/property_get', 'ember-meta
18946
18961
  var meta = _emberMetalMeta.peekMeta(obj);
18947
18962
 
18948
18963
  // check if object meant only to be a prototype
18949
- if (meta && meta.proto === obj) {
18964
+ if (meta !== undefined && meta.proto === obj) {
18950
18965
  return;
18951
18966
  }
18952
18967
 
18953
18968
  // Use `get` if the return value is an EachProxy or an uncacheable value.
18954
- if (isVolatile(obj[key])) {
18969
+ if (isVolatile(obj[key]) === true) {
18955
18970
  return _emberMetalProperty_get.get(obj, key);
18956
18971
  // Otherwise attempt to get the cached value of the computed property
18957
18972
  } else {
@@ -18965,17 +18980,17 @@ enifed('ember-metal/chains', ['exports', 'ember-metal/property_get', 'ember-meta
18965
18980
  function finishChains(obj) {
18966
18981
  // We only create meta if we really have to
18967
18982
  var m = _emberMetalMeta.peekMeta(obj);
18968
- if (m) {
18983
+ if (m !== undefined) {
18969
18984
  m = _emberMetalMeta.meta(obj);
18970
18985
 
18971
18986
  // finish any current chains node watchers that reference obj
18972
18987
  var chainWatchers = m.readableChainWatchers();
18973
- if (chainWatchers) {
18988
+ if (chainWatchers !== undefined) {
18974
18989
  chainWatchers.revalidateAll();
18975
18990
  }
18976
18991
  // ensure that if we have inherited any chains they have been
18977
18992
  // copied onto our own meta.
18978
- if (m.readableChains()) {
18993
+ if (m.readableChains() !== undefined) {
18979
18994
  m.writableChains(_emberMetalWatch_path.makeChainNode);
18980
18995
  }
18981
18996
  }
@@ -19853,6 +19868,9 @@ enifed('ember-metal/events', ['exports', 'ember-utils', 'ember-metal/meta', 'emb
19853
19868
  return;
19854
19869
  }
19855
19870
  var actions = meta.matchingListeners(eventName);
19871
+ if (actions === undefined) {
19872
+ return;
19873
+ }
19856
19874
  var newActions = [];
19857
19875
 
19858
19876
  for (var i = actions.length - 3; i >= 0; i -= 3) {
@@ -20070,7 +20088,8 @@ enifed('ember-metal/events', ['exports', 'ember-utils', 'ember-metal/meta', 'emb
20070
20088
  if (!meta) {
20071
20089
  return false;
20072
20090
  }
20073
- return meta.matchingListeners(eventName).length > 0;
20091
+ var matched = meta.matchingListeners(eventName);
20092
+ return matched !== undefined && matched.length > 0;
20074
20093
  }
20075
20094
 
20076
20095
  /**
@@ -20176,7 +20195,7 @@ enifed('ember-metal/expand_properties', ['exports', 'ember-debug'], function (ex
20176
20195
  */
20177
20196
 
20178
20197
  function expandProperties(pattern, callback) {
20179
- _emberDebug.assert('A computed property key must be a string', typeof pattern === 'string');
20198
+ _emberDebug.assert('A computed property key must be a string, you passed ' + typeof pattern + ' ' + pattern, typeof pattern === 'string');
20180
20199
  _emberDebug.assert('Brace expanded properties cannot contain spaces, e.g. "user.{firstName, lastName}" should be "user.{firstName,lastName}"', pattern.indexOf(' ') === -1);
20181
20200
 
20182
20201
  var unbalancedNestedError = 'Brace expanded properties have to be balanced and cannot be nested, pattern: ' + pattern;
@@ -22227,23 +22246,24 @@ enifed('ember-metal/meta_listeners', ['exports'], function (exports) {
22227
22246
 
22228
22247
  matchingListeners: function (eventName) {
22229
22248
  var pointer = this;
22230
- var result = [];
22231
- while (pointer) {
22249
+ var result = undefined;
22250
+ while (pointer !== undefined) {
22232
22251
  var listeners = pointer._listeners;
22233
- if (listeners) {
22252
+ if (listeners !== undefined) {
22234
22253
  for (var index = 0; index < listeners.length - 3; index += 4) {
22235
22254
  if (listeners[index] === eventName) {
22255
+ result = result || [];
22236
22256
  pushUniqueListener(result, listeners, index);
22237
22257
  }
22238
22258
  }
22239
22259
  }
22240
- if (pointer._listenersFinalized) {
22260
+ if (pointer._listenersFinalized === true) {
22241
22261
  break;
22242
22262
  }
22243
22263
  pointer = pointer.parent;
22244
22264
  }
22245
22265
  var sus = this._suspendedListeners;
22246
- if (sus) {
22266
+ if (sus !== undefined && result !== undefined) {
22247
22267
  for (var susIndex = 0; susIndex < sus.length - 2; susIndex += 3) {
22248
22268
  if (eventName === sus[susIndex]) {
22249
22269
  for (var resultIndex = 0; resultIndex < result.length - 2; resultIndex += 3) {
@@ -26561,7 +26581,7 @@ enifed('ember-routing/location/history_location', ['exports', 'ember-metal', 'em
26561
26581
  baseURL = baseURL.replace(/\/$/, '');
26562
26582
 
26563
26583
  // remove baseURL and rootURL from start of path
26564
- var url = path.replace(new RegExp('^' + baseURL + '(?=/|$)'), '').replace(new RegExp('^' + rootURL + '(?=/|$)'), '');
26584
+ var url = path.replace(new RegExp('^' + baseURL + '(?=/|$)'), '').replace(new RegExp('^' + rootURL + '(?=/|$)'), '').replace(/\/\/$/g, '/'); // remove extra slashes
26565
26585
 
26566
26586
  var search = location.search || '';
26567
26587
  url += search + this.getHash();
@@ -41401,13 +41421,15 @@ enifed('ember-testing/setup_for_testing', ['exports', 'ember-debug', 'ember-view
41401
41421
  _emberTestingTestAdapter.setAdapter(typeof self.QUnit === 'undefined' ? new _emberTestingAdaptersAdapter.default() : new _emberTestingAdaptersQunit.default());
41402
41422
  }
41403
41423
 
41404
- _emberViews.jQuery(document).off('ajaxSend', _emberTestingTestPending_requests.incrementPendingRequests);
41405
- _emberViews.jQuery(document).off('ajaxComplete', _emberTestingTestPending_requests.decrementPendingRequests);
41424
+ if (_emberViews.jQuery) {
41425
+ _emberViews.jQuery(document).off('ajaxSend', _emberTestingTestPending_requests.incrementPendingRequests);
41426
+ _emberViews.jQuery(document).off('ajaxComplete', _emberTestingTestPending_requests.decrementPendingRequests);
41406
41427
 
41407
- _emberTestingTestPending_requests.clearPendingRequests();
41428
+ _emberTestingTestPending_requests.clearPendingRequests();
41408
41429
 
41409
- _emberViews.jQuery(document).on('ajaxSend', _emberTestingTestPending_requests.incrementPendingRequests);
41410
- _emberViews.jQuery(document).on('ajaxComplete', _emberTestingTestPending_requests.decrementPendingRequests);
41430
+ _emberViews.jQuery(document).on('ajaxSend', _emberTestingTestPending_requests.incrementPendingRequests);
41431
+ _emberViews.jQuery(document).on('ajaxComplete', _emberTestingTestPending_requests.decrementPendingRequests);
41432
+ }
41411
41433
  }
41412
41434
  });
41413
41435
  enifed('ember-testing/support', ['exports', 'ember-debug', 'ember-views', 'ember-environment'], function (exports, _emberDebug, _emberViews, _emberEnvironment) {
@@ -44207,6 +44229,7 @@ enifed('ember-views/system/event_dispatcher', ['exports', 'ember-utils', 'ember-
44207
44229
 
44208
44230
  rootElement.on(event + '.ember', '[data-ember-action]', function (evt) {
44209
44231
  var attributes = evt.currentTarget.attributes;
44232
+ var handledActions = [];
44210
44233
 
44211
44234
  for (var i = 0; i < attributes.length; i++) {
44212
44235
  var attr = attributes.item(i);
@@ -44218,8 +44241,12 @@ enifed('ember-views/system/event_dispatcher', ['exports', 'ember-utils', 'ember-
44218
44241
  // We have to check for action here since in some cases, jQuery will trigger
44219
44242
  // an event on `removeChild` (i.e. focusout) after we've already torn down the
44220
44243
  // action handlers for the view.
44221
- if (action && action.eventName === eventName) {
44244
+ if (action && action.eventName === eventName && handledActions.indexOf(action) === -1) {
44222
44245
  action.handler(evt);
44246
+ // Action handlers can mutate state which in turn creates new attributes on the element.
44247
+ // This effect could cause the `data-ember-action` attribute to shift down and be invoked twice.
44248
+ // To avoid this, we keep track of which actions have been handled.
44249
+ handledActions.push(action);
44223
44250
  }
44224
44251
  }
44225
44252
  }
@@ -45426,7 +45453,7 @@ enifed('ember/index', ['exports', 'require', 'ember-environment', 'ember-utils',
45426
45453
  enifed("ember/version", ["exports"], function (exports) {
45427
45454
  "use strict";
45428
45455
 
45429
- exports.default = "2.13.0-beta.1";
45456
+ exports.default = "2.13.0-beta.2";
45430
45457
  });
45431
45458
  enifed('internal-test-helpers/apply-mixins', ['exports', 'ember-utils'], function (exports, _emberUtils) {
45432
45459
  'use strict';
@@ -759,7 +759,9 @@ var i=this.registry.resolve(n)
759
759
  if(void 0!==i){var o=new R(this,i,e,n)
760
760
  return this.factoryManagerCache[n]=o,o}}}
761
761
  var R=(function(){function e(e,t,n){this.container=e,this.class=t,this.fullName=n}return e.prototype.create=function(){var e=arguments.length<=0||void 0===arguments[0]?{}:arguments[0]
762
- return y(this.class,e,this.container,this.fullName)},e}(),function(){function e(e,t,n,r){this.container=e,this.class=t,this.fullName=n,this.normalizedName=r,this.madeToString=void 0}return e.prototype.create=function(){var e=arguments.length<=0||void 0===arguments[0]?{}:arguments[0],t=g(this.container,this.normalizedName),r=n.assign({},t,e)
762
+ return y(this.class,e,this.container,this.fullName)},e}(),function(){function e(e,t,n,r){this.container=e,this.class=t,this.fullName=n,this.normalizedName=r,this.madeToString=void 0,this.injections=void 0}return e.prototype.create=function(){var e=arguments.length<=0||void 0===arguments[0]?{}:arguments[0],t=this.injections
763
+ void 0===t&&(t=g(this.container,this.normalizedName),d(t)===!1&&(this.injections=t))
764
+ var r=n.assign({},t,e)
763
765
  if(r[n.NAME_KEY]=this.madeToString||(this.madeToString=this.container.registry.makeToString(this.class,this.fullName)),!this.class.create)throw new Error("Failed to create an instance of '"+this.normalizedName+"'. Most likely an improperly defined class or an invalid module export.")
764
766
  var i=this.class.prototype
765
767
  return i&&_(i,this.container),this.class.create(r)},e}())}),s("container/index",["exports","container/registry","container/container"],function(e,t,n){"use strict"
@@ -982,7 +984,7 @@ var E=!1
982
984
  e.runningNonEmberDebugJS=E,E&&d("Please use `ember.debug.js` instead of `ember.js` for development and debugging.")}),s("ember-debug/run-in-debug",["exports"],function(e){"use strict"}),s("ember-debug/testing",["exports"],function(e){"use strict"
983
985
  function t(){return r}function n(e){r=!!e}e.isTesting=t,e.setTesting=n
984
986
  var r=!1}),s("ember-debug/warn",["exports","ember-console","ember-debug/deprecate","ember-debug/handlers"],function(e,t,n,r){"use strict"
985
- function i(e){r.registerHandler("warn",e)}function o(e,t,i){i||n.default(s,!1,{id:"ember-debug.warn-options-missing",until:"3.0.0",url:"http://emberjs.com/deprecations/v2.x/#toc_ember-debug-function-options"}),i&&!i.id&&n.default(a,!1,{id:"ember-debug.warn-id-missing",until:"3.0.0",url:"http://emberjs.com/deprecations/v2.x/#toc_ember-debug-function-options"}),r.invoke.apply(void 0,["warn"].concat(c.slice.call(arguments)))}e.registerHandler=i,e.default=o,i(function(e,n){t.default.warn("WARNING: "+e),"trace"in t.default&&t.default.trace()})
987
+ function i(e){r.registerHandler("warn",e)}function o(e,t,i){2===arguments.length&&"object"==typeof t&&(i=t,t=!1),i||n.default(s,!1,{id:"ember-debug.warn-options-missing",until:"3.0.0",url:"http://emberjs.com/deprecations/v2.x/#toc_ember-debug-function-options"}),i&&!i.id&&n.default(a,!1,{id:"ember-debug.warn-id-missing",until:"3.0.0",url:"http://emberjs.com/deprecations/v2.x/#toc_ember-debug-function-options"}),r.invoke("warn",e,t,i)}e.registerHandler=i,e.default=o,i(function(e,n){t.default.warn("WARNING: "+e),"trace"in t.default&&t.default.trace()})
986
988
  var s="When calling `Ember.warn` you must provide an `options` hash as the third parameter. `options` should include an `id` property."
987
989
  e.missingOptionsDeprecation=s
988
990
  var a="When calling `Ember.warn` you must provide `id` in options."
@@ -1561,12 +1563,12 @@ var r=function(){function e(){this.data=Object.create(null)}return e.prototype.g
1561
1563
  function s(e){return e.match(d)[0]}function a(e){return"object"==typeof e&&e}function u(e){return!(a(e)&&e.isDescriptor&&e._volatile===!1)}function l(){return new m}function c(e,t,i){var o=n.meta(e)
1562
1564
  o.writableChainWatchers(l).add(t,i),r.watchKey(e,t,o)}function p(e,t,i,o){if(a(e)){var s=o||n.peekMeta(e)
1563
1565
  s&&s.readableChainWatchers()&&(s=n.meta(e),s.readableChainWatchers().remove(t,i),r.unwatchKey(e,t,s))}}function h(e,r){if(a(e)){var o=n.peekMeta(e)
1564
- if(!o||o.proto!==e){if(u(e[r]))return t.get(e,r)
1566
+ if(void 0===o||o.proto!==e){if(u(e[r])===!0)return t.get(e,r)
1565
1567
  var s=o.readableCache()
1566
1568
  return s?i.cacheFor.get(s,r):void 0}}}function f(e){var t=n.peekMeta(e)
1567
- if(t){t=n.meta(e)
1569
+ if(void 0!==t){t=n.meta(e)
1568
1570
  var r=t.readableChainWatchers()
1569
- r&&r.revalidateAll(),t.readableChains()&&t.writableChains(o.makeChainNode)}}e.finishChains=f
1571
+ void 0!==r&&r.revalidateAll(),void 0!==t.readableChains()&&t.writableChains(o.makeChainNode)}}e.finishChains=f
1570
1572
  var d=/^([^\.]+)/,m=function(){function e(){this.chains=Object.create(null)}return e.prototype.add=function(e,t){var n=this.chains[e]
1571
1573
  void 0===n?this.chains[e]=[t]:n.push(t)},e.prototype.remove=function(e,t){var n=this.chains[e]
1572
1574
  if(n)for(var r=0;r<n.length;r++)if(n[r]===t){n.splice(r,1)
@@ -1577,24 +1579,26 @@ if(void 0!==r&&0!==r.length){var i=void 0
1577
1579
  n&&(i=[])
1578
1580
  for(var o=0;o<r.length;o++)r[o].notify(t,i)
1579
1581
  if(void 0!==n)for(var o=0;o<i.length;o+=2){var s=i[o],a=i[o+1]
1580
- n(s,a)}}},e}(),v=function(){function e(e,t,n){if(this._parent=e,this._key=t,this._watching=void 0===n,this._chains=void 0,this._object=void 0,this.count=0,this._value=n,this._paths={},this._watching){var r=e.value()
1581
- if(!a(r))return
1582
- this._object=r,c(this._object,this._key,this)}}return e.prototype.value=function(){if(void 0===this._value&&this._watching){var e=this._parent.value()
1583
- this._value=h(e,this._key)}return this._value},e.prototype.destroy=function(){if(this._watching){var e=this._object
1582
+ n(s,a)}}},e}(),v=function(){function e(e,t,n){this._parent=e,this._key=t
1583
+ var r=this._watching=void 0===n
1584
+ if(this._chains=void 0,this._object=void 0,this.count=0,this._value=n,this._paths=void 0,r===!0){var i=e.value()
1585
+ if(!a(i)==!0)return
1586
+ this._object=i,c(this._object,this._key,this)}}return e.prototype.value=function(){if(void 0===this._value&&this._watching===!0){var e=this._parent.value()
1587
+ this._value=h(e,this._key)}return this._value},e.prototype.destroy=function(){if(this._watching===!0){var e=this._object
1584
1588
  e&&p(e,this._key,this),this._watching=!1}},e.prototype.copy=function(t){var n=new e(null,null,t),r=this._paths,i=void 0
1585
- for(i in r)r[i]<=0||n.add(i)
1586
- return n},e.prototype.add=function(e){var t=this._paths
1589
+ if(void 0!==r)for(i in r)r[i]<=0||n.add(i)
1590
+ return n},e.prototype.add=function(e){var t=this._paths||(this._paths={})
1587
1591
  t[e]=(t[e]||0)+1
1588
1592
  var n=s(e),r=e.slice(n.length+1)
1589
1593
  this.chain(n,r)},e.prototype.remove=function(e){var t=this._paths
1590
- t[e]>0&&t[e]--
1594
+ if(void 0!==t){t[e]>0&&t[e]--
1591
1595
  var n=s(e),r=e.slice(n.length+1)
1592
- this.unchain(n,r)},e.prototype.chain=function(t,n){var r=this._chains,i=void 0
1596
+ this.unchain(n,r)}},e.prototype.chain=function(t,n){var r=this._chains,i=void 0
1593
1597
  void 0===r?r=this._chains=Object.create(null):i=r[t],void 0===i&&(i=r[t]=new e(this,t,void 0)),i.count++,n&&(t=s(n),n=n.slice(t.length+1),i.chain(t,n))},e.prototype.unchain=function(e,t){var n=this._chains,r=n[e]
1594
1598
  if(t&&t.length>1){var i=s(t),o=t.slice(i.length+1)
1595
- r.unchain(i,o)}r.count--,r.count<=0&&(n[r._key]=void 0,r.destroy())},e.prototype.notify=function(e,t){if(e&&this._watching){var n=this._parent.value()
1596
- n!==this._object&&(this._object&&p(this._object,this._key,this),a(n)?(this._object=n,c(n,this._key,this)):this._object=void 0),this._value=void 0}var r=this._chains,i=void 0
1597
- if(r)for(var o in r)i=r[o],void 0!==i&&i.notify(e,t)
1599
+ r.unchain(i,o)}r.count--,r.count<=0&&(n[r._key]=void 0,r.destroy())},e.prototype.notify=function(e,t){if(e&&this._watching===!0){var n=this._parent.value()
1600
+ n!==this._object&&(void 0!==this._object&&p(this._object,this._key,this),a(n)?(this._object=n,c(n,this._key,this)):this._object=void 0),this._value=void 0}var r=this._chains,i=void 0
1601
+ if(void 0!==r)for(var o in r)i=r[o],void 0!==i&&i.notify(e,t)
1598
1602
  t&&this._parent&&this._parent.populateAffected(this._key,1,t)},e.prototype.populateAffected=function(e,t,n){this._key&&(e=this._key+"."+e),this._parent?this._parent.populateAffected(e,t+1,n):t>1&&n.push(this.value(),e)},e}()
1599
1603
  e.removeChainWatcher=p,e.ChainNode=v}),s("ember-metal/computed",["exports","ember-utils","ember-debug","ember-metal/property_set","ember-metal/meta","ember-metal/expand_properties","ember-metal/properties","ember-metal/property_events","ember-metal/dependent_keys"],function(e,t,n,r,i,o,s,a,u){"use strict"
1600
1604
  function l(e,t){this.isDescriptor=!0,"function"==typeof e?this._getter=e:(this._getter=e.get,this._setter=e.set),this._dependentKeys=void 0,this._suspended=void 0,this._meta=void 0,this._volatile=!1,this._dependentKeys=t&&t.dependentKeys,this._readOnly=!1}function c(e){var t=void 0
@@ -1637,13 +1641,16 @@ var l=function(e){var t=e.stack,n=e.message
1637
1641
  return t&&!t.includes(n)&&(t=n+"\n"+t),t},c=void 0,p=void 0}),s("ember-metal/events",["exports","ember-utils","ember-metal/meta","ember-debug","ember-metal/meta_listeners"],function(e,t,n,r,i){"use strict"
1638
1642
  function o(e,t,n){for(var r=-1,i=e.length-3;i>=0;i-=3)if(t===e[i]&&n===e[i+1]){r=i
1639
1643
  break}return r}function s(e,t,r){var i=n.peekMeta(e)
1640
- if(i){for(var s=i.matchingListeners(t),a=[],u=s.length-3;u>=0;u-=3){var l=s[u],c=s[u+1],p=s[u+2],h=o(r,l,c)
1641
- h===-1&&(r.push(l,c,p),a.push(l,c,p))}return a}}function a(e,t,r,o,s){o||"function"!=typeof r||(o=r,r=null)
1644
+ if(i){var s=i.matchingListeners(t)
1645
+ if(void 0!==s){for(var a=[],u=s.length-3;u>=0;u-=3){var l=s[u],c=s[u+1],p=s[u+2],h=o(r,l,c)
1646
+ h===-1&&(r.push(l,c,p),a.push(l,c,p))}return a}}}function a(e,t,r,o,s){o||"function"!=typeof r||(o=r,r=null)
1642
1647
  var a=0
1643
1648
  s&&(a|=i.ONCE),n.meta(e).addToListeners(t,r,o,a),"function"==typeof e.didAddListener&&e.didAddListener(t,r,o)}function u(e,t,r,i){i||"function"!=typeof r||(i=r,r=null),n.meta(e).removeFromListeners(t,r,i,function(){"function"==typeof e.didRemoveListener&&e.didRemoveListener.apply(e,arguments)})}function l(e,t,n,r,i){return c(e,[t],n,r,i)}function c(e,t,r,i,o){return i||"function"!=typeof r||(i=r,r=null),n.meta(e).suspendListeners(t,r,i,o)}function p(e){return n.meta(e).watchedEvents()}function h(e,r,o,s){if(!s){var a=n.peekMeta(e)
1644
1649
  s=a&&a.matchingListeners(r)}if(s&&0!==s.length){for(var l=s.length-3;l>=0;l-=3){var c=s[l],p=s[l+1],h=s[l+2]
1645
1650
  p&&(h&i.SUSPENDED||(h&i.ONCE&&u(e,r,c,p),c||(c=e),"string"==typeof p?o?t.applyStr(c,p,o):c[p]():o?p.apply(c,o):p.call(c)))}return!0}}function f(e,t){var r=n.peekMeta(e)
1646
- return!!r&&r.matchingListeners(t).length>0}function d(e,t){var r=[],i=n.peekMeta(e),o=i&&i.matchingListeners(t)
1651
+ if(!r)return!1
1652
+ var i=r.matchingListeners(t)
1653
+ return void 0!==i&&i.length>0}function d(e,t){var r=[],i=n.peekMeta(e),o=i&&i.matchingListeners(t)
1647
1654
  if(!o)return r
1648
1655
  for(var s=0;s<o.length;s+=3){var a=o[s],u=o[s+1]
1649
1656
  r.push([a,u])}return r}function m(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n]
@@ -1792,11 +1799,11 @@ if(t&&(this._listeners=this._listeners.concat(t)),e._listenersFinalized)break
1792
1799
  e=e.parent}this._listenersFinalized=!0}},removeFromListeners:function(e,t,n,r){for(var i=this;i;){var o=i._listeners
1793
1800
  if(o)for(var s=o.length-4;s>=0;s-=4)if(o[s]===e&&(!n||o[s+1]===t&&o[s+2]===n)){if(i!==this)return this._finalizeListeners(),this.removeFromListeners(e,t,n)
1794
1801
  "function"==typeof r&&r(e,t,o[s+2]),o.splice(s,4)}if(i._listenersFinalized)break
1795
- i=i.parent}},matchingListeners:function(e){for(var n=this,i=[];n;){var o=n._listeners
1796
- if(o)for(var s=0;s<o.length-3;s+=4)o[s]===e&&t(i,o,s)
1797
- if(n._listenersFinalized)break
1802
+ i=i.parent}},matchingListeners:function(e){for(var n=this,i=void 0;void 0!==n;){var o=n._listeners
1803
+ if(void 0!==o)for(var s=0;s<o.length-3;s+=4)o[s]===e&&(i=i||[],t(i,o,s))
1804
+ if(n._listenersFinalized===!0)break
1798
1805
  n=n.parent}var a=this._suspendedListeners
1799
- if(a)for(var u=0;u<a.length-2;u+=3)if(e===a[u])for(var l=0;l<i.length-2;l+=3)i[l]===a[u+1]&&i[l+1]===a[u+2]&&(i[l+2]|=r)
1806
+ if(void 0!==a&&void 0!==i)for(var u=0;u<a.length-2;u+=3)if(e===a[u])for(var l=0;l<i.length-2;l+=3)i[l]===a[u+1]&&i[l+1]===a[u+2]&&(i[l+2]|=r)
1800
1807
  return i},suspendListeners:function(e,t,n,r){var i=this._suspendedListeners
1801
1808
  i||(i=this._suspendedListeners=[])
1802
1809
  for(var o=0;o<e.length;o++)i.push(e[o],t,n)
@@ -2010,7 +2017,7 @@ var e=document.querySelector("base"),n=""
2010
2017
  e&&(n=e.getAttribute("href")),t.set(this,"baseURL",n),t.set(this,"location",t.get(this,"location")||window.location),this._popstateHandler=void 0},initState:function(){var e=t.get(this,"history")||window.history
2011
2018
  t.set(this,"history",e),e&&"state"in e&&(this.supportsHistory=!0),this.replaceState(this.formatURL(this.getURL()))},rootURL:"/",getURL:function(){var e=t.get(this,"location"),n=e.pathname,r=t.get(this,"rootURL"),i=t.get(this,"baseURL")
2012
2019
  r=r.replace(/\/$/,""),i=i.replace(/\/$/,"")
2013
- var o=n.replace(new RegExp("^"+i+"(?=/|$)"),"").replace(new RegExp("^"+r+"(?=/|$)"),""),s=e.search||""
2020
+ var o=n.replace(new RegExp("^"+i+"(?=/|$)"),"").replace(new RegExp("^"+r+"(?=/|$)"),"").replace(/\/\/$/g,"/"),s=e.search||""
2014
2021
  return o+=s+this.getHash()},setURL:function(e){var t=this.getState()
2015
2022
  e=this.formatURL(e),t&&t.path===e||this.pushState(e)},replaceURL:function(e){var t=this.getState()
2016
2023
  e=this.formatURL(e),t&&t.path===e||this.replaceState(e)},getState:function(){return this.supportsHistory?t.get(this,"history").state:this._historyState},pushState:function(e){var n={path:e}
@@ -2799,9 +2806,9 @@ if(r.isNone(n)?n=r.get(this,"rootElement"):r.set(this,"rootElement",n),n=o.defau
2799
2806
  var a=this._getViewRegistry()
2800
2807
  for(i in s)s.hasOwnProperty(i)&&this.setupHandler(n,i,s[i],a)},setupHandler:function(e,t,n,r){var i=this
2801
2808
  null!==n&&(e.on(t+".ember",".ember-view",function(e,t){var o=r[this.id],s=!0,a=i.canDispatchToEventManager?i._findNearestEventManager(o,n):null
2802
- return a&&a!==t?s=i._dispatchEvent(a,e,n,o):o&&(s=i._bubbleEvent(o,e,n)),s}),e.on(t+".ember","[data-ember-action]",function(e){for(var t=e.currentTarget.attributes,r=0;r<t.length;r++){var i=t.item(r),o=i.name
2803
- if(o.lastIndexOf("data-ember-action-",0)!==-1){var a=s.default.registeredActions[i.value]
2804
- a&&a.eventName===n&&a.handler(e)}}}))},_getViewRegistry:function(){var e=t.getOwner(this),n=e&&e.lookup("-view-registry:main")||u.default
2809
+ return a&&a!==t?s=i._dispatchEvent(a,e,n,o):o&&(s=i._bubbleEvent(o,e,n)),s}),e.on(t+".ember","[data-ember-action]",function(e){for(var t=e.currentTarget.attributes,r=[],i=0;i<t.length;i++){var o=t.item(i),a=o.name
2810
+ if(a.lastIndexOf("data-ember-action-",0)!==-1){var u=s.default.registeredActions[o.value]
2811
+ u&&u.eventName===n&&r.indexOf(u)===-1&&(u.handler(e),r.push(u))}}}))},_getViewRegistry:function(){var e=t.getOwner(this),n=e&&e.lookup("-view-registry:main")||u.default
2805
2812
  return n},_findNearestEventManager:function(e,t){for(var n=null;e&&(n=r.get(e,"eventManager"),!n||!n[t]);)e=r.get(e,"parentView")
2806
2813
  return n},_dispatchEvent:function(e,t,n,i){var o=!0,s=e[n]
2807
2814
  return"function"==typeof s?(o=r.run(e,s,t,i),t.stopPropagation()):o=this._bubbleEvent(i,t,n),o},_bubbleEvent:function(e,t,n){return e.handleEvent(n,t)},destroy:function(){var e=r.get(this,"rootElement")
@@ -2867,7 +2874,7 @@ g.map=l.map,g.sort=l.sort,g.setDiff=l.setDiff,g.mapBy=l.mapBy,g.filter=l.filter,
2867
2874
  var y=o.default.Handlebars=o.default.Handlebars||{},b=o.default.HTMLBars=o.default.HTMLBars||{},_=y.Utils=y.Utils||{}
2868
2875
  if(Object.defineProperty(y,"SafeString",{get:c._getSafeString}),b.template=y.template=c.template,_.escapeExpression=c.escapeExpression,l.String.htmlSafe=c.htmlSafe,l.String.isHTMLSafe=c.isHTMLSafe,b.makeBoundHelper=c.makeBoundHelper,Object.defineProperty(o.default,"TEMPLATES",{get:c.getTemplates,set:c.setTemplates,configurable:!1,enumerable:!1}),e.VERSION=p.default,o.default.VERSION=p.default,o.libraries.registerCoreLibrary("Ember",p.default),o.default.create=s.deprecateFunc("Ember.create is deprecated in favor of Object.create",{id:"ember-metal.ember-create",until:"3.0.0"},Object.create),o.default.keys=s.deprecateFunc("Ember.keys is deprecated in favor of Object.keys",{id:"ember-metal.ember.keys",until:"3.0.0"},Object.keys),o.default.$=h.jQuery,o.default.ViewTargetActionSupport=h.ViewTargetActionSupport,o.default.ViewUtils={isSimpleClick:h.isSimpleClick,getViewElement:h.getViewElement,getViewBounds:h.getViewBounds,getViewClientRects:h.getViewClientRects,getViewBoundingClientRect:h.getViewBoundingClientRect,getRootViews:h.getRootViews,getChildViews:h.getChildViews},o.default.TextSupport=h.TextSupport,o.default.ComponentLookup=h.ComponentLookup,o.default.EventDispatcher=h.EventDispatcher,o.default.Location=f.Location,o.default.AutoLocation=f.AutoLocation,o.default.HashLocation=f.HashLocation,o.default.HistoryLocation=f.HistoryLocation,o.default.NoneLocation=f.NoneLocation,o.default.controllerFor=f.controllerFor,o.default.generateControllerFactory=f.generateControllerFactory,o.default.generateController=f.generateController,o.default.RouterDSL=f.RouterDSL,o.default.Router=f.Router,o.default.Route=f.Route,o.default.Application=d.Application,o.default.ApplicationInstance=d.ApplicationInstance,o.default.Engine=d.Engine,o.default.EngineInstance=d.EngineInstance,o.default.DefaultResolver=o.default.Resolver=d.Resolver,l.runLoadHooks("Ember.Application",d.Application),o.default.DataAdapter=m.DataAdapter,o.default.ContainerDebugAdapter=m.ContainerDebugAdapter,t.has("ember-template-compiler")&&t.default("ember-template-compiler"),t.has("ember-testing")){var w=t.default("ember-testing")
2869
2876
  o.default.Test=w.Test,o.default.Test.Adapter=w.Adapter,o.default.Test.QUnitAdapter=w.QUnitAdapter,o.default.setupForTesting=w.setupForTesting}l.runLoadHooks("Ember"),e.default=o.default,"object"==typeof module&&module.exports?module.exports=o.default:n.context.exports.Ember=n.context.exports.Em=o.default}),s("ember/version",["exports"],function(e){"use strict"
2870
- e.default="2.13.0-beta.1"}),s("internal-test-helpers/apply-mixins",["exports","ember-utils"],function(e,t){"use strict"
2877
+ e.default="2.13.0-beta.2"}),s("internal-test-helpers/apply-mixins",["exports","ember-utils"],function(e,t){"use strict"
2871
2878
  function n(e){return Array.isArray(e.cases)&&"function"==typeof e.generate}function r(e){for(var r=arguments.length,i=Array(r>1?r-1:0),o=1;o<r;o++)i[o-1]=arguments[o]
2872
2879
  return i.forEach(function(r){var i=void 0
2873
2880
  n(r)?function(){var e=r
@@ -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.13.0-beta.1
9
+ * @version 2.13.0-beta.2
10
10
  */
11
11
 
12
12
  var enifed, requireModule, Ember;
@@ -3642,12 +3642,19 @@ enifed('container/container', ['exports', 'ember-debug', 'ember-utils', 'ember-e
3642
3642
  this.fullName = fullName;
3643
3643
  this.normalizedName = normalizedName;
3644
3644
  this.madeToString = undefined;
3645
+ this.injections = undefined;
3645
3646
  }
3646
3647
 
3647
3648
  FactoryManager.prototype.create = function create() {
3648
3649
  var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];
3649
3650
 
3650
- var injections = injectionsFor(this.container, this.normalizedName);
3651
+ var injections = this.injections;
3652
+ if (injections === undefined) {
3653
+ injections = injectionsFor(this.container, this.normalizedName);
3654
+ if (areInjectionsDynamic(injections) === false) {
3655
+ this.injections = injections;
3656
+ }
3657
+ }
3651
3658
  var props = _emberUtils.assign({}, injections, options);
3652
3659
 
3653
3660
  props[_emberUtils.NAME_KEY] = this.madeToString || (this.madeToString = this.container.registry.makeToString(this.class, this.fullName));
@@ -8200,6 +8207,10 @@ enifed('ember-debug/warn', ['exports', 'ember-console', 'ember-debug/deprecate',
8200
8207
  */
8201
8208
 
8202
8209
  function warn(message, test, options) {
8210
+ if (arguments.length === 2 && typeof test === 'object') {
8211
+ options = test;
8212
+ test = false;
8213
+ }
8203
8214
  if (!options) {
8204
8215
  _emberDebugDeprecate.default(missingOptionsDeprecation, false, {
8205
8216
  id: 'ember-debug.warn-options-missing',
@@ -8216,7 +8227,7 @@ enifed('ember-debug/warn', ['exports', 'ember-console', 'ember-debug/deprecate',
8216
8227
  });
8217
8228
  }
8218
8229
 
8219
- _emberDebugHandlers.invoke.apply(undefined, ['warn'].concat(babelHelpers.slice.call(arguments)));
8230
+ _emberDebugHandlers.invoke('warn', message, test, options);
8220
8231
  }
8221
8232
  });
8222
8233
  enifed('ember-environment/global', ['exports'], function (exports) {
@@ -18034,18 +18045,18 @@ enifed('ember-metal/chains', ['exports', 'ember-metal/property_get', 'ember-meta
18034
18045
  // It is false for the root of a chain (because we have no parent)
18035
18046
  // and for global paths (because the parent node is the object with
18036
18047
  // the observer on it)
18037
- this._watching = value === undefined;
18048
+ var isWatching = this._watching = value === undefined;
18038
18049
 
18039
18050
  this._chains = undefined;
18040
18051
  this._object = undefined;
18041
18052
  this.count = 0;
18042
18053
 
18043
18054
  this._value = value;
18044
- this._paths = {};
18045
- if (this._watching) {
18055
+ this._paths = undefined;
18056
+ if (isWatching === true) {
18046
18057
  var obj = parent.value();
18047
18058
 
18048
- if (!isObject(obj)) {
18059
+ if (!isObject(obj) === true) {
18049
18060
  return;
18050
18061
  }
18051
18062
 
@@ -18056,7 +18067,7 @@ enifed('ember-metal/chains', ['exports', 'ember-metal/property_get', 'ember-meta
18056
18067
  }
18057
18068
 
18058
18069
  ChainNode.prototype.value = function value() {
18059
- if (this._value === undefined && this._watching) {
18070
+ if (this._value === undefined && this._watching === true) {
18060
18071
  var obj = this._parent.value();
18061
18072
  this._value = lazyGet(obj, this._key);
18062
18073
  }
@@ -18064,7 +18075,7 @@ enifed('ember-metal/chains', ['exports', 'ember-metal/property_get', 'ember-meta
18064
18075
  };
18065
18076
 
18066
18077
  ChainNode.prototype.destroy = function destroy() {
18067
- if (this._watching) {
18078
+ if (this._watching === true) {
18068
18079
  var obj = this._object;
18069
18080
  if (obj) {
18070
18081
  removeChainWatcher(obj, this._key, this);
@@ -18079,13 +18090,14 @@ enifed('ember-metal/chains', ['exports', 'ember-metal/property_get', 'ember-meta
18079
18090
  var ret = new ChainNode(null, null, obj);
18080
18091
  var paths = this._paths;
18081
18092
  var path = undefined;
18082
-
18083
- for (path in paths) {
18084
- // this check will also catch non-number vals.
18085
- if (paths[path] <= 0) {
18086
- continue;
18093
+ if (paths !== undefined) {
18094
+ for (path in paths) {
18095
+ // this check will also catch non-number vals.
18096
+ if (paths[path] <= 0) {
18097
+ continue;
18098
+ }
18099
+ ret.add(path);
18087
18100
  }
18088
- ret.add(path);
18089
18101
  }
18090
18102
  return ret;
18091
18103
  };
@@ -18094,7 +18106,7 @@ enifed('ember-metal/chains', ['exports', 'ember-metal/property_get', 'ember-meta
18094
18106
  // path.
18095
18107
 
18096
18108
  ChainNode.prototype.add = function add(path) {
18097
- var paths = this._paths;
18109
+ var paths = this._paths || (this._paths = {});
18098
18110
  paths[path] = (paths[path] || 0) + 1;
18099
18111
 
18100
18112
  var key = firstKey(path);
@@ -18108,6 +18120,9 @@ enifed('ember-metal/chains', ['exports', 'ember-metal/property_get', 'ember-meta
18108
18120
 
18109
18121
  ChainNode.prototype.remove = function remove(path) {
18110
18122
  var paths = this._paths;
18123
+ if (paths === undefined) {
18124
+ return;
18125
+ }
18111
18126
  if (paths[path] > 0) {
18112
18127
  paths[path]--;
18113
18128
  }
@@ -18161,11 +18176,11 @@ enifed('ember-metal/chains', ['exports', 'ember-metal/property_get', 'ember-meta
18161
18176
  };
18162
18177
 
18163
18178
  ChainNode.prototype.notify = function notify(revalidate, affected) {
18164
- if (revalidate && this._watching) {
18179
+ if (revalidate && this._watching === true) {
18165
18180
  var parentValue = this._parent.value();
18166
18181
 
18167
18182
  if (parentValue !== this._object) {
18168
- if (this._object) {
18183
+ if (this._object !== undefined) {
18169
18184
  removeChainWatcher(this._object, this._key, this);
18170
18185
  }
18171
18186
 
@@ -18182,7 +18197,7 @@ enifed('ember-metal/chains', ['exports', 'ember-metal/property_get', 'ember-meta
18182
18197
  // then notify chains...
18183
18198
  var chains = this._chains;
18184
18199
  var node = undefined;
18185
- if (chains) {
18200
+ if (chains !== undefined) {
18186
18201
  for (var key in chains) {
18187
18202
  node = chains[key];
18188
18203
  if (node !== undefined) {
@@ -18221,12 +18236,12 @@ enifed('ember-metal/chains', ['exports', 'ember-metal/property_get', 'ember-meta
18221
18236
  var meta = _emberMetalMeta.peekMeta(obj);
18222
18237
 
18223
18238
  // check if object meant only to be a prototype
18224
- if (meta && meta.proto === obj) {
18239
+ if (meta !== undefined && meta.proto === obj) {
18225
18240
  return;
18226
18241
  }
18227
18242
 
18228
18243
  // Use `get` if the return value is an EachProxy or an uncacheable value.
18229
- if (isVolatile(obj[key])) {
18244
+ if (isVolatile(obj[key]) === true) {
18230
18245
  return _emberMetalProperty_get.get(obj, key);
18231
18246
  // Otherwise attempt to get the cached value of the computed property
18232
18247
  } else {
@@ -18240,17 +18255,17 @@ enifed('ember-metal/chains', ['exports', 'ember-metal/property_get', 'ember-meta
18240
18255
  function finishChains(obj) {
18241
18256
  // We only create meta if we really have to
18242
18257
  var m = _emberMetalMeta.peekMeta(obj);
18243
- if (m) {
18258
+ if (m !== undefined) {
18244
18259
  m = _emberMetalMeta.meta(obj);
18245
18260
 
18246
18261
  // finish any current chains node watchers that reference obj
18247
18262
  var chainWatchers = m.readableChainWatchers();
18248
- if (chainWatchers) {
18263
+ if (chainWatchers !== undefined) {
18249
18264
  chainWatchers.revalidateAll();
18250
18265
  }
18251
18266
  // ensure that if we have inherited any chains they have been
18252
18267
  // copied onto our own meta.
18253
- if (m.readableChains()) {
18268
+ if (m.readableChains() !== undefined) {
18254
18269
  m.writableChains(_emberMetalWatch_path.makeChainNode);
18255
18270
  }
18256
18271
  }
@@ -19113,6 +19128,9 @@ enifed('ember-metal/events', ['exports', 'ember-utils', 'ember-metal/meta', 'emb
19113
19128
  return;
19114
19129
  }
19115
19130
  var actions = meta.matchingListeners(eventName);
19131
+ if (actions === undefined) {
19132
+ return;
19133
+ }
19116
19134
  var newActions = [];
19117
19135
 
19118
19136
  for (var i = actions.length - 3; i >= 0; i -= 3) {
@@ -19322,7 +19340,8 @@ enifed('ember-metal/events', ['exports', 'ember-utils', 'ember-metal/meta', 'emb
19322
19340
  if (!meta) {
19323
19341
  return false;
19324
19342
  }
19325
- return meta.matchingListeners(eventName).length > 0;
19343
+ var matched = meta.matchingListeners(eventName);
19344
+ return matched !== undefined && matched.length > 0;
19326
19345
  }
19327
19346
 
19328
19347
  /**
@@ -21431,23 +21450,24 @@ enifed('ember-metal/meta_listeners', ['exports'], function (exports) {
21431
21450
 
21432
21451
  matchingListeners: function (eventName) {
21433
21452
  var pointer = this;
21434
- var result = [];
21435
- while (pointer) {
21453
+ var result = undefined;
21454
+ while (pointer !== undefined) {
21436
21455
  var listeners = pointer._listeners;
21437
- if (listeners) {
21456
+ if (listeners !== undefined) {
21438
21457
  for (var index = 0; index < listeners.length - 3; index += 4) {
21439
21458
  if (listeners[index] === eventName) {
21459
+ result = result || [];
21440
21460
  pushUniqueListener(result, listeners, index);
21441
21461
  }
21442
21462
  }
21443
21463
  }
21444
- if (pointer._listenersFinalized) {
21464
+ if (pointer._listenersFinalized === true) {
21445
21465
  break;
21446
21466
  }
21447
21467
  pointer = pointer.parent;
21448
21468
  }
21449
21469
  var sus = this._suspendedListeners;
21450
- if (sus) {
21470
+ if (sus !== undefined && result !== undefined) {
21451
21471
  for (var susIndex = 0; susIndex < sus.length - 2; susIndex += 3) {
21452
21472
  if (eventName === sus[susIndex]) {
21453
21473
  for (var resultIndex = 0; resultIndex < result.length - 2; resultIndex += 3) {
@@ -25676,7 +25696,7 @@ enifed('ember-routing/location/history_location', ['exports', 'ember-metal', 'em
25676
25696
  baseURL = baseURL.replace(/\/$/, '');
25677
25697
 
25678
25698
  // remove baseURL and rootURL from start of path
25679
- var url = path.replace(new RegExp('^' + baseURL + '(?=/|$)'), '').replace(new RegExp('^' + rootURL + '(?=/|$)'), '');
25699
+ var url = path.replace(new RegExp('^' + baseURL + '(?=/|$)'), '').replace(new RegExp('^' + rootURL + '(?=/|$)'), '').replace(/\/\/$/g, '/'); // remove extra slashes
25680
25700
 
25681
25701
  var search = location.search || '';
25682
25702
  url += search + this.getHash();
@@ -41374,6 +41394,7 @@ enifed('ember-views/system/event_dispatcher', ['exports', 'ember-utils', 'ember-
41374
41394
 
41375
41395
  rootElement.on(event + '.ember', '[data-ember-action]', function (evt) {
41376
41396
  var attributes = evt.currentTarget.attributes;
41397
+ var handledActions = [];
41377
41398
 
41378
41399
  for (var i = 0; i < attributes.length; i++) {
41379
41400
  var attr = attributes.item(i);
@@ -41385,8 +41406,12 @@ enifed('ember-views/system/event_dispatcher', ['exports', 'ember-utils', 'ember-
41385
41406
  // We have to check for action here since in some cases, jQuery will trigger
41386
41407
  // an event on `removeChild` (i.e. focusout) after we've already torn down the
41387
41408
  // action handlers for the view.
41388
- if (action && action.eventName === eventName) {
41409
+ if (action && action.eventName === eventName && handledActions.indexOf(action) === -1) {
41389
41410
  action.handler(evt);
41411
+ // Action handlers can mutate state which in turn creates new attributes on the element.
41412
+ // This effect could cause the `data-ember-action` attribute to shift down and be invoked twice.
41413
+ // To avoid this, we keep track of which actions have been handled.
41414
+ handledActions.push(action);
41390
41415
  }
41391
41416
  }
41392
41417
  }
@@ -42571,7 +42596,7 @@ enifed('ember/index', ['exports', 'require', 'ember-environment', 'ember-utils',
42571
42596
  enifed("ember/version", ["exports"], function (exports) {
42572
42597
  "use strict";
42573
42598
 
42574
- exports.default = "2.13.0-beta.1";
42599
+ exports.default = "2.13.0-beta.2";
42575
42600
  });
42576
42601
  enifed('internal-test-helpers/apply-mixins', ['exports', 'ember-utils'], function (exports, _emberUtils) {
42577
42602
  'use strict';