- Architecture MVC avec framework maison d6 - Modules : devis, clients, marchés, SAP - Documentation initiale (README et TODO) - Configuration Composer avec dépendances 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
114 lines
4.0 KiB
JavaScript
114 lines
4.0 KiB
JavaScript
//! 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();
|
|
} |