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'
|
import * as s from '../../Player.module.scss'
|
||||||
|
|
||||||
|
const eol = { style: 'endOfLine' }
|
||||||
|
const scrollTarget = { style: 'scrollTarget' }
|
||||||
|
|
||||||
const isFakeStatus = (w) =>
|
const isFakeStatus = (w) =>
|
||||||
w.height < 5
|
w.height < 5
|
||||||
|
|
||||||
|
|
@ -22,15 +25,13 @@ const parseInbox = (inbox, currentWindow) => {
|
||||||
if (!currentInbox) {
|
if (!currentInbox) {
|
||||||
return {
|
return {
|
||||||
clear: false,
|
clear: false,
|
||||||
incoming: [],
|
incoming: [scrollTarget],
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const { text: inboxMessagesRaw } =
|
const { text: inboxMessagesRaw } =
|
||||||
currentInbox
|
currentInbox
|
||||||
|
|
||||||
const eol = { style: 'endOfLine' }
|
|
||||||
|
|
||||||
const incoming =
|
const incoming =
|
||||||
inboxMessagesRaw
|
inboxMessagesRaw
|
||||||
/* Normalize. */
|
/* Normalize. */
|
||||||
|
|
@ -40,7 +41,7 @@ const parseInbox = (inbox, currentWindow) => {
|
||||||
: [eol])
|
: [eol])
|
||||||
/* Flatten. */
|
/* Flatten. */
|
||||||
.reduce((acc, x) =>
|
.reduce((acc, x) =>
|
||||||
acc.concat(x), [])
|
acc.concat(x), [scrollTarget])
|
||||||
|
|
||||||
return {
|
return {
|
||||||
incoming,
|
incoming,
|
||||||
|
|
@ -63,13 +64,13 @@ export default function TextBuffer ({ inbox, currentWindow }) {
|
||||||
: messages.concat(incoming))
|
: messages.concat(incoming))
|
||||||
|
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
const inputs =
|
const scrollTargets =
|
||||||
textBufferEl.current.querySelectorAll('.message.input')
|
textBufferEl.current.querySelectorAll(`.${scrollTarget.style}`)
|
||||||
const lastInput =
|
const freshScrollTarget =
|
||||||
inputs[inputs.length - 1]
|
scrollTargets[scrollTargets.length - 1]
|
||||||
|
|
||||||
lastInput
|
freshScrollTarget
|
||||||
? lastInput.scrollIntoView()
|
? freshScrollTarget.scrollIntoView()
|
||||||
: textBufferEl.current.scrollTo({
|
: textBufferEl.current.scrollTo({
|
||||||
top: textBufferEl.current.scrollHeight,
|
top: textBufferEl.current.scrollHeight,
|
||||||
behavior: 'smooth',
|
behavior: 'smooth',
|
||||||
|
|
|
||||||
|
|
@ -15,6 +15,8 @@ export default function TextMessage ({ style, text }) {
|
||||||
(<strong className={[s.message, s.subheader].join(' ')}>{text}</strong>),
|
(<strong className={[s.message, s.subheader].join(' ')}>{text}</strong>),
|
||||||
emphasized:
|
emphasized:
|
||||||
(<em className={[s.message, s.emphasized].join(' ')}>{text}</em>),
|
(<em className={[s.message, s.emphasized].join(' ')}>{text}</em>),
|
||||||
|
scrollTarget:
|
||||||
|
(<div className={[s.scrollTarget, style].join(' ')}></div>),
|
||||||
endOfLine:
|
endOfLine:
|
||||||
(<br />),
|
(<br />),
|
||||||
})[style] || defaultContent
|
})[style] || defaultContent
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,5 @@
|
||||||
.message {
|
.message {
|
||||||
&.input {
|
&.input {
|
||||||
scroll-margin-top: var(--inner-padding);
|
|
||||||
color: var(--input-color);
|
color: var(--input-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -9,3 +8,7 @@
|
||||||
color: var(--accent-color);
|
color: var(--accent-color);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.scrollTarget {
|
||||||
|
scroll-margin-block-start: var(--inner-padding);
|
||||||
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue