X-Git-Url: https://git.openstreetmap.org./rails.git/blobdiff_plain/5bd59e19368d8761a7dbaa5db0e8833174c11f36..abf53428456cf62edc61af6a1750134d6b1dfa84:/app/assets/javascripts/router.js diff --git a/app/assets/javascripts/router.js b/app/assets/javascripts/router.js index 08a6c7268..d890f38a4 100644 --- a/app/assets/javascripts/router.js +++ b/app/assets/javascripts/router.js @@ -47,17 +47,17 @@ move the map without the hash changing. */ OSM.Router = function (map, rts) { - var escapeRegExp = /[\-{}\[\]+?.,\\\^$|#\s]/g; + var escapeRegExp = /[-{}[\]+?.,\\^$|#\s]/g; var optionalParam = /\((.*?)\)/g; - var namedParam = /(\(\?)?:\w+/g; - var splatParam = /\*\w+/g; + var namedParam = /(\(\?)?:\w+/g; + var splatParam = /\*\w+/g; function Route(path, controller) { var regexp = new RegExp("^" + path.replace(escapeRegExp, "\\$&") .replace(optionalParam, "(?:$1)?") .replace(namedParam, function (match, optional) { - return optional ? match : "([^\/]+)"; + return optional ? match : "([^/]+)"; }) .replace(splatParam, "(.*?)") + "(?:\\?.*)?$"); @@ -96,58 +96,48 @@ OSM.Router = function (map, rts) { }; var currentPath = window.location.pathname.replace(/(.)\/$/, "$1") + window.location.search, - currentRoute = routes.recognize(currentPath), - currentHash = location.hash || OSM.formatHash(map); + currentRoute = routes.recognize(currentPath), + currentHash = location.hash || OSM.formatHash(map); var router = {}; - 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, + $(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, route = routes.recognize(path); - if (path === currentPath) return; - currentRoute.run("unload", null, route === currentRoute); - currentPath = path; - currentRoute = route; - currentRoute.run("popstate", currentPath); - map.setState(e.originalEvent.state, { animate: false }); - }); - - router.route = function (url) { - var path = url.replace(/#.*/, ""), - route = routes.recognize(path); - if (!route) return false; - currentRoute.run("unload", null, route === currentRoute); - var state = OSM.parseHash(url); - map.setState(state); - window.history.pushState(state, document.title, url); - currentPath = path; - currentRoute = route; - currentRoute.run("pushstate", currentPath); - return true; - }; + if (path === currentPath) return; + currentRoute.run("unload", null, route === currentRoute); + currentPath = path; + currentRoute = route; + currentRoute.run("popstate", currentPath); + map.setState(e.originalEvent.state, { animate: false }); + }); - router.replace = function (url) { - window.history.replaceState(OSM.parseHash(url), document.title, url); - }; + router.route = function (url) { + var path = url.replace(/#.*/, ""), + route = routes.recognize(path); + if (!route) return false; + currentRoute.run("unload", null, route === currentRoute); + var state = OSM.parseHash(url); + map.setState(state); + window.history.pushState(state, document.title, url); + currentPath = path; + currentRoute = route; + currentRoute.run("pushstate", currentPath); + return true; + }; - router.stateChange = function (state) { - if (state.center) { - window.history.replaceState(state, document.title, OSM.formatHash(state)); - } else { - window.history.replaceState(state, document.title, window.location); - } - }; - } else { - router.route = router.replace = function (url) { - window.location.assign(url); - }; + router.replace = function (url) { + window.history.replaceState(OSM.parseHash(url), document.title, url); + }; - router.stateChange = function (state) { - if (state.center) window.location.replace(OSM.formatHash(state)); - }; - } + router.stateChange = function (state) { + if (state.center) { + window.history.replaceState(state, document.title, OSM.formatHash(state)); + } else { + window.history.replaceState(state, document.title, window.location); + } + }; router.updateHash = function () { var hash = OSM.formatHash(map);