function parseComment(comment) { let author = data.users[comment[0]] if (author === undefined) { author = {} } const html = `
${author.firstname + ' ' + author.lastname}

${comment[1]}

` return html } function parsePost(post) { let author = data.users[post.user_id] if (author === undefined) { author = {} } const html = `
${author.firstname + ' ' + author.lastname} ${parseDate(new Date(post.date))}

${post.content.replace(/\n/g,'
')}

${Object.keys(post.likes).map(k => post.likes[k]).filter(v => v !== false).length} Likes
Like Comment
${post.comments.map(parseComment).join('')}
` return html } function getPost(post_id) { for (let i = 0; i < data.posts.length; i++) { if (data.posts[i].post_id === post_id) { return i } } return -1 } async function like(span) { const id = parseInt(span.parentElement.parentElement.getAttribute('postid')) const post = data.posts[getPost(id)] const index = post.likes.indexOf(data.user.user_id) const current = index !== -1 const response = await postlike(id, !current) if (response.status != 200) return; if (current) { post.likes.splice(index, 1) } else { post.likes.push(data.user.user_id) } render() } async function comment(event) { event.preventDefault(); const text = event.target.elements.text.value.trim(); if (text.length < 1) return; const id = parseInt(event.target.parentElement.parentElement.parentElement.getAttribute('postid')) var index = getPost(id); if (index === -1) return; const response = await postcomment(id, text) if (response.status != 200) return; event.target.elements.text.value = ''; data.posts[index].comments.push([data.user.user_id, text]) render() } async function post() { const text = document.getElementById("text").value.trim() const error = document.getElementsByClassName('error')[0] if (text.length < 1) return; const response = await createpost(text); if (response.status != 201) { error.innerHTML = response.msg return; } error.innerHTML = ''; data.posts.unshift({ post_id: response.json.post_id, user_id: data.user.user_id, date: Date.now(), content: text, likes: [], comments: [] }) render() } function render() { const html = `
${data.posts.map(p => parsePost(p)).join('')}
` add(html, 'posts') const popup = ` ` add(popup, 'popup') const load = `
Load more posts
` if (page !== -1) { add(load, 'load') } else { remove('load') } } var page = 0 const data = { user: {}, users: {}, posts: [] } async function load() { const posts = (await loadpostspage(page)).json if (posts.length === 0) { page = -1 } else { page++ } data.posts.push(... posts) const batch = [] for (const post of posts) { for(const comment of post.comments) { if (data.users[comment[0]] !== undefined) continue if (batch.includes(comment[0])) continue batch.push(comment[0]) } if (data.users[post.user_id] !== undefined) continue if (batch.includes(post.user_id)) continue batch.push(post.user_id) } const users = (await loadusers(batch)).json for (const user of users) { data.users[user.user_id] = user } render() } async function init() { header(true, false) data.user = (await loadself()).json data.users[data.user.user_id] = data.user load() }