Ignore some *scripting* events which don't make sense in PresentationMode

A number of the currently supported *scripting* events only make sense in the "normal" viewer mode, and not when PresentationMode is active. For example:
 - Changing the zoom-level will outright break rendering in PresentationMode, since it relies on "page-fit" being used.
 - Focusing a particular (AcroForm) element won't work, and could break keyboard navigation, since forms should not be editable in PresentationMode (see issue 12232).
This commit is contained in:
Jonas Jenwald 2021-03-17 16:07:10 +01:00
parent 57e7557235
commit 1fa5ce7f48

View File

@ -261,6 +261,11 @@ class PDFScriptingManager {
* @private
*/
async _updateFromSandbox(detail) {
// Ignore some events, see below, that don't make sense in PresentationMode.
const isInPresentationMode =
this._pdfViewer.isInPresentationMode ||
this._pdfViewer.isChangingPresentationMode;
const { id, command, value } = detail;
if (!id) {
switch (command) {
@ -284,12 +289,21 @@ class PDFScriptingManager {
console.log(value);
break;
case "zoom":
if (isInPresentationMode) {
return;
}
this._pdfViewer.currentScaleValue = value;
break;
}
return;
}
if (isInPresentationMode) {
if (detail.focus) {
return;
}
}
const element = document.getElementById(id);
if (element) {
element.dispatchEvent(new CustomEvent("updatefromsandbox", { detail }));
@ -382,11 +396,9 @@ class PDFScriptingManager {
* @private
*/
async _getDocProperties() {
// The default viewer use-case.
if (this._docPropertiesLookup) {
return this._docPropertiesLookup(this._pdfDocument);
}
// Fallback, to support the viewer components use-case.
if (typeof PDFJSDev !== "undefined" && PDFJSDev.test("COMPONENTS")) {
const { docPropertiesLookup } = require("./generic_scripting.js");