mirror of
https://github.com/grafana/grafana.git
synced 2025-02-13 00:55:47 -06:00
90 lines
2.3 KiB
TypeScript
90 lines
2.3 KiB
TypeScript
/**
|
|
* @preserve jquery-param (c) 2015 KNOWLEDGECODE | MIT
|
|
*/
|
|
|
|
import { UrlQueryMap } from '@grafana/runtime';
|
|
|
|
export function renderUrl(path: string, query: UrlQueryMap | undefined): string {
|
|
if (query && Object.keys(query).length > 0) {
|
|
path += '?' + toUrlParams(query);
|
|
}
|
|
return path;
|
|
}
|
|
|
|
export function encodeURIComponentAsAngularJS(val: string, pctEncodeSpaces?: boolean) {
|
|
return encodeURIComponent(val)
|
|
.replace(/%40/gi, '@')
|
|
.replace(/%3A/gi, ':')
|
|
.replace(/%24/g, '$')
|
|
.replace(/%2C/gi, ',')
|
|
.replace(/%3B/gi, ';')
|
|
.replace(/%20/g, pctEncodeSpaces ? '%20' : '+');
|
|
}
|
|
|
|
export function toUrlParams(a: any) {
|
|
const s: any[] = [];
|
|
const rbracket = /\[\]$/;
|
|
|
|
const isArray = (obj: any) => {
|
|
return Object.prototype.toString.call(obj) === '[object Array]';
|
|
};
|
|
|
|
const add = (k: string, v: any) => {
|
|
v = typeof v === 'function' ? v() : v === null ? '' : v === undefined ? '' : v;
|
|
if (typeof v !== 'boolean') {
|
|
s[s.length] = encodeURIComponentAsAngularJS(k, true) + '=' + encodeURIComponentAsAngularJS(v, true);
|
|
} else {
|
|
s[s.length] = encodeURIComponentAsAngularJS(k, true);
|
|
}
|
|
};
|
|
|
|
const buildParams = (prefix: string, obj: any) => {
|
|
let i, len, key;
|
|
|
|
if (prefix) {
|
|
if (isArray(obj)) {
|
|
for (i = 0, len = obj.length; i < len; i++) {
|
|
if (rbracket.test(prefix)) {
|
|
add(prefix, obj[i]);
|
|
} else {
|
|
buildParams(prefix, obj[i]);
|
|
}
|
|
}
|
|
} else if (obj && String(obj) === '[object Object]') {
|
|
for (key in obj) {
|
|
buildParams(prefix + '[' + key + ']', obj[key]);
|
|
}
|
|
} else {
|
|
add(prefix, obj);
|
|
}
|
|
} else if (isArray(obj)) {
|
|
for (i = 0, len = obj.length; i < len; i++) {
|
|
add(obj[i].name, obj[i].value);
|
|
}
|
|
} else {
|
|
for (key in obj) {
|
|
buildParams(key, obj[key]);
|
|
}
|
|
}
|
|
return s;
|
|
};
|
|
|
|
return buildParams('', a).join('&');
|
|
}
|
|
|
|
export function appendQueryToUrl(url: string, stringToAppend: string) {
|
|
if (stringToAppend !== undefined && stringToAppend !== null && stringToAppend !== '') {
|
|
const pos = url.indexOf('?');
|
|
if (pos !== -1) {
|
|
if (url.length - pos > 1) {
|
|
url += '&';
|
|
}
|
|
} else {
|
|
url += '?';
|
|
}
|
|
url += stringToAppend;
|
|
}
|
|
|
|
return url;
|
|
}
|