You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

54 lines
1.4 KiB

export function debounce(func: Function, delay: number) {
let timer: number
return function (...args: any) {
if (timer) {
window.clearTimeout(timer)
}
timer = window.setTimeout(() => {
// @ts-ignore
func.apply(this, args)
}, delay)
}
}
export function deepClone<T>(obj: T): T {
if (!obj || typeof obj !== 'object') {
return obj
}
let newObj: any = {}
if (Array.isArray(obj)) {
newObj = obj.map(item => deepClone(item))
} else {
Object.keys(obj as any).forEach((key) => {
// @ts-ignore
return newObj[key] = deepClone(obj[key])
})
}
return newObj
}
export function isBody(node: Element): boolean {
return node && node.nodeType === 1 && node.tagName.toLowerCase() === 'body'
}
export function findParent(node: Element, filterFn: Function, includeSelf: boolean) {
if (node && !isBody(node)) {
node = includeSelf ? node : node.parentNode as Element
while (node) {
if (!filterFn || filterFn(node) || isBody(node)) {
return filterFn && !filterFn(node) && isBody(node)
? null
: node
}
node = node.parentNode as Element
}
}
return null
}
export function getUUID(): string {
function S4(): string {
return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1)
}
return (S4() + S4() + '-' + S4() + '-' + S4() + '-' + S4() + '-' + S4() + S4() + S4())
}