diff --git a/bower.json b/bower.json index b243d15..1e2ef5e 100644 --- a/bower.json +++ b/bower.json @@ -25,7 +25,8 @@ "leaflet.locatecontrol": "^0.60.0", "font-awesome": "^4.7.0", "bootstrap-select": "hugdx/bootstrap-select#patch-1", - "leaflet-sidebar": "^0.1.9" + "leaflet-sidebar": "^0.1.9", + "leaflet-fullHash": "KoGor/leaflet-fullHash#master" }, "overrides": { "leaflet": { @@ -96,6 +97,9 @@ "css/font-awesome.css", "fonts/*" ] + }, + "leaflet-fullHash": { + "main": "leaflet-fullHash.js" } } } diff --git a/js/index.js b/js/index.js index 9d7ffde..03498e6 100644 --- a/js/index.js +++ b/js/index.js @@ -263,10 +263,12 @@ } }; - urlHash = new L.Hash(map, mapLayers, function() { + urlHash = new BR.Hash(map, mapLayers); + urlHash.additionalCb = function() { var url = router.getUrl(routing.getWaypoints(), null); return "&" + url.substr('brouter?'.length + 1); - }, onHashChangeCb); + }; + urlHash.onHashChangeCb = onHashChangeCb; routingOptions.on('update', urlHash.updateHash, urlHash); nogos.on('update', urlHash.updateHash, urlHash); // waypoint add, move, delete (but last) diff --git a/js/plugin/Hash.js b/js/plugin/Hash.js new file mode 100644 index 0000000..64a3967 --- /dev/null +++ b/js/plugin/Hash.js @@ -0,0 +1,65 @@ +BR.Hash = L.hash.extend({ + + formatHash: function(map) { + var center = map.getCenter(), + zoom = map.getZoom(), + precision = Math.max(0, Math.ceil(Math.log(zoom) / Math.LN2)), + layers = []; + + //console.log(this.options); + var options = this.options; + //Check active layers + for(var key in options) { + if (options.hasOwnProperty(key)) { + if (map.hasLayer(options[key])) { + layers.push(key); + }; + }; + }; + + var url = "#" + [zoom, + center.lat.toFixed(precision), + center.lng.toFixed(precision), + layers.join("-") + ].join("/"); + + if (this.additionalCb != null) { + var additional = this.additionalCb(); + if (additional != null) { + url += additional; + } + } + + return url; + }, + + update: function() { + var hash = location.hash; + if (hash === this.lastHash) { + return; + } + var parsed = this.parseHash(hash); + if (parsed) { + this.movingMap = true; + + this.map.setView(parsed.center, parsed.zoom); + var layers = parsed.layers, + options = this.options, + that = this; + //Add/remove layers + this.map.eachLayer(function(layer) { + that.map.removeLayer(layer); + }); + + layers.forEach(function(element, index, array) { + //console.log(options[element]); + that.map.addLayer(options[element]); + }); + + this.movingMap = false; + } else { + this.onMapMove(this.map); + } + }, + +}); \ No newline at end of file diff --git a/js/plugin/leaflet-fullHash.js b/old.js similarity index 100% rename from js/plugin/leaflet-fullHash.js rename to old.js