mirror of
https://github.com/oobabooga/text-generation-webui.git
synced 2025-12-06 07:12:10 +01:00
Keep the last message visible when the input height changes
This commit is contained in:
parent
c3faecfd27
commit
9a58964834
39
js/main.js
39
js/main.js
|
|
@ -1046,3 +1046,42 @@ new MutationObserver(() => addMiniDeletes()).observe(
|
||||||
{childList: true, subtree: true}
|
{childList: true, subtree: true}
|
||||||
);
|
);
|
||||||
addMiniDeletes();
|
addMiniDeletes();
|
||||||
|
|
||||||
|
//------------------------------------------------
|
||||||
|
// Maintain distance from bottom when input height changes
|
||||||
|
//------------------------------------------------
|
||||||
|
let wasAtBottom = false;
|
||||||
|
let preservedDistance = 0;
|
||||||
|
|
||||||
|
function checkIfAtBottom() {
|
||||||
|
const distanceFromBottom = targetElement.scrollHeight - targetElement.scrollTop - targetElement.clientHeight;
|
||||||
|
wasAtBottom = distanceFromBottom <= 1; // Allow for rounding errors
|
||||||
|
}
|
||||||
|
|
||||||
|
function preserveScrollPosition() {
|
||||||
|
preservedDistance = targetElement.scrollHeight - targetElement.scrollTop - targetElement.clientHeight;
|
||||||
|
}
|
||||||
|
|
||||||
|
function restoreScrollPosition() {
|
||||||
|
if (wasAtBottom) {
|
||||||
|
// Force to bottom
|
||||||
|
targetElement.scrollTop = targetElement.scrollHeight - targetElement.clientHeight;
|
||||||
|
} else {
|
||||||
|
// Restore original distance
|
||||||
|
targetElement.scrollTop = targetElement.scrollHeight - targetElement.clientHeight - preservedDistance;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check position before input
|
||||||
|
chatInput.addEventListener("beforeinput", () => {
|
||||||
|
checkIfAtBottom();
|
||||||
|
preserveScrollPosition();
|
||||||
|
});
|
||||||
|
|
||||||
|
// Restore after input
|
||||||
|
chatInput.addEventListener("input", () => {
|
||||||
|
requestAnimationFrame(() => restoreScrollPosition());
|
||||||
|
});
|
||||||
|
|
||||||
|
// Update wasAtBottom when user scrolls
|
||||||
|
targetElement.addEventListener("scroll", checkIfAtBottom);
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue