track-changes.jade 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198
  1. div#trackChanges(ng-show="ui.view == 'track-changes'")
  2. span(ng-controller="TrackChangesPremiumPopup")
  3. span(ng-if="versioningPopupType == 'default'")
  4. .upgrade-prompt(ng-show="!project.features.versioning")
  5. .message(ng-show="project.owner._id == user.id")
  6. p #{translate("need_to_upgrade_for_history")}
  7. p(ng-controller="FreeTrialModalController")
  8. a.btn(
  9. href
  10. ng-class="buttonClass"
  11. sixpack-convert="track_changes_feature_info"
  12. ng-click="startFreeTrial('track-changes')"
  13. ) #{translate("start_free_trial")}
  14. |    
  15. a.small(href, ng-click="toggleTrackChanges()") #{translate("cancel")}
  16. p.small(ng-show="startedFreeTrial") #{translate("refresh_page_after_starting_free_trial")}
  17. .upgrade-prompt(ng-show="!project.features.versioning", ng-if="versioningPopupType == 'longform'")
  18. .message(ng-show="project.owner._id == user.id")
  19. p Upgrade to see your Entire Project History, plus:
  20. p.small(ng-show="startedFreeTrial") #{translate("refresh_page_after_starting_free_trial")}
  21. h4
  22. i.fa.fa-check  
  23. | #{translate("unlimited_projects")}
  24. h4
  25. i.fa.fa-check  
  26. | #{translate("collabs_per_proj", {collabcount:'Multiple'})}
  27. h4
  28. i.fa.fa-check  
  29. | #{translate("full_doc_history")}
  30. h4
  31. i.fa.fa-check  
  32. | #{translate("sync_to_dropbox")}
  33. h4
  34. i.fa.fa-check  
  35. | #{translate("sync_to_github")}
  36. h4
  37. i.fa.fa-check  
  38. |#{translate("Compile Larger Projects")}
  39. p(ng-controller="FreeTrialModalController")
  40. a.btn.btn-success(
  41. href
  42. ng-class="buttonClass"
  43. sixpack-convert="track_changes_feature_info"
  44. ng-click="startFreeTrial('track-changes')"
  45. ) #{translate("start_free_trial")}
  46. .message(ng-show="project.owner._id != user.id")
  47. p #{translate("ask_proj_owner_to_upgrade_for_history")}
  48. p
  49. a.small(href, ng-click="toggleTrackChanges()") #{translate("cancel")}
  50. aside.change-list(
  51. ng-controller="TrackChangesListController"
  52. infinite-scroll="loadMore()"
  53. infinite-scroll-disabled="trackChanges.loading || trackChanges.atEnd"
  54. infinite-scroll-initialize="ui.view == 'track-changes'"
  55. )
  56. .infinite-scroll-inner
  57. ul.list-unstyled(
  58. ng-class="{\
  59. 'hover-state': trackChanges.hoveringOverListSelectors\
  60. }"
  61. )
  62. li.change(
  63. ng-repeat="update in trackChanges.updates"
  64. ng-class="{\
  65. 'first-in-day': update.meta.first_in_day,\
  66. 'selected': update.inSelection,\
  67. 'selected-to': update.selectedTo,\
  68. 'selected-from': update.selectedFrom,\
  69. 'hover-selected': update.inHoverSelection,\
  70. 'hover-selected-to': update.hoverSelectedTo,\
  71. 'hover-selected-from': update.hoverSelectedFrom,\
  72. }"
  73. ng-controller="TrackChangesListItemController"
  74. )
  75. div.day(ng-show="update.meta.first_in_day") {{ update.meta.end_ts | relativeDate }}
  76. div.selectors
  77. div.range
  78. form
  79. input.selector-from(
  80. type="radio"
  81. name="fromVersion"
  82. ng-model="update.selectedFrom"
  83. ng-value="true"
  84. ng-mouseover="mouseOverSelectedFrom()"
  85. ng-mouseout="mouseOutSelectedFrom()"
  86. ng-show="update.afterSelection || update.inSelection"
  87. )
  88. form
  89. input.selector-to(
  90. type="radio"
  91. name="toVersion"
  92. ng-model="update.selectedTo"
  93. ng-value="true"
  94. ng-mouseover="mouseOverSelectedTo()"
  95. ng-mouseout="mouseOutSelectedTo()"
  96. ng-show="update.beforeSelection || update.inSelection"
  97. )
  98. div.description(ng-click="select()")
  99. div.time {{ update.meta.end_ts | formatDate:'h:mm a' }}
  100. div.docs(ng-repeat="(doc_id, doc) in update.docs")
  101. span.doc {{ doc.entity.name }}
  102. div.users
  103. div.user(ng-repeat="update_user in update.meta.users")
  104. .color-square(ng-if="update_user != null", ng-style="{'background-color': 'hsl({{ update_user.hue }}, 70%, 50%)'}")
  105. .color-square(ng-if="update_user == null", ng-style="{'background-color': 'hsl(100, 70%, 50%)'}")
  106. .name(ng-if="update_user && update_user.id != user.id" ng-bind="displayName(update_user)")
  107. .name(ng-if="update_user && update_user.id == user.id") You
  108. .name(ng-if="update_user == null") #{translate("anonymous")}
  109. div.user(ng-if="update.meta.users.length == 0")
  110. .color-square(style="background-color: hsl(100, 100%, 50%)")
  111. span #{translate("anonymous")}
  112. .loading(ng-show="trackChanges.loading")
  113. i.fa.fa-spin.fa-refresh
  114. |    #{translate("loading")}...
  115. .diff-panel.full-size(ng-controller="TrackChangesDiffController")
  116. .diff(
  117. ng-show="!!trackChanges.diff && !trackChanges.diff.loading && !trackChanges.diff.deleted && !trackChanges.diff.error"
  118. )
  119. .toolbar.toolbar-alt
  120. span.name
  121. | <strong>{{trackChanges.diff.highlights.length}} </strong>
  122. ng-pluralize(
  123. count="trackChanges.diff.highlights.length",
  124. when="{\
  125. 'one': 'change',\
  126. 'other': 'changes'\
  127. }"
  128. )
  129. | in <strong>{{trackChanges.diff.doc.name}}</strong>
  130. .toolbar-right
  131. a.btn.btn-danger.btn-sm(
  132. href,
  133. ng-click="openRestoreDiffModal()"
  134. ) #{translate("restore_to_before_these_changes")}
  135. .diff-editor.hide-ace-cursor(
  136. ace-editor="track-changes",
  137. theme="settings.theme",
  138. font-size="settings.fontSize",
  139. text="trackChanges.diff.text",
  140. highlights="trackChanges.diff.highlights",
  141. read-only="true",
  142. resize-on="layout:main:resize",
  143. navigate-highlights="true"
  144. )
  145. .diff-deleted.text-centered(
  146. ng-show="trackChanges.diff.deleted"
  147. )
  148. p.text-serif #{translate("file_has_been_deleted", {filename:"{{ trackChanges.diff.doc.name }} "})}
  149. p
  150. a.btn.btn-primary.btn-lg(
  151. href,
  152. ng-click="restoreDeletedDoc()"
  153. ) #{translate("restore")}
  154. .loading-panel(ng-show="trackChanges.diff.loading")
  155. i.fa.fa-spin.fa-refresh
  156. | &nbsp;&nbsp;#{translate("loading")}...
  157. .error-panel(ng-show="trackChanges.diff.error")
  158. .alert.alert-danger #{translate("generic_something_went_wrong")}
  159. script(type="text/ng-template", id="trackChangesRestoreDiffModalTemplate")
  160. .modal-header
  161. button.close(
  162. type="button"
  163. data-dismiss="modal"
  164. ng-click="cancel()"
  165. ) &times;
  166. h3 #{translate("restore")} {{diff.doc.name}}
  167. .modal-body.modal-body-share
  168. p !{translate("sure_you_want_to_restore_before", {filename:"<strong>{{diff.doc.name}}</strong>", date:"{{diff.start_ts | formatDate}}"})}
  169. .modal-footer
  170. button.btn.btn-default(
  171. ng-click="cancel()",
  172. ng-disabled="state.inflight"
  173. ) #{translate("cancel")}
  174. button.btn.btn-danger(
  175. ng-click="restore()",
  176. ng-disabled="state.inflight"
  177. )
  178. span(ng-show="!state.inflight") #{translate("restore")}
  179. span(ng-show="state.inflight") #{translate("restoring")} ...