| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234 |
- define [
- "pdf/PDFjsView"
- "pdf/NativePdfView"
- "libs/backbone"
- "libs/mustache"
- "libs/bootstrap"
- "libs/jquery.storage"
- ], (PdfjsView, NativePdfView) ->
- LatexErrorView = Backbone.View.extend
- constructor: (@ide, @error) ->
- template: $('#compileLogEntryTemplate').html()
- events:
- "click": "onClick"
- render: () ->
- if @error.level == "error"
- @error.type = "error"
- @error.title = "Error in #{@error.file}"
- else if @error.level == "warning"
- @error.type = "warning"
- @error.title = "Warning in #{@error.file}"
- else
- @error.type = "info"
- @error.title = "Typesetting problem in #{@error.file}"
- if @error.line?
- @error.title += " (line #{@error.line})"
- @setElement($(Mustache.to_html(@template, @error)))
-
- onClick: (event) ->
- @ide.fileTreeManager.openDocByPath(@error.file, @error.line)
- PdfView = Backbone.View.extend
- templates:
- pdfPanel: $("#pdfPanelTemplate").html()
- compileSuccess: $('#compileSuccessTemplate').html()
- compileFailed: $('#compileFailedTemplate').html()
- compileError: $('#compileErrorTemplate').html()
- compileTimeout: $('#compileTimeoutTemplate').html()
- outputFileLink: $('#outputFileLinkTemplate').html()
-
- events:
- "click #recompilePdf": -> @recompilePdf()
- "click #showLog": -> @showLog()
- "click #showRawLog": -> @showRawLog()
- "click #showPdf": -> @showPdf()
- "click #downloadPdf": -> @options.manager.downloadPdf()
- "click #flatViewButton": () ->
- $.localStorage("layout.pdf", "flat")
- @options.manager.switchToFlatView(showPdf: true)
- "click #splitViewButton": ->
- $.localStorage("layout.pdf", "split")
- @options.manager.switchToSplitView()
- "click .delete-cached-files > a": -> @options.manager.deleteCachedFiles()
- initialize: (@options) ->
- @ide = @options.ide
- @ide.layoutManager.on "resize", => @resize()
- @ide.editor.on "resize", => @resize()
- if @ide.userSettings.pdfViewer == "native"
- PdfView = NativePdfView
- @pdfjs = false
- else
- PdfView = PdfjsView
- @pdfjs = true
- @pdfView = new PdfView(manager: @)
- @pdfView.on "dblclick", (e) => @trigger "dblclick", e
- render: () ->
- @setElement(@templates.pdfPanel)
- @$("#pdfAreaContent").append @pdfView.render().$el
- @showBeforeCompile()
- return this
- resize: () ->
- toolbarHeight = @$("#pdfToolBar").outerHeight()
- areaHeight = @$el.outerHeight()
- @$("#pdfAreaContent").height(areaHeight - toolbarHeight)
- @pdfView.onResize?()
- updateLog: (options) ->
- {pdfExists, logExists, compileErrors, rawLog, timedOut, systemError} = options
- if @errorViews?
- for errorView in @errorViews
- errorView.remove()
- @errorViews = []
- errorLogs = @$("#logArea").find('ul')
- errorLogs.empty()
- logButtonHtml = "Logs"
- if compileErrors?
- for error in compileErrors.errors.concat(compileErrors.warnings).concat(compileErrors.typesetting)
- errorView = new LatexErrorView(@options.manager.ide, error)
- errorView.render()
- @errorViews.push(errorView)
- # TODO: The event handlers introduced by LatexError are never freed
- errorLogs.append(errorView.el)
- if compileErrors.errors.length > 0
- logButtonHtml += " <span class='label label-important'>#{compileErrors.errors.length}</span>"
- if compileErrors.warnings.length > 0
- logButtonHtml += " <span class='label label-warning'>#{compileErrors.warnings.length}</span>"
- if compileErrors.typesetting.length > 0
- logButtonHtml += " <span class='label label-info'>#{compileErrors.typesetting.length}</span>"
- @$("#showLog").html(logButtonHtml)
- if timedOut
- errorLogs.prepend($(@templates.compileTimeout))
- else if systemError
- errorLogs.prepend($(@templates.compileError))
- else if !pdfExists
- errorLogs.prepend($(@templates.compileFailed))
- else if pdfExists && compileErrors.all.length == 0
- errorLogs.prepend($(@templates.compileSuccess))
-
- errorLogs.find(".js-clear-cache").on "click", () =>
- @options.manager.deleteCachedFiles()
- @$("#rawLogArea").find("pre").text(rawLog)
-
- setPdf: (pdfUrl) ->
- @pdfUrl = pdfUrl
- @pdfView.setPdf pdfUrl
- @$("#downloadPdf").removeAttr("disabled")
- @$("#downloadLinksButton").removeAttr("disabled")
- unsetPdf: () ->
- delete @pdfUrl
- @pdfView.unsetPdf()
- @$("#downloadPdf").attr("disabled", "disabled")
- @$("#downloadLinksButton").attr("disabled", "disabled")
- return @
- hasPdf: () -> !!@pdfUrl
- IGNORE_FILES: ["output.fls", "output.fdb_latexmk"]
- showOutputFileDownloadLinks: (outputFiles) ->
- @$("#downloadLinks").empty()
- for file in outputFiles
- if @IGNORE_FILES.indexOf(file.path) == -1
- if file.path.match(/^output\./)
- name = "#{file.path.replace(/^output\./, "")} file"
- else
- name = file.path
- link = $ Mustache.to_html(@templates.outputFileLink, {
- project_id: @ide.project_id
- name: name
- path: file.path
- })
- @$("#downloadLinks").append(link)
- afterSwitchView: ()->
- if !@pdfjs
- @pdfView.unsetPdf()
- @pdfView.hide()
- @$(".not-compiled-yet-message").show()
- showBeforeCompile: () ->
- @pdfView.hide()
- @$("#showPdfGroup").hide()
- @$("#showLog").attr("disabled", "disabled")
- @$("#downloadPdf").attr("disabled", "disabled")
- @$("#downloadLinksButton").attr("disabled", "disabled")
- @$(".compiling-message").hide()
- @$(".not-compiled-yet-message").show()
- showPdf: () ->
- @$("#logArea").hide()
- @$("#rawLogArea").hide()
- @pdfView.show()
- @$("#showPdfGroup").hide()
- @$("#showLogGroup").show()
- showLog: () ->
- @$("#rawLogArea").hide()
- @pdfView.hide()
- @$("#logArea").show()
- @$("#showPdfGroup").show()
- @$("#showLogGroup").hide()
- showRawLog: () ->
- @pdfView.hide()
- @$("#logArea").hide()
- @$("#rawLogArea").show()
- @$("#showPdfGroup").show()
- @$("#showLogGroup").hide()
- onCompiling: () ->
- @$(".not-compiled-yet-message").hide()
- @$(".compiling-message").show()
- @$("#recompilePdf").attr("disabled", "disabled")
- doneCompiling: () ->
- @$(".compiling-message").hide()
- @$("#recompilePdf").removeAttr("disabled")
- @$("#showLog").removeAttr("disabled")
- recompilePdf: () ->
- @options.manager.trigger "compile:pdf"
- rootDocOverride_id = null
- for line in @ide.editor.getLines()
- match = line.match /(.*)\\documentclass/
- if match and !match[1].match /%/
- rootDocOverride_id = @ide.editor.getCurrentDocId()
- @options.manager.refreshPdf {rootDocOverride_id}
- toggleFlatViewButton: () -> @$("#flatViewButton").button("toggle")
- toggleSplitViewButton: () -> @$("#splitViewButton").button("toggle")
- downloadPdf: () ->
- @options.manager.downloadPdf()
- delegateEvents: () ->
- Backbone.View::delegateEvents.apply(this, arguments)
- @pdfView.delegateEvents()
- undelegateEvents: () ->
- Backbone.View::undelegateEvents.apply(this, arguments)
- @pdfView.undelegateEvents()
- highlightInPdf: (args...) ->
- @pdfView.highlightInPdf?(args...)
- getPdfPosition: () ->
- @pdfView.getPdfPosition?()
-
|