diff --git a/src/display/annotation_layer.js b/src/display/annotation_layer.js index ee1b47a72..1ec70bfb9 100644 --- a/src/display/annotation_layer.js +++ b/src/display/annotation_layer.js @@ -13,13 +13,6 @@ * limitations under the License. */ -import { - addLinkAttributes, - DOMSVGFactory, - getFilenameFromUrl, - LinkTarget, - PDFDateString, -} from "./display_utils.js"; import { AnnotationBorderStyleType, AnnotationType, @@ -30,6 +23,11 @@ import { Util, warn, } from "../shared/util.js"; +import { + DOMSVGFactory, + getFilenameFromUrl, + PDFDateString, +} from "./display_utils.js"; import { AnnotationStorage } from "./annotation_storage.js"; import { ColorConverters } from "../shared/scripting_utils.js"; @@ -443,14 +441,15 @@ class LinkAnnotationElement extends AnnotationElement { const link = document.createElement("a"); if (data.url) { - addLinkAttributes(link, { - url: data.url, - target: data.newWindow - ? LinkTarget.BLANK - : linkService.externalLinkTarget, - rel: linkService.externalLinkRel, - enabled: linkService.externalLinkEnabled, - }); + if ( + (typeof PDFJSDev === "undefined" || PDFJSDev.test("GENERIC")) && + !linkService.addLinkAttributes + ) { + warn( + "LinkAnnotationElement.render - missing `addLinkAttributes`-method on the `linkService`-instance." + ); + } + linkService.addLinkAttributes?.(link, data.url, data.newWindow); } else if (data.action) { this._bindNamedAction(link, data.action); } else if (data.dest) { diff --git a/src/display/display_utils.js b/src/display/display_utils.js index cf3d9bd67..c34035f2c 100644 --- a/src/display/display_utils.js +++ b/src/display/display_utils.js @@ -338,7 +338,7 @@ const LinkTarget = { /** * Adds various attributes (href, title, target, rel) to hyperlinks. - * @param {HTMLLinkElement} link - The link element. + * @param {HTMLAnchorElement} link - The link element. * @param {ExternalLinkParameters} params */ function addLinkAttributes(link, { url, target, rel, enabled = true } = {}) { @@ -633,7 +633,6 @@ function getXfaPageViewport(xfaPage, { scale = 1, rotation = 0 }) { export { addLinkAttributes, - DEFAULT_LINK_REL, deprecated, DOMCanvasFactory, DOMCMapReaderFactory, diff --git a/src/display/xfa_layer.js b/src/display/xfa_layer.js index 346a5b0e9..2844b5bff 100644 --- a/src/display/xfa_layer.js +++ b/src/display/xfa_layer.js @@ -13,7 +13,7 @@ * limitations under the License. */ -import { addLinkAttributes, LinkTarget } from "./display_utils.js"; +import { warn } from "../shared/util.js"; import { XfaText } from "./xfa_text.js"; class XfaLayer { @@ -119,14 +119,19 @@ class XfaLayer { } if (isHTMLAnchorElement) { - addLinkAttributes(html, { - url: attributes.href, - target: attributes.newWindow - ? LinkTarget.BLANK - : linkService.externalLinkTarget, - rel: linkService.externalLinkRel, - enabled: linkService.externalLinkEnabled, - }); + if ( + (typeof PDFJSDev === "undefined" || PDFJSDev.test("GENERIC")) && + !linkService.addLinkAttributes + ) { + warn( + "XfaLayer.setAttribute - missing `addLinkAttributes`-method on the `linkService`-instance." + ); + } + linkService.addLinkAttributes?.( + html, + attributes.href, + attributes.newWindow + ); } // Set the value after the others to be sure overwrite diff --git a/web/base_viewer.js b/web/base_viewer.js index 3ce5d9197..21de19214 100644 --- a/web/base_viewer.js +++ b/web/base_viewer.js @@ -1358,7 +1358,6 @@ class BaseViewer { * @param {PDFPage} pdfPage * @param {AnnotationStorage} [annotationStorage] - Storage for annotation * data in forms. - * @property {IPDFLinkService} linkService * @returns {XfaLayerBuilder} */ createXfaLayerBuilder(pageDiv, pdfPage, annotationStorage = null) { diff --git a/web/interfaces.js b/web/interfaces.js index ebe1ad518..ad9af67e1 100644 --- a/web/interfaces.js +++ b/web/interfaces.js @@ -63,6 +63,13 @@ class IPDFLinkService { */ goToPage(val) {} + /** + * @param {HTMLAnchorElement} link + * @param {string} url + * @param {boolean} [newWindow] + */ + addLinkAttributes(link, url, newWindow = false) {} + /** * @param dest - The PDF destination object. * @returns {string} The hyperlink to the PDF object. diff --git a/web/pdf_link_service.js b/web/pdf_link_service.js index cd83e2711..4286f2e3a 100644 --- a/web/pdf_link_service.js +++ b/web/pdf_link_service.js @@ -15,6 +15,7 @@ /** @typedef {import("./interfaces").IPDFLinkService} IPDFLinkService */ +import { addLinkAttributes, LinkTarget } from "pdfjs-lib"; import { parseQueryString } from "./ui_utils.js"; /** @@ -227,6 +228,21 @@ class PDFLinkService { this.pdfViewer.scrollPageIntoView({ pageNumber }); } + /** + * Wrapper around the `addLinkAttributes`-function in the API. + * @param {HTMLAnchorElement} link + * @param {string} url + * @param {boolean} [newWindow] + */ + addLinkAttributes(link, url, newWindow = false) { + addLinkAttributes(link, { + url, + target: newWindow ? LinkTarget.BLANK : this.externalLinkTarget, + rel: this.externalLinkRel, + enabled: this.externalLinkEnabled, + }); + } + /** * @param {string|Array} dest - The PDF destination object. * @returns {string} The hyperlink to the PDF object. @@ -514,10 +530,7 @@ function isValidExplicitDestination(dest) { */ class SimpleLinkService { constructor() { - this.externalLinkTarget = null; - this.externalLinkRel = null; this.externalLinkEnabled = true; - this._ignoreDestinationZoom = false; } /** @@ -561,6 +574,15 @@ class SimpleLinkService { */ goToPage(val) {} + /** + * @param {HTMLAnchorElement} link + * @param {string} url + * @param {boolean} [newWindow] + */ + addLinkAttributes(link, url, newWindow = false) { + addLinkAttributes(link, { url, enabled: this.externalLinkEnabled }); + } + /** * @param dest - The PDF destination object. * @returns {string} The hyperlink to the PDF object. diff --git a/web/pdf_outline_viewer.js b/web/pdf_outline_viewer.js index 00cabc81d..70feaa58a 100644 --- a/web/pdf_outline_viewer.js +++ b/web/pdf_outline_viewer.js @@ -13,12 +13,8 @@ * limitations under the License. */ -import { - addLinkAttributes, - createPromiseCapability, - LinkTarget, -} from "pdfjs-lib"; import { BaseTreeViewer } from "./base_tree_viewer.js"; +import { createPromiseCapability } from "pdfjs-lib"; import { SidebarView } from "./ui_utils.js"; /** @@ -115,12 +111,7 @@ class PDFOutlineViewer extends BaseTreeViewer { const { linkService } = this; if (url) { - addLinkAttributes(element, { - url, - target: newWindow ? LinkTarget.BLANK : linkService.externalLinkTarget, - rel: linkService.externalLinkRel, - enabled: linkService.externalLinkEnabled, - }); + linkService.addLinkAttributes(element, url, newWindow); return; } diff --git a/web/secondary_toolbar.js b/web/secondary_toolbar.js index 532e2d274..92cbf728b 100644 --- a/web/secondary_toolbar.js +++ b/web/secondary_toolbar.js @@ -31,8 +31,8 @@ import { PDFSinglePageViewer } from "./pdf_single_page_viewer.js"; * @property {HTMLButtonElement} printButton - Button to print the document. * @property {HTMLButtonElement} downloadButton - Button to download the * document. - * @property {HTMLLinkElement} viewBookmarkButton - Button to obtain a bookmark - * link to the current location in the document. + * @property {HTMLAnchorElement} viewBookmarkButton - Button to obtain a + * bookmark link to the current location in the document. * @property {HTMLButtonElement} firstPageButton - Button to go to the first * page in the document. * @property {HTMLButtonElement} lastPageButton - Button to go to the last page diff --git a/web/toolbar.js b/web/toolbar.js index a9995d0a1..48e89dc6b 100644 --- a/web/toolbar.js +++ b/web/toolbar.js @@ -43,8 +43,8 @@ const PAGE_NUMBER_LOADING_INDICATOR = "visiblePageIsLoading"; * @property {HTMLButtonElement} presentationModeButton - Button to switch to * presentation mode. * @property {HTMLButtonElement} download - Button to download the document. - * @property {HTMLAElement} viewBookmark - Element to link current url of - * the page view. + * @property {HTMLAnchorElement} viewBookmark - Button to obtain a bookmark link + * to the current location in the document. */ class Toolbar {