function parseDate(date) { var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']; return months[date.getUTCMonth()] + ' ' + date.getUTCDate() + ', ' + date.getUTCFullYear() + ' ' + date.toLocaleTimeString(); } function parseComment(comment) { const author = data.users[comment.user] const html = `
${author.first + ' ' + author.last}

${comment.content}

` return html } function parsePost(post) { const author = data.users[post.user] const html = `
${author.first + ' ' + author.last} ${parseDate(new Date(post.date))}

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

${post.likes.length} Likes
Like Comment
${post.comments.map(parseComment).join('')}
` return html } function getPost(id) { for (let i = 0; i < data.posts.length; i++) { if (data.posts[i].id === 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.id) const state = index === -1; const response = await postlike(id, state) if (response.status != 200) return; if (index == -1) { post.likes.push(data.user.id) } else { post.likes.splice(index, 1) } 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({ user: data.user.id, content: 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 != 200) { error.innerHTML = response.msg return; } error.innerHTML = ''; data.posts.unshift({ id: data.posts[0].id + 1, user: data.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') } var page = 0 const data = { user: {}, users: {}, posts: [] } async function load() { header(true, false) const posts = (await loadposts(page)).json page++; data.posts.push(... posts) const batch = [] for (const post of posts) { if (data.users[post.user] !== undefined) continue if (batch.includes(post.user)) continue batch.push(post.user) } const users = (await loadusers(batch)).json for (const id in users) { data.users[id] = users[id] } data.user = (await loadself()).json data.users[data.user.id] = data.user render() }