From 8b57224267dc48312b2b47c3ee954973e11893bc Mon Sep 17 00:00:00 2001 From: James Allen Date: Fri, 13 Jun 2014 16:05:44 +0100 Subject: [PATCH] Allow creation of projects --- services/web/app/views/project/list.jade | 33 +++++++++- .../web/public/coffee/project-list.coffee | 62 ++++++++++++++++++- 2 files changed, 92 insertions(+), 3 deletions(-) diff --git a/services/web/app/views/project/list.jade b/services/web/app/views/project/list.jade index 7c1bfd1da2..fc335ef372 100644 --- a/services/web/app/views/project/list.jade +++ b/services/web/app/views/project/list.jade @@ -18,9 +18,15 @@ block content a.btn.btn-primary.dropdown-toggle(data-toggle="dropdown", href="#") New Project ul.dropdown-menu(role="menu") li - a#blankNewProject(href="#", data-csrf=csrfToken) Blank Project + a( + href="#", + ng-click="openCreateProjectModal()" + ) Blank Project li - a#newProjectExample(href="#", data-csrf=csrfToken) Example Project + a( + href="#", + ng-click="openCreateProjectModal('example')" + ) Example Project li a#uploadNewProject(href="#", data-csrf=csrfToken) Upload Project li.divider @@ -218,3 +224,26 @@ block content .modal-footer button.btn.btn-default(ng-click="cancel()") Cancel button.btn.btn-primary(ng-click="rename()") Rename + + script(type='text/ng-template', id='newProjectModalTemplate') + .modal-header + h3 New Project + .modal-body + input.form-control( + type="text", + placeholder="Project Name", + ng-model="inputs.projectName", + ng-enter="create()", + ng-focus-on="open" + ) + .modal-footer + button.btn.btn-default( + ng-disabled="state.inflight" + ng-click="cancel()" + ) Cancel + button.btn.btn-primary( + ng-disabled="state.inflight" + ng-click="create()" + ) + span(ng-hide="state.inflight") Create + span(ng-show="state.inflight") Creating... diff --git a/services/web/public/coffee/project-list.coffee b/services/web/public/coffee/project-list.coffee index 70e300fce3..1df0f964ec 100644 --- a/services/web/public/coffee/project-list.coffee +++ b/services/web/public/coffee/project-list.coffee @@ -24,7 +24,7 @@ ProjectPageApp.filter "formatDate", () -> (date, format = "Do MMM YYYY, h:mm a") -> moment(date).format(format) -ProjectPageApp.controller "ProjectPageController", ($scope, $modal, $http) -> +ProjectPageApp.controller "ProjectPageController", ($scope, $modal, $http, $q) -> $scope.projects = window.data.projects $scope.visibleProjects = $scope.projects $scope.tags = window.data.tags @@ -177,6 +177,44 @@ ProjectPageApp.controller "ProjectPageController", ($scope, $modal, $http) -> $scope.createTag(newTagName) ) + $scope.createProject = (name, template = "none") -> + deferred = $q.defer() + + $http + .post("/project/new", { + _csrf: window.csrfToken + projectName: name + template: template + }) + .success((data, status, headers, config) -> + $scope.projects.push { + name: name + _id: data.project_id + accessLevel: "owner" + # TODO: Check access level if correct after adding it in + # to the rest of the app + } + $scope.updateVisibleProjects() + deferred.resolve(data.project_id) + ) + .error((data, status, headers, config) -> + deferred.reject() + ) + + return deferred.promise + + $scope.openCreateProjectModal = (template = "none") -> + modalInstance = $modal.open( + templateUrl: "newProjectModalTemplate" + controller: "NewProjectModalController" + resolve: + template: () -> template + scope: $scope + ) + + modalInstance.result.then (project_id) -> + window.location = "/project/#{project_id}" + $scope.renameProject = (project, newName) -> project.name = newName $http.post "/project/#{project._id}/rename", { @@ -297,3 +335,25 @@ ProjectPageApp.controller 'RenameProjectModalController', ($scope, $modalInstanc $scope.cancel = () -> $modalInstance.dismiss('cancel') + +ProjectPageApp.controller 'NewProjectModalController', ($scope, $modalInstance, $timeout, template) -> + $scope.inputs = + projectName: "" + $scope.state = + inflight: false + + $modalInstance.opened.then () -> + $timeout () -> + $scope.$broadcast "open" + , 700 + + $scope.create = () -> + $scope.state.inflight = true + $scope + .createProject($scope.inputs.projectName, template) + .then (project_id) -> + $scope.state.inflight = false + $modalInstance.close(project_id) + + $scope.cancel = () -> + $modalInstance.dismiss('cancel') \ No newline at end of file