From 6b265b3a15633e2e0f168d7718ee892100ca9f59 Mon Sep 17 00:00:00 2001 From: Jonas Jenwald Date: Wed, 25 Oct 2023 17:10:58 +0200 Subject: [PATCH] Pause translation when appending the outline/attachment/layer trees to the sidebar Also, pause translation when collapsing/expanding subtrees. --- web/app.js | 3 +++ web/base_tree_viewer.js | 8 ++++++++ web/interfaces.js | 10 ++++++++++ web/l10n.js | 10 ++++++++++ web/l10n_utils.js | 8 ++++++++ web/pdf_layer_viewer.js | 4 ++-- 6 files changed, 41 insertions(+), 2 deletions(-) diff --git a/web/app.js b/web/app.js index f9f95c208..7c7d4cc34 100644 --- a/web/app.js +++ b/web/app.js @@ -623,6 +623,7 @@ const PDFViewerApplication = { this.pdfOutlineViewer = new PDFOutlineViewer({ container: appConfig.sidebar.outlineView, eventBus, + l10n, linkService: pdfLinkService, downloadManager, }); @@ -632,6 +633,7 @@ const PDFViewerApplication = { this.pdfAttachmentViewer = new PDFAttachmentViewer({ container: appConfig.sidebar.attachmentsView, eventBus, + l10n, downloadManager, }); } @@ -640,6 +642,7 @@ const PDFViewerApplication = { this.pdfLayerViewer = new PDFLayerViewer({ container: appConfig.sidebar.layersView, eventBus, + l10n, }); } diff --git a/web/base_tree_viewer.js b/web/base_tree_viewer.js index c695e6a4e..8d3f70ffa 100644 --- a/web/base_tree_viewer.js +++ b/web/base_tree_viewer.js @@ -25,6 +25,7 @@ class BaseTreeViewer { } this.container = options.container; this.eventBus = options.eventBus; + this._l10n = options.l10n; this.reset(); } @@ -99,10 +100,14 @@ class BaseTreeViewer { * @private */ _toggleTreeItem(root, show = false) { + // Pause translation when collapsing/expanding the subtree. + this._l10n.pause(); + this._lastToggleIsShow = show; for (const toggler of root.querySelectorAll(".treeItemToggler")) { toggler.classList.toggle("treeItemsHidden", !show); } + this._l10n.resume(); } /** @@ -122,7 +127,10 @@ class BaseTreeViewer { this._lastToggleIsShow = !fragment.querySelector(".treeItemsHidden"); } + // Pause translation when inserting the tree into the DOM. + this._l10n.pause(); this.container.append(fragment); + this._l10n.resume(); this._dispatchEvent(count); } diff --git a/web/interfaces.js b/web/interfaces.js index 748bff3f5..1be741d2e 100644 --- a/web/interfaces.js +++ b/web/interfaces.js @@ -205,6 +205,16 @@ class IL10n { * @returns {Promise} */ async translate(element) {} + + /** + * Pause the localization. + */ + pause() {} + + /** + * Resume the localization. + */ + resume() {} } export { IDownloadManager, IL10n, IPDFLinkService, IRenderableView }; diff --git a/web/l10n.js b/web/l10n.js index f8aa2f27c..ce67f1130 100644 --- a/web/l10n.js +++ b/web/l10n.js @@ -75,6 +75,16 @@ class L10n { } } + /** @inheritdoc */ + pause() { + this.#l10n.pauseObserving(); + } + + /** @inheritdoc */ + resume() { + this.#l10n.resumeObserving(); + } + static #fixupLangCode(langCode) { // Try to support "incompletely" specified language codes (see issue 13689). const PARTIAL_LANG_CODES = { diff --git a/web/l10n_utils.js b/web/l10n_utils.js index 96c9346dd..e9998da97 100644 --- a/web/l10n_utils.js +++ b/web/l10n_utils.js @@ -74,6 +74,14 @@ const NullL10n = { async translate(element) { return ConstL10n.instance.translate(element); }, + + pause() { + ConstL10n.instance.pause(); + }, + + resume() { + ConstL10n.instance.resume(); + }, }; export { NullL10n }; diff --git a/web/pdf_layer_viewer.js b/web/pdf_layer_viewer.js index 6eb701ae8..d139de943 100644 --- a/web/pdf_layer_viewer.js +++ b/web/pdf_layer_viewer.js @@ -87,12 +87,12 @@ class PDFLayerViewer extends BaseTreeViewer { /** * @private */ - _setNestedName(element, { name = null }) { + async _setNestedName(element, { name = null }) { if (typeof name === "string") { element.textContent = this._normalizeTextContent(name); return; } - element.setAttribute("data-l10n-id", "pdfjs-additional-layers"); + element.textContent = await this._l10n.get("pdfjs-additional-layers"); element.style.fontStyle = "italic"; }