diff options
| author | Misko Hevery | 2012-03-13 14:42:26 -0700 | 
|---|---|---|
| committer | Misko Hevery | 2012-03-13 16:59:03 -0700 | 
| commit | de9464c1431906883bdf180fb00615e6fa371577 (patch) | |
| tree | 5002990279d089cae2577ab98468217258455dec /src | |
| parent | 31cd5803102ba93f8b93cd5304aea4ade50f96ab (diff) | |
| download | angular.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.js | 8 | ||||
| -rw-r--r-- | src/service/compiler.js | 10 | 
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); | 
