162 lines
4.2 KiB
JavaScript
162 lines
4.2 KiB
JavaScript
// ===============================
|
|
// Données simulées (sera remplacée par BDD )
|
|
// ===============================
|
|
let galleryPairs = [
|
|
{
|
|
id: 1,
|
|
titre: "Petit chien poils longs",
|
|
type: "Chien",
|
|
avant: "../../img/avant1.jpg",
|
|
apres: "../../img/apres1.jpg"
|
|
},
|
|
{
|
|
id: 2,
|
|
titre: "Coupe ciseaux",
|
|
type: "Chat",
|
|
avant: "../../img/avant2.jpg",
|
|
apres: "../../img/apres2.jpg"
|
|
}
|
|
];
|
|
|
|
// Sélecteurs
|
|
const form = document.getElementById("addPairForm");
|
|
const titleInput = document.getElementById("pairTitle");
|
|
const typeInput = document.getElementById("pairType");
|
|
const beforeInput = document.getElementById("beforeImage");
|
|
const afterInput = document.getElementById("afterImage");
|
|
|
|
const beforePreview = document.getElementById("beforePreview");
|
|
const afterPreview = document.getElementById("afterPreview");
|
|
|
|
const successMsg = document.getElementById("successMsg");
|
|
const errorMsg = document.getElementById("errorMsg");
|
|
const errorFormat = document.getElementById("errorFormat");
|
|
|
|
// Formats autorisés
|
|
const allowedTypes = ["image/jpeg", "image/png", "image/webp"];
|
|
|
|
// ===============================
|
|
// Fonctions utilitaires
|
|
// ===============================
|
|
function hideMessages() {
|
|
successMsg.classList.add("d-none");
|
|
errorMsg.classList.add("d-none");
|
|
errorFormat.classList.add("d-none");
|
|
}
|
|
|
|
function isValidFormat(file) {
|
|
if (!file) return false;
|
|
return allowedTypes.includes(file.type);
|
|
}
|
|
|
|
// ===============================
|
|
// Prévisualisation image AVANT
|
|
// + contrôle du format
|
|
// ===============================
|
|
beforeInput.addEventListener("change", function () {
|
|
hideMessages();
|
|
|
|
const file = this.files[0];
|
|
|
|
if (!file) {
|
|
beforePreview.style.display = "none";
|
|
beforePreview.src = "#";
|
|
return;
|
|
}
|
|
|
|
// Vérif format
|
|
if (!isValidFormat(file)) {
|
|
errorFormat.classList.remove("d-none");
|
|
this.value = ""; // reset le champ
|
|
beforePreview.style.display = "none";
|
|
beforePreview.src = "#";
|
|
return;
|
|
}
|
|
|
|
const reader = new FileReader();
|
|
reader.onload = e => {
|
|
beforePreview.src = e.target.result;
|
|
beforePreview.style.display = "block";
|
|
};
|
|
reader.readAsDataURL(file);
|
|
});
|
|
|
|
// ===============================
|
|
// Prévisualisation image APRÈS
|
|
// + contrôle du format
|
|
// ===============================
|
|
afterInput.addEventListener("change", function () {
|
|
hideMessages();
|
|
|
|
const file = this.files[0];
|
|
|
|
if (!file) {
|
|
afterPreview.style.display = "none";
|
|
afterPreview.src = "#";
|
|
return;
|
|
}
|
|
|
|
// Vérif format
|
|
if (!isValidFormat(file)) {
|
|
errorFormat.classList.remove("d-none");
|
|
this.value = ""; // reset le champ
|
|
afterPreview.style.display = "none";
|
|
afterPreview.src = "#";
|
|
return;
|
|
}
|
|
|
|
const reader = new FileReader();
|
|
reader.onload = e => {
|
|
afterPreview.src = e.target.result;
|
|
afterPreview.style.display = "block";
|
|
};
|
|
reader.readAsDataURL(file);
|
|
});
|
|
|
|
// ===============================
|
|
// Soumission formulaire
|
|
// ===============================
|
|
form.addEventListener("submit", function (e) {
|
|
e.preventDefault();
|
|
|
|
hideMessages();
|
|
|
|
// Champs obligatoires
|
|
if (
|
|
!titleInput.value.trim() ||
|
|
!typeInput.value.trim() ||
|
|
!beforeInput.files[0] ||
|
|
!afterInput.files[0]
|
|
) {
|
|
errorMsg.classList.remove("d-none");
|
|
return;
|
|
}
|
|
|
|
const beforeFile = beforeInput.files[0];
|
|
const afterFile = afterInput.files[0];
|
|
|
|
// Vérification format des deux images
|
|
if (!isValidFormat(beforeFile) || !isValidFormat(afterFile)) {
|
|
errorFormat.classList.remove("d-none");
|
|
return;
|
|
}
|
|
|
|
// Nouvelle entrée (simulation)
|
|
const newPair = {
|
|
id: galleryPairs.length + 1,
|
|
titre: titleInput.value.trim(),
|
|
type: typeInput.value.trim(),
|
|
avant: URL.createObjectURL(beforeFile),
|
|
apres: URL.createObjectURL(afterFile)
|
|
};
|
|
|
|
galleryPairs.push(newPair);
|
|
|
|
successMsg.classList.remove("d-none");
|
|
|
|
// Redirige après 1 seconde
|
|
setTimeout(() => {
|
|
window.location.href = "../liste_avant_apres/liste_avant_apres.html";
|
|
}, 1000);
|
|
});
|