From 516780ab2cb6cadad6a9bf946d495cb2d347b077 Mon Sep 17 00:00:00 2001 From: Christoph Stahl Date: Mon, 23 Jun 2025 15:38:15 +0200 Subject: [PATCH] Implemented drag and drop in move --- src/components/Entry.vue | 88 +++++++++++++++++++++++++++++++++++----- 1 file changed, 77 insertions(+), 11 deletions(-) diff --git a/src/components/Entry.vue b/src/components/Entry.vue index c3ee5bf..645f5fe 100644 --- a/src/components/Entry.vue +++ b/src/components/Entry.vue @@ -28,17 +28,42 @@ const eta = computed(() =>{ }) const dragging = (e) => { + if (e.type == 'touchstart') { + e.preventDefault() + const list_target = e.target.closest('li') + list_target.style.opacity = 0.5 + return + } + const element = e.target.closest('li') const data = { uuid: props.entry.uuid, - index: $(e.target.closest('li')).index()} - console.log(data) + index: $(element).index() + } e.dataTransfer.clearData() e.dataTransfer.setData('application/json', JSON.stringify(data)) + e.dataTransfer.setDragImage(element, 0, 0) e.dataTransfer.effectAllowed = 'move' } const dragend = (e) => { e.preventDefault() + if (e.type == 'touchend') { + const drop_target = document.getElementById('draggedover') + if (drop_target) { + drop_target.removeAttribute('id') + drop_target.classList.remove('draggedoverTop') + drop_target.classList.remove('draggedoverBottom') + } + e.target.closest('li').style.opacity = 1 + const drop_index = $(drop_target.closest('li')).index() + const source_index = $(e.target.closest('li')).index() + if(source_index < drop_index) { + emits('moveTo', {"uuid": props.entry.uuid, "target": drop_index + 1}) + } else { + emits('moveTo', {"uuid": props.entry.uuid, "target": drop_index}) + } + return + } e.target.closest('li').classList.remove('draggedoverBottom') e.target.closest('li').classList.remove('draggedoverTop') } @@ -58,13 +83,28 @@ const dropped = (e) => { const dragover = (e) => { e.preventDefault() - e.dataTransfer.dropEffect = 'move' - const element = JSON.parse(e.dataTransfer.getData('application/json')) - const index = $(e.target.closest('li')).index() - if (index < element.index) { - e.target.closest('li').classList.add('draggedoverTop') + var source_index = 0 + var target = null + if (e.type == 'touchmove') { + target = document.elementFromPoint(e.touches[0].clientX, e.touches[0].clientY) + source_index = $(e.target.closest('li')).index() + const old_draggedover = document.getElementById('draggedover') + if (old_draggedover) { + old_draggedover.removeAttribute('id') + old_draggedover.classList.remove('draggedoverTop') + old_draggedover.classList.remove('draggedoverBottom') + } + } else { + e.dataTransfer.dropEffect = 'move' + source_index = JSON.parse(e.dataTransfer.getData('application/json')).index + target = e.target + } + target.closest('li').id = 'draggedover' + const index = $(target.closest('li')).index() + if (index < source_index) { + target.closest('li').classList.add('draggedoverTop') } else { - e.target.closest('li').classList.add('draggedoverBottom') + target.closest('li').classList.add('draggedoverBottom') } } const dragleave = (e) => { @@ -76,9 +116,16 @@ const dragleave = (e) => {