feat: add keyboard shortcut to scroll to last message on double Escape+G press
Implement a keydown listener that tracks Escape key state and counts subsequent 'G' presses. When Escape is held and 'G' is pressed twice within 300ms, the view scrolls to the last message in the messages container. Also handle Shift+G to trigger layout update via existing updateLayout function.
This commit is contained in:
@@ -238,6 +238,39 @@
|
||||
app.rpc.markAsRead(channelUid);
|
||||
});
|
||||
|
||||
let escPressed = false;
|
||||
let gPressCount = 0;
|
||||
let keyTimeout;
|
||||
document.addEventListener('keydown', function(event) {
|
||||
|
||||
if (event.key === 'Escape') {
|
||||
escPressed = true;
|
||||
gPressCount = 0;
|
||||
clearTimeout(timeout);
|
||||
keyTimeout = setTimeout(() => {
|
||||
escPressed = false;
|
||||
}, 300);
|
||||
}
|
||||
|
||||
if (event.key === 'G' && escPressed) {
|
||||
gPressCount++;
|
||||
|
||||
clearTimeout(keyTimeout);
|
||||
keyTimeout = setTimeout(() => {
|
||||
gPressCount = 0;
|
||||
}, 300);
|
||||
if (gPressCount === 2) {
|
||||
gPressCount = 0;
|
||||
escPressed = false;
|
||||
|
||||
messagesContainer.querySelector(".message:last-child").scrollIntoView({ block: "end", inline: "nearest" });
|
||||
}
|
||||
}
|
||||
if (event.shiftKey && event.key === 'G') {
|
||||
updateLayout(true);
|
||||
}
|
||||
});
|
||||
|
||||
initInputField(getInputField());
|
||||
updateLayout(true);
|
||||
</script>
|
||||
|
||||
Reference in New Issue
Block a user