//- vim:ts=4:sw=4:
doctype html
html
head
include head
title Chat Log
style.
table { width: min(60rem,100%); }
td:nth-child(1), td:nth-child(2) { white-space: nowrap; width: 0; }
td:nth-child(3) { white-space: nowrap; width: 8rem; }
#foot { display: inline-block; padding-top: 8px; }
table { border: 1px solid black; }
td { border: none; }
td a { text-decoration: none; color: black; }
tbody tr { background-color: white !important; }
tbody tr.me { background-color: aliceblue !important; }
body
include header
article
h1 Chat Log
if page_size > 0
p
button(onclick="oldest()") Oldest
button(onclick="back()") ←
button(onclick="next()") →
button(onclick="newest()") Newest
span#foot
p
table
thead
tr
th Game
th Time
th Who
th Message
tbody
if page_size > 0
p: a(href="/chat/all") All messages
script.
let chat_data = !{ JSON.stringify(chat).replace(/&/g,"&").replace(//g,">") }
let page_size = !{ page_size }
let me = !{ JSON.stringify(user.name) }
let table = document.querySelector("tbody")
let foot = document.querySelector("#foot")
let chat_lines = []
function add(tr,text,link) {
let td = document.createElement("td")
if (link) {
let a = document.createElement("a")
a.href = link
a.textContent = text
td.appendChild(a)
} else {
td.textContent = text
}
tr.appendChild(td)
}
function format_date(date) {
let t = date.toISOString()
return t.substring(0,10) + " " + t.substring(11,19)
}
for (let [game_id,time,user,message] of chat_data) {
let tr = document.createElement("tr")
if (user === me) tr.className = "me"
add(tr,game_id,"/join/"+game_id)
add(tr,format_date(new Date(time+"Z")))
add(tr,user,"/user/"+user)
add(tr,message)
chat_lines.push(tr)
}
function next() { if (page > 0) --page; update(); }
function back() { if (page < page_count-1) ++page; update(); }
function newest() { page=0; update(); }
function oldest() { page=page_count-1; update(); }
let chat_size = chat_lines.length
let page_count = Math.ceil(chat_size / page_size)
let page = 0
function update() {
table.innerHTML = ""
for (let i = 0; i < page_size; ++i) {
let k = page * page_size + ( page_size - i - 1)
if (k >= 0 && k < chat_size)
table.appendChild(chat_lines[k])
foot.textContent = `${page_count-page} / ${page_count}`
}
}
if (page_size > 0) {
newest()
} else {
for (let i = chat_size-1; i >= 0; --i)
table.appendChild(chat_lines[i])
}