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}
|
||||
);
|
||||
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