diff --git a/mithril.js b/mithril.js index 9b204fac..523b8053 100644 --- a/mithril.js +++ b/mithril.js @@ -315,11 +315,11 @@ Mithril = m = new function app(window) { for (var route in router) { if (route == path) return !void m.module(root, router[route]) - var matcher = new RegExp("^" + route.replace(/:[^\/]+?\.{3}/g, "(.*?)").replace(/:[^\/]+/g, "([^\\/]+)") + "$") + var matcher = new RegExp("^" + route.replace(/:[^\/]+?\.{3}/g, "(.*?)").replace(/:[^\/]+/g, "([^\\/]+)") + "\/?$") if (matcher.test(path)) { return !void path.replace(matcher, function() { - var keys = route.match(/:[^\/]+/g) + var keys = route.match(/:[^\/]+/g) || [] var values = [].slice.call(arguments, 1, -2) for (var i = 0; i < keys.length; i++) routeParams[keys[i].replace(/:|\./g, "")] = decodeURIComponent(values[i]) m.module(root, router[route]) @@ -501,4 +501,4 @@ Mithril = m = new function app(window) { if (typeof module != "undefined" && module !== null) module.exports = m if (typeof define == "function" && define.amd) define(function() {return m}) -;;; \ No newline at end of file +;;; diff --git a/tests/mithril-tests.js b/tests/mithril-tests.js index 8cc738c2..9facc895 100644 --- a/tests/mithril-tests.js +++ b/tests/mithril-tests.js @@ -579,6 +579,21 @@ function testMithril(mock) { mock.performance.$elapse(50) //teardown return root.childNodes[0].nodeValue === "foo bar" }) + test(function() { + mock.performance.$elapse(50) //setup + mock.location.search = "?" + + var root = mock.document.createElement("div") + m.route.mode = "search" + m.route(root, "/", { + "/": {controller: function() {}, view: function() {return "foo"}}, + "/test11": {controller: function() {}, view: function() {return "bar"}} + }) + mock.performance.$elapse(50) + m.route("/test11/") + mock.performance.$elapse(50) //teardown + return mock.location.search == "?/test11/" && root.childNodes[0].nodeValue === "bar" + }) //end m.route //m.prop