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

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.13.0-beta.1
9
+ * @version 2.13.0-beta.2
10
10
  */
11
11
 
12
12
  var enifed, requireModule, Ember;
@@ -1225,13 +1225,15 @@ enifed('ember-testing/setup_for_testing', ['exports', 'ember-debug', 'ember-view
1225
1225
  _emberTestingTestAdapter.setAdapter(typeof self.QUnit === 'undefined' ? new _emberTestingAdaptersAdapter.default() : new _emberTestingAdaptersQunit.default());
1226
1226
  }
1227
1227
 
1228
- _emberViews.jQuery(document).off('ajaxSend', _emberTestingTestPending_requests.incrementPendingRequests);
1229
- _emberViews.jQuery(document).off('ajaxComplete', _emberTestingTestPending_requests.decrementPendingRequests);
1228
+ if (_emberViews.jQuery) {
1229
+ _emberViews.jQuery(document).off('ajaxSend', _emberTestingTestPending_requests.incrementPendingRequests);
1230
+ _emberViews.jQuery(document).off('ajaxComplete', _emberTestingTestPending_requests.decrementPendingRequests);
1230
1231
 
1231
- _emberTestingTestPending_requests.clearPendingRequests();
1232
+ _emberTestingTestPending_requests.clearPendingRequests();
1232
1233
 
1233
- _emberViews.jQuery(document).on('ajaxSend', _emberTestingTestPending_requests.incrementPendingRequests);
1234
- _emberViews.jQuery(document).on('ajaxComplete', _emberTestingTestPending_requests.decrementPendingRequests);
1234
+ _emberViews.jQuery(document).on('ajaxSend', _emberTestingTestPending_requests.incrementPendingRequests);
1235
+ _emberViews.jQuery(document).on('ajaxComplete', _emberTestingTestPending_requests.decrementPendingRequests);
1236
+ }
1235
1237
  }
1236
1238
  });
1237
1239
  enifed('ember-testing/support', ['exports', 'ember-debug', 'ember-views', 'ember-environment'], function (exports, _emberDebug, _emberViews, _emberEnvironment) {
@@ -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;
@@ -6784,6 +6784,34 @@ enifed('ember-debug/tests/main_test', ['exports', 'ember-environment', 'ember-ru
6784
6784
 
6785
6785
  _emberDebugIndex.warn('foo', false, {});
6786
6786
  });
6787
+
6788
+ QUnit.test('warn without options.id nor test triggers a deprecation', function (assert) {
6789
+ assert.expect(2);
6790
+
6791
+ _emberDebugDeprecate.registerHandler(function (message) {
6792
+ assert.equal(message, _emberDebugWarn.missingOptionsIdDeprecation, 'deprecation is triggered when options is missing');
6793
+ });
6794
+
6795
+ _emberDebugWarn.registerHandler(function (message) {
6796
+ assert.equal(message, 'foo', 'original warning is triggered');
6797
+ });
6798
+
6799
+ _emberDebugIndex.warn('foo', {});
6800
+ });
6801
+
6802
+ QUnit.test('warn without test but with options does not trigger a deprecation', function (assert) {
6803
+ assert.expect(1);
6804
+
6805
+ _emberDebugDeprecate.registerHandler(function (message) {
6806
+ assert.ok(false, 'there should be no deprecation ' + message);
6807
+ });
6808
+
6809
+ _emberDebugWarn.registerHandler(function (message) {
6810
+ assert.equal(message, 'foo', 'warning was triggered');
6811
+ });
6812
+
6813
+ _emberDebugIndex.warn('foo', { id: 'ember-debug.do-not-raise' });
6814
+ });
6787
6815
  });
6788
6816
  enifed('ember-debug/tests/main_test.lint-test', ['exports'], function (exports) {
6789
6817
  'use strict';
@@ -27145,6 +27173,42 @@ babelHelpers.classCallCheck(this, _class2);
27145
27173
  this.assertText('Click me');
27146
27174
  };
27147
27175
 
27176
+ _class2.prototype['@test action handler that shifts element attributes doesn\'t trigger multiple invocations'] = function testActionHandlerThatShiftsElementAttributesDoesnTTriggerMultipleInvocations() {
27177
+ var _this34 = this;
27178
+
27179
+ var actionCount = 0;
27180
+ var ExampleComponent = _emberGlimmerTestsUtilsHelpers.Component.extend({
27181
+ selected: false,
27182
+ actions: {
27183
+ toggleSelected: function () {
27184
+ actionCount++;
27185
+ this.toggleProperty('selected');
27186
+ }
27187
+ }
27188
+ });
27189
+
27190
+ this.registerComponent('example-component', {
27191
+ ComponentClass: ExampleComponent,
27192
+ template: '<button class="{{if selected \'selected\'}}" {{action "toggleSelected"}}>Toggle Selected</button>'
27193
+ });
27194
+
27195
+ this.render('{{example-component}}');
27196
+
27197
+ this.runTask(function () {
27198
+ _this34.$('button').click();
27199
+ });
27200
+
27201
+ this.assert.equal(actionCount, 1, 'Click action only fired once.');
27202
+ this.assert.ok(this.$('button').hasClass('selected'), 'Element with action handler has properly updated it\'s conditional class');
27203
+
27204
+ this.runTask(function () {
27205
+ _this34.$('button').click();
27206
+ });
27207
+
27208
+ this.assert.equal(actionCount, 2, 'Second click action only fired once.');
27209
+ this.assert.ok(!this.$('button').hasClass('selected'), 'Element with action handler has properly updated it\'s conditional class');
27210
+ };
27211
+
27148
27212
  return _class2;
27149
27213
  })(_emberGlimmerTestsUtilsTestCase.RenderingTest));
