James Allen 12 лет назад
Родитель
Сommit
84ac77795f

+ 1 - 1
services/web/app/coffee/router.coffee

@@ -92,7 +92,7 @@ module.exports = class Router
 
 
 		app.post '/project/:Project_id/:entity_type/:entity_id/rename', SecurityManager.requestCanModifyProject, EditorHttpController.renameEntity
 		app.post '/project/:Project_id/:entity_type/:entity_id/rename', SecurityManager.requestCanModifyProject, EditorHttpController.renameEntity
 		app.post '/project/:Project_id/:entity_type/:entity_id/move', SecurityManager.requestCanModifyProject, EditorHttpController.moveEntity
 		app.post '/project/:Project_id/:entity_type/:entity_id/move', SecurityManager.requestCanModifyProject, EditorHttpController.moveEntity
-		app.post '/project/:Project_id/:entity_type/:entity_id/delete', SecurityManager.requestCanModifyProject, EditorHttpController.deleteEntity
+		app.delete '/project/:Project_id/:entity_type/:entity_id', SecurityManager.requestCanModifyProject, EditorHttpController.deleteEntity
 
 
 		app.post '/project/:Project_id/compile', SecurityManager.requestCanAccessProject, CompileController.compile
 		app.post '/project/:Project_id/compile', SecurityManager.requestCanAccessProject, CompileController.compile
 		app.get  '/Project/:Project_id/output/output.pdf', SecurityManager.requestCanAccessProject, CompileController.downloadPdf
 		app.get  '/Project/:Project_id/output/output.pdf', SecurityManager.requestCanAccessProject, CompileController.downloadPdf

+ 24 - 1
services/web/app/views/project/editor/file-tree.jade

@@ -30,7 +30,13 @@ aside#file-tree.ui-layout-west(ng-controller="FileTreeController")
 				tooltip-placement="bottom"
 				tooltip-placement="bottom"
 			)
 			)
 				i.fa.fa-pencil
 				i.fa.fa-pencil
-			a(href, tooltip="Delete", tooltip-placement="bottom", tooltip-append-to-body="true")
+			a(
+				href,
+				ng-click="openDeleteModalForSelected()",
+				tooltip="Delete",
+				tooltip-placement="bottom",
+				tooltip-append-to-body="true"
+			)
 				i.fa.fa-trash-o
 				i.fa.fa-trash-o
 
 
 	ul.list-unstyled.file-tree-list
 	ul.list-unstyled.file-tree-list
@@ -155,3 +161,20 @@ script(type="text/ng-template", id="uploadFileModalTemplate")
 		span Upload file(s)
 		span Upload file(s)
 	.modal-footer
 	.modal-footer
 		button.btn.btn-default(ng-click="cancel()") Cancel
 		button.btn.btn-default(ng-click="cancel()") Cancel
+
+script(type='text/ng-template', id='deleteEntityModalTemplate')
+	.modal-header
+		h3 Delete {{ entity.name }}
+	.modal-body
+		p Are you sure you want to permanently delete <strong>{{ entity.name }}</strong>?
+	.modal-footer
+		button.btn.btn-default(
+			ng-disabled="state.inflight"
+			ng-click="cancel()"
+		) Cancel
+		button.btn.btn-danger(
+			ng-disabled="state.inflight"
+			ng-click="delete()"
+		)
+			span(ng-hide="state.inflight") Delete
+			span(ng-show="state.inflight") Deleting...

+ 32 - 2
services/web/public/coffee/app/ide/file-tree/FileTreeManager.coffee

