62 lines
1.7 KiB
JavaScript
62 lines
1.7 KiB
JavaScript
const setupMenuBlocks = () => {
|
|||
|
|
for (const [key, value] of Object.entries(ScriptElms)) {
|
||
|
|
customElements.define(key, value);
|
||
|
|
const elm = document.createElement(key);
|
||
|
|
elm.className = "script-block";
|
||
|
|
elm.draggable = true
|
||
|
|
elm.ondragstart = dragStartHandler
|
||
|
|
menu.append(elm);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
const setupDragAndDrop = () => {
|
||
|
|
script.ondrop = dragDropHandler
|
||
|
|
script.ondragover = dragOverHandler
|
||
|
|
header.ondrop = dragDropHandler
|
||
|
|
header.ondragover = dragOverHandler
|
||
|
|
|
||
|
|
const flexParents = document.getElementsByClassName("flex-parent");
|
||
|
|
for (let i = 0; i < flexParents.length; i++) {
|
||
|
|
flexParents[i].ondrop = dragDropHandler
|
||
|
|
flexParents[i].ondragover = dragOverHandler
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
const dragStartHandler = (eve) => {
|
||
|
|
draggedElm = eve.target;
|
||
|
|
console.debug("Node: ", draggedElm);
|
||
|
|
eve.dataTransfer.setData("text", eve.target.tagName.toLowerCase());
|
||
|
|
}
|
||
|
|
|
||
|
|
const dragOverHandler = (eve) => { eve.preventDefault(); }
|
||
|
|
|
||
|
|
const dragDropHandler = (eve) => {
|
||
|
|
eve.preventDefault();
|
||
|
|
eve.stopPropagation();
|
||
|
|
|
||
|
|
const tagTarget = eve.currentTarget;
|
||
|
|
|
||
|
|
if (
|
||
|
|
eve.currentTarget.id.toLowerCase() === "header" ||
|
||
|
|
eve.currentTarget.classList.contains("flex-parent")
|
||
|
|
) {
|
||
|
|
if ( draggedElm.parentNode.id.toLowerCase() !== "menu" ) {
|
||
|
|
destroyScriptBlock(draggedElm, tagTarget);
|
||
|
|
}
|
||
|
|
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
|
||
|
|
addBlockToScript(draggedElm, tagTarget);
|
||
|
|
}
|
||
|
|
|
||
|
|
const addBlockToScript = (draggedTarget, tagTarget) => {
|
||
|
|
const elm = draggedTarget.cloneNode(true);
|
||
|
|
elm.ondragstart = dragStartHandler
|
||
|
|
tagTarget.appendChild(elm);
|
||
|
|
}
|
||
|
|
|
||
|
|
const destroyScriptBlock = (draggedTarget, tagTarget) => {
|
||
|
|
draggedTarget.remove();
|
||
|
|
}
|