Don't focus the PasswordPrompt input-field on load, when the viewer is embedded in e.g. an iframe (issue 12951)

Given that we don't focus the viewer *itself* (among other things) when the viewer is embedded, I suppose that it makes some sense to not focus the `PasswordPrompt` input-field either on load.
In order to improve the overall UX here, if an *incorrect* password was provided we'll still focus the input-field.

Fixes 12951 (assuming we care to do so, of course).
This commit is contained in:
Jonas Jenwald 2021-02-03 15:48:40 +01:00
parent 86a4ba55c5
commit d1586bbbe7
2 changed files with 17 additions and 3 deletions

View File

@ -558,7 +558,8 @@ const PDFViewerApplication = {
this.passwordPrompt = new PasswordPrompt( this.passwordPrompt = new PasswordPrompt(
appConfig.passwordOverlay, appConfig.passwordOverlay,
this.overlayManager, this.overlayManager,
this.l10n this.l10n,
this.isViewerEmbedded
); );
this.pdfOutlineViewer = new PDFOutlineViewer({ this.pdfOutlineViewer = new PDFOutlineViewer({

View File

@ -34,8 +34,15 @@ class PasswordPrompt {
* @param {PasswordPromptOptions} options * @param {PasswordPromptOptions} options
* @param {OverlayManager} overlayManager - Manager for the viewer overlays. * @param {OverlayManager} overlayManager - Manager for the viewer overlays.
* @param {IL10n} l10n - Localization service. * @param {IL10n} l10n - Localization service.
* @param {boolean} [isViewerEmbedded] - If the viewer is embedded, in e.g.
* an <iframe> or an <object>. The default value is `false`.
*/ */
constructor(options, overlayManager, l10n = NullL10n) { constructor(
options,
overlayManager,
l10n = NullL10n,
isViewerEmbedded = false
) {
this.overlayName = options.overlayName; this.overlayName = options.overlayName;
this.container = options.container; this.container = options.container;
this.label = options.label; this.label = options.label;
@ -44,6 +51,7 @@ class PasswordPrompt {
this.cancelButton = options.cancelButton; this.cancelButton = options.cancelButton;
this.overlayManager = overlayManager; this.overlayManager = overlayManager;
this.l10n = l10n; this.l10n = l10n;
this._isViewerEmbedded = isViewerEmbedded;
this.updateCallback = null; this.updateCallback = null;
this.reason = null; this.reason = null;
@ -67,7 +75,12 @@ class PasswordPrompt {
open() { open() {
this.overlayManager.open(this.overlayName).then(() => { this.overlayManager.open(this.overlayName).then(() => {
this.input.focus(); if (
!this._isViewerEmbedded ||
this.reason === PasswordResponses.INCORRECT_PASSWORD
) {
this.input.focus();
}
let promptString; let promptString;
if (this.reason === PasswordResponses.INCORRECT_PASSWORD) { if (this.reason === PasswordResponses.INCORRECT_PASSWORD) {