diff --git a/public/s/css/f0ckm.css b/public/s/css/f0ckm.css index 39064d8..afff292 100644 --- a/public/s/css/f0ckm.css +++ b/public/s/css/f0ckm.css @@ -1623,8 +1623,7 @@ body.layout-modern .global-sidebar-right { .global-sidebar-right img, .item-sidebar-right img, .index-sidebar-right img { - -webkit-user-drag: none; - user-select: none; + } /* Edge zone drag handle — simple centered vertical pill */ diff --git a/public/s/js/f0ck_upload_init.js b/public/s/js/f0ck_upload_init.js index 700271e..4c6d8fb 100644 --- a/public/s/js/f0ck_upload_init.js +++ b/public/s/js/f0ck_upload_init.js @@ -46,11 +46,19 @@ return; } + // Mark internal drags to prevent them from triggering the dropzone + window.addEventListener('dragstart', (e) => { + if (e.dataTransfer) { + e.dataTransfer.setData('application/x-f0ck-internal', 'true'); + } + }); + // Global Drag Events window.addEventListener('dragenter', (e) => { e.preventDefault(); if (window.location.pathname === '/upload') return; - if (e.dataTransfer.types.includes('Files')) { + if (e.dataTransfer && e.dataTransfer.types.includes('application/x-f0ck-internal')) return; + if (e.dataTransfer && e.dataTransfer.types.includes('Files')) { dragCounter++; dropOverlay.classList.add('active'); } @@ -59,10 +67,17 @@ window.addEventListener('dragover', (e) => { e.preventDefault(); if (window.location.pathname === '/upload') return; + if (e.dataTransfer && e.dataTransfer.types.includes('application/x-f0ck-internal')) { + // Change dropEffect to none to indicate this dropzone doesn't accept internal elements + e.dataTransfer.dropEffect = 'none'; + } }); window.addEventListener('dragleave', (e) => { if (window.location.pathname === '/upload') return; + // dragleave doesn't always have reliable dataTransfer.types, but if it does, check it + if (e.dataTransfer && e.dataTransfer.types.includes('application/x-f0ck-internal')) return; + dragCounter--; if (dragCounter <= 0) { dragCounter = 0; @@ -72,6 +87,8 @@ window.addEventListener('drop', (e) => { if (window.location.pathname === '/upload') return; + if (e.dataTransfer && e.dataTransfer.types.includes('application/x-f0ck-internal')) return; + e.preventDefault(); dragCounter = 0; dropOverlay.classList.remove('active');