overleaf/services/web/frontend/js/ide/pdfng/directives/pdfAnnotations.js
Alasdair Smith 8f5270899f Merge pull request #2707 from overleaf/as-transform-esm
Transform frontend module format from AMD to ESM

GitOrigin-RevId: 9adbcdc95e819a54114010c6fd3521d8f58ef2fe
2020-05-20 03:21:38 +00:00

61 lines
1.7 KiB
JavaScript

import App from '../../../base'
import PDFJS 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 = PDFJS.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
})