Browse Source

FIX,FEAT: Drag and Drop basic implementation

master
chris 2 months ago
parent
commit
5e782912f7
  1. 35
      src/component.js
  2. 13
      src/modifications/dragAndDrop.js

35
src/component.js

@ -258,14 +258,12 @@ class Component extends StyleAndScriptStoringComponent {
* @param {EventDrag} dragEvent * @param {EventDrag} dragEvent
* @param {Function} action * @param {Function} action
*/ */
onDrag(dragEvent, action) { onDrag(dragEvent, action = (e) => { e.preventDefault(); }) {
let selector = `comp-el-mech-drag${dragEvent}`; let selector = `comp-el-mech-drag${dragEvent}`;
return this.addEventListener( return this.addEventListener(
dragEvent, 'drag' + dragEvent,
function (event) { action
event.preventDefault();
}
); );
} }
@ -276,25 +274,19 @@ class Component extends StyleAndScriptStoringComponent {
*/ */
dropTarget(dndGroup = null) { dropTarget(dndGroup = null) {
let selector = "comp-el-mech-droptarget"; 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"); function dropEventCall(event) {
let draggedElement = document.querySelector(`[data-autocompel="${draggedKey}"]`); return dropEventHandler(event, selector);
}
let target = e.target this.addStyleClass(selector)
.closest('.' + selector); .onDrag(EventDrag.OVER);
if (![...target.childNodes].includes(draggedElement)) { this._element.addEventListener(
target "drop",
.appendChild(draggedElement); dropEventCall
} );
} return this;
);
} }
/** /**
@ -577,6 +569,7 @@ class Component extends StyleAndScriptStoringComponent {
); );
} }
} }
if (this.#isCompel) { if (this.#isCompel) {
function dealCollected(map, extStoreType) { function dealCollected(map, extStoreType) {
if (map.has(extStoreType)) { if (map.has(extStoreType)) {

13
src/modifications/dragAndDrop.js

@ -6,6 +6,19 @@ const EventDrag = Object.freeze({
LEAVE: "leave" LEAVE: "leave"
}); });
function dropEventHandler(event, selector) {
event.preventDefault();
let draggedKey = event.dataTransfer.getData("text/html");
let draggedElement = document.querySelector(`[data-autocompel="${draggedKey}"]`);
let target = event.target
.closest('.' + selector);
//if (![...target.childNodes].includes(draggedElement)) {
target.appendChild(draggedElement);
//}
}
const DADGroups = Object.freeze({ const DADGroups = Object.freeze({
DEFAULT: new DragAndDropGroup(), DEFAULT: new DragAndDropGroup(),
}); });

Loading…
Cancel
Save