ember-source 2.3.0 → 2.3.1

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.3.0
9
+ * @version 2.3.1
10
10
  */
11
11
 
12
12
  var enifed, requireModule, require, requirejs, Ember;
@@ -6,7 +6,7 @@
6
6
  * Portions Copyright 2008-2011 Apple Inc. All rights reserved.
7
7
  * @license Licensed under MIT license
8
8
  * See https://raw.github.com/emberjs/ember.js/master/LICENSE
9
- * @version 2.3.0
9
+ * @version 2.3.1
10
10
  */
11
11
 
12
12
  var enifed, requireModule, require, requirejs, Ember;
@@ -10137,7 +10137,7 @@ enifed('ember-htmlbars/keywords/outlet', ['exports', 'ember-metal/debug', 'ember
10137
10137
 
10138
10138
  'use strict';
10139
10139
 
10140
- _emberHtmlbarsTemplatesTopLevelView.default.meta.revision = 'Ember@2.3.0';
10140
+ _emberHtmlbarsTemplatesTopLevelView.default.meta.revision = 'Ember@2.3.1';
10141
10141
 
10142
10142
  /**
10143
10143
  The `{{outlet}}` helper lets you specify where a child routes will render in
@@ -14780,7 +14780,6 @@ enifed('ember-metal/computed', ['exports', 'ember-metal/debug', 'ember-metal/pro
14780
14780
  var args;
14781
14781
 
14782
14782
  var addArg = function (property) {
14783
- _emberMetalDebug.assert('Depending on arrays using a dependent key ending with `@each` is no longer supported. ' + ('Please refactor from `Ember.computed(\'' + property + '\', function() {});` to `Ember.computed(\'' + property.slice(0, -6) + '.[]\', function() {})`.'), property.slice(-5) !== '@each');
14784
14783
  args.push(property);
14785
14784
  };
14786
14785
 
@@ -15884,7 +15883,7 @@ enifed('ember-metal/core', ['exports'], function (exports) {
15884
15883
 
15885
15884
  @class Ember
15886
15885
  @static
15887
- @version 2.3.0
15886
+ @version 2.3.1
15888
15887
  @public
15889
15888
  */
15890
15889
 
@@ -15928,11 +15927,11 @@ enifed('ember-metal/core', ['exports'], function (exports) {
15928
15927
 
15929
15928
  @property VERSION
15930
15929
  @type String
15931
- @default '2.3.0'
15930
+ @default '2.3.1'
15932
15931
  @static
15933
15932
  @public
15934
15933
  */
15935
- Ember.VERSION = '2.3.0';
15934
+ Ember.VERSION = '2.3.1';
15936
15935
 
15937
15936
  /**
15938
15937
  The hash of environment variables used to control various configuration
@@ -16669,6 +16668,8 @@ enifed('ember-metal/expand_properties', ['exports', 'ember-metal/error'], functi
16669
16668
 
16670
16669
  var SPLIT_REGEX = /\{|\}/;
16671
16670
 
16671
+ var END_WITH_EACH_REGEX = /\.@each$/;
16672
+
16672
16673
  /**
16673
16674
  Expands `pattern`, invoking `callback` for each expansion.
16674
16675
 
@@ -16713,10 +16714,10 @@ enifed('ember-metal/expand_properties', ['exports', 'ember-metal/error'], functi
16713
16714
  });
16714
16715
 
16715
16716
  properties.forEach(function (property) {
16716
- callback(property.join(''));
16717
+ callback(property.join('').replace(END_WITH_EACH_REGEX, '.[]'));
16717
16718
  });
16718
16719
  } else {
16719
- callback(pattern);
16720
+ callback(pattern.replace(END_WITH_EACH_REGEX, '.[]'));
16720
16721
  }
16721
16722
  }
16722
16723
 
@@ -18595,6 +18596,7 @@ enifed('ember-metal/mixin', ['exports', 'ember-metal/core', 'ember-metal/error',
18595
18596
  exports.aliasMethod = aliasMethod;
18596
18597
  exports.observer = observer;
18597
18598
  exports._immediateObserver = _immediateObserver;
18599
+ exports._beforeObserver = _beforeObserver;
18598
18600
 
18599
18601
  function ROOT() {}
18600
18602
  ROOT.__hasSuper = false;
@@ -18918,11 +18920,13 @@ enifed('ember-metal/mixin', ['exports', 'ember-metal/core', 'ember-metal/error',
18918
18920
  var prev = obj[key];
18919
18921
 
18920
18922
  if ('function' === typeof prev) {
18923
+ updateObserversAndListeners(obj, key, prev, '__ember_observesBefore__', _emberMetalObserver._removeBeforeObserver);
18921
18924
  updateObserversAndListeners(obj, key, prev, '__ember_observes__', _emberMetalObserver.removeObserver);
18922
18925
  updateObserversAndListeners(obj, key, prev, '__ember_listens__', _emberMetalEvents.removeListener);
18923
18926
  }
18924
18927
 
18925
18928
  if ('function' === typeof observerOrListener) {
18929
+ updateObserversAndListeners(obj, key, observerOrListener, '__ember_observesBefore__', _emberMetalObserver._addBeforeObserver);
18926
18930
  updateObserversAndListeners(obj, key, observerOrListener, '__ember_observes__', _emberMetalObserver.addObserver);
18927
18931
  updateObserversAndListeners(obj, key, observerOrListener, '__ember_listens__', _emberMetalEvents.addListener);
18928
18932
  }
@@ -19361,8 +19365,6 @@ enifed('ember-metal/mixin', ['exports', 'ember-metal/core', 'ember-metal/error',
19361
19365
  var paths;
19362
19366
 
19363
19367
  var addWatchedProperty = function (path) {
19364
- _emberMetalDebug.assert('Depending on arrays using a dependent key ending with `@each` is no longer supported. ' + ('Please refactor from `Ember.observer(\'' + path + '\', function() {});` to `Ember.observer(\'' + path.slice(0, -6) + '.[]\', function() {})`.'), path.slice(-5) !== '@each');
19365
-
19366
19368
  paths.push(path);
19367
19369
  };
19368
19370
  var _paths = args.slice(0, -1);
@@ -19426,6 +19428,82 @@ enifed('ember-metal/mixin', ['exports', 'ember-metal/core', 'ember-metal/error',
19426
19428
  return observer.apply(this, arguments);
19427
19429
  }
19428
19430
 
19431
+ /**
19432
+ When observers fire, they are called with the arguments `obj`, `keyName`.
19433
+
19434
+ Note, `@each.property` observer is called per each add or replace of an element
19435
+ and it's not called with a specific enumeration item.
19436
+
19437
+ A `_beforeObserver` fires before a property changes.
19438
+
19439
+ A `_beforeObserver` is an alternative form of `.observesBefore()`.
19440
+
19441
+ ```javascript
19442
+ App.PersonView = Ember.View.extend({
19443
+ friends: [{ name: 'Tom' }, { name: 'Stefan' }, { name: 'Kris' }],
19444
+
19445
+ valueDidChange: Ember.observer('content.value', function(obj, keyName) {
19446
+ // only run if updating a value already in the DOM
19447
+ if (this.get('state') === 'inDOM') {
19448
+ var color = obj.get(keyName) > this.changingFrom ? 'green' : 'red';
19449
+ // logic
19450
+ }
19451
+ }),
19452
+
19453
+ friendsDidChange: Ember.observer('friends.@each.name', function(obj, keyName) {
19454
+ // some logic
19455
+ // obj.get(keyName) returns friends array
19456
+ })
19457
+ });
19458
+ ```
19459
+
19460
+ Also available as `Function.prototype.observesBefore` if prototype extensions are
19461
+ enabled.
19462
+
19463
+ @method beforeObserver
19464
+ @for Ember
19465
+ @param {String} propertyNames*
19466
+ @param {Function} func
19467
+ @return func
19468
+ @deprecated
19469
+ @private
19470
+ */
19471
+
19472
+ function _beforeObserver() {
19473
+ for (var _len5 = arguments.length, args = Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {
19474
+ args[_key5] = arguments[_key5];
19475
+ }
19476
+
19477
+ var func = args.slice(-1)[0];
19478
+ var paths;
19479
+
19480
+ var addWatchedProperty = function (path) {
19481
+ paths.push(path);
19482
+ };
19483
+
19484
+ var _paths = args.slice(0, -1);
19485
+
19486
+ if (typeof func !== 'function') {
19487
+ // revert to old, soft-deprecated argument ordering
19488
+
19489
+ func = args[0];
19490
+ _paths = args.slice(1);
19491
+ }
19492
+
19493
+ paths = [];
19494
+
19495
+ for (var i = 0; i < _paths.length; ++i) {
19496
+ _emberMetalExpand_properties.default(_paths[i], addWatchedProperty);
19497
+ }
19498
+
19499
+ if (typeof func !== 'function') {
19500
+ throw new _emberMetalCore.default.Error('Ember.beforeObserver called without a function');
19501
+ }
19502
+
19503
+ func.__ember_observesBefore__ = paths;
19504
+ return func;
19505
+ }
19506
+
19429
19507
  exports.IS_BINDING = IS_BINDING;
19430
19508
  exports.Mixin = Mixin;
19431
19509
  exports.required = required;
@@ -22579,6 +22657,7 @@ enifed('ember-metal/utils', ['exports'], function (exports) {
22579
22657
 
22580
22658
  superWrapper.wrappedFunction = func;
22581
22659
  superWrapper.__ember_observes__ = func.__ember_observes__;
22660
+ superWrapper.__ember_observesBefore__ = func.__ember_observesBefore__;
22582
22661
  superWrapper.__ember_listens__ = func.__ember_listens__;
22583
22662
 
22584
22663
  return superWrapper;
@@ -22958,6 +23037,7 @@ enifed('ember-metal/watching', ['exports', 'ember-metal/chains', 'ember-metal/wa
22958
23037
  'use strict';
22959
23038
 
22960
23039
  exports.isWatching = isWatching;
23040
+ exports.watcherCount = watcherCount;
22961
23041
  exports.unwatch = unwatch;
22962
23042
  exports.destroy = destroy;
22963
23043
 
@@ -22994,6 +23074,11 @@ enifed('ember-metal/watching', ['exports', 'ember-metal/chains', 'ember-metal/wa
22994
23074
  return (meta && meta.peekWatching(key)) > 0;
22995
23075
  }
22996
23076
 
23077
+ function watcherCount(obj, key) {
23078
+ var meta = _emberMetalMeta.peekMeta(obj);
23079
+ return meta && meta.peekWatching(key) || 0;
23080
+ }
23081
+
22997
23082
  watch.flushPending = _emberMetalChains.flushPendingChains;
22998
23083
 
22999
23084
  function unwatch(obj, _keyPath, m) {
@@ -25591,6 +25676,10 @@ enifed('ember-routing/system/route', ['exports', 'ember-metal/core', 'ember-meta
25591
25676
  subsequent `willTransition` actions to fire for the redirecting
25592
25677
  transition, you must first explicitly call
25593
25678
  `transition.abort()`.
25679
+ To allow the `willTransition` event to continue bubbling to the parent
25680
+ route, use `return true;`. When the `willTransition` method has a
25681
+ return value of `true` then the parent route's `willTransition` method
25682
+ will be fired, enabling "bubbling" behavior for the event.
25594
25683
  @event willTransition
25595
25684
  @param {Transition} transition
25596
25685
  @public
@@ -29675,7 +29764,7 @@ enifed('ember-routing-views/components/link-to', ['exports', 'ember-metal/logger
29675
29764
 
29676
29765
  'use strict';
29677
29766
 
29678
- _emberHtmlbarsTemplatesLinkTo.default.meta.revision = 'Ember@2.3.0';
29767
+ _emberHtmlbarsTemplatesLinkTo.default.meta.revision = 'Ember@2.3.1';
29679
29768
 
29680
29769
  /**
29681
29770
  `Ember.LinkComponent` renders an element whose `click` event triggers a
@@ -30165,7 +30254,7 @@ enifed('ember-routing-views/views/outlet', ['exports', 'ember-views/views/view',
30165
30254
 
30166
30255
  'use strict';
30167
30256
 
30168
- _emberHtmlbarsTemplatesTopLevelView.default.meta.revision = 'Ember@2.3.0';
30257
+ _emberHtmlbarsTemplatesTopLevelView.default.meta.revision = 'Ember@2.3.1';
30169
30258
 
30170
30259
  var CoreOutletView = _emberViewsViewsView.default.extend({
30171
30260
  defaultTemplate: _emberHtmlbarsTemplatesTopLevelView.default,
@@ -31398,8 +31487,6 @@ enifed('ember-runtime/ext/function', ['exports', 'ember-metal/core', 'ember-meta
31398
31487
  });
31399
31488
  // Ember.EXTEND_PROTOTYPES
31400
31489
  enifed('ember-runtime/ext/rsvp', ['exports', 'ember-metal/core', 'ember-metal/debug', 'ember-metal/logger', 'ember-metal/run_loop', 'rsvp'], function (exports, _emberMetalCore, _emberMetalDebug, _emberMetalLogger, _emberMetalRun_loop, _rsvp) {
31401
- /* globals RSVP:true */
31402
-
31403
31490
  'use strict';
31404
31491
 
31405
31492
  exports.onerrorDefault = onerrorDefault;
@@ -32676,13 +32763,10 @@ enifed('ember-runtime/mixins/controller', ['exports', 'ember-metal/mixin', 'embe
32676
32763
  For example, when a Handlebars template uses the `{{action}}` helper,
32677
32764
  it will attempt to send the action to the view's controller's `target`.
32678
32765
  By default, the value of the target property is set to the router, and
32679
- is injected when a controller is instantiated. This injection is defined
32680
- in Ember.Application#buildContainer, and is applied as part of the
32681
- applications initialization process. It can also be set after a controller
32682
- has been instantiated, for instance when using the render helper in a
32683
- template, or when a controller is used as an `itemController`. In most
32684
- cases the `target` property will automatically be set to the logical
32685
- consumer of actions for the controller.
32766
+ is injected when a controller is instantiated. This injection is applied
32767
+ as part of the application's initialization process. In most cases the
32768
+ `target` property will automatically be set to the logical consumer of
32769
+ actions for the controller.
32686
32770
  @property target
32687
32771
  @default null
32688
32772
  @public
@@ -35625,21 +35709,7 @@ enifed('ember-runtime/system/array_proxy', ['exports', 'ember-metal/debug', 'emb
35625
35709
  @type Ember.Array
35626
35710
  @private
35627
35711
  */
35628
- content: _emberMetalComputed.computed({
35629
- get: function () {
35630
- return this._content;
35631
- },
35632
- set: function (k, v) {
35633
- if (this._didInitArrayProxy) {
35634
- var oldContent = this._content;
35635
- var len = oldContent ? _emberMetalProperty_get.get(oldContent, 'length') : 0;
35636
- this.arrangedContentArrayWillChange(this, 0, len, undefined);
35637
- this.arrangedContentWillChange(this);
35638
- }
35639
- this._content = v;
35640
- return v;
35641
- }
35642
- }),
35712
+ content: null,
35643
35713
 
35644
35714
  /**
35645
35715
  The array that the proxy pretends to be. In the default `ArrayProxy`
@@ -35647,7 +35717,7 @@ enifed('ember-runtime/system/array_proxy', ['exports', 'ember-metal/debug', 'emb
35647
35717
  can override this property to provide things like sorting and filtering.
35648
35718
  @property arrangedContent
35649
35719
  @private
35650
- */
35720
+ */
35651
35721
  arrangedContent: _emberMetalAlias.default('content'),
35652
35722
 
35653
35723
  /**
@@ -35681,7 +35751,19 @@ enifed('ember-runtime/system/array_proxy', ['exports', 'ember-metal/debug', 'emb
35681
35751
  _emberMetalProperty_get.get(this, 'content').replace(idx, amt, objects);
35682
35752
  },
35683
35753
 
35684
- _teardownContent: function (content) {
35754
+ /**
35755
+ Invoked when the content property is about to change. Notifies observers that the
35756
+ entire array content will change.
35757
+ @private
35758
+ @method _contentWillChange
35759
+ */
35760
+ _contentWillChange: _emberMetalMixin._beforeObserver('content', function () {
35761
+ this._teardownContent();
35762
+ }),
35763
+
35764
+ _teardownContent: function () {
35765
+ var content = _emberMetalProperty_get.get(this, 'content');
35766
+
35685
35767
  if (content) {
35686
35768
  content.removeArrayObserver(this, {
35687
35769
  willChange: 'contentArrayWillChange',
@@ -35719,7 +35801,6 @@ enifed('ember-runtime/system/array_proxy', ['exports', 'ember-metal/debug', 'emb
35719
35801
  */
35720
35802
  _contentDidChange: _emberMetalMixin.observer('content', function () {
35721
35803
  var content = _emberMetalProperty_get.get(this, 'content');
35722
- this._teardownContent(this._prevContent);
35723
35804
 
35724
35805
  _emberMetalDebug.assert('Can\'t set ArrayProxy\'s content to itself', content !== this);
35725
35806
 
@@ -35728,7 +35809,6 @@ enifed('ember-runtime/system/array_proxy', ['exports', 'ember-metal/debug', 'emb
35728
35809
 
35729
35810
  _setupContent: function () {
35730
35811
  var content = _emberMetalProperty_get.get(this, 'content');
35731
- this._prevContent = content;
35732
35812
 
35733
35813
  if (content) {
35734
35814
  _emberMetalDebug.assert('ArrayProxy expects an Array or Ember.ArrayProxy, but you passed ' + typeof content, _emberRuntimeUtils.isArray(content) || content.isDestroyed);
@@ -35740,8 +35820,17 @@ enifed('ember-runtime/system/array_proxy', ['exports', 'ember-metal/debug', 'emb
35740
35820
  }
35741
35821
  },
35742
35822
 
35823
+ _arrangedContentWillChange: _emberMetalMixin._beforeObserver('arrangedContent', function () {
35824
+ var arrangedContent = _emberMetalProperty_get.get(this, 'arrangedContent');
35825
+ var len = arrangedContent ? _emberMetalProperty_get.get(arrangedContent, 'length') : 0;
35826
+
35827
+ this.arrangedContentArrayWillChange(this, 0, len, undefined);
35828
+ this.arrangedContentWillChange(this);
35829
+
35830
+ this._teardownArrangedContent(arrangedContent);
35831
+ }),
35832
+
35743
35833
  _arrangedContentDidChange: _emberMetalMixin.observer('arrangedContent', function () {
35744
- this._teardownArrangedContent(this._prevArrangedContent);
35745
35834
  var arrangedContent = _emberMetalProperty_get.get(this, 'arrangedContent');
35746
35835
  var len = arrangedContent ? _emberMetalProperty_get.get(arrangedContent, 'length') : 0;
35747
35836
 
@@ -35755,7 +35844,6 @@ enifed('ember-runtime/system/array_proxy', ['exports', 'ember-metal/debug', 'emb
35755
35844
 
35756
35845
  _setupArrangedContent: function () {
35757
35846
  var arrangedContent = _emberMetalProperty_get.get(this, 'arrangedContent');
35758
- this._prevArrangedContent = arrangedContent;
35759
35847
 
35760
35848
  if (arrangedContent) {
35761
35849
  _emberMetalDebug.assert('ArrayProxy expects an Array or Ember.ArrayProxy, but you passed ' + typeof arrangedContent, _emberRuntimeUtils.isArray(arrangedContent) || arrangedContent.isDestroyed);
@@ -35909,7 +35997,6 @@ enifed('ember-runtime/system/array_proxy', ['exports', 'ember-metal/debug', 'emb
35909
35997
  },
35910
35998
 
35911
35999
  init: function () {
35912
- this._didInitArrayProxy = true;
35913
36000
  this._super.apply(this, arguments);
35914
36001
  this._setupContent();
35915
36002
  this._setupArrangedContent();
@@ -35917,7 +36004,7 @@ enifed('ember-runtime/system/array_proxy', ['exports', 'ember-metal/debug', 'emb
35917
36004
 
35918
36005
  willDestroy: function () {
35919
36006
  this._teardownArrangedContent();
35920
- this._teardownContent(this.get('content'));
36007
+ this._teardownContent();
35921
36008
  }
35922
36009
  });
35923
36010
 
@@ -39108,7 +39195,7 @@ enifed('ember-template-compiler/system/compile_options', ['exports', 'ember-meta
39108
39195
  options.buildMeta = function buildMeta(program) {
39109
39196
  return {
39110
39197
  fragmentReason: fragmentReason(program),
39111
- revision: 'Ember@2.3.0',
39198
+ revision: 'Ember@2.3.1',
39112
39199
  loc: program.loc,
39113
39200
  moduleName: options.moduleName
39114
39201
  };
@@ -40606,7 +40693,7 @@ enifed('ember-views/component_lookup', ['exports', 'ember-metal/core', 'ember-me
40606
40693
  }
40607
40694
  });
40608
40695
  });
40609
- enifed('ember-views/components/component', ['exports', 'ember-metal/debug', 'ember-runtime/mixins/target_action_support', 'ember-views/views/view', 'ember-metal/property_get', 'ember-metal/property_set', 'ember-metal/is_none', 'ember-metal/utils', 'ember-metal/computed', 'ember-views/compat/attrs-proxy', 'container/owner'], function (exports, _emberMetalDebug, _emberRuntimeMixinsTarget_action_support, _emberViewsViewsView, _emberMetalProperty_get, _emberMetalProperty_set, _emberMetalIs_none, _emberMetalUtils, _emberMetalComputed, _emberViewsCompatAttrsProxy, _containerOwner) {
40696
+ enifed('ember-views/components/component', ['exports', 'ember-metal/debug', 'ember-metal/environment', 'ember-runtime/mixins/target_action_support', 'ember-views/views/view', 'ember-metal/property_get', 'ember-metal/property_set', 'ember-metal/is_none', 'ember-metal/utils', 'ember-metal/computed', 'ember-views/compat/attrs-proxy', 'container/owner'], function (exports, _emberMetalDebug, _emberMetalEnvironment, _emberRuntimeMixinsTarget_action_support, _emberViewsViewsView, _emberMetalProperty_get, _emberMetalProperty_set, _emberMetalIs_none, _emberMetalUtils, _emberMetalComputed, _emberViewsCompatAttrsProxy, _containerOwner) {
40610
40697
  'use strict';
40611
40698
 
40612
40699
  function validateAction(component, actionName) {
@@ -40751,7 +40838,7 @@ enifed('ember-views/components/component', ['exports', 'ember-metal/debug', 'emb
40751
40838
  }
40752
40839
 
40753
40840
  // If in a tagless component, assert that no event handlers are defined
40754
- _emberMetalDebug.assert('You can not define a function that handles DOM events in the `' + this + '` tagless component since it doesn\'t have any DOM element.', this.tagName !== '' || !(function () {
40841
+ _emberMetalDebug.assert('You can not define a function that handles DOM events in the `' + this + '` tagless component since it doesn\'t have any DOM element.', this.tagName !== '' || !_emberMetalEnvironment.default.hasDOM || !(function () {
40755
40842
  var eventDispatcher = _containerOwner.getOwner(_this).lookup('event_dispatcher:main');
40756
40843
  var events = eventDispatcher && eventDispatcher._finalEvents || {};
40757
40844
 
@@ -43466,7 +43553,7 @@ enifed('ember-views/system/build-component-template', ['exports', 'ember-metal/d
43466
43553
  })());
43467
43554
  }
43468
43555
  });
43469
- enifed('ember-views/system/event_dispatcher', ['exports', 'ember-metal/debug', 'ember-metal/property_get', 'ember-metal/property_set', 'ember-metal/is_none', 'ember-metal/run_loop', 'ember-runtime/system/object', 'ember-views/system/jquery', 'ember-views/system/action_manager', 'ember-views/views/view', 'ember-metal/assign', 'container/owner'], function (exports, _emberMetalDebug, _emberMetalProperty_get, _emberMetalProperty_set, _emberMetalIs_none, _emberMetalRun_loop, _emberRuntimeSystemObject, _emberViewsSystemJquery, _emberViewsSystemAction_manager, _emberViewsViewsView, _emberMetalAssign, _containerOwner) {
43556
+ enifed('ember-views/system/event_dispatcher', ['exports', 'ember-metal/debug', 'ember-metal/property_get', 'ember-metal/property_set', 'ember-metal/is_none', 'ember-metal/run_loop', 'ember-runtime/system/object', 'ember-views/system/jquery', 'ember-views/system/action_manager', 'ember-views/views/view', 'ember-metal/assign', 'container/owner', 'ember-metal/environment'], function (exports, _emberMetalDebug, _emberMetalProperty_get, _emberMetalProperty_set, _emberMetalIs_none, _emberMetalRun_loop, _emberRuntimeSystemObject, _emberViewsSystemJquery, _emberViewsSystemAction_manager, _emberViewsViewsView, _emberMetalAssign, _containerOwner, _emberMetalEnvironment) {
43470
43557
  /**
43471
43558
  @module ember
43472
43559
  @submodule ember-views
@@ -43585,6 +43672,11 @@ enifed('ember-views/system/event_dispatcher', ['exports', 'ember-metal/debug', '
43585
43672
  */
43586
43673
  canDispatchToEventManager: true,
43587
43674
 
43675
+ init: function () {
43676
+ this._super();
43677
+ _emberMetalDebug.assert('EventDispatcher should never be instantiated in fastboot mode. Please report this as an Ember bug.', _emberMetalEnvironment.default.hasDOM);
43678
+ },
43679
+
43588
43680
  /**
43589
43681
  Sets up event listeners for standard browser events.
43590
43682
  This will be called after the browser sends a `DOMContentReady` event. By
@@ -44396,7 +44488,7 @@ enifed('ember-views/views/collection_view', ['exports', 'ember-metal/core', 'emb
44396
44488
  enifed('ember-views/views/container_view', ['exports', 'ember-metal/core', 'ember-metal/debug', 'ember-runtime/mixins/mutable_array', 'ember-runtime/system/native_array', 'ember-views/views/view', 'ember-metal/property_get', 'ember-metal/property_set', 'ember-metal/mixin', 'ember-metal/events', 'ember-htmlbars/templates/container-view'], function (exports, _emberMetalCore, _emberMetalDebug, _emberRuntimeMixinsMutable_array, _emberRuntimeSystemNative_array, _emberViewsViewsView, _emberMetalProperty_get, _emberMetalProperty_set, _emberMetalMixin, _emberMetalEvents, _emberHtmlbarsTemplatesContainerView) {
44397
44489
  'use strict';
44398
44490
 
44399
- _emberHtmlbarsTemplatesContainerView.default.meta.revision = 'Ember@2.3.0';
44491
+ _emberHtmlbarsTemplatesContainerView.default.meta.revision = 'Ember@2.3.1';
44400
44492
 
44401
44493
  /**
44402
44494
  @module ember
@@ -49361,8 +49453,16 @@ enifed("morph-attr", ["exports", "morph-attr/sanitize-attribute-value", "dom-hel
49361
49453
 
49362
49454
  function updateProperty(value) {
49363
49455
  if (this._renderedInitially === true || !_domHelperProp.isAttrRemovalValue(value)) {
49364
- // do not render if initial value is undefined or null
49365
- this.domHelper.setPropertyStrict(this.element, this.attrName, value);
49456
+ var element = this.element;
49457
+ var attrName = this.attrName;
49458
+
49459
+ if (attrName === 'value' && element.tagName === 'INPUT' && element.value === value) {
49460
+ // Do nothing. Attempts to avoid accidently changing the input cursor location.
49461
+ // See https://github.com/tildeio/htmlbars/pull/447 for more details.
49462
+ } else {
49463
+ // do not render if initial value is undefined or null
49464
+ this.domHelper.setPropertyStrict(element, attrName, value);
49465
+ }
49366
49466
  }
49367
49467
 
49368
49468
  this._renderedInitially = true;
@@ -6,7 +6,7 @@
6
6
  * Portions Copyright 2008-2011 Apple Inc. All rights reserved.
7
7
  * @license Licensed under MIT license
8
8
  * See https://raw.github.com/emberjs/ember.js/master/LICENSE
9
- * @version 2.3.0
9
+ * @version 2.3.1
10
10
  */
11
11
 
12
12
  var enifed, requireModule, require, requirejs, Ember;
@@ -10137,7 +10137,7 @@ enifed('ember-htmlbars/keywords/outlet', ['exports', 'ember-metal/debug', 'ember
10137
10137
 
10138
10138
  'use strict';
10139
10139
 
10140
- _emberHtmlbarsTemplatesTopLevelView.default.meta.revision = 'Ember@2.3.0';
10140
+ _emberHtmlbarsTemplatesTopLevelView.default.meta.revision = 'Ember@2.3.1';
10141
10141
 
10142
10142
  /**
10143
10143
  The `{{outlet}}` helper lets you specify where a child routes will render in
@@ -14780,7 +14780,6 @@ enifed('ember-metal/computed', ['exports', 'ember-metal/debug', 'ember-metal/pro
14780
14780
  var args;
14781
14781
 
14782
14782
  var addArg = function (property) {
14783
- _emberMetalDebug.assert('Depending on arrays using a dependent key ending with `@each` is no longer supported. ' + ('Please refactor from `Ember.computed(\'' + property + '\', function() {});` to `Ember.computed(\'' + property.slice(0, -6) + '.[]\', function() {})`.'), property.slice(-5) !== '@each');
14784
14783
  args.push(property);
14785
14784
  };
14786
14785
 
@@ -15884,7 +15883,7 @@ enifed('ember-metal/core', ['exports'], function (exports) {
15884
15883
 
15885
15884
  @class Ember
15886
15885
  @static
15887
- @version 2.3.0
15886
+ @version 2.3.1
15888
15887
  @public
15889
15888
  */
15890
15889
 
@@ -15928,11 +15927,11 @@ enifed('ember-metal/core', ['exports'], function (exports) {
15928
15927
 
15929
15928
  @property VERSION
15930
15929
  @type String
15931
- @default '2.3.0'
15930
+ @default '2.3.1'
15932
15931
  @static
15933
15932
  @public
15934
15933
  */
15935
- Ember.VERSION = '2.3.0';
15934
+ Ember.VERSION = '2.3.1';
15936
15935
 
15937
15936
  /**
15938
15937
  The hash of environment variables used to control various configuration
@@ -16669,6 +16668,8 @@ enifed('ember-metal/expand_properties', ['exports', 'ember-metal/error'], functi
16669
16668
 
16670
16669
  var SPLIT_REGEX = /\{|\}/;
16671
16670
 
16671
+ var END_WITH_EACH_REGEX = /\.@each$/;
16672
+
16672
16673
  /**
16673
16674
  Expands `pattern`, invoking `callback` for each expansion.
16674
16675
 
@@ -16713,10 +16714,10 @@ enifed('ember-metal/expand_properties', ['exports', 'ember-metal/error'], functi
16713
16714
  });
16714
16715
 
16715
16716
  properties.forEach(function (property) {
16716
- callback(property.join(''));
16717
+ callback(property.join('').replace(END_WITH_EACH_REGEX, '.[]'));
16717
16718
  });
16718
16719
  } else {
16719
- callback(pattern);
16720
+ callback(pattern.replace(END_WITH_EACH_REGEX, '.[]'));
16720
16721
  }
16721
16722
  }
16722
16723
 
@@ -18595,6 +18596,7 @@ enifed('ember-metal/mixin', ['exports', 'ember-metal/core', 'ember-metal/error',
18595
18596
  exports.aliasMethod = aliasMethod;
18596
18597
  exports.observer = observer;
18597
18598
  exports._immediateObserver = _immediateObserver;
18599
+ exports._beforeObserver = _beforeObserver;
18598
18600
 
18599
18601
  function ROOT() {}
18600
18602
  ROOT.__hasSuper = false;
@@ -18918,11 +18920,13 @@ enifed('ember-metal/mixin', ['exports', 'ember-metal/core', 'ember-metal/error',
18918
18920
  var prev = obj[key];
18919
18921
 
18920
18922
  if ('function' === typeof prev) {
18923
+ updateObserversAndListeners(obj, key, prev, '__ember_observesBefore__', _emberMetalObserver._removeBeforeObserver);
18921
18924
  updateObserversAndListeners(obj, key, prev, '__ember_observes__', _emberMetalObserver.removeObserver);
18922
18925
  updateObserversAndListeners(obj, key, prev, '__ember_listens__', _emberMetalEvents.removeListener);
18923
18926
  }
18924
18927
 
18925
18928
  if ('function' === typeof observerOrListener) {
18929
+ updateObserversAndListeners(obj, key, observerOrListener, '__ember_observesBefore__', _emberMetalObserver._addBeforeObserver);
18926
18930
  updateObserversAndListeners(obj, key, observerOrListener, '__ember_observes__', _emberMetalObserver.addObserver);
18927
18931
  updateObserversAndListeners(obj, key, observerOrListener, '__ember_listens__', _emberMetalEvents.addListener);
18928
18932
  }
@@ -19361,8 +19365,6 @@ enifed('ember-metal/mixin', ['exports', 'ember-metal/core', 'ember-metal/error',
19361
19365
  var paths;
19362
19366
 
19363
19367
  var addWatchedProperty = function (path) {
19364
- _emberMetalDebug.assert('Depending on arrays using a dependent key ending with `@each` is no longer supported. ' + ('Please refactor from `Ember.observer(\'' + path + '\', function() {});` to `Ember.observer(\'' + path.slice(0, -6) + '.[]\', function() {})`.'), path.slice(-5) !== '@each');
19365
-
19366
19368
  paths.push(path);
19367
19369
  };
19368
19370
  var _paths = args.slice(0, -1);
@@ -19426,6 +19428,82 @@ enifed('ember-metal/mixin', ['exports', 'ember-metal/core', 'ember-metal/error',
19426
19428
  return observer.apply(this, arguments);
19427
19429
  }
19428
19430
 
19431
+ /**
19432
+ When observers fire, they are called with the arguments `obj`, `keyName`.
19433
+
19434
+ Note, `@each.property` observer is called per each add or replace of an element
19435
+ and it's not called with a specific enumeration item.
19436
+
19437
+ A `_beforeObserver` fires before a property changes.
19438
+
19439
+ A `_beforeObserver` is an alternative form of `.observesBefore()`.
19440
+
19441
+ ```javascript
19442
+ App.PersonView = Ember.View.extend({
19443
+ friends: [{ name: 'Tom' }, { name: 'Stefan' }, { name: 'Kris' }],
19444
+
19445
+ valueDidChange: Ember.observer('content.value', function(obj, keyName) {
19446
+ // only run if updating a value already in the DOM
19447
+ if (this.get('state') === 'inDOM') {
19448
+ var color = obj.get(keyName) > this.changingFrom ? 'green' : 'red';
19449
+ // logic
19450
+ }
19451
+ }),
19452
+
19453
+ friendsDidChange: Ember.observer('friends.@each.name', function(obj, keyName) {
19454
+ // some logic
19455
+ // obj.get(keyName) returns friends array
19456
+ })
19457
+ });
19458
+ ```
19459
+
19460
+ Also available as `Function.prototype.observesBefore` if prototype extensions are
19461
+ enabled.
19462
+
19463
+ @method beforeObserver
19464
+ @for Ember
19465
+ @param {String} propertyNames*
19466
+ @param {Function} func
19467
+ @return func
19468
+ @deprecated
19469
+ @private
19470
+ */
19471
+
19472
+ function _beforeObserver() {
19473
+ for (var _len5 = arguments.length, args = Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {
19474
+ args[_key5] = arguments[_key5];
19475
+ }
19476
+
19477
+ var func = args.slice(-1)[0];
19478
+ var paths;
19479
+
19480
+ var addWatchedProperty = function (path) {
19481
+ paths.push(path);
19482
+ };
19483
+
19484
+ var _paths = args.slice(0, -1);
19485
+
19486
+ if (typeof func !== 'function') {
19487
+ // revert to old, soft-deprecated argument ordering
19488
+
19489
+ func = args[0];
19490
+ _paths = args.slice(1);
19491
+ }
19492
+
19493
+ paths = [];
19494
+
19495
+ for (var i = 0; i < _paths.length; ++i) {
19496
+ _emberMetalExpand_properties.default(_paths[i], addWatchedProperty);
19497
+ }
19498
+
19499
+ if (typeof func !== 'function') {
19500
+ throw new _emberMetalCore.default.Error('Ember.beforeObserver called without a function');
19501
+ }
19502
+
19503
+ func.__ember_observesBefore__ = paths;
19504
+ return func;
19505
+ }
19506
+
19429
19507
  exports.IS_BINDING = IS_BINDING;
19430
19508
  exports.Mixin = Mixin;
19431
19509
  exports.required = required;
@@ -22579,6 +22657,7 @@ enifed('ember-metal/utils', ['exports'], function (exports) {
22579
22657
 
22580
22658
  superWrapper.wrappedFunction = func;
22581
22659
  superWrapper.__ember_observes__ = func.__ember_observes__;
22660
+ superWrapper.__ember_observesBefore__ = func.__ember_observesBefore__;
22582
22661
  superWrapper.__ember_listens__ = func.__ember_listens__;
22583
22662
 
22584
22663
  return superWrapper;
@@ -22958,6 +23037,7 @@ enifed('ember-metal/watching', ['exports', 'ember-metal/chains', 'ember-metal/wa
22958
23037
  'use strict';
22959
23038
 
22960
23039
  exports.isWatching = isWatching;
23040
+ exports.watcherCount = watcherCount;
22961
23041
  exports.unwatch = unwatch;
22962
23042
  exports.destroy = destroy;
22963
23043
 
@@ -22994,6 +23074,11 @@ enifed('ember-metal/watching', ['exports', 'ember-metal/chains', 'ember-metal/wa
22994
23074
  return (meta && meta.peekWatching(key)) > 0;
22995
23075
  }
22996
23076
 
23077
+ function watcherCount(obj, key) {
23078
+ var meta = _emberMetalMeta.peekMeta(obj);
23079
+ return meta && meta.peekWatching(key) || 0;
23080
+ }
23081
+
22997
23082
  watch.flushPending = _emberMetalChains.flushPendingChains;
22998
23083
 
22999
23084
  function unwatch(obj, _keyPath, m) {
@@ -25591,6 +25676,10 @@ enifed('ember-routing/system/route', ['exports', 'ember-metal/core', 'ember-meta
25591
25676
  subsequent `willTransition` actions to fire for the redirecting
25592
25677
  transition, you must first explicitly call
25593
25678
  `transition.abort()`.
25679
+ To allow the `willTransition` event to continue bubbling to the parent
25680
+ route, use `return true;`. When the `willTransition` method has a
25681
+ return value of `true` then the parent route's `willTransition` method
25682
+ will be fired, enabling "bubbling" behavior for the event.
25594
25683
  @event willTransition
25595
25684
  @param {Transition} transition
25596
25685
  @public
@@ -29675,7 +29764,7 @@ enifed('ember-routing-views/components/link-to', ['exports', 'ember-metal/logger
29675
29764
 
29676
29765
  'use strict';
29677
29766
 
29678
- _emberHtmlbarsTemplatesLinkTo.default.meta.revision = 'Ember@2.3.0';
29767
+ _emberHtmlbarsTemplatesLinkTo.default.meta.revision = 'Ember@2.3.1';
29679
29768
 
29680
29769
  /**
29681
29770
  `Ember.LinkComponent` renders an element whose `click` event triggers a
@@ -30165,7 +30254,7 @@ enifed('ember-routing-views/views/outlet', ['exports', 'ember-views/views/view',
30165
30254
 
30166
30255
  'use strict';
30167
30256
 
30168
- _emberHtmlbarsTemplatesTopLevelView.default.meta.revision = 'Ember@2.3.0';
30257
+ _emberHtmlbarsTemplatesTopLevelView.default.meta.revision = 'Ember@2.3.1';
30169
30258
 
30170
30259
  var CoreOutletView = _emberViewsViewsView.default.extend({
30171
30260
  defaultTemplate: _emberHtmlbarsTemplatesTopLevelView.default,
@@ -31398,8 +31487,6 @@ enifed('ember-runtime/ext/function', ['exports', 'ember-metal/core', 'ember-meta
31398
31487
  });
31399
31488
  // Ember.EXTEND_PROTOTYPES
31400
31489
  enifed('ember-runtime/ext/rsvp', ['exports', 'ember-metal/core', 'ember-metal/debug', 'ember-metal/logger', 'ember-metal/run_loop', 'rsvp'], function (exports, _emberMetalCore, _emberMetalDebug, _emberMetalLogger, _emberMetalRun_loop, _rsvp) {
31401
- /* globals RSVP:true */
31402
-
31403
31490
  'use strict';
31404
31491
 
31405
31492
  exports.onerrorDefault = onerrorDefault;
@@ -32676,13 +32763,10 @@ enifed('ember-runtime/mixins/controller', ['exports', 'ember-metal/mixin', 'embe
32676
32763
  For example, when a Handlebars template uses the `{{action}}` helper,
32677
32764
  it will attempt to send the action to the view's controller's `target`.
32678
32765
  By default, the value of the target property is set to the router, and
32679
- is injected when a controller is instantiated. This injection is defined
32680
- in Ember.Application#buildContainer, and is applied as part of the
32681
- applications initialization process. It can also be set after a controller
32682
- has been instantiated, for instance when using the render helper in a
32683
- template, or when a controller is used as an `itemController`. In most
32684
- cases the `target` property will automatically be set to the logical
32685
- consumer of actions for the controller.
32766
+ is injected when a controller is instantiated. This injection is applied
32767
+ as part of the application's initialization process. In most cases the
32768
+ `target` property will automatically be set to the logical consumer of
32769
+ actions for the controller.
32686
32770
  @property target
32687
32771
  @default null
32688
32772
  @public
@@ -35625,21 +35709,7 @@ enifed('ember-runtime/system/array_proxy', ['exports', 'ember-metal/debug', 'emb
35625
35709
  @type Ember.Array
35626
35710
  @private
35627
35711
  */
35628
- content: _emberMetalComputed.computed({
35629
- get: function () {
35630
- return this._content;
35631
- },
35632
- set: function (k, v) {
35633
- if (this._didInitArrayProxy) {
35634
- var oldContent = this._content;
35635
- var len = oldContent ? _emberMetalProperty_get.get(oldContent, 'length') : 0;
35636
- this.arrangedContentArrayWillChange(this, 0, len, undefined);
35637
- this.arrangedContentWillChange(this);
35638
- }
35639
- this._content = v;
35640
- return v;
35641
- }
35642
- }),
35712
+ content: null,
35643
35713
 
35644
35714
  /**
35645
35715
  The array that the proxy pretends to be. In the default `ArrayProxy`
@@ -35647,7 +35717,7 @@ enifed('ember-runtime/system/array_proxy', ['exports', 'ember-metal/debug', 'emb
35647
35717
  can override this property to provide things like sorting and filtering.
35648
35718
  @property arrangedContent
35649
35719
  @private
35650
- */
35720
+ */
35651
35721
  arrangedContent: _emberMetalAlias.default('content'),
35652
35722
 
35653
35723
  /**
@@ -35681,7 +35751,19 @@ enifed('ember-runtime/system/array_proxy', ['exports', 'ember-metal/debug', 'emb
35681
35751
  _emberMetalProperty_get.get(this, 'content').replace(idx, amt, objects);
35682
35752
  },
35683
35753
 
35684
- _teardownContent: function (content) {
35754
+ /**
35755
+ Invoked when the content property is about to change. Notifies observers that the
35756
+ entire array content will change.
35757
+ @private
35758
+ @method _contentWillChange
35759
+ */
35760
+ _contentWillChange: _emberMetalMixin._beforeObserver('content', function () {
35761
+ this._teardownContent();
35762
+ }),
35763
+
35764
+ _teardownContent: function () {
35765
+ var content = _emberMetalProperty_get.get(this, 'content');
35766
+
35685
35767
  if (content) {
35686
35768
  content.removeArrayObserver(this, {
35687
35769
  willChange: 'contentArrayWillChange',
@@ -35719,7 +35801,6 @@ enifed('ember-runtime/system/array_proxy', ['exports', 'ember-metal/debug', 'emb
35719
35801
  */
35720
35802
  _contentDidChange: _emberMetalMixin.observer('content', function () {
35721
35803
  var content = _emberMetalProperty_get.get(this, 'content');
35722
- this._teardownContent(this._prevContent);
35723
35804
 
35724
35805
  _emberMetalDebug.assert('Can\'t set ArrayProxy\'s content to itself', content !== this);
35725
35806
 
@@ -35728,7 +35809,6 @@ enifed('ember-runtime/system/array_proxy', ['exports', 'ember-metal/debug', 'emb
35728
35809
 
35729
35810
  _setupContent: function () {
35730
35811
  var content = _emberMetalProperty_get.get(this, 'content');
35731
- this._prevContent = content;
35732
35812
 
35733
35813
  if (content) {
35734
35814
  _emberMetalDebug.assert('ArrayProxy expects an Array or Ember.ArrayProxy, but you passed ' + typeof content, _emberRuntimeUtils.isArray(content) || content.isDestroyed);
@@ -35740,8 +35820,17 @@ enifed('ember-runtime/system/array_proxy', ['exports', 'ember-metal/debug', 'emb
35740
35820
  }
35741
35821
  },
35742
35822
 
35823
+ _arrangedContentWillChange: _emberMetalMixin._beforeObserver('arrangedContent', function () {
35824
+ var arrangedContent = _emberMetalProperty_get.get(this, 'arrangedContent');
35825
+ var len = arrangedContent ? _emberMetalProperty_get.get(arrangedContent, 'length') : 0;
35826
+
35827
+ this.arrangedContentArrayWillChange(this, 0, len, undefined);
35828
+ this.arrangedContentWillChange(this);
35829
+
35830
+ this._teardownArrangedContent(arrangedContent);
35831
+ }),
35832
+
35743
35833
  _arrangedContentDidChange: _emberMetalMixin.observer('arrangedContent', function () {
35744
- this._teardownArrangedContent(this._prevArrangedContent);
35745
35834
  var arrangedContent = _emberMetalProperty_get.get(this, 'arrangedContent');
35746
35835
  var len = arrangedContent ? _emberMetalProperty_get.get(arrangedContent, 'length') : 0;
35747
35836
 
@@ -35755,7 +35844,6 @@ enifed('ember-runtime/system/array_proxy', ['exports', 'ember-metal/debug', 'emb
35755
35844
 
35756
35845
  _setupArrangedContent: function () {
35757
35846
  var arrangedContent = _emberMetalProperty_get.get(this, 'arrangedContent');
35758
- this._prevArrangedContent = arrangedContent;
35759
35847
 
35760
35848
  if (arrangedContent) {
35761
35849
  _emberMetalDebug.assert('ArrayProxy expects an Array or Ember.ArrayProxy, but you passed ' + typeof arrangedContent, _emberRuntimeUtils.isArray(arrangedContent) || arrangedContent.isDestroyed);
@@ -35909,7 +35997,6 @@ enifed('ember-runtime/system/array_proxy', ['exports', 'ember-metal/debug', 'emb
35909
35997
  },
35910
35998
 
35911
35999
  init: function () {
35912
- this._didInitArrayProxy = true;
35913
36000
  this._super.apply(this, arguments);
35914
36001
  this._setupContent();
35915
36002
  this._setupArrangedContent();
@@ -35917,7 +36004,7 @@ enifed('ember-runtime/system/array_proxy', ['exports', 'ember-metal/debug', 'emb
35917
36004
 
35918
36005
  willDestroy: function () {
35919
36006
  this._teardownArrangedContent();
35920
- this._teardownContent(this.get('content'));
36007
+ this._teardownContent();
35921
36008
  }
35922
36009
  });
35923
36010
 
@@ -39108,7 +39195,7 @@ enifed('ember-template-compiler/system/compile_options', ['exports', 'ember-meta
39108
39195
  options.buildMeta = function buildMeta(program) {
39109
39196
  return {
39110
39197
  fragmentReason: fragmentReason(program),
39111
- revision: 'Ember@2.3.0',
39198
+ revision: 'Ember@2.3.1',
39112
39199
  loc: program.loc,
39113
39200
  moduleName: options.moduleName
39114
39201
  };
@@ -40606,7 +40693,7 @@ enifed('ember-views/component_lookup', ['exports', 'ember-metal/core', 'ember-me
40606
40693
  }
40607
40694
  });
40608
40695
  });
40609
- enifed('ember-views/components/component', ['exports', 'ember-metal/debug', 'ember-runtime/mixins/target_action_support', 'ember-views/views/view', 'ember-metal/property_get', 'ember-metal/property_set', 'ember-metal/is_none', 'ember-metal/utils', 'ember-metal/computed', 'ember-views/compat/attrs-proxy', 'container/owner'], function (exports, _emberMetalDebug, _emberRuntimeMixinsTarget_action_support, _emberViewsViewsView, _emberMetalProperty_get, _emberMetalProperty_set, _emberMetalIs_none, _emberMetalUtils, _emberMetalComputed, _emberViewsCompatAttrsProxy, _containerOwner) {
40696
+ enifed('ember-views/components/component', ['exports', 'ember-metal/debug', 'ember-metal/environment', 'ember-runtime/mixins/target_action_support', 'ember-views/views/view', 'ember-metal/property_get', 'ember-metal/property_set', 'ember-metal/is_none', 'ember-metal/utils', 'ember-metal/computed', 'ember-views/compat/attrs-proxy', 'container/owner'], function (exports, _emberMetalDebug, _emberMetalEnvironment, _emberRuntimeMixinsTarget_action_support, _emberViewsViewsView, _emberMetalProperty_get, _emberMetalProperty_set, _emberMetalIs_none, _emberMetalUtils, _emberMetalComputed, _emberViewsCompatAttrsProxy, _containerOwner) {
40610
40697
  'use strict';
40611
40698
 
40612
40699
  function validateAction(component, actionName) {
@@ -40751,7 +40838,7 @@ enifed('ember-views/components/component', ['exports', 'ember-metal/debug', 'emb
40751
40838
  }
40752
40839
 
40753
40840
  // If in a tagless component, assert that no event handlers are defined
40754
- _emberMetalDebug.assert('You can not define a function that handles DOM events in the `' + this + '` tagless component since it doesn\'t have any DOM element.', this.tagName !== '' || !(function () {
40841
+ _emberMetalDebug.assert('You can not define a function that handles DOM events in the `' + this + '` tagless component since it doesn\'t have any DOM element.', this.tagName !== '' || !_emberMetalEnvironment.default.hasDOM || !(function () {
40755
40842
  var eventDispatcher = _containerOwner.getOwner(_this).lookup('event_dispatcher:main');
40756
40843
  var events = eventDispatcher && eventDispatcher._finalEvents || {};
40757
40844
 
@@ -43466,7 +43553,7 @@ enifed('ember-views/system/build-component-template', ['exports', 'ember-metal/d
43466
43553
  })());
43467
43554
  }
43468
43555
  });
43469
- enifed('ember-views/system/event_dispatcher', ['exports', 'ember-metal/debug', 'ember-metal/property_get', 'ember-metal/property_set', 'ember-metal/is_none', 'ember-metal/run_loop', 'ember-runtime/system/object', 'ember-views/system/jquery', 'ember-views/system/action_manager', 'ember-views/views/view', 'ember-metal/assign', 'container/owner'], function (exports, _emberMetalDebug, _emberMetalProperty_get, _emberMetalProperty_set, _emberMetalIs_none, _emberMetalRun_loop, _emberRuntimeSystemObject, _emberViewsSystemJquery, _emberViewsSystemAction_manager, _emberViewsViewsView, _emberMetalAssign, _containerOwner) {
43556
+ enifed('ember-views/system/event_dispatcher', ['exports', 'ember-metal/debug', 'ember-metal/property_get', 'ember-metal/property_set', 'ember-metal/is_none', 'ember-metal/run_loop', 'ember-runtime/system/object', 'ember-views/system/jquery', 'ember-views/system/action_manager', 'ember-views/views/view', 'ember-metal/assign', 'container/owner', 'ember-metal/environment'], function (exports, _emberMetalDebug, _emberMetalProperty_get, _emberMetalProperty_set, _emberMetalIs_none, _emberMetalRun_loop, _emberRuntimeSystemObject, _emberViewsSystemJquery, _emberViewsSystemAction_manager, _emberViewsViewsView, _emberMetalAssign, _containerOwner, _emberMetalEnvironment) {
43470
43557
  /**
43471
43558
  @module ember
43472
43559
  @submodule ember-views
@@ -43585,6 +43672,11 @@ enifed('ember-views/system/event_dispatcher', ['exports', 'ember-metal/debug', '
43585
43672
  */
43586
43673
  canDispatchToEventManager: true,
43587
43674
 
43675
+ init: function () {
43676
+ this._super();
43677
+ _emberMetalDebug.assert('EventDispatcher should never be instantiated in fastboot mode. Please report this as an Ember bug.', _emberMetalEnvironment.default.hasDOM);
43678
+ },
43679
+
43588
43680
  /**
43589
43681
  Sets up event listeners for standard browser events.
43590
43682
  This will be called after the browser sends a `DOMContentReady` event. By
@@ -44396,7 +44488,7 @@ enifed('ember-views/views/collection_view', ['exports', 'ember-metal/core', 'emb
44396
44488
  enifed('ember-views/views/container_view', ['exports', 'ember-metal/core', 'ember-metal/debug', 'ember-runtime/mixins/mutable_array', 'ember-runtime/system/native_array', 'ember-views/views/view', 'ember-metal/property_get', 'ember-metal/property_set', 'ember-metal/mixin', 'ember-metal/events', 'ember-htmlbars/templates/container-view'], function (exports, _emberMetalCore, _emberMetalDebug, _emberRuntimeMixinsMutable_array, _emberRuntimeSystemNative_array, _emberViewsViewsView, _emberMetalProperty_get, _emberMetalProperty_set, _emberMetalMixin, _emberMetalEvents, _emberHtmlbarsTemplatesContainerView) {
44397
44489
  'use strict';
44398
44490
 
44399
- _emberHtmlbarsTemplatesContainerView.default.meta.revision = 'Ember@2.3.0';
44491
+ _emberHtmlbarsTemplatesContainerView.default.meta.revision = 'Ember@2.3.1';
44400
44492
 
44401
44493
  /**
44402
44494
  @module ember
@@ -49361,8 +49453,16 @@ enifed("morph-attr", ["exports", "morph-attr/sanitize-attribute-value", "dom-hel
49361
49453
 
49362
49454
  function updateProperty(value) {
49363
49455
  if (this._renderedInitially === true || !_domHelperProp.isAttrRemovalValue(value)) {
49364
- // do not render if initial value is undefined or null
49365
- this.domHelper.setPropertyStrict(this.element, this.attrName, value);
49456
+ var element = this.element;
49457
+ var attrName = this.attrName;
49458
+
49459
+ if (attrName === 'value' && element.tagName === 'INPUT' && element.value === value) {
49460
+ // Do nothing. Attempts to avoid accidently changing the input cursor location.
49461
+ // See https://github.com/tildeio/htmlbars/pull/447 for more details.
49462
+ } else {
49463
+ // do not render if initial value is undefined or null
49464
+ this.domHelper.setPropertyStrict(element, attrName, value);
49465
+ }
49366
49466
  }
49367
49467
 
49368
49468
  this._renderedInitially = true;