fix querystring parsing of array syntax
This commit is contained in:
parent
1f75f71b22
commit
ce8299e8e0
1 changed files with 9 additions and 7 deletions
16
mithril.js
16
mithril.js
|
|
@ -331,7 +331,7 @@ Mithril = m = new function app(window) {
|
||||||
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, "")] = decodeSpace(values[i])
|
||||||
m.module(root, router[route])
|
m.module(root, router[route])
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
@ -355,16 +355,18 @@ Mithril = m = new function app(window) {
|
||||||
return str.join("&")
|
return str.join("&")
|
||||||
}
|
}
|
||||||
function parseQueryString(str) {
|
function parseQueryString(str) {
|
||||||
var derefParser = /\[?([^\]\[]+)\]?/g
|
|
||||||
var pairs = str.split("&"), params = {}
|
var pairs = str.split("&"), params = {}
|
||||||
for (var i = 0; i < pairs.length; i++) {
|
for (var i = 0; i < pairs.length; i++) {
|
||||||
var pair = pairs[i].split("=")
|
var pair = pairs[i].split("=")
|
||||||
var key = decodeSpace(pair[0])
|
var key = decodeSpace(pair[0])
|
||||||
var value = pair[1] ? decodeSpace(pair[1]) : (pair.length == 1 ? true : "")
|
var value = pair[1] ? decodeSpace(pair[1]) : (pair.length === 1 ? true : "")
|
||||||
if (key.indexOf('[') > -1) {
|
if (key.indexOf("[") != -1) {
|
||||||
var subParams = params
|
var match, subKey, lastParams, queryParser = /\[?([^\]\[]+)\]?|\[\]|/g, subParams = params
|
||||||
while ((match = derefParser.exec(key)) !== null) {
|
while ((match = queryParser.exec(key)) !== null && match[0]) {
|
||||||
subParams = subParams[match[1]] = (derefParser.lastIndex === key.length ? value : subParams[match[1]] || {})
|
if ((match[1] === undefined || (/^\d+$/).test(match[1])) && (type.call(subParams) != "[object Array]")) subParams = lastParams[subKey] = []
|
||||||
|
subKey = match[1] || subParams.length
|
||||||
|
lastParams = subParams
|
||||||
|
subParams = subParams[subKey] = (queryParser.lastIndex === key.length ? value : subParams[subKey] || {})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else params[key] = value
|
else params[key] = value
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue