If you define display: none; via a styleClass to an element, Element.show and Element.getDimensions will fail:
Testcase:
<style>
.hidden { display: none; }
</style>
<div id="hidden" class="hidden">I'm hidden</div>
<div id="visible" style="display: none;">I'm visible</div>
<script>
Element.show($("hidden"));
Element.show($("visible"));
</script>
The problem is simply that if you remove the direct style-setting for the element element.display = ''; the style will be inherited from the styleClass. element.display = 'auto'; won't work too. So we would need to do this manualy.
Here is a working approach:
Object.extend(Element, {
BLOCK_LEVEL: ["address","blockquote","center","dl","dir","div","fieldset",
"form","h1-6","hr","isindex","menu","noframes","noscript",
"ol","p","pre","table","ul","center","dir","menu","noframes","isindex"],
visible: function(element) {
return $(element).style.display != 'none';
},
toggle: function() {
// ...
},
isBlockLevel: function(element) {
if (Element.getStyle(element, "display") == "block" ||
element.isBlockLevel == true ||
Element.BLOCK_LEVEL.indexOf(element.nodeName.toLowerCase()) != -1)
{ return element.isBlockLevel = true; }
else { return element.isBlockLevel = false; }
},
hide: function() {
// ...
},
show: function() {
for (var i = 0; i < arguments.length; i++) {
var element = $(arguments[i]);
element.style.display = Element.isBlockLevel(element) ? 'block' : '';
}
},
// ...
getDimensions: function(element) {
element = $(element);
if (Element.getStyle(element, 'display') != 'none')
return {width: element.offsetWidth, height: element.offsetHeight};
// All *Width and *Height properties give 0 on elements with display none,
// so enable the element temporarily
var els = element.style;
var originalVisibility = els.visibility;
var originalPosition = els.position;
els.visibility = 'hidden';
els.position = 'absolute';
els.display = Element.isBlockLevel(element) ? 'block' : '';
// ...
return {width: originalWidth, height: originalHeight};
},
// ...
p.s.
sorry for not providing a diff, but i have troubles with the correct linebreaks. did they change recently?