finish dms

This commit is contained in:
Tyler Murphy 2023-08-22 00:15:10 -04:00
parent 909d47f331
commit fabc1e51cb
3 changed files with 58 additions and 29 deletions

View file

@ -53,7 +53,8 @@
align-items: center; align-items: center;
font-weight: 1000; font-weight: 1000;
font-size: 1.5rem; font-size: 1.5rem;
}
right: 0;}
.room-name { .room-name {
display: flex; display: flex;
@ -71,6 +72,7 @@
} }
.roomDisplayCenter { .roomDisplayCenter {
position: relative;
display: flex; display: flex;
width: calc(100% - 25em); width: calc(100% - 25em);
height: 100%; height: 100%;
@ -170,3 +172,9 @@
.message-content { .message-content {
flex-grow: 0; flex-grow: 0;
} }
.loadMessages {
position: absolute;
right: 0;
cursor: pointer;
}

View file

@ -70,12 +70,12 @@ const data = {
rooms: {}, rooms: {},
} }
async function loadRoomPage(room_id) { async function loadRoomPage(room) {
let room = data.rooms[room_id]
let request = (await chatload ( let request = (await chatload (
room.newest_msg, room.newest_msg,
room.page, room.page,
room_id room.room_id
)) ))
if (request.json == undefined) { if (request.json == undefined) {
@ -83,36 +83,38 @@ async function loadRoomPage(room_id) {
return return
} }
let messages = room.display.getElementsByClassName('messages')[0]
for (const msg of request.json) { for (const msg of request.json) {
room.messages.push(msg) room.messages.push(msg)
messages.appendChild(await parseMessageImpl(msg))
} }
room.page++ room.page++
return request.json.length > 0
} }
async function loadRoom(room_id) { async function loadRoom(room_id) {
let room = data.rooms[room_id] let room = data.rooms[room_id]
let request = (await loadusers(room.users)) let batch = []
if (request.status != 200) { for (const user_id of room.users) {
location.href = '/login' if (data.users[user_id]) continue
} else { batch.push(user_id)
for (const user of request.json) { }
data.users[user.user_id] = user
if (batch.length > 1) {
let request = (await loadusers(batch))
if (request.status != 200) {
location.href = '/login'
} else {
for (const user of request.json) {
data.users[user.user_id] = user
}
} }
} }
room.page = 0 room.display = createRoomDisplay(room, loadRoomPage)
room.messages = []
if (room.newest_msg == undefined || room.newest_msg < 0)
room.newest_msg = Number.MAX_SAFE_INTEGER
await loadRoomPage(room_id)
room.newest_msg = Math.max(
...room.messages.map(m => m.message_id)
)
room.page = 0
room.display = createRoomDisplay(room)
let displays = document.getElementById("center") let displays = document.getElementById("center")
displays.appendChild(room.display) displays.appendChild(room.display)
@ -125,15 +127,20 @@ async function loadRoom(room_id) {
button.classList.add('current') button.classList.add('current')
} }
room.page = 0
room.messages = []
if (room.newest_msg == undefined || room.newest_msg < 0)
room.newest_msg = Number.MAX_SAFE_INTEGER
await loadRoomPage(room)
room.newest_msg = Math.min(
...room.messages.map(m => m.message_id)
)
room.page = 0
let sidebar = document.getElementById("sidebar") let sidebar = document.getElementById("sidebar")
sidebar.appendChild(button) sidebar.appendChild(button)
room.button = button room.button = button
let messages = room.display.getElementsByClassName('messages')[0]
for (const message of room.messages) {
messages.appendChild(await parseMessageImpl(message))
}
if (!room.people) room.people = room.people = {} if (!room.people) room.people = room.people = {}
let people = room.display.getElementsByClassName("roomDisplayPeople")[0] let people = room.display.getElementsByClassName("roomDisplayPeople")[0]
@ -186,6 +193,7 @@ async function onMessage(message) {
if (event.user_id == data.self.user_id) { if (event.user_id == data.self.user_id) {
room.display.remove() room.display.remove()
room.button.remove() room.button.remove()
delete data.rooms[event.room_id]
} }
break; break;
} }
@ -202,13 +210,13 @@ async function onMessage(message) {
async function init() { async function init() {
let request = (await loadself()); let request = (await loadself());
data.self = request.json
if (request.json == undefined) { if (request.json == undefined) {
location.href = '/login' location.href = '/login'
return return
} }
data.self = request.json
data.users[data.self.user_id] = data.self data.users[data.self.user_id] = data.self
render() render()

View file

@ -1,4 +1,4 @@
import { div, a, pfp, span, i, parse, parseDate, p, form, input, svg, path, parseMonth, g } from './main.js' import { div, a, pfp, span, i, parse, parseDate, p, form, input, svg, path, parseMonth, g, button } from './main.js'
import { postlike, postcomment, loadcommentspage, chatsend, chatadd, chatleave } from './api.js'; import { postlike, postcomment, loadcommentspage, chatsend, chatadd, chatleave } from './api.js';
window.parse = parse; window.parse = parse;
@ -370,10 +370,23 @@ export function createSingleLineInput(attributes, onSubmit) {
return area return area
} }
export function createRoomDisplay(room) { export function createRoomDisplay(room, loadMessageCallback) {
let buttonEl = button({
class: 'loadMessages input',
style: 'flex-grow: 0',
onclick: async () => {
if (!await loadMessageCallback(room)) {
buttonEl.remove()
}
}
},
parse('Load Previous')
)
return ( return (
div({class: 'roomDisplay'}, div({class: 'roomDisplay'},
div({class: 'roomDisplayCenter'}, div({class: 'roomDisplayCenter'},
buttonEl,
div({class: 'messages'}), div({class: 'messages'}),
createMultiLineInput( createMultiLineInput(
{ {