X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=src%2Fsupport.js;h=097866c284363b00e489dee1bb83557d5980523c;hb=61e37d41490aed319a176c6ca7feb95e5505059c;hp=429825083396aed0acdbb8b3d3c6d84763a7a1a9;hpb=985856b823b1648bffc3fd63c1faf836d0ddaf7c;p=jquery.git diff --git a/src/support.js b/src/support.js index 4298250..097866c 100644 --- a/src/support.js +++ b/src/support.js @@ -1,14 +1,14 @@ -(function(){ +(function() { jQuery.support = {}; var root = document.documentElement, script = document.createElement("script"), div = document.createElement("div"), - id = "script" + (new Date).getTime(); + id = "script" + now(); div.style.display = "none"; - div.innerHTML = '
a'; + div.innerHTML = '
a'; var all = div.getElementsByTagName("*"), a = div.getElementsByTagName("a")[0]; @@ -20,33 +20,29 @@ jQuery.support = { // IE strips leading whitespace when .innerHTML is used - leadingWhitespace: div.firstChild.nodeType == 3, - + leadingWhitespace: div.firstChild.nodeType === 3, + // Make sure that tbody elements aren't automatically inserted // IE will insert them into empty tables tbody: !div.getElementsByTagName("tbody").length, - - // Make sure that you can get all elements in an element - // IE 7 always returns no results - objectAll: !!div.getElementsByTagName("object")[0] - .getElementsByTagName("*").length, - + // Make sure that link elements get serialized correctly by innerHTML // This requires a wrapper element in IE htmlSerialize: !!div.getElementsByTagName("link").length, - + // Get the style information from getAttribute // (IE uses .cssText insted) style: /red/.test( a.getAttribute("style") ), - + // Make sure that URLs aren't manipulated // (IE normalizes it by default) hrefNormalized: a.getAttribute("href") === "/a", - + // Make sure that element opacity exists // (IE uses filter instead) - opacity: a.style.opacity === "0.5", - + // Use a regex to work around a WebKit issue. See #5145 + opacity: /^0.55$/.test( a.style.opacity ), + // Verify style float existence // (IE uses styleFloat instead of cssFloat) cssFloat: !!a.style.cssFloat, @@ -56,14 +52,14 @@ noCloneEvent: true, boxModel: null }; - + script.type = "text/javascript"; try { script.appendChild( document.createTextNode( "window." + id + "=1;" ) ); - } catch(e){} + } catch(e) {} root.insertBefore( script, root.firstChild ); - + // Make sure that the execution of code works by injecting a script // tag with appendChild/createTextNode // (IE doesn't support this, fails, and uses .text instead) @@ -75,7 +71,7 @@ root.removeChild( script ); if ( div.attachEvent && div.fireEvent ) { - div.attachEvent("onclick", function click(){ + div.attachEvent("onclick", function click() { // Cloning a node shouldn't copy over any // bound event handlers (IE does this) jQuery.support.noCloneEvent = false; @@ -86,27 +82,49 @@ // Figure out if the W3C box model works as expected // document.body must exist before we can do this - jQuery(function(){ + // TODO: This timeout is temporary until I move ready into core.js. + jQuery(function() { var div = document.createElement("div"); div.style.width = div.style.paddingLeft = "1px"; document.body.appendChild( div ); jQuery.boxModel = jQuery.support.boxModel = div.offsetWidth === 2; document.body.removeChild( div ).style.display = 'none'; + div = null; }); -})(); -var styleFloat = jQuery.support.cssFloat ? "cssFloat" : "styleFloat"; + // Technique from Juriy Zaytsev + // http://thinkweb2.com/projects/prototype/detecting-event-support-without-browser-sniffing/ + var eventSupported = function( eventName ) { + var el = document.createElement("div"); + eventName = "on" + eventName; + + var isSupported = (eventName in el); + if ( !isSupported ) { + el.setAttribute(eventName, "return;"); + isSupported = typeof el[eventName] === "function"; + } + el = null; + + return isSupported; + }; + + jQuery.support.submitBubbles = eventSupported("submit"); + jQuery.support.changeBubbles = eventSupported("change"); + + // release memory in IE + root = script = div = all = a = null; +})(); jQuery.props = { "for": "htmlFor", "class": "className", - "float": styleFloat, - cssFloat: styleFloat, - styleFloat: styleFloat, readonly: "readOnly", maxlength: "maxLength", cellspacing: "cellSpacing", rowspan: "rowSpan", - tabindex: "tabIndex" + colspan: "colSpan", + tabindex: "tabIndex", + usemap: "useMap", + frameborder: "frameBorder" };