share.pug 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263
  1. script(type='text/ng-template', id='shareProjectModalTemplate')
  2. .modal-header
  3. button.close(
  4. type="button"
  5. data-dismiss="modal"
  6. ng-click="cancel()"
  7. ) ×
  8. h3 #{translate("share_project")}
  9. .modal-body.modal-body-share
  10. .container-fluid
  11. //- Private
  12. .row.public-access-level(ng-show="project.publicAccesLevel == 'private'")
  13. .col-xs-12.text-center
  14. | #{translate('link_sharing_is_off')}.
  15. |   
  16. a(
  17. href
  18. ng-click="openMakeTokenBasedModal()"
  19. ) #{translate('turn_on_link_sharing')}
  20. //- Token-based access
  21. .row.public-access-level(ng-show="project.publicAccesLevel == 'tokenBased'")
  22. .col-xs-12.text-center
  23. strong
  24. | #{translate('link_sharing_is_on')}.
  25. |   
  26. a(
  27. href
  28. ng-click="openMakePrivateModal()"
  29. ) #{translate('turn_off_link_sharing')}
  30. .col-xs-12.access-token-display-area
  31. div.access-token-wrapper
  32. strong #{translate('anyone_with_link_can_edit')}
  33. pre.access-token {{ getReadAndWriteTokenLink() }}
  34. div.access-token-wrapper
  35. strong #{translate('anyone_with_link_can_view')}
  36. pre.access-token {{ getReadOnlyTokenLink() }}
  37. //- legacy public-access
  38. .row.public-access-level(ng-show="project.publicAccesLevel == 'readAndWrite' || project.publicAccesLevel == 'readOnly'")
  39. .col-xs-12.text-center
  40. strong(ng-if="project.publicAccesLevel == 'readAndWrite'") #{translate("this_project_is_public")}
  41. strong(ng-if="project.publicAccesLevel == 'readOnly'") #{translate("this_project_is_public_read_only")}
  42. |   
  43. a(
  44. href
  45. ng-click="openMakePrivateModal()"
  46. ) #{translate("make_private")}
  47. .row.project-member
  48. .col-xs-8 {{ project.owner.email }}
  49. .text-left(
  50. ng-class="{'col-xs-3': project.members.length > 0, 'col-xs-4': project.members.length == 0}"
  51. ) #{translate("owner")}
  52. .row.project-member(ng-repeat="member in project.members")
  53. .col-xs-8 {{ member.email }}
  54. .col-xs-3.text-left
  55. span(ng-show="member.privileges == 'readAndWrite'") #{translate("can_edit")}
  56. span(ng-show="member.privileges == 'readOnly'") #{translate("read_only")}
  57. .col-xs-1
  58. a(
  59. href
  60. tooltip=translate('remove_collaborator')
  61. tooltip-placement="bottom"
  62. ng-click="removeMember(member)"
  63. )
  64. i.fa.fa-times
  65. .row.project-invite(ng-repeat="invite in project.invites")
  66. .col-xs-8 {{ invite.email }} 
  67. div.small
  68. | #{translate("invite_not_accepted")}. 
  69. a(href="#", ng-click="resendInvite(invite, $event)") #{translate("resend")}
  70. .col-xs-3.text-left
  71. // todo: get invite privileges
  72. span(ng-show="invite.privileges == 'readAndWrite'") #{translate("can_edit")}
  73. span(ng-show="invite.privileges == 'readOnly'") #{translate("read_only")}
  74. .col-xs-1
  75. a(
  76. href
  77. tooltip=translate('revoke_invite')
  78. tooltip-placement="bottom"
  79. ng-click="revokeInvite(invite)"
  80. )
  81. i.fa.fa-times
  82. .row.invite-controls
  83. form(ng-show="canAddCollaborators")
  84. .small #{translate("share_with_your_collabs")}
  85. .form-group
  86. tags-input(
  87. template="shareTagTemplate"
  88. placeholder=settings.customisation.shareProjectPlaceholder || 'joe@example.com, sue@example.com, ...'
  89. ng-model="inputs.contacts"
  90. focus-on="open"
  91. display-property="display"
  92. add-on-paste="true"
  93. add-on-enter="false"
  94. replace-spaces-with-dashes="false"
  95. type="email"
  96. )
  97. auto-complete(
  98. source="filterAutocompleteUsers($query)"
  99. template="shareAutocompleteTemplate"
  100. display-property="email"
  101. min-length="0"
  102. )
  103. .form-group
  104. .pull-right
  105. select.privileges.form-control(
  106. ng-model="inputs.privileges"
  107. name="privileges"
  108. )
  109. option(value="readAndWrite") #{translate("can_edit")}
  110. option(value="readOnly") #{translate("read_only")}
  111. |   
  112. //- We have to use mousedown here since click has issues with the
  113. //- blur handler in tags-input sometimes changing its height and
  114. //- moving this button, preventing the click registering.
  115. button.btn.btn-info(
  116. type="submit"
  117. ng-mousedown="addMembers()"
  118. ng-keyup="$event.keyCode == 13 ? addMembers() : null"
  119. ) #{translate("share")}
  120. div(ng-hide="canAddCollaborators")
  121. p.text-center #{translate("need_to_upgrade_for_more_collabs")}. Also:
  122. .row
  123. .col-md-8.col-md-offset-2
  124. ul.list-unstyled
  125. li
  126. i.fa.fa-check  
  127. | #{translate("unlimited_projects")}
  128. li
  129. i.fa.fa-check  
  130. | #{translate("collabs_per_proj", {collabcount:'Multiple'})}
  131. li
  132. i.fa.fa-check  
  133. | #{translate("full_doc_history")}
  134. li
  135. i.fa.fa-check  
  136. | #{translate("sync_to_dropbox")}
  137. li
  138. i.fa.fa-check  
  139. | #{translate("sync_to_github")}
  140. li
  141. i.fa.fa-check  
  142. |#{translate("compile_larger_projects")}
  143. p.text-center.row-spaced-thin(ng-controller="FreeTrialModalController")
  144. a.btn.btn-success(
  145. href
  146. ng-class="buttonClass"
  147. sixpack-convert="track_changes_feature_info"
  148. ng-click="startFreeTrial('projectMembers')"
  149. ) #{translate("start_free_trial")}
  150. p.small(ng-show="startedFreeTrial")
  151. | #{translate("refresh_page_after_starting_free_trial")}.
  152. .modal-footer.modal-footer-share
  153. .modal-footer-left
  154. i.fa.fa-refresh.fa-spin(ng-show="state.inflight")
  155. span.text-danger.error(ng-show="state.error")
  156. span(ng-switch="state.errorReason")
  157. span(ng-switch-when="cannot_invite_non_user")
  158. | #{translate("cannot_invite_non_user")}
  159. span(ng-switch-when="cannot_invite_self")
  160. | #{translate("cannot_invite_self")}
  161. span(ng-switch-when="invalid_email")
  162. | #{translate("invalid_email")}
  163. span(ng-switch-default)
  164. | #{translate("generic_something_went_wrong")}
  165. button.btn.btn-default(
  166. ng-click="done()"
  167. ) #{translate("close")}
  168. script(type="text/ng-template", id="makePublicModalTemplate")
  169. .modal-header
  170. button.close(
  171. type="button"
  172. data-dismiss="modal"
  173. ng-click="cancel()"
  174. ) ×
  175. h3 #{translate("make_project_public")}?
  176. .modal-body.modal-body-share
  177. p #{translate("make_project_public_consequences")}
  178. p
  179. select.form-control(
  180. ng-model="inputs.privileges"
  181. name="privileges"
  182. )
  183. option(value="readAndWrite") #{translate("allow_public_editing")}
  184. option(value="readOnly") #{translate("allow_public_read_only")}
  185. .modal-footer
  186. button.btn.btn-default(
  187. ng-click="cancel()"
  188. ) #{translate("cancel")}
  189. button.btn.btn-info(
  190. ng-click="makePublic()"
  191. ) #{translate("make_public")}
  192. script(type="text/ng-template", id="makeTokenBasedModalTemplate")
  193. .modal-header
  194. button.close(
  195. type="button"
  196. data-dismiss="modal"
  197. ng-click="cancel()"
  198. ) ×
  199. h3 Enable link-sharing?
  200. .modal-body.modal-body-share
  201. p #{translate('turn_on_link_sharing_consequences')}
  202. .modal-footer
  203. button.btn.btn-default(
  204. ng-click="cancel()"
  205. ) #{translate("cancel")}
  206. button.btn.btn-info(
  207. ng-click="makeTokenBased()"
  208. ) #{translate('turn_on_link_sharing')}
  209. script(type="text/ng-template", id="makePrivateModalTemplate")
  210. .modal-header
  211. button.close(
  212. type="button"
  213. data-dismiss="modal"
  214. ng-click="cancel()"
  215. ) ×
  216. h3 #{translate("make_project_private")}?
  217. .modal-body.modal-body-share
  218. p #{translate('turn_off_link_sharing_consequences')}
  219. .modal-footer
  220. button.btn.btn-default(
  221. ng-click="cancel()"
  222. ) #{translate("cancel")}
  223. button.btn.btn-info(
  224. ng-click="makePrivate()"
  225. ) #{translate("turn_off_link_sharing")}
  226. script(type="text/ng-template", id="shareTagTemplate")
  227. .tag-template
  228. span(ng-if="data.type")
  229. i.fa.fa-fw(ng-class="{'fa-user': data.type != 'group', 'fa-group': data.type == 'group'}")
  230. |
  231. span {{$getDisplayText()}}
  232. |
  233. a(href, ng-click="$removeTag()").remove-button
  234. i.fa.fa-fw.fa-close
  235. script(type="text/ng-template", id="shareAutocompleteTemplate")
  236. .autocomplete-template
  237. div(ng-if="data.type == 'user'")
  238. i.fa.fa-fw.fa-user
  239. |
  240. span(ng-bind-html="$highlight(data.display)")
  241. div(ng-if="data.type == 'group'")
  242. i.fa.fa-fw.fa-group
  243. |
  244. span(ng-bind-html="$highlight(data.name)")
  245. span.subdued.small(ng-show="data.member_count") ({{ data.member_count }} members)