From f0b647c2b9df8eb512df6aa2c17ffed5b76211ee Mon Sep 17 00:00:00 2001 From: Marco Dickert Date: Tue, 4 Aug 2020 21:13:57 +0200 Subject: [PATCH] Add hint before overwrite files Signed-off-by: Marco Dickert --- src/i18n/de.json | 2 + src/i18n/en.json | 2 + src/ifm.js | 40 ++++++++++++++++--- src/main.php | 3 ++ .../modal.uploadconfirmoverwrite.html | 15 +++++++ 5 files changed, 57 insertions(+), 5 deletions(-) create mode 100644 src/templates/modal.uploadconfirmoverwrite.html diff --git a/src/i18n/de.json b/src/i18n/de.json index d7c84b3..8489882 100644 --- a/src/i18n/de.json +++ b/src/i18n/de.json @@ -102,6 +102,8 @@ "upload": "Hochladen", "upload_drop": "Dateien zum hochladen hier ablegen", "upload_file": "Datei hochladen", + "upload_overwrite_hint": "Die folgenden Dateien würden überschrieben:", + "upload_overwrite_confirm": "Sollen die Dateien dennoch hochgeladen werden?", "upload_remote": "Hochladen von ausserhalb", "upload_remote_url": "Entfernte URL zum hochladen", "username": "Benutzername", diff --git a/src/i18n/en.json b/src/i18n/en.json index c457ad9..bd63e19 100644 --- a/src/i18n/en.json +++ b/src/i18n/en.json @@ -103,6 +103,8 @@ "upload": "Upload", "upload_drop": "Drop files to upload", "upload_file": "Upload File", + "upload_overwrite_hint": "The following files would be overwritten:", + "upload_overwrite_confirm": "Upload anyway?", "upload_remote": "Remote Upload", "upload_remote_url": "Remote Upload URL", "username": "Username", diff --git a/src/ifm.js b/src/ifm.js index 2442234..7397ee1 100644 --- a/src/ifm.js +++ b/src/ifm.js @@ -951,13 +951,23 @@ function IFM(params) { form.addEventListener( 'click', function( e ) { if( e.target.id == 'buttonUpload' ) { e.preventDefault(); + var newfilename = form.elements.newfilename.value; var files = Array.prototype.slice.call( form.elements.files.files ); - if( files.length > 1 ) - files.forEach( function( file ) { - self.uploadFile( file ); - }); + var existing_files = []; + if (files.length > 1) + existing_files = files.map(x => x.name).filter(item => self.fileCache.map(x => x.name).includes(item)); else - self.uploadFile( files[0], form.elements.newfilename.value ); + existing_files = self.fileCache.map(x => x.name).includes(newfilename); + if (existing_files.length > 0) + self.showUploadConfirmOverwrite(files, existing_files, newfilename); + else { + if (files.length == 1) + self.uploadFile(files[0], newfilename); + else + files.forEach( function( file ) { + self.uploadFile( file ); + }); + } self.hideModal(); } else if( e.target.id == 'buttonCancel' ) { e.preventDefault(); @@ -966,6 +976,26 @@ function IFM(params) { }); }; + this.showUploadConfirmOverwrite = function(files, existing_files, newfilename="") { + self.showModal(Mustache.render(self.templates.uploadconfirmoverwrite, {files: existing_files, i18n: self.i18n})); + var form = document.forms.formUploadConfirmOverwrite; + form.addEventListener('click', function(e) { + if (e.target.id == "buttonConfirm") { + e.preventDefault(); + if (files.length == 1) + self.uploadFile(files[0], newfilename); + else + files.forEach(function(file) { + self.uploadFile(file); + }); + self.hideModal(); + } else if (e.target.id == 'buttonCancel') { + e.preventDefault(); + self.hideModal(); + } + }); + }; + /** * Uploads a file */ diff --git a/src/main.php b/src/main.php index 5d85390..f92b79a 100644 --- a/src/main.php +++ b/src/main.php @@ -176,6 +176,9 @@ f00bar; f00bar; $templates['uploadfile'] = <<<'f00bar' @@@file:src/templates/modal.uploadfile.html@@@ +f00bar; + $templates['uploadconfirmoverwrite'] = <<<'f00bar' +@@@file:src/templates/modal.uploadconfirmoverwrite.html@@@ f00bar; $this->templates = $templates; diff --git a/src/templates/modal.uploadconfirmoverwrite.html b/src/templates/modal.uploadconfirmoverwrite.html new file mode 100644 index 0000000..8a5acd0 --- /dev/null +++ b/src/templates/modal.uploadconfirmoverwrite.html @@ -0,0 +1,15 @@ +
+ + +