aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMisko Hevery2012-03-13 14:42:26 -0700
committerMisko Hevery2012-03-13 16:59:03 -0700
commitde9464c1431906883bdf180fb00615e6fa371577 (patch)
tree5002990279d089cae2577ab98468217258455dec /src
parent31cd5803102ba93f8b93cd5304aea4ade50f96ab (diff)
downloadangular.js-de9464c1431906883bdf180fb00615e6fa371577.tar.bz2
f(compile): boolean attributes too agresive
- compiler would rewrite boolean attributes on all elements. This is too aggressive and interferes with some third-party frameworks
Diffstat (limited to 'src')
-rw-r--r--src/jqLite.js8
-rw-r--r--src/service/compiler.js10
2 files changed, 13 insertions, 5 deletions
diff --git a/src/jqLite.js b/src/jqLite.js
index dd793ab2..96dda112 100644
--- a/src/jqLite.js
+++ b/src/jqLite.js
@@ -310,6 +310,14 @@ var BOOLEAN_ATTR = {};
forEach('multiple,selected,checked,disabled,readOnly,required'.split(','), function(value) {
BOOLEAN_ATTR[lowercase(value)] = value;
});
+var BOOLEAN_ELEMENTS = {};
+forEach('input,select,option,textarea,button'.split(','), function(value) {
+ BOOLEAN_ELEMENTS[uppercase(value)] = true;
+});
+
+function isBooleanAttr(element, name) {
+ return BOOLEAN_ELEMENTS[element.nodeName] && BOOLEAN_ATTR[name.toLowerCase()];
+}
forEach({
data: JQLiteData,
diff --git a/src/service/compiler.js b/src/service/compiler.js
index cefc2d81..8aba28e4 100644
--- a/src/service/compiler.js
+++ b/src/service/compiler.js
@@ -381,10 +381,10 @@ function $CompileProvider($provide) {
attrs[nName] = value = trim((msie && name == 'href')
? decodeURIComponent(node.getAttribute(name, 2))
: attr.value);
- if (BOOLEAN_ATTR[nName]) {
+ if (isBooleanAttr(node, nName)) {
attrs[nName] = true; // presence means true
}
- addAttrInterpolateDirective(directives, value, nName)
+ addAttrInterpolateDirective(node, directives, value, nName)
addDirective(directives, nName, 'A', maxPriority);
}
@@ -852,11 +852,11 @@ function $CompileProvider($provide) {
}
- function addAttrInterpolateDirective(directives, value, name) {
+ function addAttrInterpolateDirective(node, directives, value, name) {
var interpolateFn = $interpolate(value, true);
if (SIDE_EFFECT_ATTRS[name]) {
name = SIDE_EFFECT_ATTRS[name];
- if (BOOLEAN_ATTR[name]) {
+ if (isBooleanAttr(node, name)) {
value = true;
}
} else if (!interpolateFn) {
@@ -921,7 +921,7 @@ function $CompileProvider($provide) {
* @param {string=} attrName Optional none normalized name. Defaults to key.
*/
function attrSetter(key, value, attrName) {
- var booleanKey = BOOLEAN_ATTR[key.toLowerCase()];
+ var booleanKey = isBooleanAttr(this.$element[0], key.toLowerCase());
if (booleanKey) {
value = toBoolean(value);