async function like(id) { const formData = new FormData(); formData.append('post', id); const result = await fetch('/like', { method: 'POST', body: formData }); if (result.status === 401) { window.location.href = "/login"; return; } if (result.status < 200 || result.status >= 400) { alert("your post didnt get the like because the server thought your opinion was invalid"); return; } } async function post() { const postbox = document.getElementById('newpost'); const formData = new FormData(); formData.append('post', postbox.value); const result = await fetch('/post', { method: 'POST', body: formData }); if (result.status < 200 || result.status >= 400) { alert("you have been silenced by the server and your post did not go through"); return; } window.location.href = "/"; } async function register() { const usernameBox = document.getElementById('username'); const passwordBox = document.getElementById('password'); const formData = new FormData(); formData.append('username', usernameBox.value); formData.append('password', passwordBox.value); const result = await fetch('/register', { method: 'POST', body: formData }); if (result.status < 200 || result.status >= 400) { alert(await result.text()); return; } window.location.href = "/"; } async function login() { const usernameBox = document.getElementById('username'); const passwordBox = document.getElementById('password'); const formData = new FormData(); formData.append('username', usernameBox.value); formData.append('password', passwordBox.value); const result = await fetch('/login', { method: 'POST', body: formData }); if (result.status < 200 || result.status >= 400) { alert("for some reason the server hates you and didn't let you log into your account"); return; } window.location.href = "/"; } async function checkLoginStatus() { const result = await fetch('/me'); if (result.headers.get('X-Logged-In') !== 'true') { return ""; } const username = result.headers.get('X-Username'); return username; } document.addEventListener('DOMContentLoaded', async function() { if (window.fetch) { // We know the fetch API exists, so hide the stuff that doesn't rely on it const userStatus = await checkLoginStatus(); const postbox = document.getElementById("postbox"); if (!postbox) { return; } // if we're logged in, show the post box, // otherwise show a welcome message, encouraging users to sign up/log in if (userStatus === "") { if (window.location.pathname === "/settings") { window.location.href = "/login"; } const newElement = document.createElement("p"); newElement.textContent = "Welcome to Chookchat!\nTo get posting, click 'login' to log in or create an account.\nEnjoy your stay!"; postbox.appendChild(newElement); } else { const helperText = document.createElement("p"); helperText.textContent = "You're posting as " + userStatus; postbox.appendChild(helperText); const textArea = document.createElement("textarea"); textArea.id = "newpost"; postbox.appendChild(textArea); const postButton = document.createElement("button"); postButton.textContent = "Post"; postButton.id = "postbutton" postButton.onclick = post; postbox.appendChild(postButton); const loginLink = document.getElementById("loginLink"); loginLink.textContent = "hello, " + userStatus + "!"; loginLink.href = "/profile/" + userStatus; } const form = document.getElementById("postbox-form"); if (!form) { return; } form.style.display = 'none'; } }); async function settingsChangePassword() { const oldpassword = document.getElementById("change-password-oldpassword"); const newpassword = document.getElementById("change-password"); const formData = new FormData(); formData.append('oldpassword', oldpassword.value); formData.append('newpassword', newpassword.value); const result = await fetch('/settings/changePassword', { method: "POST", body: formData }); if (result.status < 200 || result.status >= 400) { alert("for whatever reason your password wasn't changed"); } else { alert("your password was changed!"); } } async function settingsChangeUsername() { const password = document.getElementById("change-username-password"); const newusername = document.getElementById("change-username"); const formData = new FormData(); formData.append('password', password.value); formData.append('newusername', newusername.value); const result = await fetch('/settings/changeUsername', { method: "POST", body: formData }); if (result.status < 200 || result.status >= 400) { alert("for whatever reason your username wasn't changed"); } else { alert("your username was changed!"); } } async function settingsChangeBio() { const bio = document.getElementById("change-bio"); const formData = new FormData(); formData.append('bio', bio.value); const result = await fetch('/settings/changeBio', { method: "POST", body: formData }); if (result.status < 200 || result.status >= 400) { alert("for whatever reason your bio wasn't changed"); } else { alert("your bio was changed!"); } } async function invalidateAllSessions() { const formData = new FormData(); formData.append('a', 'a'); const result = await fetch('/settings/invalidateAllSessions', { method: "POST", body: formData }); if (result.status < 200 || result.status >= 400) { alert("for whatever reason your sessions weren't invalidated"); } else { alert("your sessions were invalidated!"); } }