ember-source 2.3.0 → 2.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -6,7 +6,7 @@
6
6
  * Portions Copyright 2008-2011 Apple Inc. All rights reserved.
7
7
  * @license Licensed under MIT license
8
8
  * See https://raw.github.com/emberjs/ember.js/master/LICENSE
9
- * @version 2.3.0
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;