Skip to content

Commit f8b477b

Browse files
fhirschmannclaude
andcommitted
feat: upload files via drag & drop onto the file tree
Dropped files are uploaded into the currently selected folder using the existing upload pipeline; the tree highlights while dragging. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
1 parent e74e712 commit f8b477b

1 file changed

Lines changed: 33 additions & 0 deletions

File tree

‎html/management.html‎

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -884,6 +884,11 @@
884884
overflow-y: scroll;
885885
}
886886

887+
.filetree.cp-dropzone {
888+
border-color: var(--cp-cyan);
889+
box-shadow: inset 0 0 24px rgba(0, 240, 255, .15), 0 0 12px rgba(0, 240, 255, .35);
890+
}
891+
887892
.filetree-size {
888893
height: 200px;
889894
}
@@ -2718,6 +2723,34 @@ <h5 class="modal-title" data-i18n="tools.nvs.erase.title"></h5>
27182723
}
27192724
});
27202725
});
2726+
/* Drag & drop upload: drop files from the file manager onto the tree to
2727+
* upload them into the currently selected folder */
2728+
(function () {
2729+
const tree = document.getElementById('explorerTree');
2730+
['dragenter', 'dragover'].forEach(eventName => tree.addEventListener(eventName, (e) => {
2731+
e.preventDefault();
2732+
e.stopPropagation();
2733+
tree.classList.add('cp-dropzone');
2734+
}));
2735+
['dragleave', 'drop'].forEach(eventName => tree.addEventListener(eventName, (e) => {
2736+
e.preventDefault();
2737+
e.stopPropagation();
2738+
tree.classList.remove('cp-dropzone');
2739+
}));
2740+
tree.addEventListener('drop', (e) => {
2741+
// filter out directories (they appear as files without type and size)
2742+
const files = Array.from(e.dataTransfer.files).filter(f => f.size > 0 || f.type !== "");
2743+
if (!files.length) {
2744+
return;
2745+
}
2746+
const dataTransfer = new DataTransfer();
2747+
files.forEach(f => dataTransfer.items.add(f));
2748+
const input = document.getElementById('uploaded_file');
2749+
input.files = dataTransfer.files;
2750+
document.getElementById('uploaded_file_text').innerHTML = files.map(f => f.name).join(', ');
2751+
$('#explorerUploadForm').trigger('submit');
2752+
});
2753+
})();
27212754
/* File Upload */
27222755
$('#explorerUploadForm').submit(function (e) {
27232756
e.preventDefault();

0 commit comments

Comments
 (0)