diff options
Diffstat (limited to 'web')
-rwxr-xr-x | web/index.cgi | 7 | ||||
-rw-r--r-- | web/js.js | 8 | ||||
-rw-r--r-- | web/js/map-OpenStreetMap.js | 76 |
3 files changed, 78 insertions, 13 deletions
diff --git a/web/index.cgi b/web/index.cgi index 8fab1d079..ed5b285c2 100755 --- a/web/index.cgi +++ b/web/index.cgi @@ -929,7 +929,12 @@ sub display_location { $hide_link = NewURL($q, -retain=>1, no_pins=>1); $hide_text = _('Hide pins'); } - my $map_links = "<p id='sub_map_links'><a id='hide_pins_link' rel='nofollow' href='$hide_link'>$hide_text</a> | <a id='all_pins_link' rel='nofollow' href='$all_link'>$all_text</a></p> <input type='hidden' id='all_pins' name='all_pins' value='$input_h{all_pins}'>"; + my $map_links = "<p id='sub_map_links'><a id='hide_pins_link' rel='nofollow' href='$hide_link'>$hide_text</a>"; + if (mySociety::Config::get('COUNTRY') eq 'GB') { + $map_links .= " | <a id='all_pins_link' rel='nofollow' href='$all_link'>$all_text</a></p> <input type='hidden' id='all_pins' name='all_pins' value='$input_h{all_pins}'>"; + } else { + $map_links .= "</p>"; + } # truncate the lat,lon for nicer rss urls my ( $short_lat, $short_lon ) = @@ -16,8 +16,12 @@ YAHOO.util.Event.onContentReady('mapForm', function() { this.onsubmit = function() { return false; }; } - this.x.value = fixmystreet.x + 3; - this.y.value = fixmystreet.y + 3; + /* XXX Should be in Tilma code only */ + if (this.x) { + this.x.value = fixmystreet.x + 3; + this.y.value = fixmystreet.y + 3; + } + /* if (swfu && swfu.getStats().files_queued > 0) { swfu.startUpload(); diff --git a/web/js/map-OpenStreetMap.js b/web/js/map-OpenStreetMap.js index 6e350537a..911d49d57 100644 --- a/web/js/map-OpenStreetMap.js +++ b/web/js/map-OpenStreetMap.js @@ -1,25 +1,33 @@ YAHOO.util.Event.onContentReady('map', function() { + + fixmystreet.ZOOM_OFFSET = 14; + + var perm = new OpenLayers.Control.Permalink(); fixmystreet.map = new OpenLayers.Map("map", { controls: [ new OpenLayers.Control.ArgParser(), //new OpenLayers.Control.LayerSwitcher(), new OpenLayers.Control.Navigation(), + perm, + new OpenLayers.Control.PermalinkFMS('osm_link', 'http://www.openstreetmap.org/'), new OpenLayers.Control.PanZoomFMS() ], displayProjection: new OpenLayers.Projection("EPSG:4326") }); var osm = new fixmystreet.map_type("", { - zoomOffset: 14, + zoomOffset: fixmystreet.ZOOM_OFFSET, numZoomLevels: 4 }); fixmystreet.map.addLayer(osm); - var centre = new OpenLayers.LonLat( fixmystreet.longitude, fixmystreet.latitude ); - centre.transform( - new OpenLayers.Projection("EPSG:4326"), - fixmystreet.map.getProjectionObject() - ); - fixmystreet.map.setCenter(centre, 2); + if (!fixmystreet.map.getCenter()) { + var centre = new OpenLayers.LonLat( fixmystreet.longitude, fixmystreet.latitude ); + centre.transform( + new OpenLayers.Projection("EPSG:4326"), + fixmystreet.map.getProjectionObject() + ); + fixmystreet.map.setCenter(centre, 2); + } if (document.getElementById('mapForm')) { var click = new OpenLayers.Control.Click(); @@ -27,7 +35,17 @@ YAHOO.util.Event.onContentReady('map', function() { click.activate(); } - var markers = new OpenLayers.Layer.Markers("Markers"); + /* To let permalink not be caught by the Click layer, answer found + * at http://www.mail-archive.com/users@openlayers.org/msg12958.html + * Not sure why you can't use eventListeners or events.register... + */ + OpenLayers.Event.observe( perm.element, "click", function(e) { + OpenLayers.Event.stop(e); + location.href = OpenLayers.Event.element(e).href; + return false; + }); + + fixmystreet.markers = new OpenLayers.Layer.Markers("Markers"); var cols = { 'red':'R', 'green':'G', 'blue':'B', 'purple':'P' }; for (var i=0; i<fixmystreet.pins.length; i++) { var pin = fixmystreet.pins[i]; @@ -44,10 +62,28 @@ YAHOO.util.Event.onContentReady('map', function() { if (pin[3]) { marker.events.register('click', marker, function(evt) { window.location = '/report/' + pin[3]; OpenLayers.Event.stop(evt); }); } - markers.addMarker(marker); + fixmystreet.markers.addMarker(marker); } - fixmystreet.map.addLayer(markers); + fixmystreet.map.addLayer(fixmystreet.markers); + +}); +YAHOO.util.Event.addListener('hide_pins_link', 'click', function(e) { + YAHOO.util.Event.preventDefault(e); + var showhide = [ + 'Show pins', 'Hide pins', + 'Dangos pinnau', 'Cuddio pinnau', + "Vis nåler", "Gjem nåler" + ]; + for (var i=0; i<showhide.length; i+=2) { + if (this.innerHTML == showhide[i]) { + fixmystreet.markers.setVisibility(true); + this.innerHTML = showhide[i+1]; + } else if (this.innerHTML == showhide[i+1]) { + fixmystreet.markers.setVisibility(false); + this.innerHTML = showhide[i]; + } + } }); /* Overridding the buttonDown function of PanZoom so that it does @@ -87,6 +123,26 @@ OpenLayers.Control.PanZoomFMS = OpenLayers.Class(OpenLayers.Control.PanZoom, { } }); +/* Overriding Permalink so that it can pass the correct zoom to OSM */ +OpenLayers.Control.PermalinkFMS = OpenLayers.Class(OpenLayers.Control.Permalink, { + updateLink: function() { + var separator = this.anchor ? '#' : '?'; + var href = this.base; + if (href.indexOf(separator) != -1) { + href = href.substring( 0, href.indexOf(separator) ); + } + + href += separator + OpenLayers.Util.getParameterString(this.createParams(null, this.map.getZoom()+fixmystreet.ZOOM_OFFSET)); + if (this.anchor && !this.element) { + window.location.href = href; + } + else { + this.element.href = href; + } + } +}); + +/* Click handler */ OpenLayers.Control.Click = OpenLayers.Class(OpenLayers.Control, { defaultHandlerOptions: { 'single': true, |