X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=src%2Fsupport.js;h=878db1f0ba401d1986b8dbbc0c705fafb66c50ac;hb=0cdcef5b364fa3c89d7f27935e77b453f4a56efd;hp=9d5558f396a81864b269e0fd8d76b0c326833ed4;hpb=542099a278e79dce38e814e7e7b448a1b73df82f;p=jquery.git diff --git a/src/support.js b/src/support.js index 9d5558f..878db1f 100644 --- a/src/support.js +++ b/src/support.js @@ -1,17 +1,21 @@ -(function(){ +(function( jQuery ) { + +(function() { jQuery.support = {}; var root = document.documentElement, script = document.createElement("script"), div = document.createElement("div"), - id = "script" + now(); + id = "script" + jQuery.now(); div.style.display = "none"; - div.innerHTML = '
a'; + div.innerHTML = "
a"; var all = div.getElementsByTagName("*"), - a = div.getElementsByTagName("a")[0]; + a = div.getElementsByTagName("a")[0], + select = document.createElement("select"), + opt = select.appendChild( document.createElement("option") ); // Can't get basic test support if ( !all || !all.length || !a ) { @@ -20,7 +24,7 @@ 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 @@ -40,22 +44,41 @@ // Make sure that element opacity exists // (IE uses filter instead) - opacity: a.style.opacity === "0.55", + // 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, + // Make sure that if no value is specified for a checkbox + // that it defaults to "on". + // (WebKit defaults to "" instead) + checkOn: div.getElementsByTagName("input")[0].value === "on", + + // Make sure that a selected-by-default option has a working selected property. + // (WebKit defaults to false instead of true, IE too, if it's in an optgroup) + optSelected: opt.selected, + // Will be defined later + optDisabled: false, + checkClone: false, scriptEval: false, noCloneEvent: true, - boxModel: null + boxModel: null, + inlineBlockNeedsLayout: false, + reliableHiddenOffsets: true }; + // Make sure that the options inside disabled selects aren't marked as disabled + // (WebKit marks them as diabled) + select.disabled = true; + jQuery.support.optDisabled = !opt.disabled; + script.type = "text/javascript"; try { script.appendChild( document.createTextNode( "window." + id + "=1;" ) ); - } catch(e){} + } catch(e) {} root.insertBefore( script, root.firstChild ); @@ -70,7 +93,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; @@ -79,14 +102,46 @@ div.cloneNode(true).fireEvent("onclick"); } + div = document.createElement("div"); + div.innerHTML = ""; + + var fragment = document.createDocumentFragment(); + fragment.appendChild( div.firstChild ); + + // WebKit doesn't clone checked state correctly in fragments + jQuery.support.checkClone = fragment.cloneNode(true).cloneNode(true).lastChild.checked; + // Figure out if the W3C box model works as expected // document.body must exist before we can do this - jQuery(function(){ + 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; + + // Check if natively block-level elements act like inline-block + // elements when setting their display to 'inline' + // (IE < 8 does this) + if ( 'zoom' in div.style ) { + div.style.display = 'inline'; + + // Layout is necessary to trigger this “feature” + div.style.zoom = 1; + jQuery.support.inlineBlockNeedsLayout = div.offsetWidth === 2; + } + + // Check if table cells still have offsetWidth/Height when they are set + // to display:none and there are still other visible table cells in a + // table row; if so, offsetWidth/Height are not reliable for use when + // determining if an element has been hidden directly using + // display:none (it is still safe to use offsets if a parent element is + // hidden; don safety goggles and see bug #4512 for more information). + // (only IE 8 fails this test) + div.innerHTML = '
t
'; + jQuery.support.reliableHiddenOffsets = div.getElementsByTagName('td')[0].offsetHeight === 0; + div.innerHTML = ''; + document.body.removeChild( div ).style.display = 'none'; div = null; }); @@ -109,7 +164,6 @@ jQuery.support.submitBubbles = eventSupported("submit"); jQuery.support.changeBubbles = eventSupported("change"); - jQuery.support.focusBubbles = eventSupported("focus"); // release memory in IE root = script = div = all = a = null; @@ -127,3 +181,5 @@ jQuery.props = { usemap: "useMap", frameborder: "frameBorder" }; + +})( jQuery );