80 lines
2.2 KiB
JavaScript
80 lines
2.2 KiB
JavaScript
import _global from "../polyfill/_global";
|
|
|
|
export function stringifyQuery(query) {
|
|
return Object.keys(query).map(key => {
|
|
const value = query[key];
|
|
return `${key}=${encodeURIComponent(value)}`;
|
|
}).join('&');
|
|
}
|
|
|
|
export function decodeQuery(query) {
|
|
return Object.keys(query).reduce((result, key) => {
|
|
const value = query[key];
|
|
result[key] = decodeURIComponent(value);
|
|
return result;
|
|
}, {});
|
|
}
|
|
|
|
export function parseQueryParams(path) {
|
|
let url = '';
|
|
let params = {};
|
|
if (!path || typeof path !== 'string') {
|
|
return { url, params }
|
|
}
|
|
let queryString = '';
|
|
let indexE = path.indexOf('?');
|
|
let indexW = path.indexOf('#');
|
|
let indexQ = path.indexOf('=');
|
|
if (indexE >= 0) {
|
|
url = path.substring(0, indexE);
|
|
queryString = path.substring(indexE + 1, indexW > 0 ? indexW : path.length);
|
|
} else if (indexQ >= 0) {
|
|
url = '';
|
|
queryString = path;
|
|
} else {
|
|
url = path;
|
|
queryString = '';
|
|
}
|
|
queryString.split('&').map(item => {
|
|
let index = item.indexOf("=");
|
|
if (index > 0) {
|
|
let key = item.substring(0, index);
|
|
let value = item.substring(index + 1);
|
|
params[key] = decodeURIComponent(value);
|
|
}
|
|
});
|
|
return { url, params };
|
|
}
|
|
|
|
export function appendQueryParams(path, query = {}) {
|
|
const { url, params } = parseQueryParams(path);
|
|
Object.keys(query).forEach(key => {
|
|
let value = query[key];
|
|
if (value !== undefined && value !== null) {
|
|
params[key] = value;
|
|
} else {
|
|
delete params[key];
|
|
}
|
|
});
|
|
const queryString = Object.keys(params).map(key => {
|
|
const value = params[key];
|
|
return `${key}=${encodeURIComponent(value)}`;
|
|
}).join('&');;
|
|
if (!url) {
|
|
return queryString;
|
|
}
|
|
if (!queryString) {
|
|
return url;
|
|
}
|
|
return `${url}?${queryString}`;
|
|
}
|
|
|
|
export function getQueryString(key, def) {
|
|
let search = _global.location.search;
|
|
var reg = new RegExp("(^|&)" + key + "=([^&]*)(&|$)");
|
|
var r = search.substr(1).match(reg);
|
|
if (r != null) {
|
|
return decodeURIComponent(unescape(r[2]));
|
|
}
|
|
return def;
|
|
} |