f05f832bff
Use more specific css rules for the emoji dimensions in the chat list status preview. Use more round em value for chat list item height. Add global html overflow and height for smoother chat navigation in the desktop Safari. Use offsetHeight instad of a computed style when setting the window height on resize. Remove margin-bottom from the last message to avoid occasional layout shift in the desktop Safari Use break-word to prevent chat message text overflow Resize and scroll the textarea when inserting a new line on ctrl+enter Remove fade transition on route change Ensure proper border radius at the bottom of the chat, remove unused border-radius Prevent the chat header "jumping" on the avatar load.
27 lines
1 KiB
JavaScript
27 lines
1 KiB
JavaScript
// Captures a scroll position
|
|
export const getScrollPosition = (el) => {
|
|
return {
|
|
scrollTop: el.scrollTop,
|
|
scrollHeight: el.scrollHeight,
|
|
offsetHeight: el.offsetHeight
|
|
}
|
|
}
|
|
|
|
// A helper function that is used to keep the scroll position fixed as the new elements are added to the top
|
|
// Takes two scroll positions, before and after the update.
|
|
export const getNewTopPosition = (previousPosition, newPosition) => {
|
|
return previousPosition.scrollTop + (newPosition.scrollHeight - previousPosition.scrollHeight)
|
|
}
|
|
|
|
export const isBottomedOut = (el, offset = 0) => {
|
|
if (!el) { return }
|
|
const scrollHeight = el.scrollTop + offset
|
|
const totalHeight = el.scrollHeight - el.offsetHeight
|
|
return totalHeight <= scrollHeight
|
|
}
|
|
|
|
// Height of the scrollable container. The dynamic height is needed to ensure the mobile browser panel doesn't overlap or hide the posting form.
|
|
export const scrollableContainerHeight = (inner, header, footer) => {
|
|
return inner.offsetHeight - header.clientHeight - footer.clientHeight
|
|
}
|