PollVerlaine/static/js/new.js

54 lines
1.5 KiB
JavaScript

let next_id = 1;
document.addEventListener("DOMContentLoaded", () => {
let choices = document.getElementById("choices");
let choice_template = document.getElementById("choice");
function create_choice()
{
let choice = document.createElement("div");
choice.classList.add("choice");
choice.innerHTML = choice_template.innerHTML.replace(/:id/g, next_id);
choice.querySelector("button.delete").addEventListener("click", () => {
choices.removeChild(choice);
});
choices.append(choice);
next_id++;
}
document.getElementById("add-choice").addEventListener("click", create_choice);
while(next_id < 4) create_choice();
let form = document.getElementById("newpoll");
form.addEventListener("submit", (event) => {
event.preventDefault();
function get_choices(form)
{
let choices = [];
form.querySelectorAll("#choices .choice input").forEach((el) => {
choices.push(el.value);
});
return choices;
}
fetch("/polls", {
method: "POST",
body: JSON.stringify({
title: form.querySelector(`input[name="title"]`).value,
options: get_choices(form),
}),
headers: {
"Content-Type": "application/json",
},
}).then((res) => {
return res.json();
}).then((json) => {
form.setAttribute("hidden", true);
let result_el = document.getElementById("result");
result_el.innerHTML = result_el.innerHTML.replace(/:poll_title/g, json.title);
result_el.innerHTML = result_el.innerHTML.replace(/:poll_url/g, `/polls/${json.id}`);
result_el.removeAttribute("hidden");
});
});
});