39 lines
1.5 KiB
TypeScript
39 lines
1.5 KiB
TypeScript
import { isObject } from './is';
|
|
|
|
type TargetContext = '_self' | '_parent' | '_blank' | '_top';
|
|
|
|
export const openWindow = (url: string, opts?: { target?: TargetContext; [key: string]: any }) => {
|
|
const { target = '_blank', ...others } = opts || {};
|
|
window.open(
|
|
url,
|
|
target,
|
|
Object.entries(others)
|
|
.reduce((preValue: string[], curValue) => {
|
|
const [key, value] = curValue;
|
|
return [...preValue, `${key}=${value}`];
|
|
}, [])
|
|
.join(',')
|
|
);
|
|
};
|
|
|
|
export const regexUrl = new RegExp(
|
|
'^(?!mailto:)(?:(?:http|https|ftp)://)(?:\\S+(?::\\S*)?@)?(?:(?:(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[0-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z\\u00a1-\\uffff0-9]+-?)*[a-z\\u00a1-\\uffff0-9]+)(?:\\.(?:[a-z\\u00a1-\\uffff0-9]+-?)*[a-z\\u00a1-\\uffff0-9]+)*(?:\\.(?:[a-z\\u00a1-\\uffff]{2,})))|localhost)(?::\\d{2,5})?(?:(/|\\?|#)[^\\s]*)?$',
|
|
'i'
|
|
);
|
|
|
|
export function setObjToUrlParams(baseUrl: string, obj: any): string {
|
|
let parameters = '';
|
|
Object.keys(obj).forEach((key) => {
|
|
parameters += `${key}=${encodeURIComponent(obj[key])}&`;
|
|
});
|
|
parameters = parameters.replace(/&$/, '');
|
|
return /\?$/.test(baseUrl) ? baseUrl + parameters : baseUrl.replace(/\/?$/, '?') + parameters;
|
|
}
|
|
|
|
export const deepMerge = <T = any>(src: any = {}, target: any = {}): T => {
|
|
Object.keys(target).forEach((key) => {
|
|
src[key] = isObject(src[key]) ? deepMerge(src[key], target[key]) : (src[key] = target[key]);
|
|
});
|
|
return src;
|
|
};
|