+
+ router.updateHash = function() {
+ var hash = OSM.formatHash(map);
+ if (hash === currentHash) return;
+ currentHash = hash;
+ router.stateChange(OSM.parseHash(hash));
+ };
+
+ router.hashUpdated = function() {
+ var hash = location.hash;
+ if (hash === currentHash) return;
+ currentHash = hash;
+ var state = OSM.parseHash(hash);
+ if (!state) return;
+ map.setView(state.center, state.zoom);
+ map.updateLayers(state.layers);
+ router.stateChange(state, hash);
+ };
+
+ router.moveListenerOn = function() {
+ map.on('moveend', router.updateHash);
+ };
+
+ router.moveListenerOff = function() {
+ map.off('moveend', router.updateHash);
+ };
+
+ router.load = function() {
+ var loadState = currentRoute.run('load', currentPath);
+ router.stateChange(loadState || {});
+ };
+
+ map.on('moveend baselayerchange overlaylayerchange', router.updateHash);
+ $(window).on('hashchange', router.hashUpdated);
+
+ return router;