diff --git a/app/assets/javascripts/discourse/app/lib/composer/composer-position.js b/app/assets/javascripts/discourse/app/lib/composer/composer-position.js index 279eca9c148..e8b5c3ed65d 100644 --- a/app/assets/javascripts/discourse/app/lib/composer/composer-position.js +++ b/app/assets/javascripts/discourse/app/lib/composer/composer-position.js @@ -49,17 +49,17 @@ function correctScrollPosition() { // This pushes the fixed element offscreen // Here we detect when the composer's top position is above the window's // current scroll offset and correct it - later(() => { - const el = document.querySelector("#reply-control"); - const rect = el.getBoundingClientRect(); - - if (rect.top < -1) { - const scrollAmount = window.scrollY + rect.top; - - window.scrollTo({ - top: scrollAmount, - behavior: "instant", - }); - } - }, 150); + applyBehaviorTransformer("composer-position:correct-scroll-position", () => { + later(() => { + const el = document.querySelector("#reply-control"); + const rect = el.getBoundingClientRect(); + if (rect.top < -1) { + const scrollAmount = window.scrollY + rect.top; + window.scrollTo({ + top: scrollAmount, + behavior: "instant", + }); + } + }, 150); + }); } diff --git a/app/assets/javascripts/discourse/app/lib/transformer/registry.js b/app/assets/javascripts/discourse/app/lib/transformer/registry.js index 79cdf596f4e..4a9e4f3ca9b 100644 --- a/app/assets/javascripts/discourse/app/lib/transformer/registry.js +++ b/app/assets/javascripts/discourse/app/lib/transformer/registry.js @@ -1,5 +1,6 @@ export const BEHAVIOR_TRANSFORMERS = Object.freeze([ // use only lowercase names + "composer-position:correct-scroll-position", "composer-position:editor-touch-move", "discovery-topic-list-load-more", "full-page-search-load-more",