X-Git-Url: https://dev.renevier.net/gitweb.cgi?p=syp.git;a=blobdiff_plain;f=js%2Fsyp.js;h=d8a54b5d5a59611d44cb4663e5dbec309161abb7;hp=7e60b4e858df70821f0cd2f44b154d99ac558efd;hb=e57c166b46cf9c5961bca1b2241783944277cef5;hpb=7282fabcfef34ef95b8c6bd414f34d77037451e1 diff --git a/js/syp.js b/js/syp.js index 7e60b4e..d8a54b5 100644 --- a/js/syp.js +++ b/js/syp.js @@ -1,6 +1,21 @@ /* Copyright (c) 2009 Arnaud Renevier, Inc, published under the modified BSD * license. */ +OpenLayers.Control.SypAttribution = OpenLayers.Class (OpenLayers.Control.Attribution, { + updateAttribution: function() { + var attributions = [SypStrings.propulsedByLink]; + if (this.map && this.map.layers) { + for(var i=0, len=this.map.layers.length; i 1) { + this.unselect(feature); + var lonlat = new OpenLayers.LonLat(feature.geometry.x, feature.geometry.y); + map.setCenter(lonlat, map.zoom + 1); + return; + } + 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; - if (feature.attributes.name) { + if (feature.cluster[0].attributes.name) { contentHTML = "

" + - feature.attributes.name + + feature.cluster[0].attributes.name + "

" + - feature.attributes.description; + feature.cluster[0].attributes.description; } else { - contentHTML = feature.attributes.description; + contentHTML = feature.cluster[0].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 () { OpenLayers.Element.hide(this.div); - control.unselect(feature); + control.unselectAll(); }; map.addPopup(popup); feature.popup = popup; + var anchor = popup.div.getElementsByTagName("a")[0]; + if (anchor) { + anchor.onclick = function() { + SYP.showBigImage(this.href); + return false; + } + } + }, + + showBigImage: function (href) { + try { + document.getElementById('bigimg_container').style.display = "table"; + } catch(e) { + document.getElementById('bigimg_container').style.display = "block"; + } + var maxHeight = document.body.clientHeight * 0.9; + var maxWidth = document.body.clientWidth * 0.9; + document.getElementById('bigimg').style.height = ""; + document.getElementById('bigimg').style.width = ""; + document.getElementById('bigimg').style.maxHeight = maxHeight + "px"; + document.getElementById('bigimg').style.maxWidth = maxWidth + "px"; + document.getElementById('bigimg').onload = function () { + var icon = document.getElementById('bigimg_close'); + icon.style.top = this.offsetTop; + icon.style.left = this.offsetLeft + this.clientWidth - icon.clientWidth; + + var heightRatio = this.clientHeight / parseInt(this.style.maxHeight); + var widthRatio = this.clientWidth / parseInt(this.style.maxWidth); + if (heightRatio > 1 || widthRatio > 1) { + if (heightRatio > widthRatio) { + this.style.height = this.style.maxHeight; + } else { + this.style.width = this.style.maxWidth; + } + } + + }; + document.getElementById('bigimg').src = href; + }, + + closeBigImage: function() { + document.getElementById('bigimg').src = ""; + document.getElementById('bigimg').parentNode.innerHTML = document.getElementById('bigimg').parentNode.innerHTML; + document.getElementById('bigimg_container').style.display = "none"; }, Utils: { @@ -186,7 +278,45 @@ var SYP = { } }; +// if possible, determine language with HTTP_ACCEPT_LANGUAGE instead of +// navigator.language +if (OpenLayers.Lang[SypStrings.language]) { + OpenLayers.Lang.setCode(SypStrings.language); +} + // avoid alerts 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); + } + } +}