ember-source 1.10.0.beta.3 → 1.10.0.beta.4

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.

Potentially problematic release.


This version of ember-source might be problematic. Click here for more details.

checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a51c8274f4e7cf007f118fedb3b566f30b3b3d0d
4
- data.tar.gz: 40f6468450908c4c9e0b003faa5a71157ce382db
3
+ metadata.gz: fad2c197b0678e6e8faf6ab8765f10c341c2a3d9
4
+ data.tar.gz: ea5c65c55f105962b9a485bc02e3b3071f73f50e
5
5
  SHA512:
6
- metadata.gz: f94d74ec51da5db14e2867730b47aca32dd24a84d8598c301750c6425dc69033e2c94a759cf0613c81a406cc48c26aa66b36c32fa42cbac1208b27d95e8992c5
7
- data.tar.gz: 2d6808249e8c3ddb0013f33f9f004669592e0d649ac7f8377a00ea03903434fe1fe6bbaf9e9e6fa8798be680c9d4f261ff3428d5dcfcbb9c7f3029b3c7929513
6
+ metadata.gz: d65c44e6bedf7a4b9a9375e5087bf141abfb3b3bcef6c57d847d3742845466d16cef638f9d755ccb1c3e7aec3da0095ee5c8896df0517d542f86f7b5c16f21f9
7
+ data.tar.gz: b6cbae5fcf4fa3000191387c02a3a4d7465e492a0d737018cc7028e059581dcfc7bd0a8171e3939915841700ebdaf97563ca0bd24ef9edf2d0d8b361a9b6af1a
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.10.0-beta.3
1
+ 1.10.0-beta.4
@@ -5,7 +5,7 @@
5
5
  * Portions Copyright 2008-2011 Apple Inc. All rights reserved.
6
6
  * @license Licensed under MIT license
7
7
  * See https://raw.github.com/emberjs/ember.js/master/LICENSE
8
- * @version 1.10.0-beta.3
8
+ * @version 1.10.0-beta.4
9
9
  */
10
10
 
