share.pug 9.8 KB

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