Add a way to disable external links.

This commit is contained in:
Brendan Dahl 2019-08-20 14:43:24 -07:00
parent 852fc955bd
commit 98e989116c
6 changed files with 29 additions and 3 deletions

View File

@ -300,6 +300,7 @@ class LinkAnnotationElement extends AnnotationElement {
target: (data.newWindow ? target: (data.newWindow ?
LinkTarget.BLANK : linkService.externalLinkTarget), LinkTarget.BLANK : linkService.externalLinkTarget),
rel: linkService.externalLinkRel, rel: linkService.externalLinkRel,
enabled: linkService.externalLinkEnabled,
}); });
if (!data.url) { if (!data.url) {

View File

@ -344,6 +344,8 @@ const LinkTargetStringMap = [
* The default value is `LinkTarget.NONE`. * The default value is `LinkTarget.NONE`.
* @property {string} rel - (optional) The link relationship. * @property {string} rel - (optional) The link relationship.
* The default value is `DEFAULT_LINK_REL`. * 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 {HTMLLinkElement} link - The link element.
* @param {ExternalLinkParameters} params * @param {ExternalLinkParameters} params
*/ */
function addLinkAttributes(link, { url, target, rel, } = {}) { function addLinkAttributes(link, { url, target, rel, enabled = true, } = {}) {
link.href = link.title = (url ? removeNullCharacters(url) : ''); 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) { if (url) {
const LinkTargetValues = Object.values(LinkTarget); const LinkTargetValues = Object.values(LinkTarget);

View File

@ -668,6 +668,7 @@ let PDFViewerApplication = {
this.pdfLoadingTask = loadingTask; this.pdfLoadingTask = loadingTask;
loadingTask.onPassword = (updateCallback, reason) => { loadingTask.onPassword = (updateCallback, reason) => {
this.pdfLinkService.externalLinkEnabled = false;
this.passwordPrompt.setUpdateCallback(updateCallback, reason); this.passwordPrompt.setUpdateCallback(updateCallback, reason);
this.passwordPrompt.open(); this.passwordPrompt.open();
}; };

View File

@ -42,6 +42,16 @@ class IPDFLinkService {
*/ */
set rotation(value) {} set rotation(value) {}
/**
* @returns {boolean}
*/
get externalLinkEnabled() {}
/**
* @param {boolean} value
*/
set externalLinkEnabled(value) {}
/** /**
* @param dest - The PDF destination object. * @param dest - The PDF destination object.
*/ */

View File

@ -35,10 +35,11 @@ class PDFLinkService {
* @param {PDFLinkServiceOptions} options * @param {PDFLinkServiceOptions} options
*/ */
constructor({ eventBus, externalLinkTarget = null, constructor({ eventBus, externalLinkTarget = null,
externalLinkRel = null, } = {}) { externalLinkRel = null, externalLinkEnabled = true, } = {}) {
this.eventBus = eventBus || getGlobalEventBus(); this.eventBus = eventBus || getGlobalEventBus();
this.externalLinkTarget = externalLinkTarget; this.externalLinkTarget = externalLinkTarget;
this.externalLinkRel = externalLinkRel; this.externalLinkRel = externalLinkRel;
this.externalLinkEnabled = externalLinkEnabled;
this.baseUrl = null; this.baseUrl = null;
this.pdfDocument = null; this.pdfDocument = null;
@ -423,6 +424,7 @@ class SimpleLinkService {
constructor() { constructor() {
this.externalLinkTarget = null; this.externalLinkTarget = null;
this.externalLinkRel = null; this.externalLinkRel = null;
this.externalLinkEnabled = true;
} }
/** /**

View File

@ -76,6 +76,7 @@ class PDFOutlineViewer {
url, url,
target: (newWindow ? LinkTarget.BLANK : linkService.externalLinkTarget), target: (newWindow ? LinkTarget.BLANK : linkService.externalLinkTarget),
rel: linkService.externalLinkRel, rel: linkService.externalLinkRel,
enabled: linkService.externalLinkEnabled,
}); });
return; return;
} }