- 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.
96 lines
3.6 KiB
JavaScript
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();
|