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.
51 lines
1.3 KiB
51 lines
1.3 KiB
export function debounce(func: Function, delay: number) {
|
|
let timer: number
|
|
return function (...args: any) {
|
|
if (timer) clearTimeout(timer)
|
|
timer = setTimeout(() => {
|
|
// @ts-ignore
|
|
func.apply(this, args)
|
|
}, delay)
|
|
}
|
|
}
|
|
|
|
export function deepClone(obj: any) {
|
|
if (!obj || typeof obj !== 'object') {
|
|
return obj
|
|
}
|
|
let newObj: any = {}
|
|
if (Array.isArray(obj)) {
|
|
newObj = obj.map(item => deepClone(item))
|
|
} else {
|
|
Object.keys(obj).forEach((key) => {
|
|
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())
|
|
} |