currentPath = path;
currentRoute = routes.recognize(currentPath);
currentRoute.run('popstate', currentPath);
- var state = e.originalEvent.state;
- if (state.center) {
- map.setView(state.center, state.zoom, {animate: false});
- map.updateLayers(state.layers);
- }
+ map.setState(e.originalEvent.state, {animate: false});
});
router.route = function (url) {
var path = url.replace(/#.*/, ''),
route = routes.recognize(path);
if (!route) return false;
- window.history.pushState(OSM.parseHash(url) || {}, document.title, url);
currentRoute.run('unload');
+ window.history.pushState(OSM.parseHash(url), document.title, url);
currentPath = path;
currentRoute = route;
currentRoute.run('pushstate', currentPath);
if (hash === currentHash) return;
currentHash = hash;
var state = OSM.parseHash(hash);
- if (!state) return;
- map.setView(state.center, state.zoom);
- map.updateLayers(state.layers);
+ map.setState(state);
router.stateChange(state, hash);
};
};
router.load = function() {
- if (currentRoute) {
- var loadState = currentRoute.run('load', currentPath);
- router.stateChange(loadState || {});
- } else {
- throw "Unable to match route for: " + currentPath;
- }
+ var loadState = currentRoute.run('load', currentPath);
+ router.stateChange(loadState || {});
+ };
+
+ router.setCurrentPath = function (path) {
+ currentPath = path;
+ currentRoute = routes.recognize(currentPath);
};
map.on('moveend baselayerchange overlaylayerchange', router.updateHash);