Compat mode fix not in 4.0?
blabno Jul 9, 2010 2:28 AMThere is a problem with jQuery when content type is set to "application/xhtml+xml".
Nick has submitted a bug to jQuery long ago, but they just don't care, so it was fixed in RF 3.3.x (or ealier) by additional code in jquery.js bundled with richfaces. This code is not any more in RF 4.0.0-SNAPSHOT. Shouldn't it be added?
It's this code:
(function() {
var safariCompatMode;
var getCompatMode = function() {
var compatMode = document.compatMode;
if (!compatMode && jQuery.browser.safari) {
if (!safariCompatMode) {
//detect compatMode as described in http://code.google.com/p/doctype/wiki/ArticleCompatMode
var width = jQuery(document.createElement("div")).attr('style', 'position:absolute;width:0;height:0;width:1')
.css('width');
safariCompatMode = compatMode = (width == '1px' ? 'BackCompat' : 'CSS1Compat');
} else {
compatMode = safariCompatMode;
}
}
return compatMode;
};
// Create innerHeight, innerWidth, outerHeight and outerWidth methods
jQuery.each([ "Height", "Width" ], function(i, name) {
var tl = i ? "Left" : "Top", // top or left
br = i ? "Right" : "Bottom", // bottom or right
lower = name.toLowerCase();
// innerHeight and innerWidth
jQuery.fn["inner" + name] = function() {
return this[0] ?
jQuery.css(this[0], lower, false, "padding") :
null;
};
// outerHeight and outerWidth
jQuery.fn["outer" + name] = function(margin) {
return this[0] ?
jQuery.css(this[0], lower, false, margin ? "margin" : "border") :
null;
};
var type = name.toLowerCase();
jQuery.fn[ type ] = function(size) {
// Get window width or height
return this[0] == window ?
// Everyone else use document.documentElement or document.body depending on Quirks vs Standards mode
getCompatMode() == "CSS1Compat" && document.documentElement[ "client" + name ] ||
document.body[ "client" + name ] :
// Get document width or height
this[0] == document ?
// Either scroll[Width/Height] or offset[Width/Height], whichever is greater
Math.max(
document.documentElement["client" + name],
document.body["scroll" + name], document.documentElement["scroll" + name],
document.body["offset" + name], document.documentElement["offset" + name]
) :
// Get or set width or height on the element
size === undefined ?
// Get width or height on the element
(this.length ? jQuery.css(this[0], type) : null) :
// Set the width or height on the element (default to pixels if value is unitless)
this.css(type, typeof size === "string" ? size : size + "px");
};
});
}());