overleaf/services/web/public/coffee/ide/file-tree/controllers/FileTreeEntityController.coffee
2016-09-22 14:57:59 +01:00

99 lines
2.9 KiB
CoffeeScript

define [
"base"
], (App) ->
App.controller "FileTreeEntityController", ["$scope", "ide", "$modal", ($scope, ide, $modal) ->
$scope.select = (e) ->
if e.ctrlKey or e.metaKey
e.stopPropagation()
initialMultiSelectCount = ide.fileTreeManager.multiSelectedCount()
ide.fileTreeManager.toggleMultiSelectEntity($scope.entity) == 0
if initialMultiSelectCount == 0
# On first multi selection, also include the current active/open file.
ide.fileTreeManager.multiSelectSelectedEntity()
else
ide.fileTreeManager.selectEntity($scope.entity)
$scope.$emit "entity:selected", $scope.entity
$scope.draggableHelper = () ->
if ide.fileTreeManager.multiSelectedCount() > 0
return $("<strong style='z-index:100'>#{ide.fileTreeManager.multiSelectedCount()} Files</strong>")
else
return $("<strong style='z-index:100'>#{$scope.entity.name}</strong>")
$scope.inputs =
name: $scope.entity.name
$scope.startRenaming = () ->
$scope.entity.renaming = true
invalidModalShowing = false
$scope.finishRenaming = () ->
name = $scope.inputs.name
if !name.match(new RegExp(ide.validFileRegex))
# Showing the modal blurs the rename box which calls us again
# so track this with the invalidModalShowing flag
return if invalidModalShowing
invalidModalShowing = true
modal = $modal.open(
templateUrl: "invalidFileNameModalTemplate"
)
modal.result.then () ->
invalidModalShowing = false
return
delete $scope.entity.renaming
if !name? or name.length == 0
$scope.inputs.name = $scope.entity.name
return
ide.fileTreeManager.renameEntity($scope.entity, name)
$scope.$on "rename:selected", () ->
$scope.startRenaming() if $scope.entity.selected
$scope.openDeleteModal = () ->
if ide.fileTreeManager.multiSelectedCount() > 0
entities = ide.fileTreeManager.getMultiSelectedEntityChildNodes()
else
entities = [$scope.entity]
$modal.open(
templateUrl: "deleteEntityModalTemplate"
controller: "DeleteEntityModalController"
resolve:
entities: () -> entities
)
$scope.$on "delete:selected", () ->
$scope.openDeleteModal() if $scope.entity.selected
$scope.iconTypeFromName = (name) ->
ext = name.split(".").pop()?.toLowerCase()
if ext in ["png", "pdf", "jpg", "jpeg", "gif"]
return "image"
else if ext in ["csv", "xls", "xlsx"]
return "table"
else if ext in ["py", "r"]
return "file-text"
else if ext in ['bib']
return 'book'
else
return "file"
]
App.controller "DeleteEntityModalController", [
"$scope", "ide", "$modalInstance", "entities"
($scope, ide, $modalInstance, entities) ->
$scope.state =
inflight: false
$scope.entities = entities
$scope.delete = () ->
$scope.state.inflight = true
for entity in $scope.entities
ide.fileTreeManager.deleteEntity(entity)
$modalInstance.close()
$scope.cancel = () ->
$modalInstance.dismiss('cancel')
]