X-Git-Url: https://dev.renevier.net/gitweb.cgi?a=blobdiff_plain;ds=sidebyside;f=js%2Fsyp.js;h=30fbf8b734ac9a082070f68f3861d5ebd053dab7;hb=80e63e12e3043d7164c35c4babd830dd969cd212;hp=7e69fb75ae61b6b930101cdfce0fdf535a07aabd;hpb=0feade23ffa41ac299b252a93be4da11bc2a16b7;p=syp.git diff --git a/js/syp.js b/js/syp.js index 7e69fb7..30fbf8b 100644 --- a/js/syp.js +++ b/js/syp.js @@ -18,10 +18,9 @@ OpenLayers.Control.SypAttribution = OpenLayers.Class (OpenLayers.Control.Attribu var SYP = { Settings: { - MARKER_ICON: "openlayers/img/marker-blue.png", - MARKER_ICON_HEIGHT: 25, - MARKER_SELECT_ICON: "openlayers/img/marker-green.png", - MARKER_SELECT_ICON_HEIGHT: 25 + MARKER_ICON: "media/marker-normal.png", + MARKER_SELECT_ICON: "media/marker-selected.png", + MARKER_HEIGHT: 25 }, map: null, @@ -32,10 +31,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") @@ -71,21 +70,31 @@ var SYP = { }, createDataLayer: function(map) { + var defaultStyle = new OpenLayers.Style({ + externalGraphic: this.Settings.MARKER_ICON, + graphicHeight: "${height}" + }, { + context: { + height: function(feature) { + var defaultHeight = SYP.Settings.MARKER_HEIGHT || 32; + var increase = 4 * (feature.attributes.count - 1); + return Math.min(defaultHeight + increase, 50); + } + } + }); + var selectStyle = new OpenLayers.Style({ + externalGraphic: this.Settings.MARKER_SELECT_ICON, + graphicHeight: this.Settings.MARKER_HEIGHT || 32 + }); var styleMap = new OpenLayers.StyleMap ( - {"default": { - externalGraphic: this.Settings.MARKER_ICON, - graphicHeight: this.Settings.MARKER_ICON_HEIGHT - || 32 - }, - "select": { - externalGraphic: this.Settings.MARKER_SELECT_ICON, - graphicHeight: this.Settings.MARKER_SELECT_ICON_HEIGHT - || 32 - } - }); + {"default": defaultStyle, + "select": selectStyle}); var layer = new OpenLayers.Layer.GML("KML", "items.php", { + strategies: [ + new OpenLayers.Strategy.Cluster() + ], styleMap: styleMap, format: OpenLayers.Format.KML, projection: this.map.displayProjection, @@ -131,6 +140,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,32 +157,95 @@ var SYP = { onFeatureSelect: function(feature) { var map = feature.layer.map; + if (feature.attributes.count > 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); + var popupPos = null; + if (sypPopupNearFeature) { + popupPos = feature.geometry.getBounds().getCenterLonLat(); + } else { + popupPos = 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 = "