X-Git-Url: https://git.openstreetmap.org./rails.git/blobdiff_plain/4cad1970fbd15d455ad231d7e75a400344fc9e02..e0706f06b19b04295cf8c87acceb536d96eaf427:/app/assets/javascripts/router.js diff --git a/app/assets/javascripts/router.js b/app/assets/javascripts/router.js index 9af70c21d..0f37e32f1 100644 --- a/app/assets/javascripts/router.js +++ b/app/assets/javascripts/router.js @@ -76,6 +76,8 @@ OSM.Router = function(map, rts) { }); } + params = params.concat(Array.prototype.slice.call(arguments, 2)); + return (controller[action] || $.noop).apply(controller, params); }; @@ -84,7 +86,7 @@ OSM.Router = function(map, rts) { var routes = []; for (var r in rts) - routes.push(Route(r, rts[r])); + routes.push(new Route(r, rts[r])); routes.recognize = function(path) { for (var i = 0; i < this.length; i++) { @@ -101,11 +103,12 @@ OSM.Router = function(map, rts) { if (window.history && window.history.pushState) { $(window).on('popstate', function(e) { if (!e.originalEvent.state) return; // Is it a real popstate event or just a hash change? - var path = window.location.pathname + window.location.search; + var path = window.location.pathname + window.location.search, + route = routes.recognize(path); if (path === currentPath) return; - currentRoute.run('unload'); + currentRoute.run('unload', null, route === currentRoute); currentPath = path; - currentRoute = routes.recognize(currentPath); + currentRoute = route; currentRoute.run('popstate', currentPath); map.setState(e.originalEvent.state, {animate: false}); }); @@ -114,7 +117,7 @@ OSM.Router = function(map, rts) { var path = url.replace(/#.*/, ''), route = routes.recognize(path); if (!route) return false; - currentRoute.run('unload'); + currentRoute.run('unload', null, route === currentRoute); var state = OSM.parseHash(url); map.setState(state); window.history.pushState(state, document.title, url); @@ -124,6 +127,10 @@ OSM.Router = function(map, rts) { return true; }; + router.replace = function (url) { + window.history.replaceState(OSM.parseHash(url), document.title, url); + }; + router.stateChange = function(state) { if (state.center) { window.history.replaceState(state, document.title, OSM.formatHash(state)); @@ -132,7 +139,7 @@ OSM.Router = function(map, rts) { } }; } else { - router.route = function (url) { + router.route = router.replace = function (url) { window.location.assign(url); };