}
};
- var currentPath = window.location.pathname + window.location.search,
+ var currentPath = window.location.pathname.replace(/(.)\/$/, '$1') + window.location.search,
currentRoute = routes.recognize(currentPath),
currentHash = location.hash || OSM.formatHash(map);
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');
+ var state = OSM.parseHash(url);
+ map.setState(state);
+ window.history.pushState(state, 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.stateChange(loadState || {});
};
+ router.setCurrentPath = function (path) {
+ currentPath = path;
+ currentRoute = routes.recognize(currentPath);
+ };
+
map.on('moveend baselayerchange overlaylayerchange', router.updateHash);
$(window).on('hashchange', router.hashUpdated);