X-Git-Url: https://dev.renevier.net/gitweb.cgi?p=syp.git;a=blobdiff_plain;f=js%2Fsyp.js;h=8e32d8580d4d7e86d7b0f178cfa46f627d0c8e99;hp=7e69fb75ae61b6b930101cdfce0fdf535a07aabd;hb=4acc8da49e3d4083fd9906388dd8fe0212bb9f42;hpb=0feade23ffa41ac299b252a93be4da11bc2a16b7 diff --git a/js/syp.js b/js/syp.js index 7e69fb7..8e32d85 100644 --- a/js/syp.js +++ b/js/syp.js @@ -32,10 +32,10 @@ var SYP = { init: function() { this.map = new OpenLayers.Map("map", { controls:[ + new OpenLayers.Control.SypAttribution(), new OpenLayers.Control.Navigation(), new OpenLayers.Control.PanZoom(), - new OpenLayers.Control.Permalink(), - new OpenLayers.Control.SypAttribution() + new OpenLayers.Control.Permalink() ], projection: new OpenLayers.Projection("EPSG:900913"), displayProjection: new OpenLayers.Projection("EPSG:4326") @@ -131,6 +131,15 @@ var SYP = { }, onFeatureUnselect: function (feature) { + var map = feature.layer.map; + var permaControl = map.getControlsByClass("OpenLayers.Control.Permalink"); + if (permaControl[0]) { + permaControl[0].div.style.display = ""; + } + if (!feature.popup) { + this.map.events.unregister("movestart", this, this._unselect); + return; + } var popup = feature.popup; if (popup.visible()) { popup.hide(); @@ -139,13 +148,17 @@ var SYP = { onFeatureSelect: function(feature) { var map = feature.layer.map; + var permaControl = map.getControlsByClass("OpenLayers.Control.Permalink"); + if (permaControl[0]) { + permaControl[0].div.style.display = "none"; + } var popup = feature.popup; var brCorner = SYP.Utils.brCorner(map, 8); // we cannot reuse popup; we need to recreate it in order for IE // expressions to work. Otherwise, we get a 0x0 image on second view. - if (popup) { + if (popup) { popup.destroy(); } var contentHTML; @@ -157,6 +170,10 @@ var SYP = { } else { contentHTML = feature.attributes.description; } + if (!contentHTML || !contentHTML.length) { + this.map.events.register("movestart", this, this._unselect = function () { this.unselect(feature)}); + return; + } popup = SYP.createPopup(brCorner, contentHTML); var control = this; popup.hide = function () { @@ -211,3 +228,35 @@ if (OpenLayers.Lang[SypStrings.language]) { OpenLayers.Console.userError = function(error) { SYP.Utils.displayUserMessage(error, "error"); } + +// 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 + ); + }; + + 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) { + + var context = { + 'popup': this, + 'img': img + }; + + img._onImgLoad = OpenLayers.Function.bind(onImgLoad, context); + + OpenLayers.Event.observe(img, 'load', img._onImgLoad); + } + } +}