From 935aed5fb34b5dd03672f8fe27eafd2facb681b8 Mon Sep 17 00:00:00 2001 From: sbelondr Date: Wed, 12 Feb 2025 15:58:05 +0100 Subject: [PATCH] #7925: added cursor position management during a search with the carvet mode --- web/app_options.js | 2 +- web/pdf_find_bar.js | 35 +++++++++++++++++++++++++++++++++-- 2 files changed, 34 insertions(+), 3 deletions(-) diff --git a/web/app_options.js b/web/app_options.js index a81492d5f..7a463c87c 100644 --- a/web/app_options.js +++ b/web/app_options.js @@ -103,7 +103,7 @@ const defaultOptions = { }, supportsCaretBrowsingMode: { /** @type {boolean} */ - value: false, + value: true, kind: OptionKind.BROWSER, }, supportsDocumentFonts: { diff --git a/web/pdf_find_bar.js b/web/pdf_find_bar.js index d76d4fe3d..f36cc51d6 100644 --- a/web/pdf_find_bar.js +++ b/web/pdf_find_bar.js @@ -182,16 +182,47 @@ class PDFFindBar { this.findField.focus(); } - close() { + async close() { if (!this.opened) { return; } + + const ele = document.querySelector(".highlight"); + if (ele) { + ele.parentElement.setAttribute("id", "find-element"); + } + const idxFindElement = ele + ? ele.parentNode.innerHTML.indexOf(ele.outerHTML) + : null; + this.#resizeObserver.disconnect(); this.opened = false; toggleExpandedBtn(this.toggleButton, false, this.bar); - this.eventBus.dispatch("findbarclose", { source: this }); + await this.eventBus.dispatch("findbarclose", { source: this }); + + // apply the cursor position for the caret mode + if (ele) { + const range = document.createRange(); + const selection = document.getSelection(); + + const findElement = document.getElementById("find-element"); + const walker = document.createTreeWalker( + findElement, + NodeFilter.SHOW_TEXT + ); + const findElementChild = walker.firstChild(); + + if (findElementChild) { + range.setStart(findElementChild, idxFindElement); + range.setEnd(findElementChild, idxFindElement); + range.collapse(true); + selection.removeAllRanges(); + selection.addRange(range); + findElement.removeAttribute("id"); + } + } } toggle() {