/** * _ ___ Another * / |/ (_)______ __ _____ * / / / __(_- { evt.dataTransfer.setData('text/plain', node.dataset.nodetype) evt.dataTransfer.effectAllowed = 'copy' evt.dataTransfer.setDragImage(node, evt.offsetX, evt.offsetY) }) } onNodeDragEnd(evt){ console.log('drag end', evt) evt.dataTransfer.clearData() } setupDropZone(){ const dropZone = this.graflow.wiresContainer const nodesContainer = this.graflow.nodesContainer dropZone.addEventListener('dragover', (evt) => { evt.preventDefault() evt.dataTransfer.dropEffect = 'copy' }) dropZone.addEventListener('drop', (evt) => { evt.preventDefault() const nodeType = evt.dataTransfer.getData('text/plain') if(!nodeType || !(nodeType in this.graflow.nodesRegistry)) return const rect = nodesContainer.getBoundingClientRect() const x = evt.clientX - rect.left + nodesContainer.scrollLeft const y = evt.clientY - rect.top + nodesContainer.scrollTop const id = 'n' + crypto.randomUUID().replace(/-/g, '').slice(0, 8) this.graflow.addNode({ id, nodeType, coords: { x, y } }) for(const node of this.graflow.flow.nodes){ if(node.id == id){ node.coords.x = x node.coords.y = y break } } this.graflow.refresh() }) } } Buildoz.define('grafloweditor', BZgrafloweditor)