SAE-A2-TruthInquiry/truthinquiry/static/js/admin_questions.js
AudricV 4d46c62aae
[Client] Improve questions on admin page + fix its JavaScript and deduplicate common style
- Use proper HTML;
- Add CSS file specific to this page;
- Deduplicate common style by moving it into the admin_ui CSS file and do the
corresponding changes in the admin CSS and HTML files;
- Add common header;
- Move questions's JavaScript in a dedicated file, improve its code and fix its
access to DOM elements.
2023-04-03 18:33:24 +02:00

96 lines
3.6 KiB
JavaScript

function addQuestion(questionAddButton) {
const questionElement = document.createElement("div");
questionElement.classList.add("question");
const inputElement = document.createElement("input");
inputElement.classList.add("question_input");
inputElement.setAttribute("type", "text");
questionElement.appendChild(inputElement);
const buttonElement = document.createElement("button");
buttonElement.classList.add("delete_question_btn", "action_button", "short_color_transition");
buttonElement.setAttribute("title", "Cliquez ici pour supprimer cette question");
const svgElement = document.createElementNS("http://www.w3.org/2000/svg", "svg");
svgElement.classList.add("action_icon", "short_color_transition");
svgElement.setAttribute("viewBox", "0 0 48 48");
const pathElement = document.createElementNS("http://www.w3.org/2000/svg", "path");
pathElement.setAttribute("d",
"M12.45 38.7 9.3 35.55 20.85 24 9.3 12.5l3.15-3.2L24 20.8 35.55 9.3l3.15 3.2L27.2 24l11.5 11.55-3.15 3.15L24 27.2Z");
svgElement.appendChild(pathElement);
buttonElement.appendChild(svgElement);
buttonElement.appendChild(document.createTextNode("Supprimer la question"));
buttonElement.addEventListener("click", () => deleteQuestion(buttonElement));
questionElement.appendChild(buttonElement);
const questionTypeListElements = questionAddButton.parentNode.getElementsByClassName("question_type_list");
if (questionTypeListElements.length == 0) {
// No question_type_list element, this should never happen
// Do nothing in this case
return;
}
// There should be at most one question_type_list element per question type
questionTypeListElements[0].appendChild(questionElement);
}
function deleteQuestion(questionRemoveButton) {
if (!confirm("Voulez-vous vraiement supprimer ce lieu ?")) {
return;
}
const questionElement = questionRemoveButton.parentNode;
questionElement.parentNode.removeChild(questionElement);
}
function saveChanges() {
const data = [];
for (const questionTypeNode of document.getElementsByClassName("question_type")) {
const questionsJson = [];
for (const questionNode of questionTypeNode.querySelectorAll(
".question_type_list .question .question_input")) {
questionsJson.push({"text": questionNode.value});
}
const questionTypeJson = {"questions": questionsJson};
data.push(questionTypeJson);
}
makeAPIRequest("admin/setQuestions", {"questions": data, "lang": "FR"}, {"content": "json"}).then(() => {
alert("Opération effectuée avec succès");
})
}
function setListenersToQuestionAdditionButtons() {
for (const deleteQuestionButton of document.getElementsByClassName("add_question_btn")) {
deleteQuestionButton.addEventListener("click", () => addQuestion(deleteQuestionButton));
};
}
function setListenersToQuestionDeletionButtons() {
for (const deleteQuestionButton of document.getElementsByClassName("delete_question_btn")) {
deleteQuestionButton.addEventListener("click", () => deleteQuestion(deleteQuestionButton));
};
}
function setListenersToSaveChangesButton() {
const saveChangesButton = document.getElementById("save_changes");
if (saveChangesButton === null) {
// There is no save_changes button, this should never happen
// Do nothing in this case
return;
}
saveChangesButton.addEventListener("click", saveChanges);
}
setListenersToQuestionAdditionButtons();
setListenersToQuestionDeletionButtons();
setListenersToSaveChangesButton();