Extends Leaflet-fullhash properly

This commit is contained in:
Gautier Pelloux-Prayer 2017-04-24 12:10:34 +02:00
parent ac57250b7e
commit d4c5ca67b9
4 changed files with 74 additions and 3 deletions

View file

@ -25,7 +25,8 @@
"leaflet.locatecontrol": "^0.60.0", "leaflet.locatecontrol": "^0.60.0",
"font-awesome": "^4.7.0", "font-awesome": "^4.7.0",
"bootstrap-select": "hugdx/bootstrap-select#patch-1", "bootstrap-select": "hugdx/bootstrap-select#patch-1",
"leaflet-sidebar": "^0.1.9" "leaflet-sidebar": "^0.1.9",
"leaflet-fullHash": "KoGor/leaflet-fullHash#master"
}, },
"overrides": { "overrides": {
"leaflet": { "leaflet": {
@ -96,6 +97,9 @@
"css/font-awesome.css", "css/font-awesome.css",
"fonts/*" "fonts/*"
] ]
},
"leaflet-fullHash": {
"main": "leaflet-fullHash.js"
} }
} }
} }

View file

@ -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); var url = router.getUrl(routing.getWaypoints(), null);
return "&" + url.substr('brouter?'.length + 1); return "&" + url.substr('brouter?'.length + 1);
}, onHashChangeCb); };
urlHash.onHashChangeCb = onHashChangeCb;
routingOptions.on('update', urlHash.updateHash, urlHash); routingOptions.on('update', urlHash.updateHash, urlHash);
nogos.on('update', urlHash.updateHash, urlHash); nogos.on('update', urlHash.updateHash, urlHash);
// waypoint add, move, delete (but last) // waypoint add, move, delete (but last)

65
js/plugin/Hash.js Normal file
View file

@ -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);
}
},
});