Initial commit - Application CLEO de gestion de devis
- 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>
This commit is contained in:
114
pub/res/js/jglobal.js
Normal file
114
pub/res/js/jglobal.js
Normal file
@@ -0,0 +1,114 @@
|
||||
//! 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();
|
||||
}
|
||||
Reference in New Issue
Block a user