diff --git a/services/web/app/views/project/list.jade b/services/web/app/views/project/list.jade index 5f3e0aa987..7c1bfd1da2 100644 --- a/services/web/app/views/project/list.jade +++ b/services/web/app/views/project/list.jade @@ -102,7 +102,7 @@ block content data-original-title="Delete", data-toggle="tooltip", data-placement="bottom", - title="" + ng-click="deleteSelectedProjects()" ) i.fa.fa-trash-o @@ -135,17 +135,17 @@ block content a(href="#", ng-click="openNewTagModal()") Create New Folder .btn-group(ng-hide="selectedProjects.length != 1") - a.btn.btn-default.dropdown-toggle(data-toggle="dropdown", href="#") More + a.btn.btn-default.dropdown-toggle( + href='#', + data-toggle="dropdown" + ) More span.caret ul.dropdown-menu.dropdown-menu-right(role="menu") li - a(href='/project/'+"5369c5737fc6b47f048da1f5"+'/clone', data-csrf=csrfToken).cloneProject Make a Copy... - -if ("owner" == "owner") - li - a(href='/project/'+"5369c5737fc6b47f048da1f5"+'/rename', data-name="the project", data-id="5369c5737fc6b47f048da1f5", data-csrf=csrfToken).renameProject Rename... - -else - li - a(href='/project/'+"5369c5737fc6b47f048da1f5"+'/leave', data-name="the project", data-id="5369c5737fc6b47f048da1f5", data-csrf=csrfToken).leaveProject Leave Project + a( + href='#', + ng-click="openRenameProjectModal()" + ) Rename .row.row-spaced .col-md-12 .card.card-thin @@ -193,7 +193,6 @@ block content .modal-header h3 Create New Folder .modal-body - div {{inputs.newTagName}} input.form-control( type="text", placeholder="New Folder Name", @@ -203,4 +202,19 @@ block content ) .modal-footer button.btn.btn-default(ng-click="cancel()") Cancel - button.btn.btn-primary(ng-click="create()") Create \ No newline at end of file + button.btn.btn-primary(ng-click="create()") Create + + script(type='text/ng-template', id='renameProjectModalTemplate') + .modal-header + h3 Rename Project + .modal-body + input.form-control( + type="text", + placeholder="Project Name", + ng-model="inputs.projectName", + ng-enter="rename()", + ng-focus-on="open" + ) + .modal-footer + button.btn.btn-default(ng-click="cancel()") Cancel + button.btn.btn-primary(ng-click="rename()") Rename diff --git a/services/web/public/coffee/project-list.coffee b/services/web/public/coffee/project-list.coffee index 89baf4040d..70e300fce3 100644 --- a/services/web/public/coffee/project-list.coffee +++ b/services/web/public/coffee/project-list.coffee @@ -73,6 +73,9 @@ ProjectPageApp.controller "ProjectPageController", ($scope, $modal, $http) -> $scope.getSelectedProjectIds = () -> $scope.selectedProjects.map (project) -> project._id + $scope.getFirstSelectedProject = () -> + $scope.selectedProjects[0] + $scope.$on "selection:change", () -> $scope.updateSelectedProjects() @@ -100,20 +103,23 @@ ProjectPageApp.controller "ProjectPageController", ($scope, $modal, $http) -> return tag if tag.selected return null - $scope.removeSelectedProjectsFromTag = (tag) -> - selected_project_ids = $scope.getSelectedProjectIds() - selected_projects = $scope.getSelectedProjects() - + $scope._removeProjectIdsFromTagArray = (tag, remove_project_ids) -> # Remove project_id from tag.project_ids remaining_project_ids = [] removed_project_ids = [] for project_id in tag.project_ids - if project_id not in selected_project_ids + if project_id not in remove_project_ids remaining_project_ids.push project_id else removed_project_ids.push project_id tag.project_ids = remaining_project_ids + $scope.removeSelectedProjectsFromTag = (tag) -> + selected_project_ids = $scope.getSelectedProjectIds() + selected_projects = $scope.getSelectedProjects() + + $scope._removeProjectIdsFromTagArray(tag, selected_project_ids) + # Remove tag from project.tags remaining_tags = [] for project in selected_projects @@ -171,6 +177,53 @@ ProjectPageApp.controller "ProjectPageController", ($scope, $modal, $http) -> $scope.createTag(newTagName) ) + $scope.renameProject = (project, newName) -> + project.name = newName + $http.post "/project/#{project._id}/rename", { + newProjectName: newName + _csrf: window.csrfToken + } + + $scope.openRenameProjectModal = () -> + project = $scope.getFirstSelectedProject() + return if !project? + + modalInstance = $modal.open( + templateUrl: "renameProjectModalTemplate" + controller: "RenameProjectModalController" + resolve: + projectName: () -> project.name + ) + + modalInstance.result.then( + (newName) -> + $scope.renameProject(project, newName) + ) + + $scope.deleteSelectedProjects = () -> + selected_projects = $scope.getSelectedProjects() + selected_project_ids = $scope.getSelectedProjectIds() + + # Remove projects from array + for project in selected_projects + index = $scope.projects.indexOf(project) + if index > -1 + $scope.projects.splice(index, 1) + + # Remove project from any tags + for tag in $scope.tags + $scope._removeProjectIdsFromTagArray(tag, selected_project_ids) + + for project_id in selected_project_ids + $http { + method: "DELETE" + url: "/project/#{project_id}" + headers: + "X-CSRF-Token": window.csrfToken + } + + $scope.updateVisibleProjects() + ProjectPageApp.controller "ProjectListItemController", ($scope) -> $scope.onSelectedChange = () -> $scope.$emit "selected:on-change" @@ -217,7 +270,7 @@ ProjectPageApp.controller "TagDropdownItemController", ($scope) -> ProjectPageApp.controller 'NewTagModalController', ($scope, $modalInstance, $timeout) -> $scope.inputs = - newTagName: "original" + newTagName: "" $modalInstance.opened.then () -> $timeout () -> @@ -225,8 +278,22 @@ ProjectPageApp.controller 'NewTagModalController', ($scope, $modalInstance, $tim , 700 $scope.create = () -> - console.log $scope.inputs.newTagName $modalInstance.close($scope.inputs.newTagName) $scope.cancel = () -> $modalInstance.dismiss('cancel') + +ProjectPageApp.controller 'RenameProjectModalController', ($scope, $modalInstance, $timeout, projectName) -> + $scope.inputs = + projectName: projectName + + $modalInstance.opened.then () -> + $timeout () -> + $scope.$broadcast "open" + , 700 + + $scope.rename = () -> + $modalInstance.close($scope.inputs.projectName) + + $scope.cancel = () -> + $modalInstance.dismiss('cancel')