mirror of
https://github.com/overleaf/overleaf.git
synced 2025-04-20 12:23:47 +00:00
Allow cloning of projects
This commit is contained in:
parent
8bb181a465
commit
3a969876e0
2 changed files with 89 additions and 0 deletions
|
@ -155,6 +155,11 @@ block content
|
|||
href='#',
|
||||
ng-click="openRenameProjectModal()"
|
||||
) Rename
|
||||
li
|
||||
a(
|
||||
href='#',
|
||||
ng-click="openCloneProjectModal()"
|
||||
) Make a copy
|
||||
|
||||
.btn-toolbar(ng-show="filter == 'archived'")
|
||||
.btn-group(ng-hide="selectedProjects.length < 1")
|
||||
|
@ -252,6 +257,31 @@ block content
|
|||
button.btn.btn-default(ng-click="cancel()") Cancel
|
||||
button.btn.btn-primary(ng-click="rename()") Rename
|
||||
|
||||
script(type='text/ng-template', id='cloneProjectModalTemplate')
|
||||
.modal-header
|
||||
h3 Copy Project
|
||||
.modal-body
|
||||
.form-group
|
||||
label New Name
|
||||
input.form-control(
|
||||
type="text",
|
||||
placeholder="New Project Name",
|
||||
ng-model="inputs.projectName",
|
||||
ng-enter="clone()",
|
||||
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="clone()"
|
||||
)
|
||||
span(ng-hide="state.inflight") Copy
|
||||
span(ng-show="state.inflight") Copying...
|
||||
|
||||
script(type='text/ng-template', id='newProjectModalTemplate')
|
||||
.modal-header
|
||||
h3 New Project
|
||||
|
|
|
@ -263,6 +263,43 @@ ProjectPageApp.controller "ProjectPageController", ($scope, $modal, $http, $q) -
|
|||
$scope.renameProject(project, newName)
|
||||
)
|
||||
|
||||
$scope.cloneProject = (project, cloneName) ->
|
||||
deferred = $q.defer()
|
||||
|
||||
$http
|
||||
.post("/project/#{project.id}/clone", {
|
||||
_csrf: window.csrfToken
|
||||
projectName: cloneName
|
||||
})
|
||||
.success((data, status, headers, config) ->
|
||||
$scope.projects.push {
|
||||
name: cloneName
|
||||
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.openCloneProjectModal = () ->
|
||||
project = $scope.getFirstSelectedProject()
|
||||
return if !project?
|
||||
|
||||
modalInstance = $modal.open(
|
||||
templateUrl: "cloneProjectModalTemplate"
|
||||
controller: "CloneProjectModalController"
|
||||
resolve:
|
||||
project: () -> project
|
||||
scope: $scope
|
||||
)
|
||||
|
||||
$scope.archiveSelectedProjects = () ->
|
||||
selected_projects = $scope.getSelectedProjects()
|
||||
selected_project_ids = $scope.getSelectedProjectIds()
|
||||
|
@ -411,6 +448,28 @@ ProjectPageApp.controller 'RenameProjectModalController', ($scope, $modalInstanc
|
|||
$scope.cancel = () ->
|
||||
$modalInstance.dismiss('cancel')
|
||||
|
||||
ProjectPageApp.controller 'CloneProjectModalController', ($scope, $modalInstance, $timeout, project) ->
|
||||
$scope.inputs =
|
||||
projectName: project.name + " (Copy)"
|
||||
$scope.state =
|
||||
inflight: false
|
||||
|
||||
$modalInstance.opened.then () ->
|
||||
$timeout () ->
|
||||
$scope.$broadcast "open"
|
||||
, 700
|
||||
|
||||
$scope.clone = () ->
|
||||
$scope.state.inflight = true
|
||||
$scope
|
||||
.cloneProject(project, $scope.inputs.projectName)
|
||||
.then (project_id) ->
|
||||
$scope.state.inflight = false
|
||||
$modalInstance.close(project_id)
|
||||
|
||||
$scope.cancel = () ->
|
||||
$modalInstance.dismiss('cancel')
|
||||
|
||||
ProjectPageApp.controller 'NewProjectModalController', ($scope, $modalInstance, $timeout, template) ->
|
||||
$scope.inputs =
|
||||
projectName: ""
|
||||
|
|
Loading…
Add table
Reference in a new issue