@@ -45,6 +45,12 @@ define [
 				@$scope.$apply () ->
 				@$scope.$apply () ->
 					entity.name = name
 					entity.name = name
 
 
+			@ide.socket.on "removeEntity", (entity_id) =>
+				entity = @findEntityById(entity_id)
+				return if !entity?
+				@$scope.$apply () =>
+					@_deleteEntityFromScope entity
+
 		findEntityById: (id) ->
 		findEntityById: (id) ->
 			@_findEntityByIdInFolder @$scope.rootFolder, id
 			@_findEntityByIdInFolder @$scope.rootFolder, id
 
 
@@ -58,12 +64,12 @@ define [
 
 
 			return null
 			return null
 
 
-		forEachEntity: (callback) ->
+		forEachEntity: (callback = (entity, parent_folder) ->) ->
 			@_forEachEntityInFolder(@$scope.rootFolder, callback)
 			@_forEachEntityInFolder(@$scope.rootFolder, callback)
 
 
 		_forEachEntityInFolder: (folder, callback) ->
 		_forEachEntityInFolder: (folder, callback) ->
 			for entity in folder.children or []
 			for entity in folder.children or []
-				callback(entity)
+				callback(entity, folder)
 				if entity.children?
 				if entity.children?
 					@_forEachEntityInFolder(entity, callback)
 					@_forEachEntityInFolder(entity, callback)
 
 
@@ -176,3 +182,27 @@ define [
 				failure: (error) -> callback(error)
 				failure: (error) -> callback(error)
 			}
 			}
 
 
+		deleteEntity: (entity, callback = (error) ->) ->
+			# We'll wait for the socket.io notification to 
+			# delete from scope.
+			$.ajax {
+				url:  "/project/#{@ide.project_id}/#{entity.type}/#{entity.id}"
+				type: "DELETE"
+				contentType: "application/json; charset=utf-8"
+				headers:
+					"X-Csrf-Token": window.csrfToken
+				dataType: "json"
+				success: () -> callback()
+				failure: (error) -> callback(error)
+			}
+
+		_deleteEntityFromScope: (entity) ->
+			parent_folder = null
+			@forEachEntity (possible_entity, folder) ->
+				if possible_entity == entity
+					parent_folder = folder
+
+			if parent_folder?
+				index = parent_folder.children.indexOf(entity)
+				if index > -1
+					parent_folder.children.splice(index, 1)

+ 3 - 0
services/web/public/coffee/app/ide/file-tree/controllers/FileTreeController.coffee

@@ -27,6 +27,9 @@ define [
 
 
 		$scope.startRenamingSelected = () ->
 		$scope.startRenamingSelected = () ->
 			$scope.$broadcast "rename:selected"
 			$scope.$broadcast "rename:selected"
+
+		$scope.openDeleteModalForSelected = () ->
+			$scope.$broadcast "delete:selected"
 	]
 	]
 
 
 	App.controller "NewDocModalController", [
 	App.controller "NewDocModalController", [

+ 29 - 2
services/web/public/coffee/app/ide/file-tree/controllers/FileTreeEntityController.coffee

@@ -1,7 +1,7 @@
 define [
 define [
 	"base"
 	"base"
 ], (App) ->
 ], (App) ->
-	App.controller "FileTreeEntityController", ["$scope", "ide", ($scope, ide) ->
+	App.controller "FileTreeEntityController", ["$scope", "ide", "$modal", ($scope, ide, $modal) ->
 		$scope.select = () ->
 		$scope.select = () ->
 			ide.fileTreeManager.forEachEntity (entity) ->
 			ide.fileTreeManager.forEachEntity (entity) ->
 				entity.selected = false
 				entity.selected = false
@@ -20,9 +20,36 @@ define [
 		$scope.$on "rename:selected", () ->
 		$scope.$on "rename:selected", () ->
 			$scope.startRenaming() if $scope.entity.selected
 			$scope.startRenaming() if $scope.entity.selected
 
 
+		$scope.openDeleteModal = () ->
+			$modal.open(
+				templateUrl: "deleteEntityModalTemplate"
+				controller:  "DeleteEntityModalController"
+				scope: $scope
+			)
+
+		$scope.$on "delete:selected", () ->
+			$scope.openDeleteModal() if $scope.entity.selected
+
 		if $scope.entity.type == "folder"
 		if $scope.entity.type == "folder"
 			$scope.expanded = false
 			$scope.expanded = false
 
 
 			$scope.toggleExpanded = () ->
 			$scope.toggleExpanded = () ->
 				$scope.expanded = !$scope.expanded
 				$scope.expanded = !$scope.expanded
-	]
+	]
+
+	App.controller "DeleteEntityModalController", [
+		"$scope", "ide", "$modalInstance",
+		($scope,   ide,   $modalInstance) ->
+			$scope.state =
+				inflight: false
+
+			$scope.delete = () ->
+				$scope.state.inflight = true
+				ide.fileTreeManager.deleteEntity $scope.entity, (error) ->
+					$scope.$apply () ->
+						$scope.state.inflight = false
+						$modalInstance.close()
+
+			$scope.cancel = () ->
+				$modalInstance.dismiss('cancel')
+	]