You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

163 lines
4.9 KiB
JavaScript

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();
}
/**
* Récupère une valeur data-*, avec gestion valeur par défaut
*
* @param {jQuery} element L'élément jQuery
* @param {string} key La clé de la donnée voulue
* @param {any} defaultValue La valeur par défaut
*
* @return {any} La valeur de la donnée
*/
static getData (element, key, defaultValue = undefined) {
const value = element.data(key);
if (Utils.isUndefined(value)) {
return defaultValue;
}
return value;
}
}