export default class Utils { /** * Une variable vaut-elle "undefined" ? * * @param {any} variable La variable à tester * * @returns {boolean} Vrai si la variable vaut "undefined", sinon Faux */ static isUndefined (variable) { return typeof variable === 'undefined'; } /** * Une variable est-elle une chaîne de caractère ? * * @param {any} variable La variable à tester * * @returns {boolean} Vrai si la variable est uen chaîne de caractères, sinon Faux */ static isString (variable) { return typeof variable === 'string' || variable instanceof String; } /** * Une variable est-elle une chaine de caractère vide ou équivalent (undefined ou null) ? * * @param {any} variable La variable à tester * * @returns {boolean} Vrai si la variable est une chaine de caractères vide (ou équivalent) */ static empty_str (variable) { return Utils.isUndefined(variable) || variable === null || variable === ''; } /** * Vérifie qu'au moins une case à cocher d'une liste de cases à cocher est bien cochée * * @param {jQuery} list Une liste de case à cocher * * @returns {boolean} Vrai si au moins l'un de case à cocher est cochée. */ static checkAtLeastOnChecked (list) { return list.filter(':checked').length > 0; } /** * Est-ce qu'un objet jQuery possède un attribut et qu'il est différent de Faux * * @param {jQuery} objJquery L'objet jQuery * @param {string} attrName Le nom de l'attribut * * @returns {boolean} Vrai si l'attribut existe et est différent de Faux. */ static hasAttr (objJquery, attrName) { let val = objJquery.attr(attrName); return !Utils.isUndefined(val) && val !== false; } /** * Récupère le formulaire associé à un champ * * Tient compte de l'attribut "form" si renseigné. * * @param {jQuery} input Le champ pour lequel on veut le formulaire * * @returns {jQuery} Le formulaire correspondant */ static getFormOfInput (input) { let form; if (Utils.hasAttr(input, 'form')) { form = $('#' + input.attr('form')); } else { form = input.parents('form').first(); } return form; } /** * Supprime les doublons d'un tableau * * @param {any[]} array Le tableau à dédoublonner * * @returns {any[]} Le tableau dédoublonné */ static array_uniq (array) { return Array.from(new Set(array)); } /** * Met la première lettre d'une chaine de caractères en majuscule * * @param {string} string La chaine de caractères * * @returns {string} La chaine de caractères avec la première lettre en majuscule */ static string_ucFirst (string) { return string.charAt(0).toUpperCase() + string.slice(1); } /** * Calcule la taille RÉELLE d'un élément jQuery * * Prends la plus grande valeur entre la hauteur CSS de l'élément et la hauteur réelle de ses enfants. * * Cela permet de "corriger" le problème des conteneurs plus petit que leurs enfants * * @param {jQuery} element * * @returns {int} La hauteur réelle (en px) */ static getElementRealHeight (element) { if (element.length <= 0) { return 0; } const elementHeight = element.outerHeight(true); let childrenHeight = 0; element.children().each(function () { childrenHeight = Utils.getElementRealHeight($(this)); }); return parseInt(childrenHeight > elementHeight ? childrenHeight : elementHeight, 10); } /** * Ajoute des arguments à une URL * * @param {object} arguments Les arguments à ajouter * @param {string} url L'URL à laquelle ajouter les arguments ; celle actuelle (location.href) si non fournie * * @return {string} L'URL de résultat */ static addArgumentsToUrl (args, url = undefined) { if (Utils.isUndefined(url)) { url = document.location.href; } let urlObj = new URL(url); for (const [argumentName, argumentValue] of Object.entries(args)) { urlObj.searchParams.set(argumentName, argumentValue); } return urlObj.toString(); } }