Stop double encoding in the URL
Also stop encoding @. This will make URLs more readable.
Consistently don't encode /. This was enabled by earlier changes that
make sure that all route pattern are regular expressions. The special
:param matching of page.js did not work with `/` chars.
Release-Notes: skip
Change-Id: I15f864505811fa2c04cfb5bbb00b643464f40f3c
diff --git a/polygerrit-ui/app/models/views/change.ts b/polygerrit-ui/app/models/views/change.ts
index a206037..153777f 100644
--- a/polygerrit-ui/app/models/views/change.ts
+++ b/polygerrit-ui/app/models/views/change.ts
@@ -196,7 +196,7 @@
childView: ChangeChildView.DIFF,
});
- const path = `/${encodeURL(state.diffView?.path ?? '', true)}`;
+ const path = `/${encodeURL(state.diffView?.path ?? '')}`;
let suffix = '';
// TODO: Move creating of comment URLs to a separate function. We are
@@ -226,7 +226,7 @@
patchNum: obj.patchNum ?? EDIT,
});
- const path = `/${encodeURL(state.editView?.path ?? '', true)}`;
+ const path = `/${encodeURL(state.editView?.path ?? '')}`;
const line = state.editView?.lineNum;
const suffix = line ? `#${line}` : '';
@@ -242,7 +242,7 @@
if (range.length) range = '/' + range;
let repo = '';
- if (state.repo) repo = `${encodeURL(state.repo, true)}/+/`;
+ if (state.repo) repo = `${encodeURL(state.repo)}/+/`;
return `${getBaseUrl()}/c/${repo}${state.changeNum}${range}`;
}
diff --git a/polygerrit-ui/app/models/views/change_test.ts b/polygerrit-ui/app/models/views/change_test.ts
index 837e362..1e71bbd 100644
--- a/polygerrit-ui/app/models/views/change_test.ts
+++ b/polygerrit-ui/app/models/views/change_test.ts
@@ -74,7 +74,7 @@
...createChangeViewState(),
repo: 'x+/y+/z+/w' as RepoName,
};
- assert.equal(createChangeUrl(state), '/c/x%252B/y%252B/z%252B/w/+/42');
+ assert.equal(createChangeUrl(state), '/c/x%2B/y%2B/z%2B/w/+/42');
});
test('createDiffUrl', () => {
@@ -85,7 +85,7 @@
};
assert.equal(
createDiffUrl(params),
- '/c/test-project/+/42/12/x%252By/path.cpp'
+ '/c/test-project/+/42/12/x%2By/path.cpp'
);
window.CANONICAL_PATH = '/base';
@@ -93,10 +93,10 @@
window.CANONICAL_PATH = undefined;
params.repo = 'test' as RepoName;
- assert.equal(createDiffUrl(params), '/c/test/+/42/12/x%252By/path.cpp');
+ assert.equal(createDiffUrl(params), '/c/test/+/42/12/x%2By/path.cpp');
params.basePatchNum = 6 as BasePatchSetNum;
- assert.equal(createDiffUrl(params), '/c/test/+/42/6..12/x%252By/path.cpp');
+ assert.equal(createDiffUrl(params), '/c/test/+/42/6..12/x%2By/path.cpp');
params.diffView = {
path: 'foo bar/my+file.txt%',
@@ -105,7 +105,7 @@
delete params.basePatchNum;
assert.equal(
createDiffUrl(params),
- '/c/test/+/42/2/foo+bar/my%252Bfile.txt%2525'
+ '/c/test/+/42/2/foo+bar/my%2Bfile.txt%2525'
);
params.diffView = {
@@ -129,7 +129,7 @@
repo: 'x+/y' as RepoName,
diffView: {path: 'x+y/path.cpp'},
};
- assert.equal(createDiffUrl(params), '/c/x%252B/y/+/42/12/x%252By/path.cpp');
+ assert.equal(createDiffUrl(params), '/c/x%2B/y/+/42/12/x%2By/path.cpp');
});
test('createEditUrl', () => {
@@ -140,7 +140,7 @@
};
assert.equal(
createEditUrl(params),
- '/c/test-project/+/42/12/x%252By/path.cpp,edit#31'
+ '/c/test-project/+/42/12/x%2By/path.cpp,edit#31'
);
window.CANONICAL_PATH = '/base';
diff --git a/polygerrit-ui/app/models/views/dashboard.ts b/polygerrit-ui/app/models/views/dashboard.ts
index d9ff2d2..74523db 100644
--- a/polygerrit-ui/app/models/views/dashboard.ts
+++ b/polygerrit-ui/app/models/views/dashboard.ts
@@ -33,7 +33,7 @@
const query = repoName
? section.query.replace(REPO_TOKEN_PATTERN, repoName)
: section.query;
- return encodeURIComponent(section.name) + '=' + encodeURIComponent(query);
+ return encodeURL(section.name) + '=' + encodeURL(query);
});
}
@@ -43,13 +43,13 @@
// Custom dashboard.
const queryParams = sectionsToEncodedParams(state.sections, repoName);
if (state.title) {
- queryParams.push('title=' + encodeURIComponent(state.title));
+ queryParams.push('title=' + encodeURL(state.title));
}
const user = state.user ? state.user : '';
return `${getBaseUrl()}/dashboard/${user}?${queryParams.join('&')}`;
} else if (repoName) {
// Project dashboard.
- const encodedRepo = encodeURL(repoName, true);
+ const encodedRepo = encodeURL(repoName);
return `${getBaseUrl()}/p/${encodedRepo}/+/dashboard/${state.dashboard}`;
} else {
// User dashboard.
diff --git a/polygerrit-ui/app/models/views/dashboard_test.ts b/polygerrit-ui/app/models/views/dashboard_test.ts
index 86bb5c0..a7620dd 100644
--- a/polygerrit-ui/app/models/views/dashboard_test.ts
+++ b/polygerrit-ui/app/models/views/dashboard_test.ts
@@ -34,7 +34,7 @@
};
assert.equal(
createDashboardUrl(state),
- '/dashboard/?section%201=query%201§ion%202=query%202'
+ '/dashboard/?section+1=query+1§ion+2=query+2'
);
});
@@ -48,8 +48,8 @@
};
assert.equal(
createDashboardUrl(state),
- '/dashboard/?section%201=query%201%20repo-name&' +
- 'section%202=query%202%20repo-name'
+ '/dashboard/?section+1=query+1+repo-name&' +
+ 'section+2=query+2+repo-name'
);
});
@@ -61,7 +61,7 @@
};
assert.equal(
createDashboardUrl(state),
- '/dashboard/user?name=query&title=custom%20dashboard'
+ '/dashboard/user?name=query&title=custom+dashboard'
);
});
diff --git a/polygerrit-ui/app/models/views/group.ts b/polygerrit-ui/app/models/views/group.ts
index 277bcff..2ab3735 100644
--- a/polygerrit-ui/app/models/views/group.ts
+++ b/polygerrit-ui/app/models/views/group.ts
@@ -22,7 +22,7 @@
}
export function createGroupUrl(state: Omit<GroupViewState, 'view'>) {
- let url = `/admin/groups/${encodeURL(`${state.groupId}`, true)}`;
+ let url = `/admin/groups/${encodeURL(`${state.groupId}`)}`;
if (state.detail === GroupDetailView.MEMBERS) {
url += ',members';
} else if (state.detail === GroupDetailView.LOG) {
diff --git a/polygerrit-ui/app/models/views/repo.ts b/polygerrit-ui/app/models/views/repo.ts
index ec65ca1..66bf5bf 100644
--- a/polygerrit-ui/app/models/views/repo.ts
+++ b/polygerrit-ui/app/models/views/repo.ts
@@ -36,7 +36,7 @@
}
export function createRepoUrl(state: Omit<RepoViewState, 'view'>) {
- let url = `/admin/repos/${encodeURL(`${state.repo}`, true)}`;
+ let url = `/admin/repos/${encodeURL(`${state.repo}`)}`;
if (state.detail === RepoDetailView.GENERAL) {
url += ',general';
} else if (state.detail === RepoDetailView.ACCESS) {
diff --git a/polygerrit-ui/app/models/views/search.ts b/polygerrit-ui/app/models/views/search.ts
index c5d394d..48775ce 100644
--- a/polygerrit-ui/app/models/views/search.ts
+++ b/polygerrit-ui/app/models/views/search.ts
@@ -86,42 +86,39 @@
}
if (params.query) {
- return `${getBaseUrl()}/q/${encodeURL(params.query, true)}${offsetExpr}`;
+ return `${getBaseUrl()}/q/${encodeURL(params.query)}${offsetExpr}`;
}
const operators: string[] = [];
if (params.owner) {
- operators.push('owner:' + encodeURL(params.owner, false));
+ operators.push('owner:' + encodeURL(params.owner));
}
if (params.repo) {
- operators.push('project:' + encodeURL(params.repo, false));
+ operators.push('project:' + encodeURL(params.repo));
}
if (params.branch) {
- operators.push('branch:' + encodeURL(params.branch, false));
+ operators.push('branch:' + encodeURL(params.branch));
}
if (params.topic) {
operators.push(
- 'topic:' +
- escapeAndWrapSearchOperatorValue(encodeURL(params.topic, false))
+ 'topic:' + escapeAndWrapSearchOperatorValue(encodeURL(params.topic))
);
}
if (params.hashtag) {
operators.push(
'hashtag:' +
escapeAndWrapSearchOperatorValue(
- encodeURL(params.hashtag.toLowerCase(), false)
+ encodeURL(params.hashtag.toLowerCase())
)
);
}
if (params.statuses) {
if (params.statuses.length === 1) {
- operators.push('status:' + encodeURL(params.statuses[0], false));
+ operators.push('status:' + encodeURL(params.statuses[0]));
} else if (params.statuses.length > 1) {
operators.push(
'(' +
- params.statuses
- .map(s => `status:${encodeURL(s, false)}`)
- .join(' OR ') +
+ params.statuses.map(s => `status:${encodeURL(s)}`).join(' OR ') +
')'
);
}
diff --git a/polygerrit-ui/app/models/views/search_test.ts b/polygerrit-ui/app/models/views/search_test.ts
index 6809225..e2e02f5 100644
--- a/polygerrit-ui/app/models/views/search_test.ts
+++ b/polygerrit-ui/app/models/views/search_test.ts
@@ -56,10 +56,10 @@
// The presence of the query param overrides other options.
options.query = 'foo$bar';
- assert.equal(createSearchUrl(options), '/q/foo%2524bar');
+ assert.equal(createSearchUrl(options), '/q/foo%24bar');
options.offset = 100;
- assert.equal(createSearchUrl(options), '/q/foo%2524bar,100');
+ assert.equal(createSearchUrl(options), '/q/foo%24bar,100');
options = {statuses: ['a', 'b', 'c']};
assert.equal(