UNPKG

@selenite/graph-editor

Version:

A graph editor for visual programming, based on rete and svelte.

34 lines (33 loc) 1.03 kB
export async function getElementCenter(child, parent) { while (!child.offsetParent) { await new Promise((res) => setTimeout(res, 0)); } let x = child.offsetLeft; let y = child.offsetTop; let currentElement = child.offsetParent; if (!currentElement) throw new Error('child has null offsetParent'); while (currentElement !== null && currentElement !== parent) { x += currentElement.offsetLeft + currentElement.clientLeft; y += currentElement.offsetTop + currentElement.clientTop; currentElement = currentElement.offsetParent; } const width = child.offsetWidth; const height = child.offsetHeight; return { x: x + width / 2, y: y + height / 2 }; } export class EventEmitter { listeners = new Set(); emit(data) { this.listeners.forEach((listener) => listener(data)); } listen(handler) { this.listeners.add(handler); return () => { this.listeners.delete(handler); }; } }