Merge pull request 'Fix some message rendering' (#68) from BordedDev/snek:bugfix/message-list-rendering into main
Reviewed-on: #68 Reviewed-by: retoor <retoor@noreply@molodetz.nl>
This commit is contained in:
commit
ef8d3068a8
@ -57,17 +57,6 @@ export class ReplyEvent extends Event {
|
||||
class MessageElement extends HTMLElement {
|
||||
// static observedAttributes = ['data-uid', 'data-color', 'data-channel_uid', 'data-user_nick', 'data-created_at', 'data-user_uid'];
|
||||
|
||||
isVisible() {
|
||||
if (!this) return false;
|
||||
const rect = this.getBoundingClientRect();
|
||||
return (
|
||||
rect.top >= 0 &&
|
||||
rect.left >= 0 &&
|
||||
rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&
|
||||
rect.right <= (window.innerWidth || document.documentElement.clientWidth)
|
||||
);
|
||||
}
|
||||
|
||||
updateUI() {
|
||||
if (this._originalChildren === undefined) {
|
||||
const { color, user_nick, created_at, user_uid} = this.dataset;
|
||||
@ -104,8 +93,8 @@ class MessageElement extends HTMLElement {
|
||||
})
|
||||
}
|
||||
|
||||
if (!this.siblingGenerated && this.nextElementSibling) {
|
||||
this.siblingGenerated = true;
|
||||
if ((!this.siblingGenerated || this.siblingGenerated !== this.nextElementSibling) && this.nextElementSibling) {
|
||||
this.siblingGenerated = this.nextElementSibling;
|
||||
if (this.nextElementSibling?.dataset?.user_uid !== this.dataset.user_uid) {
|
||||
this.classList.add('switch-user');
|
||||
} else {
|
||||
@ -177,6 +166,10 @@ class MessageList extends HTMLElement {
|
||||
threshold: 0,
|
||||
})
|
||||
|
||||
this.endOfMessages = document.createElement('div');
|
||||
this.endOfMessages.classList.add('message-list-bottom');
|
||||
this.prepend(this.endOfMessages);
|
||||
|
||||
for(const c of this.children) {
|
||||
this._observer.observe(c);
|
||||
if (c instanceof MessageElement) {
|
||||
@ -184,10 +177,6 @@ class MessageList extends HTMLElement {
|
||||
}
|
||||
}
|
||||
|
||||
this.endOfMessages = document.createElement('div');
|
||||
this.endOfMessages.classList.add('message-list-bottom');
|
||||
this.prepend(this.endOfMessages);
|
||||
|
||||
this.scrollToBottom(true);
|
||||
}
|
||||
|
||||
@ -243,13 +232,13 @@ class MessageList extends HTMLElement {
|
||||
);
|
||||
}
|
||||
isScrolledToBottom() {
|
||||
return this.isElementVisible(this.endOfMessages);
|
||||
return this.visibleSet.has(this.endOfMessages)
|
||||
}
|
||||
scrollToBottom(force = false, behavior= 'instant') {
|
||||
if (force || !this.isScrolledToBottom()) {
|
||||
this.firstElementChild.scrollIntoView({ behavior, block: 'end' });
|
||||
this.endOfMessages.scrollIntoView({ behavior, block: 'end' });
|
||||
setTimeout(() => {
|
||||
this.firstElementChild.scrollIntoView({ behavior, block: 'end' });
|
||||
this.endOfMessages.scrollIntoView({ behavior, block: 'end' });
|
||||
}, 200);
|
||||
}
|
||||
}
|
||||
@ -302,7 +291,7 @@ class MessageList extends HTMLElement {
|
||||
}
|
||||
|
||||
const scrolledToBottom = this.isScrolledToBottom();
|
||||
this.prepend(message);
|
||||
this.endOfMessages.after(message);
|
||||
if (scrolledToBottom) this.scrollToBottom(true);
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user