Skip to content

Commit

Permalink
Merge pull request #11953 from emalysz/11838-fallback-after-click
Browse files Browse the repository at this point in the history
For #11838: trigger fallback bar after user clicks in pdf
  • Loading branch information
timvandermeij authored Jun 5, 2020
2 parents 7aa1b2d + 6e9d158 commit 891c706
Showing 1 changed file with 38 additions and 2 deletions.
40 changes: 38 additions & 2 deletions web/app.js
Original file line number Diff line number Diff line change
Expand Up @@ -189,6 +189,8 @@ const PDFViewerApplication = {
externalServices: DefaultExternalServices,
_boundEvents: {},
contentDispositionFilename: null,
_hasInteracted: false,
_delayedFallbackFeatureIds: [],

// Called once when the document is loaded.
async initialize(appConfig) {
Expand Down Expand Up @@ -867,11 +869,20 @@ const PDFViewerApplication = {
typeof PDFJSDev === "undefined" ||
PDFJSDev.test("MOZCENTRAL || GENERIC")
) {
// For PDFs that contain script and form errors, we should only trigger
// the fallback once the user has interacted with the page.
if (this._delayedFallbackFeatureIds.length >= 1 && this._hasInteracted) {
featureId = this._delayedFallbackFeatureIds[0];
// Reset to prevent all click events from showing fallback bar.
this._delayedFallbackFeatureIds = [];
}

// Only trigger the fallback once so we don't spam the user with messages
// for one PDF.
if (this.fellback) {
return;
}

this.fellback = true;
this.externalServices.fallback(
{
Expand Down Expand Up @@ -1235,7 +1246,7 @@ const PDFViewerApplication = {
return false;
}
console.warn("Warning: JavaScript is not supported");
this.fallback(UNSUPPORTED_FEATURES.javaScript);
this._delayedFallbackFeatureIds.push(UNSUPPORTED_FEATURES.javaScript);
return true;
});

Expand Down Expand Up @@ -1317,7 +1328,7 @@ const PDFViewerApplication = {

if (info.IsAcroFormPresent) {
console.warn("Warning: AcroForm/XFA is not supported");
this.fallback(UNSUPPORTED_FEATURES.forms);
this._delayedFallbackFeatureIds.push(UNSUPPORTED_FEATURES.forms);
}

if (
Expand Down Expand Up @@ -1715,6 +1726,7 @@ const PDFViewerApplication = {
window.addEventListener("wheel", webViewerWheel, { passive: false });
window.addEventListener("click", webViewerClick);
window.addEventListener("keydown", webViewerKeyDown);
window.addEventListener("keyup", webViewerKeyUp);
window.addEventListener("resize", _boundEvents.windowResize);
window.addEventListener("hashchange", _boundEvents.windowHashChange);
window.addEventListener("beforeprint", _boundEvents.windowBeforePrint);
Expand Down Expand Up @@ -1776,6 +1788,7 @@ const PDFViewerApplication = {
window.removeEventListener("wheel", webViewerWheel, { passive: false });
window.removeEventListener("click", webViewerClick);
window.removeEventListener("keydown", webViewerKeyDown);
window.removeEventListener("keyup", webViewerKeyUp);
window.removeEventListener("resize", _boundEvents.windowResize);
window.removeEventListener("hashchange", _boundEvents.windowHashChange);
window.removeEventListener("beforeprint", _boundEvents.windowBeforePrint);
Expand Down Expand Up @@ -2473,6 +2486,17 @@ function webViewerWheel(evt) {
}

function webViewerClick(evt) {
PDFViewerApplication._hasInteracted = true;

// Avoid triggering the fallback bar when the user clicks on the
// toolbar or sidebar.
if (
PDFViewerApplication._delayedFallbackFeatureIds.length >= 1 &&
PDFViewerApplication.pdfViewer.containsElement(evt.target)
) {
PDFViewerApplication.fallback();
}

if (!PDFViewerApplication.secondaryToolbar.isOpen) {
return;
}
Expand All @@ -2486,6 +2510,18 @@ function webViewerClick(evt) {
}
}

function webViewerKeyUp(evt) {
if (evt.keyCode === 9) {
// The user is tabbing into the pdf. Display the error message
// if it has not already been displayed.
PDFViewerApplication._hasInteracted = true;

if (PDFViewerApplication._delayedFallbackFeatureIds.length >= 1) {
PDFViewerApplication.fallback();
}
}
}

function webViewerKeyDown(evt) {
if (PDFViewerApplication.overlayManager.active) {
return;
Expand Down

0 comments on commit 891c706

Please sign in to comment.