Fix mergeUrlParams handling of `+`
**What was the issue?** If a param value had `+`, it would be encoded as a literal `+` instead of a space.
This commit is contained in:
parent
b1905a396f
commit
4fdc34c109
|
@ -1,5 +1,11 @@
|
||||||
import { join as joinPaths } from 'path';
|
import { join as joinPaths } from 'path';
|
||||||
|
|
||||||
|
// Returns a decoded url parameter value
|
||||||
|
// - Treats '+' as '%20'
|
||||||
|
function decodeUrlParameter(val) {
|
||||||
|
return decodeURIComponent(val.replace(/\+/g, '%20'));
|
||||||
|
}
|
||||||
|
|
||||||
// Returns an array containing the value(s) of the
|
// Returns an array containing the value(s) of the
|
||||||
// of the key passed as an argument
|
// of the key passed as an argument
|
||||||
export function getParameterValues(sParam, url = window.location) {
|
export function getParameterValues(sParam, url = window.location) {
|
||||||
|
@ -30,7 +36,7 @@ export function mergeUrlParams(params, url) {
|
||||||
.forEach(part => {
|
.forEach(part => {
|
||||||
if (part.length) {
|
if (part.length) {
|
||||||
const kv = part.split('=');
|
const kv = part.split('=');
|
||||||
merged[decodeURIComponent(kv[0])] = decodeURIComponent(kv.slice(1).join('='));
|
merged[decodeUrlParameter(kv[0])] = decodeUrlParameter(kv.slice(1).join('='));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
---
|
||||||
|
title: Fix search preserving space when change branch
|
||||||
|
merge_request: 31973
|
||||||
|
author: minghuan lei
|
||||||
|
type: fixed
|
|
@ -94,6 +94,12 @@ describe('URL utility', () => {
|
||||||
it('adds and updates encoded params', () => {
|
it('adds and updates encoded params', () => {
|
||||||
expect(urlUtils.mergeUrlParams({ a: '&', q: '?' }, '?a=%23#frag')).toBe('?a=%26&q=%3F#frag');
|
expect(urlUtils.mergeUrlParams({ a: '&', q: '?' }, '?a=%23#frag')).toBe('?a=%26&q=%3F#frag');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('treats "+" as "%20"', () => {
|
||||||
|
expect(urlUtils.mergeUrlParams({ ref: 'bogus' }, '?a=lorem+ipsum&ref=charlie')).toBe(
|
||||||
|
'?a=lorem%20ipsum&ref=bogus',
|
||||||
|
);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('removeParams', () => {
|
describe('removeParams', () => {
|
||||||
|
|
Loading…
Reference in New Issue