From a89c199e3006b3807f2f7fa75e134c28b7364f44 Mon Sep 17 00:00:00 2001 From: Mathieu Dubois-Briand Date: Mon, 24 Feb 2025 10:16:46 +0100 Subject: [PATCH] releaseselector: Fix page scroll on selector use When using selectors, all fields modified by the selector will be successively focused, inducing a potential page scroll. Save current scroll before applying the release selector and set back this scroll once the selector has been applied, setting back the page at the same position. Signed-off-by: Mathieu Dubois-Briand Signed-off-by: Richard Purdie --- yocto_console_view/src/releaseselectorfield.ts | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/yocto_console_view/src/releaseselectorfield.ts b/yocto_console_view/src/releaseselectorfield.ts index 93ce463..db707ef 100644 --- a/yocto_console_view/src/releaseselectorfield.ts +++ b/yocto_console_view/src/releaseselectorfield.ts @@ -117,6 +117,13 @@ buildbotSetupPlugin((reg) => { * Apply values from the selected field selector */ async function applySelector(selector, selectorName) { + const modalBody = document.getElementsByClassName("modal-body")[0]; + let scrolltop = 0, scrollleft = 0; + if (modalBody) { + scrolltop = modalBody.scrollTop; + scrollleft = modalBody.scrollLeft; + } + for (let [field, value] of Object.entries(selector)) { const input = inputRefs.get('force-field-' + field); if (input && input.value != value) { @@ -132,6 +139,16 @@ buildbotSetupPlugin((reg) => { const releaseSelector = inputRefs.get('force-field-branchselector'); releaseSelector.parentNode.previousSibling.textContent = selectorName; releaseSelector.focus(); + + /* Scroll back to the initial position. */ + if (modalBody) { + modalBody.scroll(scrollleft, scrolltop) + + setTimeout(() => { + modalBody.scroll(scrollleft, scrolltop); + }, 1); + + } } /*