2024-04-15 21:52:21 -07:00
|
|
|
import { render, html } from '/uhtml.js';
|
|
|
|
|
|
|
|
let msg;
|
|
|
|
|
2024-06-12 03:00:50 -07:00
|
|
|
function sendMessage(event) {
|
|
|
|
event.preventDefault();
|
2024-04-15 21:52:21 -07:00
|
|
|
if (!msg.value)
|
|
|
|
return;
|
2024-06-12 03:00:50 -07:00
|
|
|
window.currentInstance.emit('send_message', {
|
2024-04-15 21:52:21 -07:00
|
|
|
message: msg.value,
|
2024-05-05 00:47:42 -07:00
|
|
|
thread: window.currentThread.id
|
2024-04-15 21:52:21 -07:00
|
|
|
});
|
|
|
|
msg.value = '';
|
|
|
|
}
|
|
|
|
|
|
|
|
let earliestMessage;
|
|
|
|
|
2024-06-12 03:00:50 -07:00
|
|
|
function loadMessages(callback) {
|
|
|
|
let instance = window.currentInstance;
|
2024-04-15 21:52:21 -07:00
|
|
|
|
|
|
|
if (!msg) {
|
|
|
|
render(document.getElementById('message'), html`
|
|
|
|
<button id='loadmore' class='hidden' onclick=${loadMessages}>
|
|
|
|
load more messages
|
|
|
|
</button>
|
|
|
|
<div id='messages'></div>
|
|
|
|
<form id='msginput' onsubmit=${sendMessage}>
|
|
|
|
<input id='msg' placeholder='write a message...' />
|
|
|
|
<button type='submit' id='sendmsg'>send</button>
|
|
|
|
</form>
|
|
|
|
`);
|
|
|
|
msg = document.getElementById('msg');
|
|
|
|
}
|
|
|
|
const messages = document.getElementById('messages');
|
|
|
|
if (!this) { // called from chooseThread, initializing thread
|
|
|
|
messages.innerHTML = '';
|
|
|
|
earliestMessage = null;
|
2024-05-16 20:40:09 -07:00
|
|
|
if (window.currentThread.permissions.post)
|
|
|
|
document.getElementById('msginput').classList.remove('hidden');
|
|
|
|
else
|
|
|
|
document.getElementById('msginput').classList.add('hidden');
|
2024-04-15 21:52:21 -07:00
|
|
|
}
|
2024-06-12 03:00:50 -07:00
|
|
|
instance.emit('get_history', {
|
2024-05-27 20:03:45 -07:00
|
|
|
before: earliestMessage,
|
|
|
|
thread: window.currentThread.id
|
2024-06-12 03:00:50 -07:00
|
|
|
}, async msg => {
|
2024-05-27 20:03:45 -07:00
|
|
|
if (!msg.success) {
|
|
|
|
console.log('get_history failed: ' + msg.message);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
callback && callback(msg.messages);
|
|
|
|
if (msg.messages.length > 0) {
|
|
|
|
earliestMessage = msg.messages[msg.messages.length - 1].id;
|
2024-06-12 03:00:50 -07:00
|
|
|
let users = {};
|
|
|
|
for (let message of msg.messages) {
|
|
|
|
if (!message.name) {
|
|
|
|
try {
|
|
|
|
message.name = (users[message.userid] || (
|
|
|
|
users[message.userid] = await window.getUser(message.userid)
|
|
|
|
)).displayname;
|
|
|
|
}
|
|
|
|
catch (e) {
|
|
|
|
console.log(`error getting user ${message.userid}`, e);
|
|
|
|
message.name = message.userid;
|
|
|
|
}
|
|
|
|
}
|
2024-05-27 20:03:45 -07:00
|
|
|
messages.prepend(html.node`
|
|
|
|
<div class='message'>
|
|
|
|
<strong>${message.name}: </strong>
|
|
|
|
${message.content}
|
|
|
|
</div>`);
|
2024-06-12 03:00:50 -07:00
|
|
|
}
|
2024-04-15 21:52:21 -07:00
|
|
|
}
|
2024-05-27 20:03:45 -07:00
|
|
|
if (msg.more)
|
|
|
|
document.getElementById('loadmore').classList.remove('hidden');
|
|
|
|
else
|
|
|
|
document.getElementById('loadmore').classList.add('hidden');
|
|
|
|
messages.scroll(0, messages.scrollHeight - messages.clientHeight);
|
|
|
|
});
|
2024-06-12 03:00:50 -07:00
|
|
|
|
|
|
|
if (!instance.messaged) {
|
|
|
|
instance.socket.on('new_message', message => {
|
|
|
|
if (message.thread !== window.currentThread?.id || instance !== window.currentInstance)
|
|
|
|
return;
|
|
|
|
const messages = document.getElementById('messages');
|
|
|
|
let scroll = messages.scrollTop + 10 >= messages.scrollHeight - messages.clientHeight;
|
|
|
|
messages.appendChild(html.node`
|
|
|
|
<div class='message'>
|
|
|
|
<strong>${message.name}: </strong>
|
|
|
|
${message.content}
|
|
|
|
</div>`);
|
|
|
|
if (scroll)
|
|
|
|
messages.scroll(0, messages.scrollHeight - messages.clientHeight);
|
|
|
|
if (!earliestMessage)
|
|
|
|
earliestMessage = message.id;
|
|
|
|
});
|
|
|
|
instance.messaged = true;
|
|
|
|
}
|
2024-04-15 21:52:21 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
export default loadMessages;
|