|
|
|
@ -69,25 +69,22 @@ export namespace MessageRender {
@@ -69,25 +69,22 @@ export namespace MessageRender {
|
|
|
|
|
messageDiv: HTMLElement |
|
|
|
|
}) => { |
|
|
|
|
const isFooter = !bubble.classList.contains('sticker') && !bubble.classList.contains('emoji-big'); |
|
|
|
|
const repliesFooter = new RepliesFooterElement(); |
|
|
|
|
|
|
|
|
|
if(isFooter) { |
|
|
|
|
const repliesFooter = new RepliesElement(); |
|
|
|
|
repliesFooter.message = message; |
|
|
|
|
repliesFooter.type = 'footer'; |
|
|
|
|
repliesFooter.type = isFooter ? 'footer' : 'beside'; |
|
|
|
|
bubbleContainer.prepend(repliesFooter); |
|
|
|
|
} |
|
|
|
|
}; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
rootScope.on('replies_updated', (e) => { |
|
|
|
|
const message = e.detail; |
|
|
|
|
(Array.from(document.querySelectorAll(`replies-footer-element[data-post-key="${message.peerId}_${message.mid}"]`)) as RepliesFooterElement[]).forEach(element => { |
|
|
|
|
(Array.from(document.querySelectorAll(`replies-footer-element[data-post-key="${message.peerId}_${message.mid}"]`)) as RepliesElement[]).forEach(element => { |
|
|
|
|
element.message = message; |
|
|
|
|
element.render(); |
|
|
|
|
}); |
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
class RepliesFooterElement extends HTMLElement { |
|
|
|
|
class RepliesElement extends HTMLElement { |
|
|
|
|
public message: Message.message; |
|
|
|
|
public type: 'footer' | 'beside'; |
|
|
|
|
|
|
|
|
@ -95,26 +92,21 @@ class RepliesFooterElement extends HTMLElement {
@@ -95,26 +92,21 @@ class RepliesFooterElement extends HTMLElement {
|
|
|
|
|
|
|
|
|
|
constructor() { |
|
|
|
|
super(); |
|
|
|
|
|
|
|
|
|
this.classList.add('replies-footer'); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
connectedCallback() { |
|
|
|
|
this.render(); |
|
|
|
|
this.dataset.postKey = this.message.peerId + '_' + this.message.mid; |
|
|
|
|
this.classList.add('replies', 'replies-' + this.type); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public render() { |
|
|
|
|
const replies = this.message.replies; |
|
|
|
|
|
|
|
|
|
if(this.type === 'footer') { |
|
|
|
|
let leftHTML = '', lastStyle = ''; |
|
|
|
|
if(replies.recent_repliers) { |
|
|
|
|
leftHTML += '<div class="replies-footer-avatars">' |
|
|
|
|
/** |
|
|
|
|
* MACOS, ANDROID - без реверса |
|
|
|
|
* WINDOWS DESKTOP - реверс |
|
|
|
|
* все приложения накладывают аватарку первую на вторую, а в макете зато вторая на первую, ЛОЛ! |
|
|
|
|
*/ |
|
|
|
|
let l: string[] = []; |
|
|
|
|
replies.recent_repliers/* .slice().reverse() */.forEach((peer, idx) => { |
|
|
|
|
lastStyle = idx == 0 ? '' : `style="transform: translateX(-${idx * 12}px);"`; |
|
|
|
@ -137,18 +129,22 @@ class RepliesFooterElement extends HTMLElement {
@@ -137,18 +129,22 @@ class RepliesFooterElement extends HTMLElement {
|
|
|
|
|
this.classList.add('is-unread'); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if(!this.updated) { |
|
|
|
|
appMessagesManager.subscribeRepliesThread(this.message.peerId, this.message.mid); |
|
|
|
|
appMessagesManager.updateMessage(this.message.peerId, this.message.mid, 'replies_updated'); |
|
|
|
|
this.updated = true; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
this.innerHTML = `${leftHTML}<span class="replies-footer-text" ${lastStyle}>${text}</span><span class="tgico-next"></span>`; |
|
|
|
|
|
|
|
|
|
const rippleContainer = document.createElement('div'); |
|
|
|
|
this.append(rippleContainer); |
|
|
|
|
ripple(rippleContainer); |
|
|
|
|
} else { |
|
|
|
|
this.classList.add('bubble-beside-button'); |
|
|
|
|
this.innerHTML = `<span class="tgico-commentssticker"></span><span class="replies-beside-text">${formatNumber(replies.replies, 0) || ''}</span>`; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if(!this.updated) { |
|
|
|
|
appMessagesManager.subscribeRepliesThread(this.message.peerId, this.message.mid); |
|
|
|
|
appMessagesManager.updateMessage(this.message.peerId, this.message.mid, 'replies_updated'); |
|
|
|
|
this.updated = true; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
customElements.define('replies-footer-element', RepliesFooterElement); |
|
|
|
|
customElements.define('replies-element', RepliesElement); |