PDFjsView.coffee 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. define [
  2. "libs/pdfListView/PdfListView"
  3. "libs/pdfListView/TextLayerBuilder"
  4. "libs/pdfListView/AnnotationsLayerBuilder"
  5. "text!libs/pdfListView/TextLayer.css"
  6. "text!libs/pdfListView/AnnotationsLayer.css"
  7. "libs/backbone"
  8. "libs/jquery.storage"
  9. ], (PDFListView, TextLayerBuilder, AnnotationsLayerBuilder, textLayerCss, annotationsLayerCss) ->
  10. if PDFJS?
  11. PDFJS.workerSrc = "#{window.sharelatex.pdfJsWorkerPath}"
  12. style = $("<style/>")
  13. style.text(textLayerCss + "\n" + annotationsLayerCss)
  14. $("body").append(style)
  15. PDFjsView = Backbone.View.extend
  16. template: $("#pdfjsViewerTemplate").html()
  17. events:
  18. "mousemove" : "onMousemove"
  19. "mouseout" : "onMouseout"
  20. "click .js-fit-height" : "fitToHeight"
  21. "click .js-fit-width" : "fitToWidth"
  22. "click .js-zoom-out" : "zoomOut"
  23. "click .js-zoom-in" : "zoomIn"
  24. initialize: () ->
  25. @ide = @options.manager.ide
  26. render: () ->
  27. @setElement $(@template)
  28. @pdfListView = new PDFListView @$(".pdfjs-list-view")[0],
  29. textLayerBuilder: TextLayerBuilder
  30. annotationsLayerBuilder: AnnotationsLayerBuilder
  31. #logLevel: PDFListView.Logger.DEBUG
  32. @pdfListView.listView.pageWidthOffset = 20
  33. @pdfListView.listView.pageHeightOffset = 20
  34. @toolbar = @$(".btn-group")
  35. @toolbar.hide()
  36. @progress_bar = @$(".progress")
  37. @hideProgressBar()
  38. return @
  39. show: () ->
  40. @$el.show()
  41. @pdfListView.onResize()
  42. hide: () -> @$el.hide()
  43. setPdf: (url) ->
  44. @setProgressBarTo(0)
  45. onProgress = (progress) =>
  46. @setProgressBarTo(progress.loaded/progress.total)
  47. @pdfListView
  48. .loadPdf(url, onProgress)
  49. .then () =>
  50. @hideProgressBar()
  51. if !@setInitialPosition
  52. @_initInitialPosition()
  53. @setInitialPosition = true
  54. @flashToolbar()
  55. unsetPdf: () -> @hide()
  56. _initInitialPosition: () ->
  57. if (scale = $.localStorage("pdf.scale"))?
  58. @pdfListView.setScaleMode(scale.scaleMode, scale.scale)
  59. else
  60. @pdfListView.setToFitWidth()
  61. if (position = $.localStorage("pdf.position.#{@ide.project.get("id")}"))
  62. @pdfListView.setPdfPosition(position)
  63. $(window).unload () =>
  64. $.localStorage "pdf.scale", {
  65. scaleMode: @pdfListView.getScaleMode()
  66. scale: @pdfListView.getScale()
  67. }
  68. $.localStorage "pdf.position.#{@ide.project.get("id")}", @pdfListView.getPdfPosition()
  69. setProgressBarTo: (value) ->
  70. @progress_bar.show()
  71. @progress_bar.find(".bar").css width: "#{value * 100}%"
  72. hideProgressBar: () ->
  73. @progress_bar.hide()
  74. fitToHeight: () ->
  75. @pdfListView.setToFitHeight()
  76. fitToWidth: () ->
  77. @pdfListView.setToFitWidth()
  78. zoomIn: () ->
  79. scale = @pdfListView.getScale()
  80. @pdfListView.setScale(scale * 1.2)
  81. zoomOut: () ->
  82. scale = @pdfListView.getScale()
  83. @pdfListView.setScale(scale / 1.2)
  84. flashToolbar: () ->
  85. @toolbar.show()
  86. setTimeout =>
  87. @toolbar.fadeOut "slow"
  88. , 1000
  89. onMousemove: (e) ->
  90. viewerOffset = @$el.offset()
  91. offsetY = e.pageY - viewerOffset.top
  92. offsetX = e.pageX - viewerOffset.left
  93. if offsetY < 70 and offsetX < 250
  94. @toolbar.show()
  95. else
  96. @toolbar.fadeOut "slow"
  97. onMouseout: (e) ->
  98. @toolbar.hide()
  99. onResize: () ->
  100. @pdfListView.onResize()