11
11
  (function() {
@@ -4852,7 +4852,7 @@ define("ember-metal/core",
4852
4852
 
4853
4853
  @class Ember
4854
4854
  @static
4855
- @version 1.10.0-beta.3
4855
+ @version 1.10.0-beta.4
4856
4856
  */
4857
4857
 
4858
4858
  if ('undefined' === typeof Ember) {
@@ -4879,10 +4879,10 @@ define("ember-metal/core",
4879
4879
  /**
4880
4880
  @property VERSION
4881
4881
  @type String
4882
- @default '1.10.0-beta.3'
4882
+ @default '1.10.0-beta.4'
4883
4883
  @static
4884
4884
  */
4885
- Ember.VERSION = '1.10.0-beta.3';
4885
+ Ember.VERSION = '1.10.0-beta.4';
4886
4886
 
4887
4887
  /**
4888
4888
  Standard environmental variables. You can define these in a global `EmberENV`
@@ -6013,9 +6013,10 @@ define("ember-metal/get_properties",
6013
6013
  ```
6014
6014
 
6015
6015
  @method getProperties
6016
- @param obj
6016
+ @for Ember
6017
+ @param {Object} obj
6017
6018
  @param {String...|Array} list of keys to get
6018
- @return {Hash}
6019
+ @return {Object}
6019
6020
  */
6020
6021
  __exports__["default"] = function getProperties(obj) {
6021
6022
  var ret = {};
@@ -10554,23 +10555,61 @@ define("ember-metal/streams/utils",
10554
10555
  "use strict";
10555
10556
  var Stream = __dependency1__["default"];
10556
10557
 
10558
+ /**
10559
+ Check whether an object is a stream or not
10560
+
10561
+ @private
10562
+ @function isStream
10563
+ @param {Object|Stream} object object to check whether it is a stream
10564
+ @return {Boolean} `true` if the object is a stream, `false` otherwise
10565
+ */
10557
10566
  function isStream(object) {
10558
10567
  return object && object.isStream;
10559
10568
  }
10560
10569
 
10561
- __exports__.isStream = isStream;function subscribe(object, callback, context) {
10570
+ __exports__.isStream = isStream;/**
10571
+ A method of subscribing to a stream which is safe for use with a non-stream
10572
+ object. If a non-stream object is passed, the function does nothing.
10573
+
10574
+ @private
10575
+ @function subscribe
10576
+ @param {Object|Stream} object object or stream to potentially subscribe to
10577
+ @param {Function} callback function to run when stream value changes
10578
+ @param {Object} [context] the callback will be executed with this context if it
10579
+ is provided
10580
+ */
10581
+ function subscribe(object, callback, context) {
10562
10582
  if (object && object.isStream) {
10563
10583
  object.subscribe(callback, context);
10564
10584
  }
10565
10585
  }
10566
10586
 
10567
- __exports__.subscribe = subscribe;function unsubscribe(object, callback, context) {
10587
+ __exports__.subscribe = subscribe;/**
10588
+ A method of unsubscribing from a stream which is safe for use with a non-stream
10589
+ object. If a non-stream object is passed, the function does nothing.
10590
+
10591
+ @private
10592
+ @function unsubscribe
10593
+ @param {Object|Stream} object object or stream to potentially unsubscribe from
10594
+ @param {Function} callback function originally passed to `subscribe()`
10595
+ @param {Object} [context] object originally passed to `subscribe()`
10596
+ */
10597
+ function unsubscribe(object, callback, context) {
10568
10598
  if (object && object.isStream) {
10569
10599
  object.unsubscribe(callback, context);
10570
10600
  }
10571
10601
  }
10572
10602
 
10573
- __exports__.unsubscribe = unsubscribe;function read(object) {
10603
+ __exports__.unsubscribe = unsubscribe;/**
10604
+ Retrieve the value of a stream, or in the case a non-stream object is passed,
10605
+ return the object itself.
10606
+
10607
+ @private
10608
+ @function read
10609
+ @param {Object|Stream} object object to return the value of
10610
+ @return the stream's current value, or the non-stream object itself
10611
+ */
10612
+ function read(object) {
10574
10613
  if (object && object.isStream) {
10575
10614
  return object.value();
10576
10615
  } else {
@@ -10578,7 +10617,18 @@ define("ember-metal/streams/utils",
10578
10617
  }
10579
10618
  }
10580
10619
 
10581
- __exports__.read = read;function readArray(array) {
10620
+ __exports__.read = read;/**
10621
+ Map an array, replacing any streams with their values.
10622
+
10623
+ @private
10624
+ @function readArray
10625
+ @param {Array} array The array to read values from
10626
+ @return {Array} a new array of the same length with the values of non-stream
10627
+ objects mapped from their original positions untouched, and
10628
+ the values of stream objects retaining their original position
10629
+ and replaced with the stream's current value.
10630
+ */
10631
+ function readArray(array) {
10582
10632
  var length = array.length;
10583
10633
  var ret = new Array(length);
10584
10634
  for (var i = 0; i < length; i++) {
@@ -10587,7 +10637,19 @@ define("ember-metal/streams/utils",
10587
10637
  return ret;
10588
10638
  }
10589
10639
 
10590
- __exports__.readArray = readArray;function readHash(object) {
10640
+ __exports__.readArray = readArray;/**
10641
+ Map a hash, replacing any stream property values with the current value of that
10642
+ stream.
10643
+
10644
+ @private
10645
+ @function readHash
10646
+ @param {Object} object The hash to read keys and values from
10647
+ @return {Object} a new object with the same keys as the passed object. The
10648
+ property values in the new object are the original values in
10649
+ the case of non-stream objects, and the streams' current
10650
+ values in the case of stream objects.
10651
+ */
10652
+ function readHash(object) {
10591
10653
  var ret = {};
10592
10654
  for (var key in object) {
10593
10655
  ret[key] = read(object[key]);
@@ -10596,9 +10658,13 @@ define("ember-metal/streams/utils",
10596
10658
  }
10597
10659
 
10598
10660
  __exports__.readHash = readHash;/**
10599
- * @function scanArray
10600
- * @param array Array array given to a handlebars helper
10601
- * @return Boolean whether the array contains a stream/bound value
10661
+ Check whether an array contains any stream values
10662
+
10663
+ @private
10664
+ @function scanArray
10665
+ @param {Array} array array given to a handlebars helper
10666
+ @return {Boolean} `true` if the array contains a stream/bound value, `false`
10667
+ otherwise
10602
10668
  */
10603
10669
  function scanArray(array) {
10604
10670
  var length = array.length;
@@ -10615,10 +10681,14 @@ define("ember-metal/streams/utils",
10615
10681
  }
10616
10682
 
10617
10683
  __exports__.scanArray = scanArray;/**
10618
- * @function scanHash
10619
- * @param Object hash "hash" argument given to a handlebars helper
10620
- * @return Boolean whether the object contains a stream/bound value
10621
- */
10684
+ Check whether a hash has any stream property values
10685
+
10686
+ @private
10687
+ @function scanHash
10688
+ @param {Object} hash "hash" argument given to a handlebars helper
10689
+ @return {Boolean} `true` if the object contains a stream/bound value, `false`
10690
+ otherwise
10691
+ */
10622
10692
  function scanHash(hash) {
10623
10693
  var containsStream = false;
10624
10694
 
@@ -10632,14 +10702,26 @@ define("ember-metal/streams/utils",
10632
10702
  return containsStream;
10633
10703
  }
10634
10704
 
10635
- __exports__.scanHash = scanHash;// TODO: Create subclass ConcatStream < Stream. Defer
10636
- // subscribing to streams until the value() is called.
10637
- function concat(array, key) {
10705
+ __exports__.scanHash = scanHash;/**
10706
+ Join an array, with any streams replaced by their current values
10707
+
10708
+ @private
10709
+ @function concat
10710
+ @param {Array} array An array containing zero or more stream objects and
10711
+ zero or more non-stream objects
10712
+ @param {String} separator string to be used to join array elements
10713
+ @return {String} String with array elements concatenated and joined by the
10714
+ provided separator, and any stream array members having been
10715
+ replaced by the current value of the stream
10716
+ */
10717
+ function concat(array, separator) {
10718
+ // TODO: Create subclass ConcatStream < Stream. Defer
10719
+ // subscribing to streams until the value() is called.
10638
10720
  var hasStream = scanArray(array);
10639
10721
  if (hasStream) {
10640
10722
  var i, l;
10641
10723
  var stream = new Stream(function() {
10642
- return readArray(array).join(key);
10724
+ return readArray(array).join(separator);
10643
10725
  });
10644
10726
 
10645
10727
  for (i = 0, l=array.length; i < l; i++) {
@@ -10648,11 +10730,42 @@ define("ember-metal/streams/utils",
10648
10730
 
10649
10731
  return stream;
10650
10732
  } else {
10651
- return array.join(key);
10733
+ return array.join(separator);
10652
10734
  }
10653
10735
  }
10654
10736
 
10655
- __exports__.concat = concat;function chainStream(value, fn) {
10737
+ __exports__.concat = concat;/**
10738
+ Generate a new stream by providing a source stream and a function that can
10739
+ be used to transform the stream's value. In the case of a non-stream object,
10740
+ returns the result of the function.
10741
+
10742
+ The value to transform would typically be available to the function you pass
10743
+ to `chain()` via scope. For example:
10744
+
10745
+ ```javascript
10746
+ var source = ...; // stream returning a number
10747
+ // or a numeric (non-stream) object
10748
+ var result = chain(source, function(){
10749
+ var currentValue = read(source);
10750
+ return currentValue + 1;
10751
+ });
10752
+ ```
10753
+
10754
+ In the example, result is a stream if source is a stream, or a number of
10755
+ source was numeric.
10756
+
10757
+ @private
10758
+ @function chain
10759
+ @param {Object|Stream} value A stream or non-stream object
10760
+ @param {Function} fn function to be run when the stream value changes, or to
10761
+ be run once in the case of a non-stream object
10762
+ @return {Object|Stream} In the case of a stream `value` parameter, a new
10763
+ stream that will be updated with the return value of
10764
+ the provided function `fn`. In the case of a
10765
+ non-stream object, the return value of the provided
10766
+ function `fn`.
10767
+ */
10768
+ function chain(value, fn) {
10656
10769
  if (isStream(value)) {
10657
10770
  var stream = new Stream(fn);
10658
10771
  subscribe(value, stream.notify, stream);
@@ -10662,7 +10775,7 @@ define("ember-metal/streams/utils",
10662
10775
  }
10663
10776
  }
10664
10777
 
10665
- __exports__.chainStream = chainStream;
10778
+ __exports__.chain = chain;
10666
10779
  });
10667
10780
  define("ember-metal/utils",
10668
10781
  ["ember-metal/core","ember-metal/platform","ember-metal/array","exports"],
@@ -16173,7 +16286,7 @@ define("ember-runtime/mixins/deferred",
16173
16286
  },
16174
16287
 
16175
16288
  _deferred: computed(function() {
16176
- Ember.deprecate('Usage of Ember.DeferredMixin or Ember.Deferred is deprecated.', this._suppressDeferredDeprecation);
16289
+ Ember.deprecate('Usage of Ember.DeferredMixin or Ember.Deferred is deprecated.', this._suppressDeferredDeprecation, { url: 'http://emberjs.com/guides/deprecations/#toc_deprecate-ember-deferredmixin-and-ember-deferred' });
16177
16290
 
16178
16291
  return RSVP.defer('Ember: DeferredMixin - ' + this);
16179
16292
  })
@@ -16941,7 +17054,7 @@ define("ember-runtime/mixins/enumerable",
16941
17054
  @method isAny
16942
17055
  @param {String} key the property to test
16943
17056
  @param {String} [value] optional value to test against.
16944
- @return {Boolean} `true` if the passed function returns `true` for any item
17057
+ @return {Boolean}
16945
17058
  @since 1.3.0
16946
17059
  */
16947
17060
  isAny: function(key, value) {
@@ -16952,7 +17065,7 @@ define("ember-runtime/mixins/enumerable",
16952
17065
  @method anyBy
16953
17066
  @param {String} key the property to test
16954
17067
  @param {String} [value] optional value to test against.
16955
- @return {Boolean} `true` if the passed function returns `true` for any item
17068
+ @return {Boolean}
16956
17069
  @deprecated Use `isAny` instead
16957
17070
  */
16958
17071
  anyBy: aliasMethod('isAny'),
@@ -16961,7 +17074,7 @@ define("ember-runtime/mixins/enumerable",
16961
17074
  @method someProperty
16962
17075
  @param {String} key the property to test
16963
17076
  @param {String} [value] optional value to test against.
16964
- @return {Boolean} `true` if the passed function returns `true` for any item
17077
+ @return {Boolean}
16965
17078
  @deprecated Use `isAny` instead
16966
17079
  */
16967
17080
  someProperty: aliasMethod('isAny'),
@@ -18419,7 +18532,7 @@ define("ember-runtime/mixins/observable",
18419
18532
  },
18420
18533
 
18421
18534
  addBeforeObserver: function(key, target, method) {
18422
- Ember.deprecate('Before observers are deprecated and will be removed in a future release. If you want to keep track of previous values you have to implement it yourself. See http://emberjs.com/guides/deprecations#toc_deprecate-beforeobservers');
18535
+ Ember.deprecate('Before observers are deprecated and will be removed in a future release. If you want to keep track of previous values you have to implement it yourself.', false, { url: 'http://emberjs.com/guides/deprecations/#toc_deprecate-beforeobservers' });
18423
18536
  addBeforeObserver(this, key, target, method);
18424
18537
  },
18425
18538
 
@@ -19662,8 +19775,8 @@ define("ember-runtime/system/container",
19662
19775
  __exports__["default"] = Container;
19663
19776
  });
19664
19777
  define("ember-runtime/system/core_object",
19665
- ["ember-metal/core","ember-metal/property_get","ember-metal/utils","ember-metal/platform","ember-metal/chains","ember-metal/events","ember-metal/mixin","ember-metal/enumerable_utils","ember-metal/error","ember-metal/keys","ember-runtime/mixins/action_handler","ember-metal/properties","ember-metal/binding","ember-metal/computed","ember-metal/injected_property","ember-metal/run_loop","ember-metal/watching","ember-runtime/inject","exports"],
19666
- function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __dependency8__, __dependency9__, __dependency10__, __dependency11__, __dependency12__, __dependency13__, __dependency14__, __dependency15__, __dependency16__, __dependency17__, __dependency18__, __exports__) {
19778
+ ["ember-metal/core","ember-metal/merge","ember-metal/property_get","ember-metal/utils","ember-metal/platform","ember-metal/chains","ember-metal/events","ember-metal/mixin","ember-metal/enumerable_utils","ember-metal/error","ember-metal/keys","ember-runtime/mixins/action_handler","ember-metal/properties","ember-metal/binding","ember-metal/computed","ember-metal/injected_property","ember-metal/run_loop","ember-metal/watching","ember-runtime/inject","exports"],
19779
+ function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __dependency8__, __dependency9__, __dependency10__, __dependency11__, __dependency12__, __dependency13__, __dependency14__, __dependency15__, __dependency16__, __dependency17__, __dependency18__, __dependency19__, __exports__) {
19667
19780
  // Remove "use strict"; from transpiled module until
19668
19781
  // https://bugs.webkit.org/show_bug.cgi?id=138038 is fixed
19669
19782
  //
@@ -19675,38 +19788,39 @@ define("ember-runtime/system/core_object",
19675
19788
  */
19676
19789
 
19677
19790
  var Ember = __dependency1__["default"];
19791
+ var merge = __dependency2__["default"];
19678
19792
  // Ember.assert, Ember.config
19679
19793
 
19680
19794
  // NOTE: this object should never be included directly. Instead use `Ember.Object`.
19681
19795
  // We only define this separately so that `Ember.Set` can depend on it.
19682
- var get = __dependency2__.get;
19683
- var guidFor = __dependency3__.guidFor;
19684
- var apply = __dependency3__.apply;
19685
- var o_create = __dependency4__.create;
19686
- var generateGuid = __dependency3__.generateGuid;
19687
- var GUID_KEY = __dependency3__.GUID_KEY;
19688
- var meta = __dependency3__.meta;
19689
- var makeArray = __dependency3__.makeArray;
19690
- var finishChains = __dependency5__.finishChains;
19691
- var sendEvent = __dependency6__.sendEvent;
19692
- var IS_BINDING = __dependency7__.IS_BINDING;
19693
- var Mixin = __dependency7__.Mixin;
19694
- var required = __dependency7__.required;
19695
- var indexOf = __dependency8__.indexOf;
19696
- var EmberError = __dependency9__["default"];
19697
- var o_defineProperty = __dependency4__.defineProperty;
19698
- var keys = __dependency10__["default"];
19699
- var ActionHandler = __dependency11__["default"];
19700
- var defineProperty = __dependency12__.defineProperty;
19701
- var Binding = __dependency13__.Binding;
19702
- var ComputedProperty = __dependency14__.ComputedProperty;
19703
- var computed = __dependency14__.computed;
19704
- var InjectedProperty = __dependency15__["default"];
19705
- var run = __dependency16__["default"];
19706
- var destroy = __dependency17__.destroy;
19796
+ var get = __dependency3__.get;
19797
+ var guidFor = __dependency4__.guidFor;
19798
+ var apply = __dependency4__.apply;
19799
+ var o_create = __dependency5__.create;
19800
+ var generateGuid = __dependency4__.generateGuid;
19801
+ var GUID_KEY = __dependency4__.GUID_KEY;
19802
+ var meta = __dependency4__.meta;
19803
+ var makeArray = __dependency4__.makeArray;
19804
+ var finishChains = __dependency6__.finishChains;
19805
+ var sendEvent = __dependency7__.sendEvent;
19806
+ var IS_BINDING = __dependency8__.IS_BINDING;
19807
+ var Mixin = __dependency8__.Mixin;
19808
+ var required = __dependency8__.required;
19809
+ var indexOf = __dependency9__.indexOf;
19810
+ var EmberError = __dependency10__["default"];
19811
+ var o_defineProperty = __dependency5__.defineProperty;
19812
+ var keys = __dependency11__["default"];
19813
+ var ActionHandler = __dependency12__["default"];
19814
+ var defineProperty = __dependency13__.defineProperty;
19815
+ var Binding = __dependency14__.Binding;
19816
+ var ComputedProperty = __dependency15__.ComputedProperty;
19817
+ var computed = __dependency15__.computed;
19818
+ var InjectedProperty = __dependency16__["default"];
19819
+ var run = __dependency17__["default"];
19820
+ var destroy = __dependency18__.destroy;
19707
19821
  var K = __dependency1__.K;
19708
- var hasPropertyAccessors = __dependency4__.hasPropertyAccessors;
19709
- var validatePropertyInjections = __dependency18__.validatePropertyInjections;
19822
+ var hasPropertyAccessors = __dependency5__.hasPropertyAccessors;
19823
+ var validatePropertyInjections = __dependency19__.validatePropertyInjections;
19710
19824
 
19711
19825
  var schedule = run.schedule;
19712
19826
  var applyMixin = Mixin._apply;
@@ -19758,6 +19872,7 @@ define("ember-runtime/system/core_object",
19758
19872
  initProperties = null;
19759
19873
 
19760
19874
  var concatenatedProperties = this.concatenatedProperties;
19875
+ var mergedProperties = this.mergedProperties;
19761
19876
 
19762
19877
  for (var i = 0, l = props.length; i < l; i++) {
19763
19878
  var properties = props[i];
@@ -19810,6 +19925,14 @@ define("ember-runtime/system/core_object",
19810
19925
  }
19811
19926
  }
19812
19927
 
19928
+ if (mergedProperties &&
19929
+ mergedProperties.length &&
19930
+ indexOf(mergedProperties, keyName) >= 0) {
19931
+ var originalValue = this[keyName];
19932
+
19933
+ value = merge(originalValue, value);
19934
+ }
19935
+
19813
19936
  if (desc) {
19814
19937
  desc.set(this, keyName, value);
19815
19938
  } else {
@@ -19975,8 +20098,8 @@ define("ember-runtime/system/core_object",
19975
20098
  view.get('classNames'); // ['ember-view', 'bar', 'foo', 'baz']
19976
20099
  ```
19977
20100
 
19978
- Using the `concatenatedProperties` property, we can tell to Ember that mix
19979
- the content of the properties.
20101
+ Using the `concatenatedProperties` property, we can tell Ember to mix the
20102
+ content of the properties.
19980
20103
 
19981
20104
  In `Ember.View` the `classNameBindings` and `attributeBindings` properties
19982
20105
  are also concatenated, in addition to `classNames`.
@@ -20580,7 +20703,7 @@ define("ember-runtime/system/deferred",
20580
20703
 
20581
20704
  var Deferred = EmberObject.extend(DeferredMixin, {
20582
20705
  init: function() {
20583
- Ember.deprecate('Usage of Ember.Deferred is deprecated.');
20706
+ Ember.deprecate('Usage of Ember.Deferred is deprecated.', false, { url: 'http://emberjs.com/guides/deprecations/#toc_deprecate-ember-deferredmixin-and-ember-deferred' });
20584
20707
  this._super();
20585
20708
  }
20586
20709
  });
@@ -5,7 +5,7 @@
5
5
  * Portions Copyright 2008-2011 Apple Inc. All rights reserved.
6
6
  * @license Licensed under MIT license
7
7
  * See https://raw.github.com/emberjs/ember.js/master/LICENSE
8
- * @version 1.10.0-beta.3
8
+ * @version 1.10.0-beta.4
9
9
  */
10
10
 
11
11
  (function() {
@@ -114,7 +114,7 @@ define("ember-metal/core",
114
114
 
115
115
  @class Ember
116
116
  @static
117
- @version 1.10.0-beta.3
117
+ @version 1.10.0-beta.4
118
118
  */
119
119
 
120
120
  if ('undefined' === typeof Ember) {
@@ -141,10 +141,10 @@ define("ember-metal/core",
141
141
  /**
142
142
  @property VERSION
143
143
  @type String
144
- @default '1.10.0-beta.3'
144
+ @default '1.10.0-beta.4'
145
145
  @static
146
146
  */
147
- Ember.VERSION = '1.10.0-beta.3';
147
+ Ember.VERSION = '1.10.0-beta.4';
148
148
 
149
149
  /**
150
150
  Standard environmental variables. You can define these in a global `EmberENV`
@@ -401,6 +401,11 @@ define("ember-template-compiler/plugins/transform-each-in-to-hash",
401
401
 
402
402
  walker.visit(ast, function(node) {
403
403
  if (pluginContext.validate(node)) {
404
+
405
+ if (node.program && node.program.blockParams.length) {
406
+ throw new Error('You cannot use keyword (`{{each foo in bar}}`) and block params (`{{each bar as |foo|}}`) at the same time.');
407
+ }
408
+
404
409
  var removedParams = node.sexpr.params.splice(0, 2);
405
410
  var keyword = removedParams[0].original;
406
411
 
@@ -472,6 +477,11 @@ define("ember-template-compiler/plugins/transform-with-as-to-hash",
472
477
 
473
478
  walker.visit(ast, function(node) {
474
479
  if (pluginContext.validate(node)) {
480
+
481
+ if (node.program && node.program.blockParams.length) {
482
+ throw new Error('You cannot use keyword (`{{with foo as bar}}`) and block params (`{{with foo as |bar|}}`) at the same time.');
483
+ }
484
+
475
485
  var removedParams = node.sexpr.params.splice(1, 2);
476
486
  var keyword = removedParams[1].original;
477
487
  node.program.blockParams = [ keyword ];
@@ -739,9 +749,13 @@ define("htmlbars-compiler/fragment-javascript-compiler",
739
749
  this.source.push(this.indent+' return '+el+';\n');
740
750
  };
741
751
 
742
- FragmentJavaScriptCompiler.prototype.setAttribute = function(name, value) {
752
+ FragmentJavaScriptCompiler.prototype.setAttribute = function(name, value, namespace) {
743
753
  var el = 'el'+this.depth;
744
- this.source.push(this.indent+' dom.setProperty('+el+','+string(name)+','+string(value)+');\n');
754
+ if (namespace) {
755
+ this.source.push(this.indent+' dom.setAttributeNS('+el+','+string(namespace)+','+string(name)+','+string(value)+');\n');
756
+ } else {
757
+ this.source.push(this.indent+' dom.setAttribute('+el+','+string(name)+','+string(value)+');\n');
758
+ }
745
759
  };
746
760
 
747
761
  FragmentJavaScriptCompiler.prototype.appendChild = function() {
@@ -779,6 +793,7 @@ define("htmlbars-compiler/fragment-opcode-compiler",
779
793
  "use strict";
780
794
  var TemplateVisitor = __dependency1__["default"];
781
795
  var processOpcodes = __dependency2__.processOpcodes;
796
+ var getNamespace = __dependency2__.getNamespace;
782
797
  var forEach = __dependency3__.forEach;
783
798
 
784
799
  function FragmentOpcodeCompiler() {
@@ -838,7 +853,10 @@ define("htmlbars-compiler/fragment-opcode-compiler",
838
853
 
839
854
  FragmentOpcodeCompiler.prototype.attribute = function(attr) {
840
855
  if (attr.value.type === 'TextNode') {
841
- this.opcode('setAttribute', [attr.name, attr.value.chars]);
856
+
857
+ var namespace = getNamespace(attr.name) || null;
858
+
859
+ this.opcode('setAttribute', [attr.name, attr.value.chars, namespace]);
842
860
  }
843
861
  };
844
862
 
@@ -1058,18 +1076,18 @@ define("htmlbars-compiler/hydration-javascript-compiler",
1058
1076
  this.morphs.push(['morph' + morphNum, morph]);
1059
1077
  };
1060
1078
 
1061
- prototype.createAttrMorph = function(attrMorphNum, elementNum, name, escaped) {
1079
+ prototype.createAttrMorph = function(attrMorphNum, elementNum, name, escaped, namespace) {
1062
1080
  var morphMethod = escaped ? 'createAttrMorph' : 'createUnsafeAttrMorph';
1063
- var morph = "dom."+morphMethod+"(element"+elementNum+", '"+name+"')";
1081
+ var morph = "dom."+morphMethod+"(element"+elementNum+", '"+name+(namespace ? "', '"+namespace : '')+"')";
1064
1082
  this.morphs.push(['attrMorph' + attrMorphNum, morph]);
1065
1083
  };
1066
1084
 
1067
1085
  prototype.repairClonedNode = function(blankChildTextNodes, isElementChecked) {
1068
1086
  var parent = this.getParent(),
1069
- processing = 'dom.repairClonedNode('+parent+','+
1087
+ processing = 'if (this.cachedFragment) { dom.repairClonedNode('+parent+','+
1070
1088
  array(blankChildTextNodes)+
1071
1089
  ( isElementChecked ? ',true' : '' )+
1072
- ');';
1090
+ '); }';
1073
1091
  this.fragmentProcessing.push(
1074
1092
  processing
1075
1093
  );
@@ -1113,6 +1131,7 @@ define("htmlbars-compiler/hydration-opcode-compiler",
1113
1131
  "use strict";
1114
1132
  var TemplateVisitor = __dependency1__["default"];
1115
1133
  var processOpcodes = __dependency2__.processOpcodes;
1134
+ var getNamespace = __dependency2__.getNamespace;
1116
1135
  var forEach = __dependency3__.forEach;
1117
1136
  var isHelper = __dependency4__.isHelper;
1118
1137
 
@@ -1286,6 +1305,7 @@ define("htmlbars-compiler/hydration-opcode-compiler",
1286
1305
  HydrationOpcodeCompiler.prototype.attribute = function(attr) {
1287
1306
  var value = attr.value;
1288
1307
  var escaped = true;
1308
+ var namespace = getNamespace(attr.name) || null;
1289
1309
 
1290
1310
  // TODO: Introduce context specific AST nodes to avoid switching here.
1291
1311
  if (value.type === 'TextNode') {
@@ -1306,7 +1326,7 @@ define("htmlbars-compiler/hydration-opcode-compiler",
1306
1326
  }
1307
1327
 
1308
1328
  var attrMorphNum = this.attrMorphNum++;
1309
- this.opcode('createAttrMorph', attrMorphNum, this.elementNum, attr.name, escaped);
1329
+ this.opcode('createAttrMorph', attrMorphNum, this.elementNum, attr.name, escaped, namespace);
1310
1330
  this.opcode('printAttributeHook', attrMorphNum, this.elementNum);
1311
1331
  };
1312
1332
 
@@ -1842,7 +1862,23 @@ define("htmlbars-compiler/utils",
1842
1862
  }
1843
1863
  }
1844
1864
 
1845
- __exports__.processOpcodes = processOpcodes;
1865
+ __exports__.processOpcodes = processOpcodes;// ref http://dev.w3.org/html5/spec-LC/namespaces.html
1866
+ var defaultNamespaces = {
1867
+ html: 'http://www.w3.org/1999/xhtml',
1868
+ mathml: 'http://www.w3.org/1998/Math/MathML',
1869
+ svg: 'http://www.w3.org/2000/svg',
1870
+ xlink: 'http://www.w3.org/1999/xlink',
1871
+ xml: 'http://www.w3.org/XML/1998/namespace'
1872
+ };
1873
+
1874
+ function getNamespace(attrName) {
1875
+ var parts = attrName.split(':');
1876
+ if (parts.length > 1) {
1877
+ return defaultNamespaces[parts[0]];
1878
+ }
1879
+ }
1880
+
1881
+ __exports__.getNamespace = getNamespace;
1846
1882
  });
1847
1883
  define("htmlbars-syntax",
1848
1884
  ["./htmlbars-syntax/walker","./htmlbars-syntax/builders","./htmlbars-syntax/parser","exports"],
@@ -3670,14 +3706,18 @@ define("htmlbars-syntax/token-handlers",
3670
3706
  __exports__["default"] = tokenHandlers;
3671
3707
  });
3672
3708
  define("htmlbars-syntax/tokenizer",
3673
- ["../simple-html-tokenizer","./utils","./builders","exports"],
3674
- function(__dependency1__, __dependency2__, __dependency3__, __exports__) {
3709
+ ["../simple-html-tokenizer","./utils","../htmlbars-util/array-utils","./builders","exports"],
3710
+ function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __exports__) {
3675
3711
  "use strict";
3676
3712
  var Tokenizer = __dependency1__.Tokenizer;
3677
3713
  var isHelper = __dependency2__.isHelper;
3678
- var builders = __dependency3__["default"];
3714
+ var map = __dependency3__.map;
3715
+ var builders = __dependency4__["default"];
3679
3716
 
3680
3717
  Tokenizer.prototype.createAttribute = function(char) {
3718
+ if (this.token.type === 'EndTag') {
3719
+ throw new Error('Invalid end tag: closing tag must not have attributes, in ' + formatTokenInfo(this) + '.');
3720
+ }
3681
3721
  this.currentAttribute = builders.attr(char.toLowerCase(), [], null);
3682
3722
  this.token.attributes.push(this.currentAttribute);
3683
3723
  this.state = 'attributeName';
@@ -3694,12 +3734,13 @@ define("htmlbars-syntax/tokenizer",
3694
3734
  Tokenizer.prototype.addToAttributeValue = function(char) {
3695
3735
  var value = this.currentAttribute.value;
3696
3736
 
3737
+ if (!this.currentAttribute.quoted && char === '/') {
3738
+ throw new Error("A space is required between an unquoted attribute value and `/`, in " + formatTokenInfo(this) +
3739
+ '.');
3740
+ }
3697
3741
  if (!this.currentAttribute.quoted && value.length > 0 &&
3698
3742
  (char.type === 'MustacheStatement' || value[0].type === 'MustacheStatement')) {
3699
- // Get the line number from a mustache, whether it's the one to add or the one already added
3700
- var mustache = char.type === 'MustacheStatement' ? char : value[0],
3701
- line = mustache.loc.start.line;
3702
- throw new Error("Unquoted attribute value must be a single string or mustache (line " + line + ")");
3743
+ throw new Error("Unquoted attribute value must be a single string or mustache (on line " + this.line + ")");
3703
3744
  }
3704
3745
 
3705
3746
  if (typeof char === 'object') {
@@ -3732,14 +3773,16 @@ define("htmlbars-syntax/tokenizer",
3732
3773
 
3733
3774
  function prepareAttributeValue(attr) {
3734
3775
  var parts = attr.value;
3735
- if (parts.length === 0) {
3776
+ var length = parts.length;
3777
+
3778
+ if (length === 0) {
3736
3779
  return builders.text('');
3737
- } else if (parts.length === 1 && parts[0].type === "TextNode") {
3780
+ } else if (length === 1 && parts[0].type === "TextNode") {
3738
3781
  return parts[0];
3739
3782
  } else if (!attr.quoted) {
3740
3783
  return parts[0];
3741
3784
  } else {
3742
- return builders.concat(parts.map(prepareConcatPart));
3785
+ return builders.concat(map(parts, prepareConcatPart));
3743
3786
  }
3744
3787
  }
3745
3788
 
@@ -3752,6 +3795,10 @@ define("htmlbars-syntax/tokenizer",
3752
3795
  }
3753
3796
  }
3754
3797
 
3798
+ function formatTokenInfo(tokenizer) {
3799
+ return '`' + tokenizer.token.tagName + '` (on line ' + tokenizer.line + ')';
3800
+ }
3801
+
3755
3802
  function unwrapMustache(mustache) {
3756
3803
  if (isHelper(mustache.sexpr)) {
3757
3804
  return mustache.sexpr;
@@ -3957,6 +4004,16 @@ define("htmlbars-test-helpers",
3957
4004
  var ie8InnerHTMLTestElement = document.createElement('div');
3958
4005
  ie8InnerHTMLTestElement.setAttribute('id', 'womp');
3959
4006
  var ie8InnerHTML = (ie8InnerHTMLTestElement.outerHTML.indexOf('id=womp') > -1);
4007
+
4008
+ // detect side-effects of cloning svg elements in IE9-11
4009
+ var ieSVGInnerHTML = (function () {
4010
+ var div = document.createElement('div');
4011
+ var node = document.createElementNS('http://www.w3.org/2000/svg', 'svg');
4012
+ div.appendChild(node);
4013
+ var clone = div.cloneNode(true);
4014
+ return clone.innerHTML === '<svg xmlns="http://www.w3.org/2000/svg" />';
4015
+ })();
4016
+
3960
4017
  function normalizeInnerHTML(actualHTML) {
3961
4018
  if (ie8InnerHTML) {
3962
4019
  // drop newlines in IE8
@@ -3970,6 +4027,16 @@ define("htmlbars-test-helpers",
3970
4027
  return 'id="'+id+'"';
3971
4028
  });
3972
4029
  }
4030
+ if (ieSVGInnerHTML) {
4031
+ // Replace `<svg xmlns="http://www.w3.org/2000/svg" height="50%" />` with `<svg height="50%"></svg>`, etc.
4032
+ // drop namespace attribute
4033
+ actualHTML = actualHTML.replace(/ xmlns="[^"]+"/, '');
4034
+ // replace self-closing elements
4035
+ actualHTML = actualHTML.replace(/<([A-Z]+) [^\/>]*\/>/gi, function(tag, tagName) {
4036
+ return tag.slice(0, tag.length - 3) + '></' + tagName + '>';
4037
+ });
4038
+ }
4039
+
3973
4040
  return actualHTML;
3974
4041
  }
3975
4042
 
@@ -3998,19 +4065,30 @@ define("htmlbars-util/array-utils",
3998
4065
  function(__exports__) {
3999
4066
  "use strict";
4000
4067
  function forEach(array, callback, binding) {
4001
- var i;
4068
+ var i, l;
4002
4069
  if (binding === undefined) {
4003
- for (i = 0; i < array.length; i++) {
4070
+ for (i = 0, l = array.length; i < l; i++) {
4004
4071
  callback(array[i], i, array);
4005
4072
  }
4006
4073
  } else {
4007
- for (i = 0; i < array.length; i++) {
4074
+ for (i = 0, l = array.length; i < l; i++) {
4008
4075
  callback.call(binding, array[i], i, array);
4009
4076
  }
4010
4077
  }
4011
4078
  }
4012
4079
 
4013
- __exports__.forEach = forEach;
4080
+ __exports__.forEach = forEach;function map(array, callback) {
4081
+ var output = [];
4082
+ var i, l;
4083
+
4084
+ for (i = 0, l = array.length; i < l; i++) {
4085
+ output.push(callback(array[i], i, array));
4086
+ }
4087
+
4088
+ return output;
4089
+ }
4090
+
4091
+ __exports__.map = map;
4014
4092
  });
4015
4093
  define("htmlbars-util/handlebars/safe-string",
4016
4094
  ["exports"],