|
|
@ -225,7 +225,72 @@ class Component extends StyleAndScriptStoringComponent { |
|
|
|
return this; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* |
|
|
|
* @param {*} dndGroup |
|
|
|
* @returns {Component} |
|
|
|
*/ |
|
|
|
draggable(dndGroup = null) { |
|
|
|
let selector = this._element.getAttribute("data-autocompel"); |
|
|
|
return this.addStyleClass("comp-el-mech-draggable") |
|
|
|
.setAttribute("draggable", "true") |
|
|
|
.setAttribute("dropEffect", "none") |
|
|
|
.addEventListener( |
|
|
|
CommonEvents.DRAG_START, |
|
|
|
function (event) { |
|
|
|
console.log("DragEvent", event, "on", selector); |
|
|
|
e.dataTransfer |
|
|
|
.setData( |
|
|
|
"text/plain", |
|
|
|
selector |
|
|
|
); |
|
|
|
} |
|
|
|
); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* |
|
|
|
* @param {EventDrag} dragEvent |
|
|
|
* @param {Function} action |
|
|
|
*/ |
|
|
|
onDrag(dragEvent, action) { |
|
|
|
let selector = `comp-el-mech-drag${dragEvent}`; |
|
|
|
|
|
|
|
return this.addEventListener( |
|
|
|
dragEvent, |
|
|
|
function (event) { |
|
|
|
event.preventDefault(); |
|
|
|
} |
|
|
|
); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* |
|
|
|
* @param {*} dndGroup |
|
|
|
* @returns {Component} |
|
|
|
*/ |
|
|
|
dropTarget(dndGroup = null) { |
|
|
|
let selector = "comp-el-mech-droptarget"; |
|
|
|
return this.onDrag(EventDrag.OVER) |
|
|
|
.addStyleClass(selector) |
|
|
|
.addEventListener( |
|
|
|
CommonEvents.DROP, |
|
|
|
function (event) { |
|
|
|
event.preventDefault(); |
|
|
|
|
|
|
|
let draggedKey = event.dataTransfer.getData("text"); |
|
|
|
let draggedElement = document.querySelector(`[data-autocompel="${draggedKey}"]`); |
|
|
|
|
|
|
|
let target = e.target |
|
|
|
.closest('.' + selector); |
|
|
|
|
|
|
|
if (![...target.childNodes].includes(draggedElement)) { |
|
|
|
target |
|
|
|
.appendChild(draggedElement); |
|
|
|
} |
|
|
|
} |
|
|
|
); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* Defines how a child Component is to be appended. |
|
|
|