Vote = { plus_player_id: null, plus_nickname: "", plus_reason: "", minus_player_id: null, minus_nickname: "", minus_reason: "" } let _ = load_page(0) async function load_page(id) { if (get_state()) { confirm_popup(); return; } let players = await fetch("data/players").then(r => r.json()); const header = document.createElement("h1"); const buttons = document.createElement("div"); buttons.className = "buttons"; const idlbl = document.createElement("h2"); idlbl.textContent = "Pour qui votes-tu?" const id_select = document.createElement("select"); const nickname = document.createElement("h2"); nickname.textContent = "As-tu un surnom à lui donner?"; const nickname_input = document.createElement("input"); nickname_input.inputMode = "text"; nickname_input.maxLength = 100; const reason = document.createElement("h2"); reason.textContent = "Pourquoi votes-tu pour lui?"; const reason_input = document.createElement("textarea"); reason_input.maxLength = 1000; players.forEach((player) => { const player_option = document.createElement("option"); player_option.value = player["id"]; player_option.innerText = player["name"]; id_select.appendChild(player_option); }) if (id) { id_select.value = Vote.minus_player_id; nickname_input.value = Vote.minus_nickname; reason_input.value = Vote.minus_reason; header.textContent = "Vote -"; let previous = document.createElement("button"); previous.textContent = "Précédent"; previous.addEventListener("click", () => { Vote.minus_player_id = id_select.value; Vote.minus_nickname = nickname_input.value; Vote.minus_reason = reason_input.value; load_page(0) }); let submit = document.createElement("button"); submit.textContent = "A Voté"; submit.addEventListener("click", async () => { if (Vote.plus_id === null || id_select.value === "") { const popUp = document.createElement("div"); popUp.className = "popup"; const message = document.createElement("h2"); message.textContent = "Tu dois dire pour qui tu vote!"; const page = document.body; popUp.append(message); page.append(popUp); } else { Vote.minus_player_id = id_select.value; Vote.minus_nickname = nickname_input.value; Vote.minus_reason = reason_input.value; if (await send_vote(Vote)) { confirm_popup(); save_state(); } } }) submit.className = "right"; previous.className = "left"; buttons.append(previous, submit); } else { id_select.value = Vote.plus_player_id; nickname_input.value = Vote.plus_nickname; reason_input.value = Vote.plus_reason; header.textContent = "Vote +"; let next = document.createElement("button"); next.innerText = "Suivant"; next.addEventListener("click", () => { Vote.plus_player_id = id_select.value; Vote.plus_nickname = nickname_input.value; Vote.plus_reason = reason_input.value; load_page(1) }); next.className = "right"; buttons.appendChild(next); } const div = document.getElementById("app"); div.innerHTML = ""; div.append(header, idlbl, id_select, nickname, nickname_input, reason, reason_input, buttons); } function confirm_popup() { const div = document.getElementById("app"); div.innerText = ""; div.className = "confirm"; let success = document.createElement("h1"); success.textContent = "Merci d'avoir voté!" let sub = document.createElement("h3"); sub.textContent = "Ton vote a bien été prit en compte!"; div.append(success, sub); } function save_state() { // create cookie with expiration the next day. let date = new Date(Date.now()); date.setDate(date.getDate() + 1); date.setHours(0, 0, 0, 0); document.cookie = "hasvoted=true; expires=" + date.toUTCString() } function get_state() { // get the cookie if exists => already voted. let cookie = document.cookie; return cookie.includes("hasvoted=true"); } async function send_vote(vote) { vote.plus_player_id = parseInt(vote.plus_player_id, 10); vote.minus_player_id = parseInt(vote.minus_player_id, 10); let body = JSON.stringify(vote); let result = await fetch(window.location.href + "post", {method: "POST", body: body}).then(r => r.status); return result === 200; }