27150
27214
  });
@@ -41294,7 +41358,7 @@ enifed('ember-metal/tests/expand_properties_test', ['exports', 'ember-metal/expa
41294
41358
  expect(1);
41295
41359
 
41296
41360
  expectAssertion(function () {
41297
- _emberMetalExpand_properties.default([], addProperty);
41361
+ _emberMetalExpand_properties.default([1, 2], addProperty);
41298
41362
  }, /A computed property key must be a string/);
41299
41363
  });
41300
41364
 
@@ -42480,7 +42544,7 @@ enifed('ember-metal/tests/meta_test', ['exports', 'ember-metal/meta'], function
42480
42544
  assert.equal(matching[0], t);
42481
42545
  m.removeFromListeners('hello', t, 'm');
42482
42546
  matching = m.matchingListeners('hello');
42483
- assert.equal(matching.length, 0);
42547
+ assert.equal(matching, undefined);
42484
42548
  });
42485
42549
 
42486
42550
  QUnit.test('meta.listeners inheritance', function (assert) {
@@ -42499,7 +42563,7 @@ enifed('ember-metal/tests/meta_test', ['exports', 'ember-metal/meta'], function
42499
42563
  assert.equal(matching[2], 0);
42500
42564
  m.removeFromListeners('hello', target, 'm');
42501
42565
  matching = m.matchingListeners('hello');
42502
- assert.equal(matching.length, 0);
42566
+ assert.equal(matching, undefined);
42503
42567
  matching = parentMeta.matchingListeners('hello');
42504
42568
  assert.equal(matching.length, 3);
42505
42569
  });
@@ -47962,6 +48026,23 @@ enifed('ember-routing/tests/location/history_location_test', ['exports', 'ember-
47962
48026
 
47963
48027
  equal(location.getURL(), '/foo/bar?time=morphin#pink-power-ranger');
47964
48028
  });
48029
+
48030
+ QUnit.test('HistoryLocation.getURL() drops duplicate slashes', function () {
48031
+ expect(1);
48032
+
48033
+ HistoryTestLocation.reopen({
48034
+ init: function () {
48035
+ this._super.apply(this, arguments);
48036
+ var location = mockBrowserLocation('//');
48037
+ location.pathname = '//'; // mockBrowserLocation does not allow for `//`, so force it
48038
+ _emberMetal.set(this, 'location', location);
48039
+ }
48040
+ });
48041
+
48042
+ createLocation();
48043
+
48044
+ equal(location.getURL(), '/');
48045
+ });
47965
48046
  });
47966
48047
  enifed('ember-routing/tests/location/history_location_test.lint-test', ['exports'], function (exports) {
47967
48048
  'use strict';
@@ -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;
@@ -6773,6 +6773,34 @@ enifed('ember-debug/tests/main_test', ['exports', 'ember-environment', 'ember-ru
6773
6773
 
6774
6774
  _emberDebugIndex.warn('foo', false, {});
6775
6775
  });
6776
+
6777
+ QUnit.test('warn without options.id nor test triggers a deprecation', function (assert) {
6778
+ assert.expect(2);
6779
+
6780
+ _emberDebugDeprecate.registerHandler(function (message) {
6781
+ assert.equal(message, _emberDebugWarn.missingOptionsIdDeprecation, 'deprecation is triggered when options is missing');
6782
+ });
6783
+
6784
+ _emberDebugWarn.registerHandler(function (message) {
6785
+ assert.equal(message, 'foo', 'original warning is triggered');
6786
+ });
6787
+
6788
+ _emberDebugIndex.warn('foo', {});
6789
+ });
6790
+
6791
+ QUnit.test('warn without test but with options does not trigger a deprecation', function (assert) {
6792
+ assert.expect(1);
6793
+
6794
+ _emberDebugDeprecate.registerHandler(function (message) {
6795
+ assert.ok(false, 'there should be no deprecation ' + message);
6796
+ });
6797
+
6798
+ _emberDebugWarn.registerHandler(function (message) {
6799
+ assert.equal(message, 'foo', 'warning was triggered');
6800
+ });
6801
+
6802
+ _emberDebugIndex.warn('foo', { id: 'ember-debug.do-not-raise' });
6803
+ });
6776
6804
  });
