diff --git a/CHANGELOG b/CHANGELOG index b99584966..c27d403d0 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,5 @@ +* Fix issue where certain versions of Safari treat class names case-insensitively in Selector/$$ queries. (Andrew Dupont, kangax, Brice) + * Fix issue where Function#argumentNames returned incorrect results in IE when comments were intermixed with argument names. (Christophe Porteneuve, T.J. Crowder) * Performance improvements in Function methods (Samuel Lebeau, kangax, jddalton, Tobie Langel). diff --git a/src/dom/selector.js b/src/dom/selector.js index 9a8ff3fab..5ece49e3d 100644 --- a/src/dom/selector.js +++ b/src/dom/selector.js @@ -38,6 +38,8 @@ var Selector = Class.create({ shouldUseSelectorsAPI: function() { if (!Prototype.BrowserFeatures.SelectorsAPI) return false; + + if (Selector.CASE_INSENSITIVE_CLASS_NAMES) return false; if (!Selector._div) Selector._div = new Element('div'); @@ -177,6 +179,25 @@ var Selector = Class.create({ } }); +if (Prototype.BrowserFeatures.SelectorsAPI && + document.compatMode === 'BackCompat') { + // Versions of Safari 3 before 3.1.2 treat class names case-insensitively in + // quirks mode. If we detect this behavior, we should use a different + // approach. + Selector.CASE_INSENSITIVE_CLASS_NAMES = (function(){ + var div = document.createElement('div'), + span = document.createElement('span'); + + div.id = "prototype_test_id"; + span.className = 'Test'; + div.appendChild(span); + var isIgnored = (div.querySelector('#prototype_test_id .test') !== null); + div = span = null; + alert(isIgnored); + return isIgnored; + })(); +} + Object.extend(Selector, { _cache: { },