]> git.openstreetmap.org Git - rails.git/blobdiff - app/assets/javascripts/router.js
Improve error handling for routing engines
[rails.git] / app / assets / javascripts / router.js
index c3f13f9dffc1afc78aff160071b5657184b742e0..0f37e32f1747107a06dd22d76fa2464b9a441484 100644 (file)
@@ -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);