6777
6805
  enifed('ember-debug/tests/main_test.lint-test', ['exports'], function (exports) {
6778
6806
  'use strict';
@@ -26997,6 +27025,42 @@ babelHelpers.inherits(_class2, _RenderingTest2);
26997
27025
  this.assertText('Click me');
26998
27026
  };
26999
27027
 
27028
+ _class2.prototype['@test action handler that shifts element attributes doesn\'t trigger multiple invocations'] = function testActionHandlerThatShiftsElementAttributesDoesnTTriggerMultipleInvocations() {
27029
+ var _this34 = this;
27030
+
27031
+ var actionCount = 0;
27032
+ var ExampleComponent = _emberGlimmerTestsUtilsHelpers.Component.extend({
27033
+ selected: false,
27034
+ actions: {
27035
+ toggleSelected: function () {
27036
+ actionCount++;
27037
+ this.toggleProperty('selected');
27038
+ }
27039
+ }
27040
+ });
27041
+
27042
+ this.registerComponent('example-component', {
27043
+ ComponentClass: ExampleComponent,
27044
+ template: '<button class="{{if selected \'selected\'}}" {{action "toggleSelected"}}>Toggle Selected</button>'
27045
+ });
27046
+
27047
+ this.render('{{example-component}}');
27048
+
27049
+ this.runTask(function () {
27050
+ _this34.$('button').click();
27051
+ });
27052
+
27053
+ this.assert.equal(actionCount, 1, 'Click action only fired once.');
27054
+ this.assert.ok(this.$('button').hasClass('selected'), 'Element with action handler has properly updated it\'s conditional class');
27055
+
27056
+ this.runTask(function () {
27057
+ _this34.$('button').click();
27058
+ });
27059
+
27060
+ this.assert.equal(actionCount, 2, 'Second click action only fired once.');
27061
+ this.assert.ok(!this.$('button').hasClass('selected'), 'Element with action handler has properly updated it\'s conditional class');
27062
+ };
27063
+
27000
27064
  return _class2;
27001
27065
  })(_emberGlimmerTestsUtilsTestCase.RenderingTest));
27002
27066
  });
@@ -40916,7 +40980,7 @@ enifed('ember-metal/tests/expand_properties_test', ['exports', 'ember-metal/expa
40916
40980
  expect(1);
40917
40981
 
40918
40982
  expectAssertion(function () {
40919
- _emberMetalExpand_properties.default([], addProperty);
40983
+ _emberMetalExpand_properties.default([1, 2], addProperty);
40920
40984
  }, /A computed property key must be a string/);
40921
40985
  });
40922
40986
 
@@ -42102,7 +42166,7 @@ enifed('ember-metal/tests/meta_test', ['exports', 'ember-metal/meta'], function
42102
42166
  assert.equal(matching[0], t);
42103
42167
  m.removeFromListeners('hello', t, 'm');
42104
42168
  matching = m.matchingListeners('hello');
42105
- assert.equal(matching.length, 0);
42169
+ assert.equal(matching, undefined);
42106
42170
  });
42107
42171
 
42108
42172
  QUnit.test('meta.listeners inheritance', function (assert) {
@@ -42121,7 +42185,7 @@ enifed('ember-metal/tests/meta_test', ['exports', 'ember-metal/meta'], function
42121
42185
  assert.equal(matching[2], 0);
42122
42186
  m.removeFromListeners('hello', target, 'm');
42123
42187
  matching = m.matchingListeners('hello');
42124
- assert.equal(matching.length, 0);
42188
+ assert.equal(matching, undefined);
42125
42189
  matching = parentMeta.matchingListeners('hello');
42126
42190
  assert.equal(matching.length, 3);
42127
42191
  });
@@ -47584,6 +47648,23 @@ enifed('ember-routing/tests/location/history_location_test', ['exports', 'ember-
47584
47648
 
47585
47649
  equal(location.getURL(), '/foo/bar?time=morphin#pink-power-ranger');
47586
47650
  });
47651
+
47652
+ QUnit.test('HistoryLocation.getURL() drops duplicate slashes', function () {
47653
+ expect(1);
47654
+
47655
+ HistoryTestLocation.reopen({
47656
+ init: function () {
47657
+ this._super.apply(this, arguments);
47658
+ var location = mockBrowserLocation('//');
47659
+ location.pathname = '//'; // mockBrowserLocation does not allow for `//`, so force it
47660
+ _emberMetal.set(this, 'location', location);
47661
+ }
47662
+ });
47663
+
47664
+ createLocation();
47665
+
47666
+ equal(location.getURL(), '/');
47667
+ });
47587
47668
  });
47588
47669
  enifed('ember-routing/tests/location/history_location_test.lint-test', ['exports'], function (exports) {
47589
47670
  'use strict';
@@ -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';