diff --git a/src/display/annotation_layer.js b/src/display/annotation_layer.js index 6997a51df..f2260fae6 100644 --- a/src/display/annotation_layer.js +++ b/src/display/annotation_layer.js @@ -300,6 +300,7 @@ class LinkAnnotationElement extends AnnotationElement { target: (data.newWindow ? LinkTarget.BLANK : linkService.externalLinkTarget), rel: linkService.externalLinkRel, + enabled: linkService.externalLinkEnabled, }); if (!data.url) { diff --git a/src/display/display_utils.js b/src/display/display_utils.js index d4def30e8..d9b0159e5 100644 --- a/src/display/display_utils.js +++ b/src/display/display_utils.js @@ -344,6 +344,8 @@ const LinkTargetStringMap = [ * The default value is `LinkTarget.NONE`. * @property {string} rel - (optional) The link relationship. * The default value is `DEFAULT_LINK_REL`. + * @property {boolean} enabled - (optional) Whether the link should be enabled. + * The default value is true. */ /** @@ -351,8 +353,17 @@ const LinkTargetStringMap = [ * @param {HTMLLinkElement} link - The link element. * @param {ExternalLinkParameters} params */ -function addLinkAttributes(link, { url, target, rel, } = {}) { - link.href = link.title = (url ? removeNullCharacters(url) : ''); +function addLinkAttributes(link, { url, target, rel, enabled = true, } = {}) { + const urlNullRemoved = (url ? removeNullCharacters(url) : ''); + if (enabled) { + link.href = link.title = urlNullRemoved; + } else { + link.href = ''; + link.title = `Disabled: ${urlNullRemoved}`; + link.onclick = () => { + return false; + }; + } if (url) { const LinkTargetValues = Object.values(LinkTarget); diff --git a/web/app.js b/web/app.js index 832dc1be4..45c9db49d 100644 --- a/web/app.js +++ b/web/app.js @@ -668,6 +668,7 @@ let PDFViewerApplication = { this.pdfLoadingTask = loadingTask; loadingTask.onPassword = (updateCallback, reason) => { + this.pdfLinkService.externalLinkEnabled = false; this.passwordPrompt.setUpdateCallback(updateCallback, reason); this.passwordPrompt.open(); }; diff --git a/web/interfaces.js b/web/interfaces.js index f644f113e..bb22e0bed 100644 --- a/web/interfaces.js +++ b/web/interfaces.js @@ -42,6 +42,16 @@ class IPDFLinkService { */ set rotation(value) {} + /** + * @returns {boolean} + */ + get externalLinkEnabled() {} + + /** + * @param {boolean} value + */ + set externalLinkEnabled(value) {} + /** * @param dest - The PDF destination object. */ diff --git a/web/pdf_link_service.js b/web/pdf_link_service.js index f7896f99f..c19257e15 100644 --- a/web/pdf_link_service.js +++ b/web/pdf_link_service.js @@ -35,10 +35,11 @@ class PDFLinkService { * @param {PDFLinkServiceOptions} options */ constructor({ eventBus, externalLinkTarget = null, - externalLinkRel = null, } = {}) { + externalLinkRel = null, externalLinkEnabled = true, } = {}) { this.eventBus = eventBus || getGlobalEventBus(); this.externalLinkTarget = externalLinkTarget; this.externalLinkRel = externalLinkRel; + this.externalLinkEnabled = externalLinkEnabled; this.baseUrl = null; this.pdfDocument = null; @@ -423,6 +424,7 @@ class SimpleLinkService { constructor() { this.externalLinkTarget = null; this.externalLinkRel = null; + this.externalLinkEnabled = true; } /** diff --git a/web/pdf_outline_viewer.js b/web/pdf_outline_viewer.js index eef7a832e..aadb7c592 100644 --- a/web/pdf_outline_viewer.js +++ b/web/pdf_outline_viewer.js @@ -76,6 +76,7 @@ class PDFOutlineViewer { url, target: (newWindow ? LinkTarget.BLANK : linkService.externalLinkTarget), rel: linkService.externalLinkRel, + enabled: linkService.externalLinkEnabled, }); return; }