diff --git a/src/Angular.js b/src/Angular.js index 905421e0..711483a2 100644 --- a/src/Angular.js +++ b/src/Angular.js @@ -615,12 +615,14 @@ function makeMap(str) { if (msie < 9) { nodeName_ = function(element) { element = element.nodeName ? element : element[0]; - return (element.scopeName && element.scopeName != 'HTML') - ? uppercase(element.scopeName + ':' + element.nodeName) : element.nodeName; + return lowercase( + (element.scopeName && element.scopeName != 'HTML') + ? element.scopeName + ':' + element.nodeName : element.nodeName + ); }; } else { nodeName_ = function(element) { - return element.nodeName ? element.nodeName : element[0].nodeName; + return lowercase(element.nodeName ? element.nodeName : element[0].nodeName); }; } @@ -683,10 +685,10 @@ function arrayRemove(array, value) { function isLeafNode (node) { if (node) { - switch (node.nodeName) { - case "OPTION": - case "PRE": - case "TITLE": + switch (nodeName_(node)) { + case "option": + case "pre": + case "title": return true; } } diff --git a/src/jqLite.js b/src/jqLite.js index ea52b043..3eee01f5 100644 --- a/src/jqLite.js +++ b/src/jqLite.js @@ -482,7 +482,7 @@ forEach('multiple,selected,checked,disabled,readOnly,required,open'.split(','), }); var BOOLEAN_ELEMENTS = {}; forEach('input,select,option,textarea,button,form,details'.split(','), function(value) { - BOOLEAN_ELEMENTS[uppercase(value)] = true; + BOOLEAN_ELEMENTS[value] = true; }); var ALIASED_ATTR = { 'ngMinlength' : 'minlength', @@ -495,7 +495,7 @@ function getBooleanAttrName(element, name) { var booleanAttr = BOOLEAN_ATTR[name.toLowerCase()]; // booleanAttr is here twice to minimize DOM access - return booleanAttr && BOOLEAN_ELEMENTS[element.nodeName] && booleanAttr; + return booleanAttr && BOOLEAN_ELEMENTS[nodeName_(element)] && booleanAttr; } function getAliasedAttrName(element, name) { @@ -605,7 +605,7 @@ forEach({ val: function(element, value) { if (isUndefined(value)) { - if (nodeName_(element) === 'SELECT' && element.multiple) { + if (element.multiple && nodeName_(element) === 'select') { var result = []; forEach(element.options, function (option) { if (option.selected) { diff --git a/src/ng/anchorScroll.js b/src/ng/anchorScroll.js index b5ef1810..749d693d 100644 --- a/src/ng/anchorScroll.js +++ b/src/ng/anchorScroll.js @@ -67,7 +67,7 @@ function $AnchorScrollProvider() { function getFirstAnchor(list) { var result = null; forEach(list, function(element) { - if (!result && lowercase(element.nodeName) === 'a') result = element; + if (!result && nodeName_(element) === 'a') result = element; }); return result; } diff --git a/src/ng/compile.js b/src/ng/compile.js index c919929a..5d3cfed6 100644 --- a/src/ng/compile.js +++ b/src/ng/compile.js @@ -759,8 +759,8 @@ function $CompileProvider($provide, $$sanitizeUriProvider) { nodeName = nodeName_(this.$$element); // sanitize a[href] and img[src] values - if ((nodeName === 'A' && key === 'href') || - (nodeName === 'IMG' && key === 'src')) { + if ((nodeName === 'a' && key === 'href') || + (nodeName === 'img' && key === 'src')) { this[key] = value = $$sanitizeUri(value, key === 'src'); } @@ -1030,7 +1030,7 @@ function $CompileProvider($provide, $$sanitizeUriProvider) { case 1: /* Element */ // use the node name: addDirective(directives, - directiveNormalize(nodeName_(node).toLowerCase()), 'E', maxPriority, ignoreDirective); + directiveNormalize(nodeName_(node)), 'E', maxPriority, ignoreDirective); // iterate over the attributes for (var attr, name, nName, ngAttrName, value, isNgAttr, nAttrs = node.attributes, @@ -1897,8 +1897,8 @@ function $CompileProvider($provide, $$sanitizeUriProvider) { var tag = nodeName_(node); // maction[xlink:href] can source SVG. It's not limited to . if (attrNormalizedName == "xlinkHref" || - (tag == "FORM" && attrNormalizedName == "action") || - (tag != "IMG" && (attrNormalizedName == "src" || + (tag == "form" && attrNormalizedName == "action") || + (tag != "img" && (attrNormalizedName == "src" || attrNormalizedName == "ngSrc"))) { return $sce.RESOURCE_URL; } @@ -1912,7 +1912,7 @@ function $CompileProvider($provide, $$sanitizeUriProvider) { if (!interpolateFn) return; - if (name === "multiple" && nodeName_(node) === "SELECT") { + if (name === "multiple" && nodeName_(node) === "select") { throw $compileMinErr("selmulti", "Binding to the 'multiple' attribute is not supported. Element: {0}", startingTag(node)); diff --git a/src/ng/location.js b/src/ng/location.js index 52215451..6fa0a0bd 100644 --- a/src/ng/location.js +++ b/src/ng/location.js @@ -636,7 +636,7 @@ function $LocationProvider(){ var elm = jqLite(event.target); // traverse the DOM up to find first A tag - while (lowercase(elm[0].nodeName) !== 'a') { + while (nodeName_(elm[0]) !== 'a') { // ignore rewriting if no A tag (reached root element, or no parent - removed from document) if (elm[0] === $rootElement[0] || !(elm = elm.parent())[0]) return; } diff --git a/src/ngScenario/browserTrigger.js b/src/ngScenario/browserTrigger.js index f74a04c1..e3450a8f 100644 --- a/src/ngScenario/browserTrigger.js +++ b/src/ngScenario/browserTrigger.js @@ -34,7 +34,6 @@ var inputType = (element.type) ? element.type.toLowerCase() : null, nodeName = element.nodeName.toLowerCase(); - if (!eventType) { eventType = { 'text': 'change', diff --git a/src/ngScenario/dsl.js b/src/ngScenario/dsl.js index 50d20c95..2c4a3b13 100644 --- a/src/ngScenario/dsl.js +++ b/src/ngScenario/dsl.js @@ -377,7 +377,7 @@ angular.scenario.dsl('element', function() { var href = elements.attr('href'); var eventProcessDefault = elements.trigger('click')[0]; - if (href && elements[0].nodeName.toUpperCase() === 'A' && eventProcessDefault) { + if (href && elements[0].nodeName.toLowerCase() === 'a' && eventProcessDefault) { this.application.navigateTo(href, function() { done(); }, done); @@ -394,7 +394,7 @@ angular.scenario.dsl('element', function() { var href = elements.attr('href'); var eventProcessDefault = elements.trigger('dblclick')[0]; - if (href && elements[0].nodeName.toUpperCase() === 'A' && eventProcessDefault) { + if (href && elements[0].nodeName.toLowerCase() === 'a' && eventProcessDefault) { this.application.navigateTo(href, function() { done(); }, done); diff --git a/test/AngularSpec.js b/test/AngularSpec.js index 472ae626..5d75eb1d 100644 --- a/test/AngularSpec.js +++ b/test/AngularSpec.js @@ -951,7 +951,7 @@ describe('angular', function() { var div = jqLite('
' + '' + '
')[0]; - expect(nodeName_(div.childNodes[0])).toBe('NGTEST:FOO'); + expect(nodeName_(div.childNodes[0])).toBe('ngtest:foo'); expect(div.childNodes[0].getAttribute('ngtest:attr')).toBe('bar'); }); @@ -960,7 +960,7 @@ describe('angular', function() { var div = jqLite('
' + '' + '
')[0]; - expect(nodeName_(div.childNodes[0])).toBe('NGTEST:FOO'); + expect(nodeName_(div.childNodes[0])).toBe('ngtest:foo'); expect(div.childNodes[0].getAttribute('ngtest:attr')).toBe('bar'); }); } diff --git a/test/ng/compileSpec.js b/test/ng/compileSpec.js index 415d9d40..5de1728a 100755 --- a/test/ng/compileSpec.js +++ b/test/ng/compileSpec.js @@ -4625,7 +4625,7 @@ describe('$compile', function() { inject(function($compile, $rootScope) { var element = jqLite('
before
after
').contents(); expect(element.length).toEqual(3); - expect(nodeName_(element[1])).toBe('DIV'); + expect(nodeName_(element[1])).toBe('div'); $compile(element)($rootScope); expect(nodeName_(element[1])).toBe('#comment'); expect(nodeName_(comment)).toBe('#comment');