pdf.pug 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430
  1. div.full-size.pdf(ng-controller="PdfController")
  2. if showNewLogsUI
  3. preview-pane(
  4. compiler-state=`{
  5. autoCompileHasChanges: changesToAutoCompile,
  6. autoCompileHasLintingError: autoCompileLintingError,
  7. isAutoCompileOn: autocompile_enabled,
  8. isClearingCache: pdf.clearingCache,
  9. isCompiling: pdf.compiling,
  10. isDraftModeOn: draft,
  11. isSyntaxCheckOn: stop_on_validation_error,
  12. lastCompileTimestamp: pdf.lastCompileTimestamp,
  13. logEntries: pdf.logEntries,
  14. validationIssues: pdf.validation,
  15. rawLog: pdf.rawLog,
  16. compileFailed: pdf.compileFailed,
  17. errors: {
  18. error: pdf.error,
  19. renderingError: pdf.renderingError,
  20. clsiMaintenance: pdf.clsiMaintenance,
  21. clsiUnavailable: pdf.clsiUnavailable,
  22. tooRecentlyCompiled: pdf.tooRecentlyCompiled,
  23. compileTerminated: pdf.compileTerminated,
  24. rateLimited: pdf.rateLimited,
  25. compileInProgress: pdf.compileInProgress,
  26. timedout: pdf.timedout,
  27. projectTooLarge: pdf.projectTooLarge,
  28. autoCompileDisabled: pdf.autoCompileDisabled,
  29. failure: pdf.failure
  30. }
  31. }`
  32. on-clear-cache="clearCache"
  33. on-recompile="recompile"
  34. on-recompile-from-scratch="recompileFromScratch"
  35. on-run-syntax-check-now="runSyntaxCheckNow"
  36. on-set-auto-compile="setAutoCompile"
  37. on-set-draft-mode="setDraftMode"
  38. on-set-syntax-check="setSyntaxCheck"
  39. on-toggle-logs="toggleLogs"
  40. output-files="pdf.outputFiles"
  41. pdf-download-url="pdf.downloadUrl"
  42. split-layout="ui.pdfLayout === 'sideBySide'"
  43. on-set-split-layout="setPdfSplitLayout"
  44. on-set-full-layout="setPdfFullLayout"
  45. on-stop-compilation="stop"
  46. variant-with-first-error-popup="logsUISubvariant === 'new-logs-ui-with-popup'"
  47. show-logs="shouldShowLogs"
  48. on-log-entry-location-click="openInEditor"
  49. )
  50. else
  51. .toolbar.toolbar-pdf(ng-class="{ 'changes-to-autocompile': changesToAutoCompile && !autoCompileLintingError }")
  52. .btn-group.btn-recompile-group#recompile(
  53. dropdown,
  54. tooltip-html="'"+translate('recompile_pdf')+" <span class=\"keyboard-shortcut\">({{modifierKey}} + Enter)</span>'"
  55. tooltip-class="keyboard-tooltip"
  56. tooltip-popup-delay="500"
  57. tooltip-append-to-body="true"
  58. tooltip-placement="bottom"
  59. )
  60. a.btn.btn-recompile(
  61. href,
  62. ng-disabled="pdf.compiling",
  63. ng-click="recompile()"
  64. )
  65. i.fa.fa-refresh(
  66. ng-class="{'fa-spin': pdf.compiling }"
  67. )
  68. span.btn-recompile-label(ng-show="!pdf.compiling") #{translate("recompile")}
  69. span.btn-recompile-label(ng-show="pdf.compiling") #{translate("compiling")}…
  70. a.btn.btn-recompile.dropdown-toggle(
  71. href,
  72. ng-disabled="pdf.compiling",
  73. dropdown-toggle
  74. )
  75. span.caret
  76. ul.dropdown-menu.dropdown-menu-left
  77. li.dropdown-header #{translate("auto_compile")}
  78. li
  79. a(href, ng-click="autocompile_enabled = true")
  80. i.fa.fa-fw(ng-class="{'fa-check': autocompile_enabled}")
  81. | &nbsp;#{translate('on')}
  82. li
  83. a(href, ng-click="autocompile_enabled = false")
  84. i.fa.fa-fw(ng-class="{'fa-check': !autocompile_enabled}")
  85. | &nbsp;#{translate('off')}
  86. li.dropdown-header #{translate("compile_mode")}
  87. li
  88. a(href, ng-click="draft = false")
  89. i.fa.fa-fw(ng-class="{'fa-check': !draft}")
  90. | &nbsp;#{translate("normal")}
  91. li
  92. a(href, ng-click="draft = true")
  93. i.fa.fa-fw(ng-class="{'fa-check': draft}")
  94. | &nbsp;#{translate("fast")}&nbsp;
  95. span.subdued [draft]
  96. li.dropdown-header #{translate("compile_time_checks")}
  97. li
  98. a(href, ng-click="stop_on_validation_error = true")
  99. i.fa.fa-fw(ng-class="{'fa-check': stop_on_validation_error}")
  100. | &nbsp;#{translate("stop_on_validation_error")}
  101. li
  102. a(href, ng-click="stop_on_validation_error = false")
  103. i.fa.fa-fw(ng-class="{'fa-check': !stop_on_validation_error}")
  104. | &nbsp;#{translate("ignore_validation_errors")}
  105. li
  106. a(href, ng-click="recompile({check:true})")
  107. i.fa.fa-fw()
  108. | &nbsp;#{translate("run_syntax_check_now")}
  109. a(
  110. href
  111. ng-click="stop()"
  112. ng-show="pdf.compiling",
  113. tooltip=translate('stop_compile')
  114. tooltip-placement="bottom"
  115. )
  116. i.fa.fa-fw.fa-stop()
  117. a.log-btn(
  118. href
  119. ng-click="toggleLogs()"
  120. ng-class="{ 'active': shouldShowLogs == true }"
  121. tooltip=translate('logs_and_output_files')
  122. tooltip-placement="bottom"
  123. )
  124. i.fa.fa-fw.fa-file-text-o
  125. span.label(
  126. ng-show="pdf.logEntries.warnings.length + pdf.logEntries.errors.length > 0"
  127. ng-class="{\
  128. 'label-warning': pdf.logEntries.errors.length == 0,\
  129. 'label-danger': pdf.logEntries.errors.length > 0\
  130. }"
  131. ) {{ pdf.logEntries.errors.length + pdf.logEntries.warnings.length }}
  132. a(
  133. ng-if="!pdf.downloadUrl"
  134. disabled
  135. href="#"
  136. tooltip=translate('please_compile_pdf_before_download')
  137. tooltip-placement="bottom"
  138. )
  139. i.fa.fa-fw.fa-download
  140. a(
  141. ng-href="{{pdf.downloadUrl || pdf.url}}"
  142. target="_blank"
  143. ng-if="pdf.url"
  144. tooltip=translate('download_pdf')
  145. tooltip-placement="bottom"
  146. )
  147. i.fa.fa-fw.fa-download
  148. .toolbar-right
  149. span.auto-compile-status.small(
  150. ng-show="changesToAutoCompile && !compiling && !autoCompileLintingError"
  151. ) #{translate('uncompiled_changes')}
  152. span.auto-compile-status.auto-compile-error.small(
  153. ng-show="autoCompileLintingError"
  154. tooltip-placement="bottom"
  155. tooltip=translate("code_check_failed_explanation")
  156. tooltip-append-to-body="true"
  157. )
  158. i.fa.fa-fw.fa-exclamation-triangle
  159. |
  160. | #{translate("code_check_failed")}
  161. a(
  162. href,
  163. ng-click="switchToFlatLayout('pdf')"
  164. ng-show="ui.pdfLayout == 'sideBySide'"
  165. tooltip=translate('full_screen')
  166. tooltip-placement="bottom"
  167. tooltip-append-to-body="true"
  168. )
  169. i.fa.fa-expand
  170. a(
  171. href,
  172. ng-click="switchToSideBySideLayout('editor')"
  173. ng-show="ui.pdfLayout == 'flat'"
  174. tooltip=translate('split_screen')
  175. tooltip-placement="bottom"
  176. tooltip-append-to-body="true"
  177. )
  178. i.fa.fa-compress
  179. // end of toolbar
  180. // logs view
  181. .pdf-logs(ng-show="shouldShowLogs")
  182. .alert.alert-success(ng-show="pdf.logEntries.all.length == 0 && !pdf.failure")
  183. | #{translate("no_errors_good_job")}
  184. .alert.alert-danger(ng-show="pdf.failure")
  185. strong #{translate("compile_error")}.
  186. span #{translate("generic_failed_compile_message")}.
  187. .alert.alert-danger(ng-show="pdf.failedCheck")
  188. strong #{translate("failed_compile_check")}.
  189. p
  190. p.text-center(ng-show="!check")
  191. a.text-info(
  192. href,
  193. ng-disabled="pdf.compiling",
  194. ng-click="recompile({try:true})"
  195. ) #{translate("failed_compile_check_try")}
  196. | &#32;#{translate("failed_compile_option_or")}&#32;
  197. a.text-info(
  198. href,
  199. ng-disabled="pdf.compiling",
  200. ng-click="recompile({force:true})"
  201. ) #{translate("failed_compile_check_ignore")}
  202. | .
  203. div(ng-repeat="entry in pdf.logEntries.all")
  204. .alert(
  205. ng-class="{\
  206. 'alert-danger': entry.level == 'error',\
  207. 'alert-warning': entry.level == 'warning',\
  208. 'alert-info': entry.level == 'typesetting'\
  209. }"
  210. ng-click="openInEditor(entry)"
  211. )
  212. span.line-no
  213. i.fa.fa-link(aria-hidden="true")
  214. | &nbsp;
  215. span(ng-show="entry.file") {{ entry.file }}
  216. span(ng-show="entry.line") , line {{ entry.line }}
  217. p.entry-message(ng-show="entry.message")
  218. | {{ entry.type }} {{ entry.message }}
  219. .card.card-hint(
  220. ng-if="entry.humanReadableHint"
  221. stop-propagation="click"
  222. )
  223. figure.card-hint-icon-container
  224. i.fa.fa-lightbulb-o(aria-hidden="true")
  225. p.card-hint-text(
  226. ng-show="entry.humanReadableHint",
  227. ng-bind-html="entry.humanReadableHint")
  228. .card-hint-footer.clearfix
  229. .card-hint-ext-link(ng-if="entry.extraInfoURL")
  230. a(
  231. ng-href="{{ entry.extraInfoURL }}",
  232. ng-click="trackLogHintsLearnMore()"
  233. target="_blank"
  234. )
  235. i.fa.fa-external-link
  236. |&nbsp;#{translate("log_hint_extra_info")}
  237. p.entry-content(ng-show="entry.content") {{ entry.content.trim() }}
  238. div
  239. .files-dropdown-container
  240. a.btn.btn-default.btn-sm(
  241. href,
  242. tooltip=translate('clear_cached_files'),
  243. tooltip-placement="top",
  244. tooltip-append-to-body="true",
  245. ng-click="openClearCacheModal()"
  246. )
  247. i.fa.fa-trash-o
  248. | &nbsp;
  249. div.files-dropdown(
  250. ng-class="shouldDropUp ? 'dropup' : 'dropdown'"
  251. dropdown
  252. )
  253. a.btn.btn-default.btn-sm(
  254. href
  255. dropdown-toggle
  256. )
  257. | #{translate("other_logs_and_files")}
  258. span.caret
  259. ul.dropdown-menu.dropdown-menu-right
  260. li(ng-repeat="file in pdf.outputFiles")
  261. a(
  262. ng-href="{{file.url}}"
  263. target="_blank"
  264. ) {{ file.name }}
  265. a.btn.btn-info.btn-sm(href, ng-click="toggleRawLog()")
  266. span(ng-show="!pdf.showRawLog") #{translate("view_raw_logs")}
  267. span(ng-show="pdf.showRawLog") #{translate("hide_raw_logs")}
  268. pre(ng-bind="pdf.rawLog", ng-show="pdf.showRawLog")
  269. // non-log views (pdf and errors)
  270. div(ng-show="!shouldShowLogs", ng-switch on="pdf.view")
  271. .pdf-uncompiled(ng-switch-when="uncompiled" ng-show="!pdf.compiling")
  272. | &nbsp;
  273. i.fa.fa-level-up.fa-flip-horizontal.fa-2x
  274. | &nbsp;&nbsp;#{translate('click_here_to_preview_pdf')}
  275. .pdf-viewer(ng-switch-when="pdf")
  276. div(
  277. pdfng
  278. ng-if="settings.pdfViewer == 'pdfjs'"
  279. pdf-src="pdf.url"
  280. key="{{ project_id }}"
  281. resize-on="layout:main:resize,layout:pdf:resize"
  282. highlights="pdf.highlights"
  283. position="pdf.position"
  284. first-render-done="pdf.firstRenderDone"
  285. update-consumed-bandwidth="pdf.updateConsumedBandwidth"
  286. dbl-click-callback="syncToCode"
  287. )
  288. iframe(
  289. ng-src="{{ pdf.url | trusted }}"
  290. ng-if="settings.pdfViewer == 'native'"
  291. )
  292. if !showNewLogsUI
  293. .pdf-validation-problems(ng-switch-when="validation-problems")
  294. .alert.alert-danger(ng-show="pdf.validation.sizeCheck")
  295. strong #{translate("project_too_large")}
  296. div #{translate("project_too_large_please_reduce")}
  297. div
  298. li(ng-repeat="entry in pdf.validation.sizeCheck.resources") {{ '/'+entry['path'] }} - {{entry['kbSize']}}kb
  299. .alert.alert-danger(ng-show="pdf.validation.conflictedPaths")
  300. div
  301. strong #{translate("conflicting_paths_found")}
  302. div !{translate("following_paths_conflict")}
  303. div
  304. li(ng-repeat="entry in pdf.validation.conflictedPaths") {{ '/'+entry['path'] }}
  305. .alert.alert-danger(ng-show="pdf.validation.mainFile")
  306. strong #{translate("main_file_not_found")}
  307. span #{translate("please_set_main_file")}
  308. .pdf-errors(ng-switch-when="errors")
  309. .alert.alert-danger(ng-show="pdf.error")
  310. strong #{translate("server_error")}
  311. span #{translate("somthing_went_wrong_compiling")}
  312. .alert.alert-danger(ng-show="pdf.renderingError")
  313. strong #{translate("pdf_rendering_error")}
  314. span #{translate("something_went_wrong_rendering_pdf")}
  315. .alert.alert-danger(ng-show="pdf.clsiMaintenance")
  316. strong #{translate("server_error")}
  317. span #{translate("clsi_maintenance")}
  318. .alert.alert-danger(ng-show="pdf.clsiUnavailable")
  319. strong #{translate("server_error")}
  320. span #{translate("clsi_unavailable")}
  321. .alert.alert-danger(ng-show="pdf.tooRecentlyCompiled")
  322. strong #{translate("server_error")}
  323. span #{translate("too_recently_compiled")}
  324. .alert.alert-danger(ng-show="pdf.compileTerminated")
  325. strong #{translate("terminated")}.
  326. span #{translate("compile_terminated_by_user")}
  327. .alert.alert-danger(ng-show="pdf.rateLimited")
  328. strong #{translate("pdf_compile_rate_limit_hit")}
  329. span #{translate("project_flagged_too_many_compiles")}
  330. .alert.alert-danger(ng-show="pdf.compileInProgress")
  331. strong #{translate("pdf_compile_in_progress_error")}.
  332. span #{translate("pdf_compile_try_again")}
  333. .alert.alert-danger(ng-show="pdf.timedout")
  334. p
  335. strong #{translate("timedout")}.
  336. span #{translate("proj_timed_out_reason")}
  337. p
  338. a.text-info(href="https://www.sharelatex.com/learn/Debugging_Compilation_timeout_errors", target="_blank")
  339. | #{translate("learn_how_to_make_documents_compile_quickly")}
  340. if settings.enableSubscriptions
  341. .alert.alert-success(ng-show="pdf.timedout && !hasPremiumCompile")
  342. p(ng-if="project.owner._id == user.id")
  343. strong #{translate("upgrade_for_longer_compiles")}
  344. p(ng-if="project.owner._id != user.id")
  345. strong #{translate("ask_proj_owner_to_upgrade_for_longer_compiles")}
  346. p #{translate("free_accounts_have_timeout_upgrade_to_increase")}
  347. p #{translate("plus_upgraded_accounts_receive")}:
  348. div
  349. ul.list-unstyled
  350. li
  351. i.fa.fa-check &nbsp;
  352. | #{translate("unlimited_projects")}
  353. li
  354. i.fa.fa-check &nbsp;
  355. | #{translate("collabs_per_proj", {collabcount:'Multiple'})}
  356. li
  357. i.fa.fa-check &nbsp;
  358. | #{translate("full_doc_history")}
  359. li
  360. i.fa.fa-check &nbsp;
  361. | #{translate("sync_to_dropbox")}
  362. li
  363. i.fa.fa-check &nbsp;
  364. | #{translate("sync_to_github")}
  365. li
  366. i.fa.fa-check &nbsp;
  367. |#{translate("compile_larger_projects")}
  368. p(ng-controller="FreeTrialModalController", ng-if="project.owner._id == user.id")
  369. a.btn.btn-success.row-spaced-small(
  370. href
  371. ng-class="buttonClass"
  372. ng-click="startFreeTrial('compile-timeout')"
  373. ) #{translate("start_free_trial")}
  374. .alert.alert-danger(ng-show="pdf.autoCompileDisabled")
  375. p
  376. strong #{translate("autocompile_disabled")}.
  377. span #{translate("autocompile_disabled_reason")}
  378. .alert.alert-danger(ng-show="pdf.projectTooLarge")
  379. strong #{translate("project_too_large")}
  380. span #{translate("project_too_much_editable_text")}
  381. script(type='text/ng-template', id='clearCacheModalTemplate')
  382. .modal-header
  383. h3 #{translate("clear_cache")}?
  384. .modal-body
  385. p #{translate("clear_cache_explanation")}
  386. p #{translate("clear_cache_is_safe")}
  387. .alert.alert-danger(ng-if="state.error") #{translate("generic_something_went_wrong")}.
  388. .modal-footer
  389. button.btn.btn-default(
  390. ng-click="cancel()"
  391. ng-disabled="state.inflight"
  392. ) #{translate("cancel")}
  393. button.btn.btn-info(
  394. ng-click="clear()"
  395. ng-disabled="state.inflight"
  396. )
  397. span(ng-show="!state.inflight") #{translate("clear_cache")}
  398. span(ng-show="state.inflight") #{translate("clearing")}…