diff --git a/doc/authors.txt b/doc/authors.txt index 0589919e32..072416d55a 100644 --- a/doc/authors.txt +++ b/doc/authors.txt @@ -1,6 +1,7 @@ OpenLayers contributors: Howard Butler Bertil Chaupis +John Cole Jeff Dege Schuyler Erle Christian López Espínola diff --git a/examples/popups.html b/examples/popups.html index 2b6855c17c..97a922e635 100644 --- a/examples/popups.html +++ b/examples/popups.html @@ -47,7 +47,7 @@ popup = new OpenLayers.Popup.Anchored("chicken", new OpenLayers.LonLat(5,40), new OpenLayers.Size(200,200), - "example popup"); + "example popup", true); map.addPopup(popup); } @@ -69,8 +69,17 @@ } function mousedown(evt) { + // check to see if the popup was hidden by the close box + // if so, then destroy it before continuing + if (popup != null) { + if (!popup.visible()) { + markers.map.removePopup(popup); + popup.destroy(); + popup = null; + } + } if (popup == null) { - popup = feature.createPopup(); + popup = feature.createPopup(true); popup.setContentHTML("click me"); popup.setBackgroundColor("yellow"); popup.setOpacity(0.7); diff --git a/lib/OpenLayers/Feature.js b/lib/OpenLayers/Feature.js index f98c10c230..069a904ba3 100644 --- a/lib/OpenLayers/Feature.js +++ b/lib/OpenLayers/Feature.js @@ -121,6 +121,7 @@ OpenLayers.Feature.prototype= { }, /** + * @param {Boolean} closeBox create popup with closebox or not * @returns A Popup Object created from the 'lonlat', 'popupSize', * and 'popupContentHTML' properties set in this.data. It uses * this.marker.icon as default anchor. @@ -132,7 +133,7 @@ OpenLayers.Feature.prototype= { * * @type OpenLayers.Popup.AnchoredBubble */ - createPopup: function() { + createPopup: function(closeBox) { if (this.lonlat != null) { @@ -143,7 +144,7 @@ OpenLayers.Feature.prototype= { this.lonlat, this.data.popupSize, this.data.popupContentHTML, - anchor); + anchor, closeBox); } return this.popup; }, diff --git a/lib/OpenLayers/Popup.js b/lib/OpenLayers/Popup.js index 00f630e338..00f4ede767 100644 --- a/lib/OpenLayers/Popup.js +++ b/lib/OpenLayers/Popup.js @@ -45,6 +45,9 @@ OpenLayers.Popup.prototype = { /** @type DOMElement */ contentDiv:null, + + /** @type DOMElement */ + groupDiv:null, /** @type int */ padding: 5, @@ -84,13 +87,18 @@ OpenLayers.Popup.prototype = { this.div = OpenLayers.Util.createDiv(this.id, null, null, null, null, null, "hidden"); this.div.className = 'olPopup'; + + this.groupDiv = OpenLayers.Util.createDiv(null, null, null, + null, "relative", null, + "hidden"); var id = this.div.id + "_contentDiv"; this.contentDiv = OpenLayers.Util.createDiv(id, null, this.size.clone(), null, "relative", null, "hidden"); this.contentDiv.className = 'olPopupContent'; - this.div.appendChild(this.contentDiv); + this.groupDiv.appendChild(this.contentDiv); + this.div.appendChild(this.groupDiv); if (closeBox == true) { // close icon @@ -102,7 +110,7 @@ OpenLayers.Popup.prototype = { img); closeImg.style.right = this.padding + "px"; closeImg.style.top = this.padding + "px"; - this.div.appendChild(closeImg); + this.groupDiv.appendChild(closeImg); var closePopup = function(e) { this.hide(); diff --git a/lib/OpenLayers/Popup/AnchoredBubble.js b/lib/OpenLayers/Popup/AnchoredBubble.js index 84503cd7a6..17b6b7714b 100644 --- a/lib/OpenLayers/Popup/AnchoredBubble.js +++ b/lib/OpenLayers/Popup/AnchoredBubble.js @@ -139,7 +139,7 @@ OpenLayers.Popup.AnchoredBubble.prototype = if (firstTime) { OpenLayers.Rico.Corner.round(this.div, options); } else { - OpenLayers.Rico.Corner.reRound(this.contentDiv, options); + OpenLayers.Rico.Corner.reRound(this.groupDiv, options); //set the popup color and opacity this.setBackgroundColor(); this.setOpacity(); diff --git a/tests/test_Popup.html b/tests/test_Popup.html index 55c4f37a96..e96bab2068 100644 --- a/tests/test_Popup.html +++ b/tests/test_Popup.html @@ -80,7 +80,7 @@ t.eq(popup.div.style.width, w + "px", "width position of popup.div set correctly"); t.eq(popup.div.style.height, h + "px", "heightposition of popup.div set correctly"); - var contentDiv = popup.div.childNodes[0]; + var contentDiv = popup.div.childNodes[0].childNodes[0]; t.eq(contentDiv.className, "olPopupContent", "correct content div className"); t.eq(contentDiv.id, "chicken_contentDiv", "correct content div id");