- Fix HTML, improve style of the feature and add its dedicated CSS file; - Improve admin traits' JavaScript and fix addition of a trait where there is no one already present; - Remove unneeded admin.js file, as all its functions have been improved and split into separate files.
128 lines
4.8 KiB
JavaScript
128 lines
4.8 KiB
JavaScript
function addTrait() {
|
|
const traitElement = document.createElement("div");
|
|
traitElement.classList.add("trait");
|
|
traitElement.setAttribute("data-id", "");
|
|
|
|
const traitNameContainerElement = document.createElement("div");
|
|
traitNameContainerElement.classList.add("trait_name_container");
|
|
|
|
const traitNameTitleElement = document.createElement("h3");
|
|
traitNameTitleElement.classList.add("trait_name");
|
|
traitNameTitleElement.appendChild(document.createTextNode("Nom de la réaction\u00A0:"));
|
|
|
|
traitNameContainerElement.appendChild(traitNameTitleElement);
|
|
|
|
const traitNameInputElement = document.createElement("input");
|
|
traitNameInputElement.classList.add("trait_name_input");
|
|
traitNameInputElement.setAttribute("type", "text");
|
|
traitNameInputElement.setAttribute("value", "");
|
|
|
|
traitNameContainerElement.appendChild(traitNameInputElement);
|
|
|
|
traitElement.appendChild(traitNameContainerElement);
|
|
|
|
const traitDescriptionElement = document.createElement("div");
|
|
traitDescriptionElement.classList.add("trait_description_container");
|
|
|
|
const traitDescriptionTitleElement = document.createElement("h3");
|
|
traitDescriptionTitleElement.classList.add("trait_description");
|
|
traitDescriptionTitleElement.appendChild(document.createTextNode("Description de la réaction\u00A0:"));
|
|
|
|
traitDescriptionElement.appendChild(traitDescriptionTitleElement);
|
|
|
|
const traitDescriptionInputElement = document.createElement("input");
|
|
traitDescriptionInputElement.classList.add("trait_description_input");
|
|
traitDescriptionInputElement.setAttribute("type", "text");
|
|
traitDescriptionInputElement.setAttribute("value", "");
|
|
|
|
traitDescriptionElement.appendChild(traitDescriptionInputElement);
|
|
|
|
traitElement.appendChild(traitDescriptionElement);
|
|
|
|
const buttonElement = document.createElement("button");
|
|
buttonElement.classList.add("delete_trait_btn", "action_button", "short_color_transition");
|
|
buttonElement.setAttribute("title", "Cliquez ici pour supprimer cette réaction");
|
|
|
|
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 réaction"));
|
|
buttonElement.addEventListener("click", () => deleteTrait(buttonElement));
|
|
|
|
traitElement.appendChild(buttonElement);
|
|
|
|
const traitsElement = document.getElementById("traits");
|
|
if (traitsElement === null) {
|
|
// No places element, this should never happen
|
|
// Do nothing in this case
|
|
return;
|
|
}
|
|
|
|
traitsElement.appendChild(traitElement);
|
|
}
|
|
|
|
function deleteTrait(traitDeletionButton) {
|
|
if (!confirm("Voulez-vous vraiement supprimer cette réaction ?")) {
|
|
return;
|
|
}
|
|
|
|
const traitNode = traitDeletionButton.parentNode;
|
|
traitNode.parentNode.removeChild(traitNode);
|
|
}
|
|
|
|
function saveChanges() {
|
|
const data = [];
|
|
|
|
for (const traitElement of document.getElementsByClassName("trait")) {
|
|
const trait = {};
|
|
trait["id"] = traitElement.getAttribute("data-id");
|
|
trait["name"] = traitElement.querySelector(".trait_name_input").value;
|
|
trait["desc"] = traitElement.querySelector(".trait_description_input").value;
|
|
data.push(trait);
|
|
}
|
|
|
|
makeAPIRequest("admin/setTraits", {"traits": data, "lang": "FR"}, {"content": "json"}).then(() => {
|
|
alert("Opération effectuée avec succès");
|
|
});
|
|
}
|
|
|
|
function setListenersToTraitDeletionButtons() {
|
|
for (const deleteTraitButton of document.getElementsByClassName("delete_trait_btn")) {
|
|
deleteTraitButton.addEventListener("click", () => deleteTrait(deleteTraitButton));
|
|
};
|
|
}
|
|
|
|
function setListenersToTraitAdditionButton() {
|
|
const addTraitButton = document.getElementById("add_trait");
|
|
if (addTraitButton === null) {
|
|
// There is no add_place button, this should never happen
|
|
// Do nothing in this case
|
|
return;
|
|
}
|
|
|
|
addTraitButton.addEventListener("click", addTrait);
|
|
}
|
|
|
|
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);
|
|
}
|
|
|
|
setListenersToTraitDeletionButtons();
|
|
setListenersToTraitAdditionButton();
|
|
setListenersToSaveChangesButton();
|