diff --git a/dev/External/User/ko.js b/dev/External/User/ko.js index c20c06af9..e09b1bccb 100644 --- a/dev/External/User/ko.js +++ b/dev/External/User/ko.js @@ -29,37 +29,39 @@ const rlContentType = 'snappymail/action', }, dragTimer = { - id: 0, - stop: () => clearTimeout(dragTimer.id), - start: fn => dragTimer.id = setTimeout(fn, 500) + id: 0 }, - fnStop = (e, element) => { + dragStop = (e, element) => { e.preventDefault(); - element.classList.remove('droppableHover'); - dragTimer.stop(); + element?.classList.remove('droppableHover'); + if (dragTimer.node == element) { + dragTimer.node = null; + clearTimeout(dragTimer.id); + } }, - fnHover = (e, element, folder) => { + dragEnter = (e, element, folder) => { let files = false; // if (e.dataTransfer.types.includes('Files')) for (const item of e.dataTransfer.items) { files |= 'file' === item.kind && 'message/rfc822' === item.type; } if (files || dragMessages()) { - fnStop(e, element); - files && e.stopPropagation(); + e.stopPropagation(); + dragStop(e, dragTimer.node); e.dataTransfer.dropEffect = files ? 'copy' : (e.ctrlKey ? 'copy' : 'move'); element.classList.add('droppableHover'); if (folder.collapsed()) { - dragTimer.start(() => { + dragTimer.node = element; + dragTimer.id = setTimeout(() => { folder.collapsed(false); setExpandedFolder(folder.fullName, true); }, 500); } } }, - fnDrop = (e, element, folder, dragData) => { - fnStop(e, element); + dragDrop = (e, element, folder, dragData) => { + dragStop(e, element); if (dragMessages() && 'copyMove' == e.dataTransfer.effectAllowed) { moveMessagesToFolder(FolderUserStore.currentFolderFullName(), dragData.data, folder.fullName, e.ctrlKey); } else if (e.dataTransfer.types.includes('Files')) { @@ -160,10 +162,10 @@ Object.assign(ko.bindingHandlers, { init: (element, fValueAccessor) => { const folder = fValueAccessor(); // ko.dataFor(element) folder && addEventsListeners(element, { - dragenter: e => fnHover(e, element, folder), - dragover: e => fnHover(e, element, folder), - dragleave: e => fnStop(e, element), - drop: e => fnDrop(e, element, folder, dragData) + dragenter: e => dragEnter(e, element, folder), +// dragover: e => dragOver(e, element, folder), + dragleave: e => dragStop(e, element), + drop: e => dragDrop(e, element, folder, dragData) }); } },