track-changes.jade 5.5 KB

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