Added support for trailing slashes in routes
m.route now matches a path with a trailing slash against a route without one.
This commit is contained in:
parent
67c5400d44
commit
d10d77288c
2 changed files with 17 additions and 2 deletions
|
|
@ -310,11 +310,11 @@ Mithril = m = new function app(window) {
|
||||||
for (var route in router) {
|
for (var route in router) {
|
||||||
if (route == path) return !void m.module(root, router[route])
|
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)) {
|
if (matcher.test(path)) {
|
||||||
return !void path.replace(matcher, function() {
|
return !void path.replace(matcher, function() {
|
||||||
var keys = route.match(/:[^\/]+/g)
|
var keys = route.match(/:[^\/]+/g) || []
|
||||||
var values = [].slice.call(arguments, 1, -2)
|
var values = [].slice.call(arguments, 1, -2)
|
||||||
for (var i = 0; i < keys.length; i++) routeParams[keys[i].replace(/:|\./g, "")] = decodeURIComponent(values[i])
|
for (var i = 0; i < keys.length; i++) routeParams[keys[i].replace(/:|\./g, "")] = decodeURIComponent(values[i])
|
||||||
m.module(root, router[route])
|
m.module(root, router[route])
|
||||||
|
|
|
||||||
|
|
@ -573,6 +573,21 @@ function testMithril(mock) {
|
||||||
mock.performance.$elapse(50) //teardown
|
mock.performance.$elapse(50) //teardown
|
||||||
return root.childNodes[0].nodeValue === "foo bar"
|
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
|
//end m.route
|
||||||
|
|
||||||
//m.prop
|
//m.prop
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue