From ac57250b7e8c4e5e120f80a9432c1617d31a0cf7 Mon Sep 17 00:00:00 2001 From: Gautier Pelloux-Prayer Date: Mon, 24 Apr 2017 12:01:10 +0200 Subject: [PATCH] Remove "/brouter?" from URL --- js/Map.js | 8 +++-- js/index.js | 58 +++++++++++++++++------------------ js/plugin/leaflet-fullHash.js | 30 ++++++++++-------- 3 files changed, 52 insertions(+), 44 deletions(-) diff --git a/js/Map.js b/js/Map.js index 55a5767..8c1f06b 100644 --- a/js/Map.js +++ b/js/Map.js @@ -41,7 +41,7 @@ BR.Map = { attribution: 'World Imagery ' + '© Esri, sources: ' + 'Esri, DigitalGlobe, Earthstar Geographics, CNES/Airbus DS, GeoEye, USDA FSA, USGS, Getmapping, Aerogrid, IGN, IGP, and the GIS User Community' - }); + }); var cycling = L.tileLayer('http://tile.waymarkedtrails.org/cycling/{z}/{x}/{y}.png', { maxNativeZoom: 18, @@ -124,10 +124,14 @@ BR.Map = { BR.debug = BR.debug || {}; BR.debug.map = map; + var layersAndOverlays = baseLayers; + for (var o in overlays) { + layersAndOverlays[o] = overlays[o]; + } return { map: map, layersControl: layersControl, - layers: baseLayers + layers: layersAndOverlays }; } diff --git a/js/index.js b/js/index.js index f743695..9d7ffde 100644 --- a/js/index.js +++ b/js/index.js @@ -235,38 +235,21 @@ router.setOptions(routingOptions.getOptions()); profile.update(routingOptions.getOptions()); - urlHash = new L.Hash(map, mapLayers, function() { - return router.getUrl(routing.getWaypoints(), null); - }); - routingOptions.on('update', urlHash.updateHash, urlHash); - nogos.on('update', urlHash.updateHash, urlHash); - // waypoint add, move, delete (but last) - routing.on('routing:routeWaypointEnd', urlHash.updateHash, urlHash); - // delete last waypoint - routing.on('waypoint:click', function (evt) { - var r = evt.marker._routing; - if (!r.prevMarker && !r.nextMarker) { - urlHash.updateHash(); + var onHashChangeCb = function(url) { + var url2params = function (s) { + var p = {}; + var sep = '&'; + if (s.search('&') !== -1) + sep = '&'; + var params = s.split(sep); + for (var i = 0; i < params.length; i++) { + var tmp = params[i].split('='); + if (tmp.length !== 2) continue; + p[tmp[0]] = decodeURIComponent(tmp[1]); + } + return p; } - }, urlHash); - - var url2params = function (s) { - var p = {}; - var sep = '&'; - if (s.search('&') !== -1) - sep = '&'; - var params = s.split(sep); - for (var i = 0; i < params.length; i++) { - var tmp = params[i].split('='); - if (tmp.length !== 2) continue; - p[tmp[0]] = decodeURIComponent(tmp[1]); - } - return p; - } - - urlHash.onHashChangeCb = function(url) { if (url == null) return; - url = url.substr('brouter?'.length); var opts = router.parseUrlParams(url2params(url)); router.setOptions(opts); routingOptions.setOptions(opts); @@ -280,6 +263,21 @@ } }; + urlHash = new L.Hash(map, mapLayers, function() { + var url = router.getUrl(routing.getWaypoints(), null); + return "&" + url.substr('brouter?'.length + 1); + }, onHashChangeCb); + routingOptions.on('update', urlHash.updateHash, urlHash); + nogos.on('update', urlHash.updateHash, urlHash); + // waypoint add, move, delete (but last) + routing.on('routing:routeWaypointEnd', urlHash.updateHash, urlHash); + // delete last waypoint + routing.on('waypoint:click', function (evt) { + var r = evt.marker._routing; + if (!r.prevMarker && !r.nextMarker) { + urlHash.updateHash(); + } + }, urlHash); $(window).resize(function () { elevation.addBelow(map); diff --git a/js/plugin/leaflet-fullHash.js b/js/plugin/leaflet-fullHash.js index 72634c2..a7a977e 100644 --- a/js/plugin/leaflet-fullHash.js +++ b/js/plugin/leaflet-fullHash.js @@ -9,6 +9,7 @@ this.onHashChange = L.Util.bind(this.onHashChange, this); this.additionalCb = additionalCb; this.onHashChangeCb = onHashChangeCb; + this.layers = layers; if (map) { this.init(map, layers); } @@ -18,13 +19,14 @@ if(hash.indexOf('#map=') === 0) { hash = hash.substr(5); } - var args = hash.split("/"); - if (args.length >= 4) { - var zoom = parseInt(args[0], 10), - lat = parseFloat(args[1]), - lon = parseFloat(args[2]), - layer = decodeURIComponent(args[3]); - additional = args[4]; + var args = hash.split("&"); + var mapsArgs = args[0].split("/"); + if (mapsArgs.length == 4) { + var zoom = parseInt(mapsArgs[0], 10), + lat = parseFloat(mapsArgs[1]), + lon = parseFloat(mapsArgs[2]), + layer = decodeURIComponent(mapsArgs[3]); + additional = args[1]; if (isNaN(zoom) || isNaN(lat) || isNaN(lon)) { return false; } else { @@ -139,12 +141,16 @@ layer = parsed.layer in options ? parsed.layer : Object.keys(options)[0], that = this; - //FIXME: removing/readding layers breaks Routing plugin //Add/remove layer - // this.map.eachLayer(function(layer) { - // that.map.removeLayer(layer); - // }); - // that.map.addLayer(options[layer]); + this.map.eachLayer(function(layer) { + for (alayer in that.layers) { + if (that.layers[alayer] == layer) { + that.map.removeLayer(layer); + break; + } + } + }); + that.map.addLayer(options[layer]); this.isUpdatingHash = false; } else {