55 * Portions Copyright 2008-2011 Apple Inc. All rights reserved.
66 * @license Licensed under MIT license
77 * See https://raw.github.com/emberjs/ember.js/master/LICENSE
8- * @version 1.9.0
8+ * @version 1.9.1
99 */
1010
1111(function() {
@@ -6869,8 +6869,8 @@ enifed("ember-handlebars/ext",
68696869 }
68706870
68716871 Ember.assert(
6872- fmt(path+" must be a subclass of Ember.View, not %@", [viewClass]),
6873- View.detect(viewClass)
6872+ fmt(path+" must be a subclass or an instance of Ember.View, not %@", [viewClass]),
6873+ View.detect(viewClass) || View.detectInstance(viewClass)
68746874 );
68756875
68766876 return viewClass;
@@ -7188,8 +7188,8 @@ enifed("ember-handlebars/ext",
71887188 __exports__.handlebarsGet = handlebarsGet;
71897189 });
71907190enifed("ember-handlebars/helpers/bind_attr",
7191- ["ember-metal/core","ember-handlebars-compiler","ember-metal/utils","ember-runtime/system/string","ember-metal/array","ember-views/views/view","ember-metal/keys","exports"],
7192- function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __exports__) {
7191+ ["ember-metal/core","ember-handlebars-compiler","ember-metal/utils","ember-runtime/system/string","ember-metal/array","ember-views/views/view","ember-metal/keys","ember-views/system/sanitize_attribute_value"," exports"],
7192+ function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __dependency8__, __exports__) {
71937193 "use strict";
71947194 /**
71957195 @module ember
@@ -7207,6 +7207,8 @@ enifed("ember-handlebars/helpers/bind_attr",
72077207 var View = __dependency6__["default"];
72087208 var keys = __dependency7__["default"];
72097209
7210+ var sanitizeAttributeValue = __dependency8__["default"];
7211+
72107212 var helpers = EmberHandlebars.helpers;
72117213 var SafeString = EmberHandlebars.SafeString;
72127214
@@ -7372,6 +7374,7 @@ enifed("ember-handlebars/helpers/bind_attr",
73727374
73737375 var lazyValue = view.getStream(path);
73747376 var value = lazyValue.value();
7377+ value = sanitizeAttributeValue(null, attr, value);
73757378 var type = typeOf(value);
73767379
73777380 Ember.assert(fmt("Attributes must be numbers, strings or booleans, not %@", [value]),
@@ -8960,13 +8963,19 @@ enifed("ember-handlebars/helpers/view",
89608963 helper: function(thisContext, newView, options) {
89618964 var data = options.data;
89628965 var fn = options.fn;
8966+ var newViewProto;
89638967
89648968 makeBindings(options);
89658969
89668970 var viewOptions = this.propertiesFromHTMLOptions(options, thisContext);
89678971 var currentView = data.view;
89688972 viewOptions.templateData = data;
8969- var newViewProto = newView.proto();
8973+
8974+ if (View.detectInstance(newView)) {
8975+ newViewProto = newView;
8976+ } else {
8977+ newViewProto = newView.proto();
8978+ }
89708979
89718980 if (fn) {
89728981 Ember.assert("You cannot provide a template block if you also specified a templateName",
@@ -13134,7 +13143,7 @@ enifed("ember-metal/core",
1313413143
1313513144 @class Ember
1313613145 @static
13137- @version 1.9.0
13146+ @version 1.9.1
1313813147 */
1313913148
1314013149 if ('undefined' === typeof Ember) {
@@ -13161,10 +13170,10 @@ enifed("ember-metal/core",
1316113170 /**
1316213171 @property VERSION
1316313172 @type String
13164- @default '1.9.0 '
13173+ @default '1.9.1 '
1316513174 @static
1316613175 */
13167- Ember.VERSION = '1.9.0 ';
13176+ Ember.VERSION = '1.9.1 ';
1316813177
1316913178 /**
1317013179 Standard environmental variables. You can define these in a global `EmberENV`
@@ -38957,7 +38966,8 @@ enifed("ember-views/streams/read",
3895738966 viewClass = value;
3895838967 }
3895938968
38960- Ember.assert(fmt(value+" must be a subclass of Ember.View, not %@", [viewClass]), View.detect(viewClass));
38969+ Ember.assert(fmt(value+" must be a subclass or an instance of Ember.View, not %@", [viewClass]), View.detect(viewClass) || View.detectInstance(viewClass)
38970+ );
3896138971
3896238972 return viewClass;
3896338973 }
@@ -40055,6 +40065,62 @@ enifed("ember-views/system/renderer",
4005540065
4005640066 __exports__["default"] = EmberRenderer;
4005740067 });
40068+ enifed("ember-views/system/sanitize_attribute_value",
40069+ ["ember-handlebars-compiler","exports"],
40070+ function(__dependency1__, __exports__) {
40071+ "use strict";
40072+ /* jshint scripturl:true */
40073+
40074+ var EmberHandlebars = __dependency1__["default"];
40075+
40076+ var parsingNode;
40077+ var badProtocols = {
40078+ 'javascript:': true,
40079+ 'vbscript:': true
40080+ };
40081+
40082+ var badTags = {
40083+ 'A': true,
40084+ 'BODY': true,
40085+ 'LINK': true,
40086+ 'IMG': true,
40087+ 'IFRAME': true
40088+ };
40089+
40090+ var badAttributes = {
40091+ 'href': true,
40092+ 'src': true,
40093+ 'background': true
40094+ };
40095+ __exports__.badAttributes = badAttributes;
40096+ __exports__["default"] = function sanitizeAttributeValue(element, attribute, value) {
40097+ var tagName;
40098+
40099+ if (!parsingNode) {
40100+ parsingNode = document.createElement('a');
40101+ }
40102+
40103+ if (!element) {
40104+ tagName = null;
40105+ } else {
40106+ tagName = element.tagName;
40107+ }
40108+
40109+ if (value instanceof EmberHandlebars.SafeString) {
40110+ return value.toString();
40111+ }
40112+
40113+ if ((tagName === null || badTags[tagName]) && badAttributes[attribute]) {
40114+ parsingNode.href = value;
40115+
40116+ if (badProtocols[parsingNode.protocol] === true) {
40117+ return 'unsafe:' + value;
40118+ }
40119+ }
40120+
40121+ return value;
40122+ }
40123+ });
4005840124enifed("ember-views/system/utils",
4005940125 ["exports"],
4006040126 function(__exports__) {
@@ -41756,8 +41822,8 @@ enifed("ember-views/views/states/pre_render",
4175641822 __exports__["default"] = preRender;
4175741823 });
4175841824enifed("ember-views/views/view",
41759- ["ember-metal/core","ember-metal/platform","ember-runtime/mixins/evented","ember-runtime/system/object","ember-metal/error","ember-metal/property_get","ember-metal/property_set","ember-metal/set_properties","ember-metal/run_loop","ember-metal/observer","ember-metal/properties","ember-metal/utils","ember-metal/computed","ember-metal/mixin","ember-metal/streams/simple","ember-views/streams/key_stream","ember-metal/streams/stream_binding","ember-views/streams/context_stream","ember-metal/is_none","ember-metal/deprecate_property","ember-runtime/system/native_array","ember-runtime/system/string","ember-metal/enumerable_utils","ember-metal/property_events","ember-views/system/jquery","ember-views/system/ext","ember-views/views/core_view","exports"],
41760- function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __dependency8__, __dependency9__, __dependency10__, __dependency11__, __dependency12__, __dependency13__, __dependency14__, __dependency15__, __dependency16__, __dependency17__, __dependency18__, __dependency19__, __dependency20__, __dependency21__, __dependency22__, __dependency23__, __dependency24__, __dependency25__, __dependency26__, __dependency27__, __exports__) {
41825+ ["ember-metal/core","ember-metal/platform","ember-runtime/mixins/evented","ember-runtime/system/object","ember-metal/error","ember-metal/property_get","ember-metal/property_set","ember-metal/set_properties","ember-metal/run_loop","ember-metal/observer","ember-metal/properties","ember-metal/utils","ember-metal/computed","ember-metal/mixin","ember-metal/streams/simple","ember-views/streams/key_stream","ember-metal/streams/stream_binding","ember-views/streams/context_stream","ember-metal/is_none","ember-metal/deprecate_property","ember-runtime/system/native_array","ember-runtime/system/string","ember-metal/enumerable_utils","ember-metal/property_events","ember-views/system/jquery","ember-views/system/ext","ember-views/views/core_view","ember-views/system/sanitize_attribute_value"," exports"],
41826+ function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __dependency8__, __dependency9__, __dependency10__, __dependency11__, __dependency12__, __dependency13__, __dependency14__, __dependency15__, __dependency16__, __dependency17__, __dependency18__, __dependency19__, __dependency20__, __dependency21__, __dependency22__, __dependency23__, __dependency24__, __dependency25__, __dependency26__, __dependency27__, __dependency28__, __exports__) {
4176141827 "use strict";
4176241828 // Ember.assert, Ember.deprecate, Ember.warn, Ember.TEMPLATES,
4176341829 // Ember.K, jQuery, Ember.lookup,
@@ -41807,6 +41873,7 @@ enifed("ember-views/views/view",
4180741873 // for the side effect of extending Ember.run.queues
4180841874
4180941875 var CoreView = __dependency27__["default"];
41876+ var sanitizeAttributeValue = __dependency28__["default"];
4181041877
4181141878
4181241879 /**
@@ -43177,6 +43244,22 @@ enifed("ember-views/views/view",
4317743244 if (!this.removedFromDOM) { this.destroyElement(); }
4317843245 },
4317943246
43247+ /**
43248+ The HTML `id` of the view's element in the DOM. You can provide this
43249+ value yourself but it must be unique (just as in HTML):
43250+
43251+ ```handlebars
43252+ {{my-component elementId="a-really-cool-id"}}
43253+ ```
43254+
43255+ If not manually set a default value will be provided by the framework.
43256+
43257+ Once rendered an element's `elementId` is considered immutable and you
43258+ should never change it.
43259+
43260+ @property elementId
43261+ @type String
43262+ */
4318043263 elementId: null,
4318143264
4318243265 /**
@@ -43980,7 +44063,8 @@ enifed("ember-views/views/view",
4398044063 // method.
4398144064 View.childViewsProperty = childViewsProperty;
4398244065
43983- View.applyAttributeBindings = function(elem, name, value) {
44066+ View.applyAttributeBindings = function(elem, name, initialValue) {
44067+ var value = sanitizeAttributeValue(elem[0], name, initialValue);
4398444068 var type = typeOf(value);
4398544069
4398644070 // if this changes, also change the logic in ember-handlebars/lib/helpers/binding.js
0 commit comments