aboutsummaryrefslogtreecommitdiffstats
path: root/web/js/map-OpenStreetMap.js
diff options
context:
space:
mode:
authorMatthew Somerville <matthew@fury.ukcod.org.uk>2011-02-24 14:01:49 +0000
committerMatthew Somerville <matthew@fury.ukcod.org.uk>2011-02-24 14:01:49 +0000
commit13098b6381416919b3e36fc3f558ca50f58fa854 (patch)
tree581dfabca1440b24aec90d01addb4ba1d95aa050 /web/js/map-OpenStreetMap.js
parentb54248ad8055afaf33fed2f7e51f88c6833047b2 (diff)
No need for all pins yet (does nothing <6 months), hide pins using OL JS if present; permalink.
Diffstat (limited to 'web/js/map-OpenStreetMap.js')
-rw-r--r--web/js/map-OpenStreetMap.js76
1 files changed, 66 insertions, 10 deletions
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,