@selenite/graph-editor
Version:
A graph editor for visual programming, based on rete and svelte.
34 lines (33 loc) • 1.03 kB
JavaScript
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);
};
}
}