Merge "Handle and redirect project-based URLs"

This commit is contained in:
Wyatt Allen
2017-07-18 23:52:35 +00:00
committed by Gerrit Code Review

View File

@@ -308,6 +308,40 @@
}
}
// Matches
// /c/<project>/+/<changeNum>/[<basePatchNum>..][<patchNum>]/[path].
// TODO(kaspern): Migrate completely to project based URLs, with backwards
// compatibility for change-only.
page(/^\/c\/([^\/]+)\/\+\/(\d+)(\/?((\d+)(\.\.(\d+))?(\/(.+))?))?\/?$/,
ctx => {
// Parameter order is based on the regex group number matched.
const params = {
project: ctx.params[0],
changeNum: ctx.params[1],
basePatchNum: ctx.params[4],
patchNum: ctx.params[6],
path: ctx.params[8],
view: ctx.params[8] ? 'gr-diff-view' : 'gr-change-view',
};
// TODO(kaspern): This should be generated via generateURL.
// Making that happen requires an unfortunate amount of refactoring,
// as the schema for app.params differs from the schema of the params
// object passed to generateUrl in several ways.
let url = `/c/${encodeURIComponent(params.changeNum)}/`;
if (params.basePatchNum) {
url += `${encodeURIComponent(params.basePatchNum)}`;
if (params.patchNum) {
url += `..${encodeURIComponent(params.patchNum)}`;
}
if (params.path) {
url += `/${encode(params.path, true)}`;
}
}
history.replaceState(null, null, url);
normalizePatchRangeParams(params);
app.params = params;
});
// Matches /c/<changeNum>/[<basePatchNum>..][<patchNum>].
page(/^\/c\/(\d+)\/?(((\d+)(\.\.(\d+))?))?$/, ctx => {
// Parameter order is based on the regex group number matched.
@@ -347,17 +381,12 @@
// TODO(kaspern): Utilize gr-url-encoding-behavior.html when the router
// is replaced with a Polymer counterpart.
// @see Issue 4255 regarding double-encoding.
let path = encodeURIComponent(encodeURIComponent(params.path));
// @see Issue 4577 regarding more readable URLs.
path = path.replace(/%252F/g, '/');
path = path.replace(/%2520/g, '+');
page.redirect('/c/' +
encodeURIComponent(params.changeNum) +
'/' +
encodeURIComponent(params.patchNum) +
'/' +
path);
encode(params.path, true));
return;
}