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
JavaScript
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)
}