From 51b5095d4820915fc04aeaf0a54359ee184d38c1 Mon Sep 17 00:00:00 2001 From: crschmidt Date: Fri, 15 May 2009 15:36:21 +0000 Subject: [PATCH] Committing an updated fix for #1906. This fixes a 2.7->2.8 regression in particular behavior with regard to determining the size of a popup. thanks to the absolutely tireless work of gregers on this issue! Also, in case anyone was wondering? Browsers suck. (Pullup #1906) git-svn-id: http://svn.openlayers.org/trunk/openlayers@9384 dc9f47b5-9b13-0410-9fdd-eb0c1a62fdaf --- lib/OpenLayers/Popup.js | 2 +- lib/OpenLayers/Util.js | 32 ++++++++++++++++++++++++--- tests/manual/rendered-dimensions.html | 27 ++++++++++++++++++++-- 3 files changed, 55 insertions(+), 6 deletions(-) diff --git a/lib/OpenLayers/Popup.js b/lib/OpenLayers/Popup.js index 99816fe8dc..76df7a4fc6 100644 --- a/lib/OpenLayers/Popup.js +++ b/lib/OpenLayers/Popup.js @@ -506,7 +506,7 @@ OpenLayers.Popup = OpenLayers.Class({ // contents into a fake contentDiv (for the CSS) and then measuring it var preparedHTML = "
" + this.contentDiv.innerHTML + - "
"; + "
"; var containerElement = (this.map) ? this.map.layerContainerDiv : document.body; diff --git a/lib/OpenLayers/Util.js b/lib/OpenLayers/Util.js index d31c1dc6fb..5709773a1a 100644 --- a/lib/OpenLayers/Util.js +++ b/lib/OpenLayers/Util.js @@ -1540,9 +1540,7 @@ OpenLayers.Util.getRenderedDimensions = function(contentHTML, size, options) { // create temp container div with restricted size var container = document.createElement("div"); - container.style.overflow= ""; - container.style.position = "absolute"; - container.style.left = "-9999px"; + container.style.visibility = "hidden"; var containerElement = (options && options.containerElement) ? options.containerElement : document.body; @@ -1567,12 +1565,40 @@ OpenLayers.Util.getRenderedDimensions = function(contentHTML, size, options) { var content = document.createElement("div"); content.innerHTML = contentHTML; + // we need overflow visible when calculating the size + content.style.overflow = "visible"; + if (content.childNodes) { + for (var i=0, l=content.childNodes.length; iContent

"); var bigger = OpenLayers.Util.getRenderedDimensions("

Content

", null, {displayClass: 'testDims'}); + var overflow = OpenLayers.Util.getRenderedDimensions("

Content

"); + var width = OpenLayers.Util.getRenderedDimensions("

Content

", new OpenLayers.Size(250, null)); + var height = OpenLayers.Util.getRenderedDimensions("

Content

", new OpenLayers.Size(null, 40)); if ((size.w + 40) == bigger.w && (size.h + 40) == bigger.h) { - out.innerHTML = "Pass: " + size + ", " + bigger; + out.innerHTML = "bigger Pass: " + size + ", " + bigger; } else { - out.innerHTML = "Fail: " + size + ", " + bigger; + out.innerHTML = "bigger Fail: " + size + ", " + bigger; + } + + if (size.w == overflow.w && size.h == overflow.h) { + out.innerHTML += "
overflow Pass: " + size + ", " + overflow; + } else { + out.innerHTML += "
overflow Fail: " + size + ", " + overflow; + } + + if (width.w == 250 && width.h == size.h) { + out.innerHTML += "
width Pass: " + size + ", " + width; + } + else { + out.innerHTML += "
width Fail: " + size + ", " + width; + } + + if (height.h == 40 && height.w == size.w) { + out.innerHTML += "
height Pass: " + size + ", " + height; + } + else { + out.innerHTML += "
height Fail: " + size + ", " + height; } }