pdf.jade 9.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300
  1. div.full-size.pdf(ng-controller="PdfController")
  2. .toolbar.toolbar-tall
  3. .btn-group(
  4. dropdown,
  5. tooltip-html="'#{translate('recompile_pdf')} <span class=\"keyboard-shortcut\">({{modifierKey}} + Enter)</span>'"
  6. tooltip-class="keyboard-tooltip"
  7. tooltip-popup-delay="500"
  8. tooltip-append-to-body="true"
  9. tooltip-placement="bottom"
  10. )
  11. a.btn.btn-info(
  12. href,
  13. ng-disabled="pdf.compiling",
  14. ng-click="recompile()"
  15. )
  16. i.fa.fa-refresh(
  17. ng-class="{'fa-spin': pdf.compiling }"
  18. )
  19. | &nbsp;&nbsp;
  20. span(ng-show="!pdf.compiling") #{translate("recompile")}
  21. span(ng-show="pdf.compiling") #{translate("compiling")}...
  22. a.btn.btn-info.dropdown-toggle(
  23. href,
  24. ng-disabled="pdf.compiling",
  25. dropdown-toggle
  26. )
  27. span.caret
  28. ul.dropdown-menu.dropdown-menu-right
  29. li.dropdown-header #{translate("compile_mode")}
  30. li
  31. a(href, ng-click="draft = false")
  32. i.fa.fa-fw(ng-class="{'fa-check': !draft}")
  33. | &nbsp;#{translate("normal")}
  34. li
  35. a(href, ng-click="draft = true")
  36. i.fa.fa-fw(ng-class="{'fa-check': draft}")
  37. | &nbsp;#{translate("fast")}&nbsp;
  38. span.subdued [draft]
  39. a.log-btn(
  40. href
  41. ng-click="toggleLogs()"
  42. ng-class="{ 'active': shouldShowLogs == true }"
  43. tooltip="#{translate('logs_and_output_files')}"
  44. tooltip-placement="bottom"
  45. )
  46. i.fa.fa-file-text-o
  47. span.label(
  48. ng-show="pdf.logEntries.warnings.length + pdf.logEntries.errors.length > 0"
  49. ng-class="{\
  50. 'label-warning': pdf.logEntries.errors.length == 0,\
  51. 'label-danger': pdf.logEntries.errors.length > 0\
  52. }"
  53. ) {{ pdf.logEntries.errors.length + pdf.logEntries.warnings.length }}
  54. a(
  55. ng-href="{{pdf.downloadUrl || pdf.url}}"
  56. target="_blank"
  57. ng-if="pdf.url"
  58. tooltip="#{translate('download_pdf')}"
  59. tooltip-placement="bottom"
  60. )
  61. i.fa.fa-download
  62. .toolbar-right
  63. a(
  64. href,
  65. ng-click="switchToFlatLayout()"
  66. ng-show="ui.pdfLayout == 'sideBySide'"
  67. tooltip="#{translate('full_screen')}"
  68. tooltip-placement="bottom"
  69. tooltip-append-to-body="true"
  70. )
  71. i.full-screen
  72. a(
  73. href,
  74. ng-click="switchToSideBySideLayout()"
  75. ng-show="ui.pdfLayout == 'flat'"
  76. tooltip="#{translate('split_screen')}"
  77. tooltip-placement="bottom"
  78. tooltip-append-to-body="true"
  79. )
  80. i.split-screen
  81. i.split-screen
  82. // end of toolbar
  83. // logs view
  84. .pdf-logs(ng-show="shouldShowLogs")
  85. .alert.alert-success(ng-show="pdf.logEntries.all.length == 0")
  86. | #{translate("no_errors_good_job")}
  87. .alert.alert-danger(ng-show="pdf.failure")
  88. strong #{translate("compile_error")}.
  89. span #{translate("generic_failed_compile_message")}.
  90. div(ng-repeat="entry in pdf.logEntries.all", ng-controller="PdfLogEntryController")
  91. .alert(
  92. ng-class="{\
  93. 'alert-danger': entry.level == 'error',\
  94. 'alert-warning': entry.level == 'warning',\
  95. 'alert-info': entry.level == 'typesetting'\
  96. }"
  97. ng-click="openInEditor(entry)"
  98. ng-init="feedbackSent = false;"
  99. )
  100. span.line-no
  101. i.fa.fa-link(aria-hidden="true")
  102. | &nbsp;
  103. span(ng-show="entry.file") {{ entry.file }}
  104. span(ng-show="entry.line") , line {{ entry.line }}
  105. p.entry-message(ng-show="entry.message") {{ entry.message }}
  106. .card.card-hint(
  107. ng-if="entry.humanReadableHint"
  108. stop-propagation="click"
  109. )
  110. figure.card-hint-icon-container
  111. i.fa.fa-lightbulb-o(aria-hidden="true")
  112. p.card-hint-text(
  113. ng-show="entry.humanReadableHint",
  114. ng-bind-html="wikiEnabled ? entry.humanReadableHint : stripHTMLFromString(entry.humanReadableHint)")
  115. .card-hint-actions.clearfix
  116. .card-hint-ext-link(ng-if="wikiEnabled")
  117. a(ng-href="{{ entry.extraInfoURL }}", target="_blank")
  118. i.fa.fa-external-link
  119. |&nbsp;#{translate("log_hint_extra_info")}
  120. .card-hint-feedback(
  121. ng-show="!feedbackSent"
  122. ng-class="entry.ruleId"
  123. )
  124. label.card-hint-feedback-label #{translate("log_hint_feedback_label")}
  125. a.card-hint-feedback-positive(
  126. ng-click="trackLogHintsPositiveFeedback(entry.ruleId); feedbackSent = true;"
  127. href
  128. ) #{translate("answer_yes")}
  129. span &nbsp;/&nbsp;
  130. a.card-hint-feedback-negative(
  131. ng-click="trackLogHintsNegativeFeedback(entry.ruleId); feedbackSent = true;"
  132. href
  133. ) #{translate("answer_no")}
  134. .card-hint-feedback(ng-show="feedbackSent")
  135. label.card-hint-feedback-label #{translate("log_hint_feedback_gratitude")}
  136. p.entry-content(ng-show="entry.content") {{ entry.content.trim() }}
  137. p
  138. .pull-right
  139. a.btn.btn-default.btn-sm(
  140. href,
  141. tooltip="#{translate('clear_cached_files')}",
  142. tooltip-placement="top",
  143. tooltip-append-to-body="true",
  144. ng-click="openClearCacheModal()"
  145. )
  146. i.fa.fa-trash-o
  147. | &nbsp;
  148. div.dropdown(style="display: inline-block;", dropdown)
  149. a.btn.btn-default.btn-sm(
  150. href
  151. dropdown-toggle
  152. )
  153. | !{translate("other_logs_and_files")}
  154. span.caret
  155. ul.dropdown-menu.dropdown-menu-right
  156. li(ng-repeat="file in pdf.outputFiles")
  157. a(
  158. href="{{file.url}}"
  159. target="_blank"
  160. ) {{ file.name }}
  161. a.btn.btn-info.btn-sm(href, ng-click="toggleRawLog()")
  162. span(ng-show="!pdf.showRawLog") #{translate("view_raw_logs")}
  163. span(ng-show="pdf.showRawLog") #{translate("hide_raw_logs")}
  164. pre(ng-bind="pdf.rawLog", ng-show="pdf.showRawLog")
  165. // non-log views (pdf and errors)
  166. div(ng-show="!shouldShowLogs", ng-switch on="pdf.view")
  167. .pdf-uncompiled(ng-switch-when="uncompiled" ng-show="!pdf.compiling")
  168. | &nbsp;
  169. i.fa.fa-level-up.fa-flip-horizontal.fa-2x
  170. | &nbsp;&nbsp;#{translate('click_here_to_preview_pdf')}
  171. .pdf-viewer(ng-switch-when="pdf")
  172. div(
  173. pdfng
  174. ng-if="settings.pdfViewer == 'pdfjs'"
  175. pdf-src="pdf.url"
  176. key="{{ project_id }}"
  177. resize-on="layout:main:resize,layout:pdf:resize"
  178. highlights="pdf.highlights"
  179. position="pdf.position"
  180. dbl-click-callback="syncToCode"
  181. )
  182. iframe(
  183. ng-src="{{ pdf.url }}"
  184. ng-if="settings.pdfViewer == 'native'"
  185. )
  186. .pdf-validation-problems(ng-switch-when="validation-problems")
  187. .alert.alert-danger(ng-show="pdf.validation.duplicatePaths")
  188. strong #{translate("latex_error")}
  189. span #{translate("duplicate_paths_found")}
  190. .alert.alert-danger(ng-show="pdf.validation.sizeCheck")
  191. strong #{translate("project_too_large")}
  192. div #{translate("project_too_large_please_reduce")}
  193. div
  194. li(ng-repeat="entry in pdf.validation.sizeCheck.resources") {{ '/'+entry['path'] }} - {{entry['kbSize']}}kb
  195. .alert.alert-danger(ng-show="pdf.validation.conflictedPaths")
  196. div
  197. strong #{translate("conflicting_paths_found")}
  198. div #{translate("following_paths_conflict")}
  199. div
  200. li(ng-repeat="entry in pdf.validation.conflictedPaths") {{ '/'+entry['path'] }}
  201. .pdf-errors(ng-switch-when="errors")
  202. .alert.alert-danger(ng-show="pdf.error")
  203. strong #{translate("server_error")}
  204. span #{translate("somthing_went_wrong_compiling")}
  205. .alert.alert-danger(ng-show="pdf.renderingError")
  206. strong #{translate("pdf_rendering_error")}
  207. span #{translate("something_went_wrong_rendering_pdf")}
  208. .alert.alert-danger(ng-show="pdf.clsiMaintenance")
  209. strong #{translate("server_error")}
  210. span #{translate("clsi_maintenance")}
  211. .alert.alert-danger(ng-show="pdf.tooRecentlyCompiled")
  212. strong #{translate("server_error")}
  213. span #{translate("too_recently_compiled")}
  214. .alert.alert-danger(ng-show="pdf.timedout")
  215. p
  216. strong #{translate("timedout")}.
  217. span #{translate("proj_timed_out_reason")}
  218. p
  219. a.text-info(href="https://www.sharelatex.com/learn/Debugging_Compilation_timeout_errors", target="_blank")
  220. | #{translate("learn_how_to_make_documents_compile_quickly")}
  221. .alert.alert-success(ng-show="pdf.timedout && !hasPremiumCompile")
  222. p(ng-if="project.owner._id == user.id")
  223. strong #{translate("upgrade_for_faster_compiles")}
  224. p(ng-if="project.owner._id != user.id")
  225. strong #{translate("ask_proj_owner_to_upgrade_for_faster_compiles")}
  226. p #{translate("free_accounts_have_timeout_upgrade_to_increase")}
  227. p Plus:
  228. p
  229. ul.list-unstyled
  230. li
  231. i.fa.fa-check &nbsp;
  232. | #{translate("unlimited_projects")}
  233. li
  234. i.fa.fa-check &nbsp;
  235. | #{translate("collabs_per_proj", {collabcount:'Multiple'})}
  236. li
  237. i.fa.fa-check &nbsp;
  238. | #{translate("full_doc_history")}
  239. li
  240. i.fa.fa-check &nbsp;
  241. | #{translate("sync_to_dropbox")}
  242. li
  243. i.fa.fa-check &nbsp;
  244. | #{translate("sync_to_github")}
  245. li
  246. i.fa.fa-check &nbsp;
  247. |#{translate("compile_larger_projects")}
  248. p(ng-controller="FreeTrialModalController", ng-if="project.owner._id == user.id")
  249. a.btn.btn-success.row-spaced-small(
  250. href
  251. ng-class="buttonClass"
  252. sixpack-convert="track_changes_feature_info"
  253. ng-click="startFreeTrial('compile-timeout')"
  254. ) #{translate("start_free_trial")}
  255. .alert.alert-danger(ng-show="pdf.projectTooLarge")
  256. strong #{translate("project_too_large")}
  257. span #{translate("project_too_large_please_reduce")}
  258. script(type='text/ng-template', id='clearCacheModalTemplate')
  259. .modal-header
  260. h3 #{translate("clear_cache")}?
  261. .modal-body
  262. p #{translate("clear_cache_explanation")}
  263. p #{translate("clear_cache_is_safe")}
  264. .modal-footer
  265. button.btn.btn-default(
  266. ng-click="cancel()"
  267. ng-disabled="state.inflight"
  268. ) #{translate("cancel")}
  269. button.btn.btn-info(
  270. ng-click="clear()"
  271. ng-disabled="state.inflight"
  272. )
  273. span(ng-show="!state.inflight") #{translate("clear_cache")}
  274. span(ng-show="state.inflight") #{translate("clearing")}...