UNPKG

visbug-lib

Version:

<p align="center"> <img src="./assets/visbug.png" width="300" height="300" alt="visbug"> <br> <a href="https://www.npmjs.org/package/visbug"><img src="https://img.shields.io/npm/v/visbug.svg?style=flat" alt="npm latest version number"></a> <a href

110 lines (87 loc) 2.88 kB
import $ from 'blingblingjs' import { nodeKey } from './strings' export const deepElementFromPoint = (x, y) => { const el = document.elementFromPoint(x, y) const crawlShadows = node => { if (node.shadowRoot) { const potential = node.shadowRoot.elementFromPoint(x, y) if (potential == node) return node else if (potential.shadowRoot) return crawlShadows(potential) else return potential } else return node } const nested_shadow = crawlShadows(el) return nested_shadow || el } export const getSide = direction => { let start = direction.split('+').pop().replace(/^\w/, c => c.toUpperCase()) if (start == 'Up') start = 'Top' if (start == 'Down') start = 'Bottom' return start } export const getNodeIndex = el => { return [...el.parentElement.parentElement.children] .indexOf(el.parentElement) } export function showEdge(el) { return el.animate([ { outline: '1px solid transparent' }, { outline: '1px solid hsla(330, 100%, 71%, 80%)' }, { outline: '1px solid transparent' }, ], 600) } let timeoutMap = {} export const showHideSelected = (el, duration = 750) => { el.setAttribute('data-selected-hide', true) showHideNodeLabel(el, true) if (timeoutMap[nodeKey(el)]) clearTimeout(timeoutMap[nodeKey(el)]) timeoutMap[nodeKey(el)] = setTimeout(_ => { el.removeAttribute('data-selected-hide') showHideNodeLabel(el, false) }, duration) return el } export const showHideNodeLabel = (el, show = false) => { if (!el.hasAttribute('data-label-id')) return const label_id = el.getAttribute('data-label-id') const nodes = $(` visbug-label[data-label-id="${label_id}"], visbug-handles[data-label-id="${label_id}"] `) nodes.length && show ? nodes.forEach(el => el.style.display = 'none') : nodes.forEach(el => el.style.display = null) } export const htmlStringToDom = (htmlString = "") => (new DOMParser().parseFromString(htmlString, 'text/html')) .body.firstChild export const isOffBounds = node => node.closest && ( node.closest('vis-bug') || node.closest('hotkey-map') || node.closest('visbug-metatip') || node.closest('visbug-ally') || node.closest('visbug-label') || node.closest('visbug-handles') || node.closest('visbug-corners') || node.closest('visbug-grip') || node.closest('visbug-gridlines') ) export const isSelectorValid = (qs => ( selector => { try { qs(selector) } catch (e) { return false } return true } ))(s => document.createDocumentFragment().querySelector(s)) export const swapElements = (src, target) => { var temp = document.createElement("div") src.parentNode.insertBefore(temp, src) target.parentNode.insertBefore(src, target) temp.parentNode.insertBefore(target, temp) temp.parentNode.removeChild(temp) }