Make sure route params can contain all the possible characters in a nick
This commit is contained in:
parent
84624266e0
commit
4cad5a0b33
File diff suppressed because one or more lines are too long
@ -58,26 +58,30 @@ export function routeMiddleware() {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
function match(routes, location) {
|
|
||||||
let params;
|
|
||||||
for (let i = 0; i < routes.length; i++) {
|
|
||||||
params = routes[i].pattern.match(location.pathname);
|
|
||||||
if (params !== null) {
|
|
||||||
return locationChanged(routes[i].name, params, location);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
function decode(location) {
|
function decode(location) {
|
||||||
location.pathname = decodeURIComponent(location.pathname);
|
location.pathname = decodeURIComponent(location.pathname);
|
||||||
return location;
|
return location;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function match(routes, location) {
|
||||||
|
let params;
|
||||||
|
for (let i = 0; i < routes.length; i++) {
|
||||||
|
params = routes[i].pattern.match(location.pathname);
|
||||||
|
if (params !== null) {
|
||||||
|
const keys = Object.keys(params);
|
||||||
|
for (let j = 0; j < keys.length; j++) {
|
||||||
|
params[keys[j]] = decodeURIComponent(params[keys[j]]);
|
||||||
|
}
|
||||||
|
return locationChanged(routes[i].name, params, decode(location));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
export default function initRouter(routes, store) {
|
export default function initRouter(routes, store) {
|
||||||
const patterns = [];
|
const patterns = [];
|
||||||
const opts = {
|
const opts = {
|
||||||
segmentValueCharset: 'a-zA-Z0-9-_.~# %'
|
segmentValueCharset: 'a-zA-Z0-9-.%'
|
||||||
};
|
};
|
||||||
|
|
||||||
Object.keys(routes).forEach(name =>
|
Object.keys(routes).forEach(name =>
|
||||||
@ -87,7 +91,7 @@ export default function initRouter(routes, store) {
|
|||||||
})
|
})
|
||||||
);
|
);
|
||||||
|
|
||||||
let matched = match(patterns, decode(history.location));
|
let matched = match(patterns, history.location);
|
||||||
if (matched) {
|
if (matched) {
|
||||||
store.dispatch(matched);
|
store.dispatch(matched);
|
||||||
} else {
|
} else {
|
||||||
@ -95,7 +99,7 @@ export default function initRouter(routes, store) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
history.listen(location => {
|
history.listen(location => {
|
||||||
const nextMatch = match(patterns, decode(location));
|
const nextMatch = match(patterns, location);
|
||||||
if (nextMatch && nextMatch.location.pathname !== matched.location.pathname) {
|
if (nextMatch && nextMatch.location.pathname !== matched.location.pathname) {
|
||||||
matched = nextMatch;
|
matched = nextMatch;
|
||||||
store.dispatch(matched);
|
store.dispatch(matched);
|
||||||
|
Loading…
Reference in New Issue
Block a user