mirror of
https://github.com/He4eT/elseifplayer.git
synced 2026-05-04 17:07:22 +00:00
TextBuffer: add scroll targets
This commit is contained in:
parent
6cba8066c1
commit
3ef278fa5f
3 changed files with 17 additions and 11 deletions
|
|
@ -4,6 +4,9 @@ import TextMessage from '../TextMessage/TextMessage'
|
|||
|
||||
import * as s from '../../Player.module.scss'
|
||||
|
||||
const eol = { style: 'endOfLine' }
|
||||
const scrollTarget = { style: 'scrollTarget' }
|
||||
|
||||
const isFakeStatus = (w) =>
|
||||
w.height < 5
|
||||
|
||||
|
|
@ -22,15 +25,13 @@ const parseInbox = (inbox, currentWindow) => {
|
|||
if (!currentInbox) {
|
||||
return {
|
||||
clear: false,
|
||||
incoming: [],
|
||||
incoming: [scrollTarget],
|
||||
}
|
||||
}
|
||||
|
||||
const { text: inboxMessagesRaw } =
|
||||
currentInbox
|
||||
|
||||
const eol = { style: 'endOfLine' }
|
||||
|
||||
const incoming =
|
||||
inboxMessagesRaw
|
||||
/* Normalize. */
|
||||
|
|
@ -40,7 +41,7 @@ const parseInbox = (inbox, currentWindow) => {
|
|||
: [eol])
|
||||
/* Flatten. */
|
||||
.reduce((acc, x) =>
|
||||
acc.concat(x), [])
|
||||
acc.concat(x), [scrollTarget])
|
||||
|
||||
return {
|
||||
incoming,
|
||||
|
|
@ -63,13 +64,13 @@ export default function TextBuffer ({ inbox, currentWindow }) {
|
|||
: messages.concat(incoming))
|
||||
|
||||
setTimeout(() => {
|
||||
const inputs =
|
||||
textBufferEl.current.querySelectorAll('.message.input')
|
||||
const lastInput =
|
||||
inputs[inputs.length - 1]
|
||||
const scrollTargets =
|
||||
textBufferEl.current.querySelectorAll(`.${scrollTarget.style}`)
|
||||
const freshScrollTarget =
|
||||
scrollTargets[scrollTargets.length - 1]
|
||||
|
||||
lastInput
|
||||
? lastInput.scrollIntoView()
|
||||
freshScrollTarget
|
||||
? freshScrollTarget.scrollIntoView()
|
||||
: textBufferEl.current.scrollTo({
|
||||
top: textBufferEl.current.scrollHeight,
|
||||
behavior: 'smooth',
|
||||
|
|
|
|||
|
|
@ -15,6 +15,8 @@ export default function TextMessage ({ style, text }) {
|
|||
(<strong className={[s.message, s.subheader].join(' ')}>{text}</strong>),
|
||||
emphasized:
|
||||
(<em className={[s.message, s.emphasized].join(' ')}>{text}</em>),
|
||||
scrollTarget:
|
||||
(<div className={[s.scrollTarget, style].join(' ')}></div>),
|
||||
endOfLine:
|
||||
(<br />),
|
||||
})[style] || defaultContent
|
||||
|
|
|
|||
|
|
@ -1,6 +1,5 @@
|
|||
.message {
|
||||
&.input {
|
||||
scroll-margin-top: var(--inner-padding);
|
||||
color: var(--input-color);
|
||||
}
|
||||
|
||||
|
|
@ -9,3 +8,7 @@
|
|||
color: var(--accent-color);
|
||||
}
|
||||
}
|
||||
|
||||
.scrollTarget {
|
||||
scroll-margin-block-start: var(--inner-padding);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue