overleaf/services/web/frontend/js/ide/pdfng/directives/pdfAnnotations.js
Miguel Serrano 7b997f3946 Update pdf.js to 2.5.207 (#3222)
* updated pdf.js to 2.5.207, and added worker-loader as a devDependency
* updated pdf.js loaded to load ES5 build instead of the default one
* replaced imports with named imports due to changes on pdf.js worker loading

There are some hash downgrades in the lockfile. Running the commands through the appropriate methods yields the same result consistency

GitOrigin-RevId: 37be3901abf1044d93d83cb684e4e32721550d5a
2020-10-02 02:04:23 +00:00

61 lines
1.7 KiB
JavaScript

import App from '../../../base'
import { Util } from './pdfJsLoader'
const EXTERNAL_LINK_TARGET = '_blank'
const REL_NOOPENER = 'noreferrer noopener'
App.factory('pdfAnnotations', function() {
class pdfAnnotations {
constructor(options) {
this.annotationsLayerDiv = options.annotations
this.viewport = options.viewport
this.navigateFn = options.navigateFn
}
setAnnotations(annotations) {
const result = []
for (let annotation of annotations) {
switch (annotation.subtype) {
case 'Link':
result.push(this.addLink(annotation))
break
case 'Text':
continue
default:
result.push(undefined)
}
}
}
addLink(link) {
const element = this.buildLinkElementFromRect(link.rect)
this.setLinkTarget(element, link)
this.annotationsLayerDiv.appendChild(element)
}
buildLinkElementFromRect(rect) {
rect = this.viewport.convertToViewportRectangle(rect)
rect = Util.normalizeRect(rect)
const element = document.createElement('a')
element.style.left = Math.floor(rect[0]) + 'px'
element.style.top = Math.floor(rect[1]) + 'px'
element.style.width = Math.ceil(rect[2] - rect[0]) + 'px'
element.style.height = Math.ceil(rect[3] - rect[1]) + 'px'
return element
}
setLinkTarget(element, link) {
if (link.url) {
element.href = link.url
element.target = EXTERNAL_LINK_TARGET
element.rel = REL_NOOPENER
} else if (link.dest) {
element.href = `#${link.dest}`
element.onclick = () => {
this.navigateFn(link)
return false
}
}
}
}
return pdfAnnotations
})