OpenLayers.Control.SypAttribution = OpenLayers.Class (OpenLayers.Control.Attribution, {
updateAttribution: function() {
- var attributions = [SypStrings.propulsedByLink];
+ var attributions = [SypStrings.poweredByLink];
if (this.map && this.map.layers) {
for(var i=0, len=this.map.layers.length; i<len; i++) {
var layer = this.map.layers[i];
}
var map = this.map;
- if (map.getControlsByClass("OpenLayers.Control.ArgParser")[0].lat
- == undefined) { // map center was not set in ArgParser control.
+ if (map.getControlsByClass("OpenLayers.Control.ArgParser")[0].center
+ == null) { // map center was not set in ArgParser control.
var orig = this.Utils.mbr (this.dataLayer);
var centerBounds = new OpenLayers.Bounds();
}
var contentHTML;
if (feature.cluster[0].attributes.name) {
+ // escaping name is necessary because it's not enclosed in another html tag.
contentHTML = "<h2>" +
- feature.cluster[0].attributes.name +
+ SYP.Utils.escapeHTML(feature.cluster[0].attributes.name) +
"</h2>" +
feature.cluster[0].attributes.description;
} else {
},
showBigImage: function (href) {
- try {
- document.getElementById('bigimg_container').style.display = "table";
- } catch(e) {
+ if (OpenLayers.Util.getBrowserName() == "msie") {
document.getElementById('bigimg_container').style.display = "block";
+ } else {
+ document.getElementById('bigimg_container').style.display = "table";
}
+
var maxHeight = document.body.clientHeight * 0.9;
var maxWidth = document.body.clientWidth * 0.9;
document.getElementById('bigimg').style.height = "";
}
div.style.display = "block";
div.appendChild(textNode);
+ },
+
+ escapeHTML: function (str) {
+ if (!str) {
+ return "";
+ }
+ return str.
+ replace(/&/gm, '&').
+ replace(/'/gm, ''').
+ replace(/"/gm, '"').
+ replace(/>/gm, '>').
+ replace(/</gm, '<');
}
}
};
// sometimes, especially when cache is clear, firefox does not compute
// correctly popup size. That's because at the end of getRenderedDimensions,
-// dimensions of image is not known. So, we work around that problem by setting
-// image width and image height. That way, dimensions of image are set in
-// innerHTML, and are therefore known in getRenderedDimensions
-OpenLayers.Popup.Anchored.prototype.registerImageListeners = function() {
- var onImgLoad = function() {
- this.img.width = this.img.width;
- this.img.height = this.img.height;
- this.popup.updateSize();
- OpenLayers.Event.stopObserving(
- this.img, "load", this.img._onImageLoad
+// dimensions of image is not known. Then, popup size is too small for its
+// content. We work around the problem by checking that computed size is at
+// least as big as content. To achieve that, we need to override
+// OpenLayers.Popup.Anchored.prototype.updateSize to modify it slightly.
+OpenLayers.Popup.Anchored.prototype.updateSize = function() {
+ var self = this;
+
+ window.setTimeout(function() { // timeout added by SYP
+
+ // determine actual render dimensions of the contents by putting its
+ // contents into a fake contentDiv (for the CSS) and then measuring it
+ var preparedHTML = "<div class='" + self.contentDisplayClass+ "'>" +
+ self.contentDiv.innerHTML +
+ "</div>";
+
+ var containerElement = (self.map) ? self.map.layerContainerDiv
+ : document.body;
+ var realSize = OpenLayers.Util.getRenderedDimensions(
+ preparedHTML, null, {
+ displayClass: self.displayClass,
+ containerElement: containerElement
+ }
);
- };
- var images = this.contentDiv.getElementsByTagName("img");
- for (var i = 0, len = images.length; i < len; i++) {
- var img = images[i];
- if (img.width == 0 || img.height == 0) {
+ /*
+ * XXX: next four lines are added by SYP!
+ */
+ if (self.contentDiv) {
+ realSize.w = Math.max (realSize.w, self.contentDiv.scrollWidth);
+ realSize.h = Math.max (realSize.h, self.contentDiv.scrollHeight);
+ }
+
+ // is the "real" size of the div is safe to display in our map?
+ var safeSize = self.getSafeContentSize(realSize);
+
+ var newSize = null;
+ if (safeSize.equals(realSize)) {
+ //real size of content is small enough to fit on the map,
+ // so we use real size.
+ newSize = realSize;
- var context = {
- 'popup': this,
- 'img': img
- };
+ } else {
- img._onImgLoad = OpenLayers.Function.bind(onImgLoad, context);
+ //make a new OL.Size object with the clipped dimensions
+ // set or null if not clipped.
+ var fixedSize = new OpenLayers.Size();
+ fixedSize.w = (safeSize.w < realSize.w) ? safeSize.w : null;
+ fixedSize.h = (safeSize.h < realSize.h) ? safeSize.h : null;
+
+ if (fixedSize.w && fixedSize.h) {
+ //content is too big in both directions, so we will use
+ // max popup size (safeSize), knowing well that it will
+ // overflow both ways.
+ newSize = safeSize;
+ } else {
+ //content is clipped in only one direction, so we need to
+ // run getRenderedDimensions() again with a fixed dimension
+ var clippedSize = OpenLayers.Util.getRenderedDimensions(
+ preparedHTML, fixedSize, {
+ displayClass: self.contentDisplayClass,
+ containerElement: containerElement
+ }
+ );
+
+ //if the clipped size is still the same as the safeSize,
+ // that means that our content must be fixed in the
+ // offending direction. If overflow is 'auto', this means
+ // we are going to have a scrollbar for sure, so we must
+ // adjust for that.
+ //
+ var currentOverflow = OpenLayers.Element.getStyle(
+ self.contentDiv, "overflow"
+ );
+ if ( (currentOverflow != "hidden") &&
+ (clippedSize.equals(safeSize)) ) {
+ var scrollBar = OpenLayers.Util.getScrollbarWidth();
+ if (fixedSize.w) {
+ clippedSize.h += scrollBar;
+ } else {
+ clippedSize.w += scrollBar;
+ }
+ }
- OpenLayers.Event.observe(img, 'load', img._onImgLoad);
- }
- }
+ newSize = self.getSafeContentSize(clippedSize);
+ }
+ }
+ self.setSize(newSize);
+ }, 0);
}