pdfTextLayer.js 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. /* eslint-disable
  2. max-len,
  3. no-return-assign,
  4. no-unused-vars,
  5. */
  6. // TODO: This file was created by bulk-decaffeinate.
  7. // Fix any style issues and re-enable lint.
  8. /*
  9. * decaffeinate suggestions:
  10. * DS102: Remove unnecessary code created because of implicit returns
  11. * DS207: Consider shorter variations of null checks
  12. * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md
  13. */
  14. import App from '../../../base'
  15. // uses the PDFJS text layer renderer to provide invisible overlayed
  16. // text for searching
  17. App.factory('pdfTextLayer', function() {
  18. let pdfTextLayer
  19. return (pdfTextLayer = class pdfTextLayer {
  20. constructor(options) {
  21. this.textLayerDiv = options.textLayerDiv
  22. this.divContentDone = false
  23. this.viewport = options.viewport
  24. this.textDivs = []
  25. this.renderer = options.renderer
  26. this.renderingDone = false
  27. }
  28. render(timeout) {
  29. if (this.renderingDone || !this.divContentDone) {
  30. return
  31. }
  32. if (this.textLayerRenderTask != null) {
  33. this.textLayerRenderTask.cancel()
  34. this.textLayerRenderTask = null
  35. }
  36. this.textDivs = []
  37. const textLayerFrag = document.createDocumentFragment()
  38. this.textLayerRenderTask = this.renderer({
  39. textContent: this.textContent,
  40. container: textLayerFrag,
  41. viewport: this.viewport,
  42. textDivs: this.textDivs,
  43. timeout,
  44. enhanceTextSelection: this.enhanceTextSelection
  45. })
  46. const textLayerSuccess = () => {
  47. this.textLayerDiv.appendChild(textLayerFrag)
  48. return (this.renderingDone = true)
  49. }
  50. const textLayerFailure = function() {
  51. // canceled or failed to render text layer -- skipping errors
  52. }
  53. return this.textLayerRenderTask.promise.then(
  54. textLayerSuccess,
  55. textLayerFailure
  56. )
  57. }
  58. setTextContent(textContent) {
  59. if (this.textLayerRenderTask) {
  60. this.textLayerRenderTask.cancel()
  61. this.textLayerRenderTask = null
  62. }
  63. this.textContent = textContent
  64. return (this.divContentDone = true)
  65. }
  66. })
  67. })