| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- 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
- })
|