//! Librairie JS Globale //! D6SOFT function showModal(idModalElement) { idModalElement.style.display = "block" idModalElement.className += "show" } function hideModal(idModalElement) { idModalElement.style.display = "none" idModalElement.className += idModalElement.className.replace("show", "") } function showNotification(leTitre, leMessage, leTheme = "info", laPosition = "nfc-bottom-right") { window.createNotification({ theme: leTheme, // success, info, warning, error, and none positionClass: laPosition, // nfc-top-left, nfc-bottom-right, nfc-bottom-left, nfc-top-right })({ title: leTitre, message: leMessage }); } //! Gestion de l'animation de chargement lors de requêtes AJAX const loader = document.querySelector("#loadingDiv"); function showLoading() { loader.classList.add("display"); } function hideLoading() { loader.classList.remove("display"); } function convertMySQLDateToFrenchDate(mysqlDate) { const date = new Date(mysqlDate); // créer un objet Date à partir de la date MySQL let day = date.getDate(); // extraire le jour du mois if (day < 10) { day = '0' + day; // ajouter un zéro devant si le jour est inférieur à 10 } let month = date.getMonth() + 1; // extraire le mois (ajouter 1 car les mois commencent à 0) if (month < 10) { month = '0' + month; // ajouter un zéro devant si le mois est inférieur à 10 } const year = date.getFullYear(); // extraire l'année return day + '/' + month + '/' + year; // retourner la date au format français } function convertFrenchDateToMySQLDate(frenchDate) { var parts = frenchDate.split('/'); // séparer la date en jour, mois et année var date = new Date(parts[2], parts[1] - 1, parts[0]); // créer un objet Date à partir de la date française return date.toISOString().slice(0, 19).replace('T', ' '); // retourner la date au format MySQL } function controlFrenchDate(laDateSaisie) { const reg = new RegExp("^[0-9]{2}/[0-9]{2}/[0-9]{4}$"); if (reg.test(laDateSaisie)) { // Convertir la chaîne de caractères en un objet Date const parts = laDateSaisie.split('/'); const laDate = new Date(parts[2], parts[1] - 1, parts[0]); if (laDate instanceof Date && !isNaN(laDate)) { // la date est correcte, on la formate en JJ/MM/AAAA const formattedDate = ('0' + laDate.getDate()).slice(-2) + '/' + ('0' + (laDate.getMonth() + 1)).slice(-2) + '/' + laDate.getFullYear(); return formattedDate; } else { return false; } } else { return false; } } function isDateValid(inputDate) { const dateObj = new Date(inputDate); return !isNaN(dateObj.getTime()); } function parseFloatFromPercentageString(str) { // Supprimer les espaces en début et fin de chaîne str = str.trim(); // Supprimer le caractère de pourcentage en fin de chaîne str = str.replace(/%$/, ''); // Convertir la chaîne en nombre float var value = parseFloat(str); return value; } //! Affiche un montant avec 2 décimales et un séparateur de milliers function formatAmount(amount) { const amountNumber = parseFloat(amount); const amountFormat = amountNumber.toFixed(2).replace(/\B(?=(\d{3})+(?!\d))/g, " "); return amountFormat; } //! affiche un effet blink sur les inputs qui ont atteint leur maxLength (seulement pour ceux qui on un attribut maxlength) const inputs = document.querySelectorAll("input[type='text'][maxlength], input[type='number'][maxlength]"); inputs.forEach((input) => { const maxLength = input.maxLength; input.addEventListener("input", function () { if (input.value.length >= maxLength) { input.classList.add("blink-input"); setTimeout(() => input.classList.remove("blink-input"), 800); } }); }); //! lit les données d'un cookie ($_SESSION) et les retourne sous forme d'objet function getCookie(name) { const value = `; ${document.cookie}`; const parts = value.split(`; ${name}=`); if (parts.length === 2) return parts.pop().split(';').shift(); }