From 71ca358e0e4d470bf6701ab0e8a95b7555319817 Mon Sep 17 00:00:00 2001 From: James Allen Date: Wed, 24 Feb 2016 16:35:05 +0000 Subject: [PATCH] Show confirmation if upload will overwrite files --- .../app/views/project/editor/file-tree.jade | 15 ++++++++ .../coffee/directives/fineUpload.coffee | 15 ++++++++ .../ide/file-tree/FileTreeManager.coffee | 6 ++++ .../controllers/FileTreeController.coffee | 36 +++++++++++++++---- 4 files changed, 66 insertions(+), 6 deletions(-) diff --git a/services/web/app/views/project/editor/file-tree.jade b/services/web/app/views/project/editor/file-tree.jade index 69b2e2aed3..1bdc248039 100644 --- a/services/web/app/views/project/editor/file-tree.jade +++ b/services/web/app/views/project/editor/file-tree.jade @@ -360,6 +360,17 @@ script(type="text/ng-template", id="uploadFileModalTemplate") .alert.alert-warning.small.modal-alert(ng-if="tooManyFiles") #{translate("maximum_files_uploaded_together", {max:"{{max_files}}"})} .alert.alert-warning.small.modal-alert(ng-if="rateLimitHit") #{translate("too_many_files_uploaded_throttled_short_period")} .alert.alert-warning.small.modal-alert(ng-if="notLoggedIn") #{translate("session_expired_redirecting_to_login", {seconds:"{{secondsToRedirect}}"})} + .alert.alert-warning.small.modal-alert(ng-if="conflicts.length > 0") + p.text-center + | The following files already exist in this project: + ul.text-center.list-unstyled.row-spaced-small + li(ng-repeat="conflict in conflicts"): strong {{ conflict }} + p.text-center.row-spaced-small + | Do you want to overwrite them? + p.text-center + a(href, ng-click="doUpload()").btn.btn-primary Overwrite + |   + a(href, ng-click="cancel()").btn.btn-default Cancel .modal-body( fine-upload @@ -370,10 +381,14 @@ script(type="text/ng-template", id="uploadFileModalTemplate") drag-area-text="{{drag_files}}" hint-text="{{hint_press_and_hold_control_key}}" multiple="true" + auto-upload="false" on-complete-callback="onComplete" on-upload-callback="onUpload" on-validate-batch="onValidateBatch" on-error-callback="onError" + on-submit-callback="onSubmit" + on-cancel-callback="onCancel" + control="control" params="{'folder_id': parent_folder_id}" ) span #{translate("upload_files")} diff --git a/services/web/public/coffee/directives/fineUpload.coffee b/services/web/public/coffee/directives/fineUpload.coffee index 9856da5076..92cdf720f4 100644 --- a/services/web/public/coffee/directives/fineUpload.coffee +++ b/services/web/public/coffee/directives/fineUpload.coffee @@ -16,7 +16,11 @@ define [ onUploadCallback: "=" onValidateBatch: "=" onErrorCallback: "=" + onSubmitCallback: "=" + onCancelCallback: "=" + autoUpload: "=" params: "=" + control: "=" } link: (scope, element, attrs) -> multiple = scope.multiple or false @@ -37,12 +41,19 @@ define [ onUpload = scope.onUploadCallback or () -> onError = scope.onErrorCallback or () -> onValidateBatch = scope.onValidateBatch or () -> + onSubmit = scope.onSubmitCallback or () -> + onCancel = scope.onCancelCallback or () -> + if !scope.autoUpload? + autoUpload = true + else + autoUpload = scope.autoUpload params = scope.params or {} params._csrf = window.csrfToken q = new qq.FineUploader element: element[0] multiple: multiple + autoUpload: autoUpload disabledCancelForFormUploads: true validation: validation maxConnections: maxConnections @@ -56,6 +67,8 @@ define [ onUpload: onUpload onValidateBatch: onValidateBatch onError: onError + onSubmit: onSubmit + onCancel: onCancel text: text template: """
@@ -70,5 +83,7 @@ define [
""" + window.q = q + scope.control?.q = q return q } \ No newline at end of file diff --git a/services/web/public/coffee/ide/file-tree/FileTreeManager.coffee b/services/web/public/coffee/ide/file-tree/FileTreeManager.coffee index c93ed4f4c0..8c49d54c23 100644 --- a/services/web/public/coffee/ide/file-tree/FileTreeManager.coffee +++ b/services/web/public/coffee/ide/file-tree/FileTreeManager.coffee @@ -135,6 +135,12 @@ define [ multiSelectSelectedEntity: () -> @findSelectedEntity()?.multiSelected = true + existsInFolder: (folder_id, name) -> + folder = @findEntityById(folder_id) + return false if !folder? + entity = @_findEntityByPathInFolder(folder, name) + return entity? + findSelectedEntity: () -> selected = null @forEachEntity (entity) -> diff --git a/services/web/public/coffee/ide/file-tree/controllers/FileTreeController.coffee b/services/web/public/coffee/ide/file-tree/controllers/FileTreeController.coffee index f3bdc3c9e6..17ac9da8dd 100644 --- a/services/web/public/coffee/ide/file-tree/controllers/FileTreeController.coffee +++ b/services/web/public/coffee/ide/file-tree/controllers/FileTreeController.coffee @@ -106,7 +106,8 @@ define [ $scope.rateLimitHit = false $scope.secondsToRedirect = 10 $scope.notLoggedIn = false - + $scope.conflicts = [] + $scope.control = {} needToLogBackIn = -> $scope.notLoggedIn = true @@ -121,11 +122,6 @@ define [ decreseTimeout() - - uploadCount = 0 - $scope.onUpload = () -> - uploadCount++ - $scope.max_files = 40 $scope.onComplete = (error, name, response) -> $timeout (() -> @@ -150,6 +146,34 @@ define [ else if reason.indexOf("403") != -1 needToLogBackIn() + _uploadTimer = null + uploadIfNoConflicts = () -> + if $scope.conflicts.length == 0 + $scope.doUpload() + + uploadCount = 0 + $scope.onSubmit = (id, name) -> + uploadCount++ + if ide.fileTreeManager.existsInFolder($scope.parent_folder_id, name) + $scope.conflicts.push name + $scope.$apply() + if !_uploadTimer? + _uploadTimer = setTimeout () -> + _uploadTimer = null + uploadIfNoConflicts() + , 0 + return true + + $scope.onCancel = (id, name) -> + uploadCount-- + index = $scope.conflicts.indexOf(name) + if index > -1 + $scope.conflicts.splice(index, 1) + $scope.$apply() + uploadIfNoConflicts() + + $scope.doUpload = () -> + $scope.control?.q?.uploadStoredFiles() $scope.cancel = () -> $modalInstance.dismiss('cancel')