share.pug 8.7 KB

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