| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201 |
- define [
- "base"
- ], (App) ->
- App.controller "ShareProjectModalController", ($scope, $modalInstance, $timeout, projectMembers, projectInvites, $modal, $http) ->
- $scope.inputs = {
- privileges: "readAndWrite"
- contacts: []
- }
- $scope.state = {
- error: null
- inflight: false
- startedFreeTrial: false
- invites: []
- }
- $modalInstance.opened.then () ->
- $timeout () ->
- $scope.$broadcast "open"
- , 200
- INFINITE_COLLABORATORS = -1
- $scope.$watch "project.members.length", (noOfMembers) ->
- allowedNoOfMembers = $scope.project.features.collaborators
- $scope.canAddCollaborators = noOfMembers < allowedNoOfMembers or allowedNoOfMembers == INFINITE_COLLABORATORS
- window._m = projectMembers
- $scope.autocompleteContacts = []
- do loadAutocompleteUsers = () ->
- $http.get "/user/contacts"
- .success (data) ->
- $scope.autocompleteContacts = data.contacts or []
- for contact in $scope.autocompleteContacts
- if contact.type == "user"
- if contact.last_name == "" and contact.first_name = contact.email.split("@")[0]
- # User has not set their proper name so use email as canonical display property
- contact.display = contact.email
- else
- contact.name = "#{contact.first_name} #{contact.last_name}"
- contact.display = "#{contact.name} <#{contact.email}>"
- else
- # Must be a group
- contact.display = contact.name
- getCurrentMemberEmails = () ->
- ($scope.project.members || []).map (u) -> u.email
- getCurrentInviteEmails = () ->
- ($scope.project.invites || []).map (u) -> u.email
- $scope.filterAutocompleteUsers = ($query) ->
- currentMemberEmails = getCurrentMemberEmails()
- return $scope.autocompleteContacts.filter (contact) ->
- if contact.email? and contact.email in currentMemberEmails
- return false
- for text in [contact.name, contact.email]
- if text?.toLowerCase().indexOf($query.toLowerCase()) > -1
- return true
- return false
- $scope.addMembers = () ->
- addMembers = () ->
- return if $scope.inputs.contacts.length == 0
- members = $scope.inputs.contacts
- $scope.inputs.contacts = []
- $scope.state.error = null
- $scope.state.inflight = true
- currentMemberEmails = getCurrentMemberEmails()
- currentInviteEmails = getCurrentInviteEmails()
- do addNextMember = () ->
- if members.length == 0 or !$scope.canAddCollaborators
- $scope.state.inflight = false
- $scope.$apply()
- return
- member = members.shift()
- if !member.type? and member.display in currentMemberEmails
- # Skip this existing member
- return addNextMember()
- # NOTE: groups aren't really a thing in ShareLaTeX, partially inherited from DJ
- if member.display in currentInviteEmails and inviteId = _.find(($scope.project.invites || []), (invite) -> invite.email == member.display)?._id
- request = projectInvites.resendInvite(inviteId)
- else if member.type == "user"
- request = projectInvites.sendInvite(member.email, $scope.inputs.privileges)
- else if member.type == "group"
- request = projectMembers.addGroup(member.id, $scope.inputs.privileges)
- else # Not an auto-complete object, so email == display
- request = projectInvites.sendInvite(member.display, $scope.inputs.privileges)
- request
- .success (data) ->
- if data.invite
- invite = data.invite
- $scope.project.invites.push invite
- else
- if data.users?
- users = data.users
- else if data.user?
- users = [data.user]
- else
- users = []
- $scope.project.members.push users...
- setTimeout () ->
- # Give $scope a chance to update $scope.canAddCollaborators
- # with new collaborator information.
- addNextMember()
- , 0
- .error () ->
- $scope.state.inflight = false
- $scope.state.error = true
- $timeout addMembers, 50 # Give email list a chance to update
- $scope.removeMember = (member) ->
- $scope.state.error = null
- $scope.state.inflight = true
- projectMembers
- .removeMember(member)
- .success () ->
- $scope.state.inflight = false
- index = $scope.project.members.indexOf(member)
- return if index == -1
- $scope.project.members.splice(index, 1)
- .error () ->
- $scope.state.inflight = false
- $scope.state.error = "Sorry, something went wrong :("
- $scope.revokeInvite = (invite) ->
- $scope.state.error = null
- $scope.state.inflight = true
- projectInvites
- .revokeInvite(invite._id)
- .success () ->
- $scope.state.inflight = false
- index = $scope.project.invites.indexOf(invite)
- return if index == -1
- $scope.project.invites.splice(index, 1)
- .error () ->
- $scope.state.inflight = false
- $scope.state.error = "Sorry, something went wrong :("
- $scope.resendInvite = (invite, event) ->
- $scope.state.error = null
- $scope.state.inflight = true
- projectInvites
- .resendInvite(invite._id)
- .success () ->
- $scope.state.inflight = false
- event.target.blur()
- .error () ->
- $scope.state.inflight = false
- $scope.state.error = "Sorry, something went wrong resending the invite :("
- event.target.blur()
- $scope.openMakePublicModal = () ->
- $modal.open {
- templateUrl: "makePublicModalTemplate"
- controller: "MakePublicModalController"
- scope: $scope
- }
- $scope.openMakePrivateModal = () ->
- $modal.open {
- templateUrl: "makePrivateModalTemplate"
- controller: "MakePrivateModalController"
- scope: $scope
- }
- $scope.done = () ->
- $modalInstance.close()
- $scope.cancel = () ->
- $modalInstance.dismiss()
- App.controller "MakePublicModalController", ["$scope", "$modalInstance", "settings", ($scope, $modalInstance, settings) ->
- $scope.inputs = {
- privileges: "readAndWrite"
- }
- $scope.makePublic = () ->
- $scope.project.publicAccesLevel = $scope.inputs.privileges
- settings.saveProjectAdminSettings({publicAccessLevel: $scope.inputs.privileges})
- $modalInstance.close()
- $scope.cancel = () ->
- $modalInstance.dismiss()
- ]
- App.controller "MakePrivateModalController", ["$scope", "$modalInstance", "settings", ($scope, $modalInstance, settings) ->
- $scope.makePrivate = () ->
- $scope.project.publicAccesLevel = "private"
- settings.saveProjectAdminSettings({publicAccessLevel: "private"})
- $modalInstance.close()
- $scope.cancel = () ->
- $modalInstance.dismiss()
- ]
|