CompiledView.coffee 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216
  1. define [
  2. "pdf/PDFjsView"
  3. "pdf/NativePdfView"
  4. "libs/backbone"
  5. "libs/mustache"
  6. "libs/bootstrap"
  7. "libs/jquery.storage"
  8. ], (PdfjsView, NativePdfView) ->
  9. LatexErrorView = Backbone.View.extend
  10. constructor: (@ide, @error) ->
  11. template: $('#compileLogEntryTemplate').html()
  12. events:
  13. "click": "onClick"
  14. render: () ->
  15. if @error.level == "error"
  16. @error.type = "error"
  17. @error.title = "Error in #{@error.file}"
  18. else if @error.level == "warning"
  19. @error.type = "warning"
  20. @error.title = "Warning in #{@error.file}"
  21. else
  22. @error.type = "info"
  23. @error.title = "Typesetting problem in #{@error.file}"
  24. if @error.line?
  25. @error.title += " (line #{@error.line})"
  26. @setElement($(Mustache.to_html(@template, @error)))
  27. onClick: (event) ->
  28. @ide.fileTreeManager.openDocByPath(@error.file, @error.line)
  29. PdfView = Backbone.View.extend
  30. templates:
  31. pdfPanel: $("#pdfPanelTemplate").html()
  32. compileSuccess: $('#compileSuccessTemplate').html()
  33. compileFailed: $('#compileFailedTemplate').html()
  34. compileError: $('#compileErrorTemplate').html()
  35. outputFileLink: $('#outputFileLinkTemplate').html()
  36. events:
  37. "click #recompilePdf": -> @recompilePdf()
  38. "click #showLog": -> @showLog()
  39. "click #showRawLog": -> @showRawLog()
  40. "click #showPdf": -> @showPdf()
  41. "click #downloadPdf": -> @options.manager.downloadPdf()
  42. "click #flatViewButton": () ->
  43. $.localStorage("layout.pdf", "flat")
  44. @options.manager.switchToFlatView(showPdf: true)
  45. "click #splitViewButton": ->
  46. $.localStorage("layout.pdf", "split")
  47. @options.manager.switchToSplitView()
  48. initialize: (@options) ->
  49. @ide = @options.ide
  50. @ide.layoutManager.on "resize", => @resize()
  51. @ide.editor.on "resize", => @resize()
  52. if @ide.userSettings.pdfViewer == "native"
  53. PdfView = NativePdfView
  54. @pdfjs = false
  55. else
  56. PdfView = PdfjsView
  57. @pdfjs = true
  58. @pdfView = new PdfView(manager: @)
  59. render: () ->
  60. @setElement(@templates.pdfPanel)
  61. @$("#pdfAreaContent").append @pdfView.render().$el
  62. @showBeforeCompile()
  63. return this
  64. resize: () ->
  65. toolbarHeight = @$("#pdfToolBar").outerHeight()
  66. areaHeight = @$el.outerHeight()
  67. @$("#pdfAreaContent").height(areaHeight - toolbarHeight)
  68. @pdfView.onResize?()
  69. updateLog: (options) ->
  70. {pdfExists, logExists, compileErrors, rawLog} = options
  71. if @errorViews?
  72. for errorView in @errorViews
  73. errorView.remove()
  74. @errorViews = []
  75. errorLogs = @$("#logArea").find('ul')
  76. errorLogs.empty()
  77. logButtonHtml = "Logs"
  78. if compileErrors?
  79. for error in compileErrors.all
  80. errorView = new LatexErrorView(@options.manager.ide, error)
  81. errorView.render()
  82. @errorViews.push(errorView)
  83. # TODO: The event handlers introduced by LatexError are never freed
  84. errorLogs.append(errorView.el)
  85. if compileErrors.errors.length > 0
  86. logButtonHtml += " <span class='label label-important'>#{compileErrors.errors.length}</span>"
  87. if compileErrors.warnings.length > 0
  88. logButtonHtml += " <span class='label label-warning'>#{compileErrors.warnings.length}</span>"
  89. if compileErrors.typesetting.length > 0
  90. logButtonHtml += " <span class='label label-info'>#{compileErrors.typesetting.length}</span>"
  91. @$("#showLog").html(logButtonHtml)
  92. if !pdfExists
  93. if !compileErrors?
  94. errorLogs.prepend($(@templates.compileError))
  95. else
  96. errorLogs.prepend($(@templates.compileFailed))
  97. else if pdfExists && compileErrors.all.length == 0
  98. errorLogs.prepend($(@templates.compileSuccess))
  99. @$("#rawLogArea").find("pre").text(rawLog)
  100. setPdf: (pdfUrl) ->
  101. @pdfUrl = pdfUrl
  102. @pdfView.setPdf pdfUrl
  103. @$("#downloadPdf").removeAttr("disabled")
  104. @$("#downloadLinksButton").removeAttr("disabled")
  105. unsetPdf: () ->
  106. delete @pdfUrl
  107. @pdfView.unsetPdf()
  108. @$("#downloadPdf").attr("disabled", "disabled")
  109. @$("#downloadLinksButton").attr("disabled", "disabled")
  110. return @
  111. hasPdf: () -> !!@pdfUrl
  112. IGNORE_FILES: ["output.fls", "output.fdb_latexmk"]
  113. showOutputFileDownloadLinks: (outputFiles) ->
  114. @$("#downloadLinks").empty()
  115. for file in outputFiles
  116. if @IGNORE_FILES.indexOf(file.path) == -1
  117. if file.path.match(/^output\./)
  118. name = "#{file.path.replace(/^output\./, "")} file"
  119. else
  120. name = file.path
  121. link = $ Mustache.to_html(@templates.outputFileLink, {
  122. project_id: @ide.project_id
  123. name: name
  124. path: file.path
  125. })
  126. @$("#downloadLinks").append(link)
  127. afterSwitchView: ()->
  128. if !@pdfjs
  129. @pdfView.unsetPdf()
  130. @pdfView.hide()
  131. @$(".not-compiled-yet-message").show()
  132. showBeforeCompile: () ->
  133. @pdfView.hide()
  134. @$("#showPdfGroup").hide()
  135. @$("#showLog").attr("disabled", "disabled")
  136. @$("#downloadPdf").attr("disabled", "disabled")
  137. @$("#downloadLinksButton").attr("disabled", "disabled")
  138. @$(".compiling-message").hide()
  139. @$(".not-compiled-yet-message").show()
  140. showPdf: () ->
  141. @$("#logArea").hide()
  142. @$("#rawLogArea").hide()
  143. @pdfView.show()
  144. @$("#showPdfGroup").hide()
  145. @$("#showLogGroup").show()
  146. showLog: () ->
  147. @$("#rawLogArea").hide()
  148. @pdfView.hide()
  149. @$("#logArea").show()
  150. @$("#showPdfGroup").show()
  151. @$("#showLogGroup").hide()
  152. showRawLog: () ->
  153. @pdfView.hide()
  154. @$("#logArea").hide()
  155. @$("#rawLogArea").show()
  156. @$("#showPdfGroup").show()
  157. @$("#showLogGroup").hide()
  158. onCompiling: () ->
  159. @$(".not-compiled-yet-message").hide()
  160. @$(".compiling-message").show()
  161. @$("#recompilePdf").attr("disabled", "disabled")
  162. doneCompiling: () ->
  163. @$(".compiling-message").hide()
  164. @$("#recompilePdf").removeAttr("disabled")
  165. @$("#showLog").removeAttr("disabled")
  166. recompilePdf: () ->
  167. @options.manager.trigger "compile:pdf"
  168. @options.manager.refreshPdf()
  169. toggleFlatViewButton: () -> @$("#flatViewButton").button("toggle")
  170. toggleSplitViewButton: () -> @$("#splitViewButton").button("toggle")
  171. downloadPdf: () ->
  172. @options.manager.downloadPdf()
  173. delegateEvents: () ->
  174. Backbone.View::delegateEvents.apply(this, arguments)
  175. @pdfView.delegateEvents()
  176. undelegateEvents: () ->
  177. Backbone.View::undelegateEvents.apply(this, arguments)
  178. @pdfView.undelegateEvents()