Khalid Zaz Ziani

Code Snippets

“ There is no Emotion     There is Peace.
   There is no Ignorance  There is Knowledge.
   There is no Passion       There is Serenity.
   There is no Death          There is only the Force. ”

— Odan-Urr,
The Jedi Code.
Jedi Master, Keeper of Antiquities.

Medal

Library

Une bibliothèque de bout de codes utiles ou de hack que j'ai écrit ou modifié au fil des années.
Il y en a bien plus mais faut que je les compile, que je les regroupe et que je les trie
ce qui est pas une mince affaire, je le ferais au fils du temps !

Total  sur 

// PHP

// Quel que soit le fuseau horaire du serveur
// Réglé dans le php.ini correspondant à votre version installée directement sur le serveur

date_default_timezone_set('Pacific/Noumea');
// Ou
date_default_timezone_set('Europe/Paris');
// PHP // Quel que soit le fuseau horaire du serveur // Réglé dans le php.ini correspondant à votre version installée directement sur le serveur date_default_timezone_set('Pacific/Noumea'); // Ou date_default_timezone_set('Europe/Paris');

// Javascript

// Un de mes premiers scripts historiques !
function sleep(milliseconds) {
  const date = Date.now();
  let currentDate = null;
  do {
      currentDate = Date.now();
      } while (currentDate - date < milliseconds);
}

sleep(2000); // 2 secondes d'attente

// Peut-être remplacé par setTimeout(functionRef, delay)
setTimeout(functionRef, 1000); // delay en milliseconds, ici 1 seconde

// Ou
setTimeout(function() {
 console.log('mettre vos instructions ici');
 console.log('mettre vos instructions ici');
}, 1000);
// Javascript // Un de mes premiers scripts historiques ! function sleep(milliseconds) { const date = Date.now(); let currentDate = null; do { currentDate = Date.now(); } while (currentDate - date < milliseconds); } sleep(2000); // 2 secondes d'attente // Peut-être remplacé par setTimeout(functionRef, delay) setTimeout(functionRef, 1000); // delay en milliseconds, ici 1 seconde // Ou setTimeout(function() { console.log('mettre vos instructions ici'); console.log('mettre vos instructions ici'); }, 1000);

<!-- HTML -->

<!-- Balises -->
<a href="#/" class="slide" id="slide1">Code</a>
<div class="post-code" id="post-code1">code here</div>


// jQuery

//Fonction pour gérer plusieurs slides sur la même page
$(document).ready(function(){
  $(".slide").on("click",function(){
    var $this = $(this);
    $this.next().slideToggle();
    // Partie optionnelle
    if($this.text() === "Code"){
      $this.text("Close");
    } else{
      $this.text("Code");
    }
  })
});
<!-- HTML --> <!-- Balises --> <a href="#/" class="slide" id="slide1">Code</a> <div class="post-code" id="post-code1">code here</div> // jQuery //Fonction pour gérer plusieurs slides sur la même page $(document).ready(function(){ $(".slide").on("click",function(){ var $this = $(this); $this.next().slideToggle(); // Partie optionnelle if($this.text() === "Code"){ $this.text("Close"); } else{ $this.text("Code"); } }) });

// jQuery 1.8 et versions plus récentes

// Respecte la casse
$("insert tag html:not(:contains('mot clé'))").parents("tag html parent").css("display", "none");

//Autres solutions
$("tag html parent").has(":contains('mot clé')").show();
$("tag html parent").not(":has(:contains('mot clé'))").hide();
// jQuery 1.8 et versions plus récentes // Respecte la casse $("insert tag html:not(:contains('mot clé'))").parents("tag html parent").css("display", "none"); //Autres solutions $("tag html parent").has(":contains('mot clé')").show(); $("tag html parent").not(":has(:contains('mot clé'))").hide();

// Javascript

//Fonction pour gérer les paramètres d'URL $_GET
function GET(param) {
    var params = new URLSearchParams(window.location.search);
    if (param) {
        return params.has(param) ? params.get(param) : '';
    }

    var vars = {};
    params.forEach((value, key) => {
        vars[key] = value;
    });

    return vars;
}
// Javascript //Fonction pour gérer les paramètres d'URL $_GET function GET(param) { var params = new URLSearchParams(window.location.search); if (param) { return params.has(param) ? params.get(param) : ''; } var vars = {}; params.forEach((value, key) => { vars[key] = value; }); return vars; }

<!-- HTML -->

<!-- Header -->
<div id="content">

<!-- Footer -->
<div id="footer">

<!-- En bas de page -->
<div id="scrollDown">
  <a href="#footer"><img src="images/to_down.png"/></a>
</div>
<div id="scrollUp">
  <a href="#content"><img src="images/to_top.png"/></a>
</div>


/* CSS */

#scrollUp {
  position: fixed;
  bottom : 12px;
  right: -100px;
  opacity: 0.5;
}

#scrollDown {
  position: fixed;
  Top : 12px;
  right: -100px;
  opacity: 0.5;
}


// jQuery

//Fonction qui gère le slide vers le haut ou la bas de la page
jQuery(function(){
    $(function(){
        $(window).scroll(function () {
            if ($(this).scrollTop() > 200 ) {
                $('#scrollUp').css('right','20px');
                $('#scrollDown').css('right','20px');
            } else {
                $('#scrollUp').removeAttr( 'style' );
                $('#scrollDown').removeAttr( 'style' );
            }
        });
    });
});
<!-- HTML --> <!-- Header --> <div id="content"> <!-- Footer --> <div id="footer"> <!-- En bas de page --> <div id="scrollDown"> <a href="#footer"><img src="images/to_down.png"/></a> </div> <div id="scrollUp"> <a href="#content"><img src="images/to_top.png"/></a> </div> /* CSS */ #scrollUp { position: fixed; bottom : 12px; right: -100px; opacity: 0.5; } #scrollDown { position: fixed; Top : 12px; right: -100px; opacity: 0.5; } // jQuery //Fonction qui gère le slide vers le haut ou la bas de la page jQuery(function(){ $(function(){ $(window).scroll(function () { if ($(this).scrollTop() > 200 ) { $('#scrollUp').css('right','20px'); $('#scrollDown').css('right','20px'); } else { $('#scrollUp').removeAttr( 'style' ); $('#scrollDown').removeAttr( 'style' ); } }); }); });

// Javascript

// Sélection de l'élément
var div = document.getElementById("monDiv");

// Création d'un événement `click`
var simulatedDivClick = new MouseEvent("click", {
  bubbles: true,
  cancelable: true,
  view: window
});

// Clique automatiquement après 1 seconde
setTimeout(function () {
  div.dispatchEvent(simulatedDivClick);
  console.log("Clic simulé !");
}, 1000);
// Javascript // Sélection de l'élément var div = document.getElementById("monDiv"); // Création d'un événement `click` var simulatedDivClick = new MouseEvent("click", { bubbles: true, cancelable: true, view: window }); // Clique automatiquement après 1 seconde setTimeout(function () { div.dispatchEvent(simulatedDivClick); console.log("Clic simulé !"); }, 1000);

// Javascript

// Sélectionne tous les éléments avec la classe donnée
var divs = document.querySelectorAll(".maClasse");

// Convertit NodeList en tableau
var divsArray = Array.from(divs);

// Filtre les éléments cachés et visibles
var displayNone = divsArray.filter(el => getComputedStyle(el).display === "none");
var displayShow = divsArray.filter(el => getComputedStyle(el).display !== "none");

// Compte les éléments
var numberOfHiddenDivs = displayNone.length;
var numberOfVisibleDivs = displayShow.length;

// Affiche les résultats dans la console
console.log("Divs cachés :", numberOfHiddenDivs);
console.log("Divs visibles :", numberOfVisibleDivs);
// Javascript // Sélectionne tous les éléments avec la classe donnée var divs = document.querySelectorAll(".maClasse"); // Convertit NodeList en tableau var divsArray = Array.from(divs); // Filtre les éléments cachés et visibles var displayNone = divsArray.filter(el => getComputedStyle(el).display === "none"); var displayShow = divsArray.filter(el => getComputedStyle(el).display !== "none"); // Compte les éléments var numberOfHiddenDivs = displayNone.length; var numberOfVisibleDivs = displayShow.length; // Affiche les résultats dans la console console.log("Divs cachés :", numberOfHiddenDivs); console.log("Divs visibles :", numberOfVisibleDivs);

<!-- HTML -->

<!-- Balise -->
<p id="compteur">nb</p>


// Javascript

var n = 100; // nombre final du compteur
var cpt = 0; // initialisation du compteur
var duree = 2; // durée en seconde pendant laquelle le compteur ira de 0 à 15
var delta = Math.ceil((duree * 1000) / n);
// On calcule l'interval de temps entre chaque rafraîchissement du compteur (durée mise en milliseconde)

var node =  document.getElementById("compteur"); // on récupère notre noeud où sera rafraîchi la valeur du compteur

function countdown() {
  node.innerHTML = ++cpt + '%';
  if( cpt < n ) { // si on est pas arrivé à la valeur finale, on relance notre compteur une nouvelle fois
     setTimeout(countdown, delta);
  }
}

setTimeout(countdown, delta);
<!-- HTML --> <!-- Balise --> <p id="compteur">nb</p> // Javascript var n = 100; // nombre final du compteur var cpt = 0; // initialisation du compteur var duree = 2; // durée en seconde pendant laquelle le compteur ira de 0 à 15 var delta = Math.ceil((duree * 1000) / n); // On calcule l'interval de temps entre chaque rafraîchissement du compteur (durée mise en milliseconde) var node = document.getElementById("compteur"); // on récupère notre noeud où sera rafraîchi la valeur du compteur function countdown() { node.innerHTML = ++cpt + '%'; if( cpt < n ) { // si on est pas arrivé à la valeur finale, on relance notre compteur une nouvelle fois setTimeout(countdown, delta); } } setTimeout(countdown, delta);

// Javascript

//Fonction pour enregistrer un texte dans un fichier texte
function strDownload(a, b) {
  // Convertir 'a' en chaîne de caractères, au cas où il ne serait pas déjà une chaîne
  a = String(a);

  // Utiliser 'download.txt' par défaut si 'b' n'est pas fourni
  b = b || 'download.txt';

  // Créer un élément <a> pour télécharger le fichier
  const c = document.createElement('a');
  c.href = 'data:text/plain;charset=utf-8,' + encodeURIComponent(a);
  c.download = b;

  // Ajouter l'élément à la page, simuler un clic et retirer l'élément après
  document.body.appendChild(c);
  c.click();
  document.body.removeChild(c);
}


// Fonction à insérer dans le code
strDownload('Texte à télécharger', 'text.txt');
// Javascript //Fonction pour enregistrer un texte dans un fichier texte function strDownload(a, b) { // Convertir 'a' en chaîne de caractères, au cas où il ne serait pas déjà une chaîne a = String(a); // Utiliser 'download.txt' par défaut si 'b' n'est pas fourni b = b || 'download.txt'; // Créer un élément <a> pour télécharger le fichier const c = document.createElement('a'); c.href = 'data:text/plain;charset=utf-8,' + encodeURIComponent(a); c.download = b; // Ajouter l'élément à la page, simuler un clic et retirer l'élément après document.body.appendChild(c); c.click(); document.body.removeChild(c); } // Fonction à insérer dans le code strDownload('Texte à télécharger', 'text.txt');

// Javascript

//Fonction pour enregistrer un texte de la page dans le presse-papier
function strClipboard(a, b) {
  // Utiliser l'API moderne Clipboard pour copier le texte
  navigator.clipboard.writeText(a)
    .then(() => {
      // Appel du callback si une fonction est fournie
      if (typeof b === 'function') {
        b(a);
      }
    })
    .catch(err => {
      console.error('Erreur de copie dans le presse-papiers :', err);
    });
}
// Javascript //Fonction pour enregistrer un texte de la page dans le presse-papier function strClipboard(a, b) { // Utiliser l'API moderne Clipboard pour copier le texte navigator.clipboard.writeText(a) .then(() => { // Appel du callback si une fonction est fournie if (typeof b === 'function') { b(a); } }) .catch(err => { console.error('Erreur de copie dans le presse-papiers :', err); }); }

// Javascript

//Fonction qui supprime les accents dans une chaine de caractères
function strNoAccent(chainea) {
    var chaineb = "áàâäãåçéèêëíïîìñóòôöõúùûüýÁÀÂÄÃÅÇÉÈÊËÍÏÎÌÑÓÒÔÖÕÚÙÛÜÝ",
        chainec = "aaaaaaceeeeiiiinooooouuuuyAAAAAACEEEEIIIINOOOOOUUUUY",
        chained = "";

    for (var i = 0, j = chainea.length; i < j; i++) {
        var chainee = chainea[i];
        var index = chaineb.indexOf(chainee);
        chained += (index !== -1) ? chainec[index] : chainee;
    }

    return chained;
}

//Résultats
console.log(strNoAccent("Héllo, ça va?")); // "Hello, ca va?"
console.log(strNoAccent("Éléphant & île")); // "Elephant & ile"
// Javascript //Fonction qui supprime les accents dans une chaine de caractères function strNoAccent(chainea) { var chaineb = "áàâäãåçéèêëíïîìñóòôöõúùûüýÁÀÂÄÃÅÇÉÈÊËÍÏÎÌÑÓÒÔÖÕÚÙÛÜÝ", chainec = "aaaaaaceeeeiiiinooooouuuuyAAAAAACEEEEIIIINOOOOOUUUUY", chained = ""; for (var i = 0, j = chainea.length; i < j; i++) { var chainee = chainea[i]; var index = chaineb.indexOf(chainee); chained += (index !== -1) ? chainec[index] : chainee; } return chained; } //Résultats console.log(strNoAccent("Héllo, ça va?")); // "Hello, ca va?" console.log(strNoAccent("Éléphant & île")); // "Elephant & ile"

//Regex

// Correspond à une adresse e-mail
/^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/gm

// Correspond à une url finissant par /
/(http:\/\/www\.|https:\/\/www\.|http:\/\/|https:\/\/)?[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(:[0-9]{1,5})?(\/)/gm

// Vérifie que la chaîne de caractère ne possède que des chiffres
/^[0-9]*$/gm

// Chaîne de caractère entourée de ""
/("([^"]|"")*")/gm

// Vérifie qu'une adresse IP est valide
/^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$/gm

// Vérifie qu'une date est valide (Version Française)
/^(0?[1-9]|[12][0-9]|3[01])-(0?[1-9]|1[0-2])-\d\d\d\d (00|[0-9]|1[0-9]|2[0-3]):([0-9]|[0-5][0-9]):([0-9]|[0-5][0-9])$/gm

// Vérifie qu'une date est valide (Version US)
/^\d\d\d\d-(0?[1-9]|1[0-2])-(0?[1-9]|[12][0-9]|3[01]) (00|[0-9]|1[0-9]|2[0-3]):([0-9]|[0-5][0-9]):([0-9]|[0-5][0-9])$/gm
//Regex // Correspond à une adresse e-mail /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/gm // Correspond à une url finissant par / /(http:\/\/www\.|https:\/\/www\.|http:\/\/|https:\/\/)?[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(:[0-9]{1,5})?(\/)/gm // Vérifie que la chaîne de caractère ne possède que des chiffres /^[0-9]*$/gm // Chaîne de caractère entourée de "" /("([^"]|"")*")/gm // Vérifie qu'une adresse IP est valide /^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$/gm // Vérifie qu'une date est valide (Version Française) /^(0?[1-9]|[12][0-9]|3[01])-(0?[1-9]|1[0-2])-\d\d\d\d (00|[0-9]|1[0-9]|2[0-3]):([0-9]|[0-5][0-9]):([0-9]|[0-5][0-9])$/gm // Vérifie qu'une date est valide (Version US) /^\d\d\d\d-(0?[1-9]|1[0-2])-(0?[1-9]|[12][0-9]|3[01]) (00|[0-9]|1[0-9]|2[0-3]):([0-9]|[0-5][0-9]):([0-9]|[0-5][0-9])$/gm

// Javascript

// Mettre la première lettre en majuscule
function strftoUpper(chaine) {
  // Vérification si la chaîne est vide ou nulle
  if (!chaine) return '';
  return chaine.charAt(0).toUpperCase() + chaine.slice(1);
}

strftoUpper('texte');
// renvoie : "Texte"

// Mettre la première lettre en minuscule
function strFtolower(chaine) {
  if (!chaine) return '';  // Retourne une chaîne vide si la chaîne est vide ou nulle.
  return chaine.charAt(0).toLowerCase() + chaine.slice(1);
}

strFtolower('Texte');
// renvoie : "texte"
// Javascript // Mettre la première lettre en majuscule function strftoUpper(chaine) { // Vérification si la chaîne est vide ou nulle if (!chaine) return ''; return chaine.charAt(0).toUpperCase() + chaine.slice(1); } strftoUpper('texte'); // renvoie : "Texte" // Mettre la première lettre en minuscule function strFtolower(chaine) { if (!chaine) return ''; // Retourne une chaîne vide si la chaîne est vide ou nulle. return chaine.charAt(0).toLowerCase() + chaine.slice(1); } strFtolower('Texte'); // renvoie : "texte"

// Javascript

let timestamp = new Date();

// Variables dans lesquelles seront stockées les données
var titre, donnees;

// Récupération du fichier
var URLfile = 'data.json?nocache=' + timestamp; // URL avec TimeStamp pour maj temps réel des données
var request = new XMLHttpRequest();
request.open('GET', URLfile);
request.responseType = 'json';
request.send();
request.onload = function() {
  var response = request.response;
  titre = response['data_file'];
  donnees = response['data_entrees'];
};


// Fichier Json

{
    "data_file":"Ceci est l'entête des données",
    "data_entrees":[
        {
            "id" : 1,
            "data_01" : "Une donnée",
            "data_02" : "Une autre donnée"
        },
        {
            "id": 2,
            "data_01" : "Encore une donnée",
            "data_02" : "Encore une autre donnée"
        }
    ]
}
// Javascript let timestamp = new Date(); // Variables dans lesquelles seront stockées les données var titre, donnees; // Récupération du fichier var URLfile = 'data.json?nocache=' + timestamp; // URL avec TimeStamp pour maj temps réel des données var request = new XMLHttpRequest(); request.open('GET', URLfile); request.responseType = 'json'; request.send(); request.onload = function() { var response = request.response; titre = response['data_file']; donnees = response['data_entrees']; }; // Fichier Json { "data_file":"Ceci est l'entête des données", "data_entrees":[ { "id" : 1, "data_01" : "Une donnée", "data_02" : "Une autre donnée" }, { "id": 2, "data_01" : "Encore une donnée", "data_02" : "Encore une autre donnée" } ] }

// Javascript

// Variables dans lesquelles seront stockées les données
var titre, donnees;

//Fonction pour récupérer un ficher JSON en ligne
$.ajax({
  type: "GET",
        url: 'data.json',
        dataType: "json",
        cache: false,
        success: function (data, textStatus, jqXHR) {
          titre = data['data_file'];
          donnees = data['data_entrees'];
          console.log(jqXHR.status); // statut de la requête
        },
        error: function(jqXHR, textStatus, errorThrown) {
        console.log(jqXHR.status); // statut de la requête
        }
  }).done( function(data) {
      console.log("Cette fonction se lance après la fin de la requête s’il n'y a pas d'erreur");
    })
    .always( function() {
      console.log("Cette fonction se lance quoi qu'il arrive");
    });


// Fichier Json

{
    "data_file":"Ceci est l'entête des données",
    "data_entrees":[
        {
            "id" : 1,
            "data_01" : "Une donnée",
            "data_02" : "Une autre donnée"
        },
        {
            "id": 2,
            "data_01" : "Encore une donnée",
            "data_02" : "Encore une autre donnée"
        }
    ]
}
// Javascript // Variables dans lesquelles seront stockées les données var titre, donnees; //Fonction pour récupérer un ficher JSON en ligne $.ajax({ type: "GET", url: 'data.json', dataType: "json", cache: false, success: function (data, textStatus, jqXHR) { titre = data['data_file']; donnees = data['data_entrees']; console.log(jqXHR.status); // statut de la requête }, error: function(jqXHR, textStatus, errorThrown) { console.log(jqXHR.status); // statut de la requête } }).done( function(data) { console.log("Cette fonction se lance après la fin de la requête s’il n'y a pas d'erreur"); }) .always( function() { console.log("Cette fonction se lance quoi qu'il arrive"); }); // Fichier Json { "data_file":"Ceci est l'entête des données", "data_entrees":[ { "id" : 1, "data_01" : "Une donnée", "data_02" : "Une autre donnée" }, { "id": 2, "data_01" : "Encore une donnée", "data_02" : "Encore une autre donnée" } ] }

// Javascript

//Fonction qui cherche si le terme est présent

//Ancienne version
function hasTerm(string, terms) {
   function search(term) { return string.includes(term); }
   return terms.map(search).includes(true);
   }

//Nouvelle version
function hasTerm(string, terms) {
  return terms.some(term => string.includes(term));
}

// Fonction à insérer dans le code
motscles = ['mot1', 'mot2', 'mot3', 'mot4', 'mot5'];
hasTerm("text dans lequel on souhaite chercher", motscles);
// Javascript //Fonction qui cherche si le terme est présent //Ancienne version function hasTerm(string, terms) { function search(term) { return string.includes(term); } return terms.map(search).includes(true); } //Nouvelle version function hasTerm(string, terms) { return terms.some(term => string.includes(term)); } // Fonction à insérer dans le code motscles = ['mot1', 'mot2', 'mot3', 'mot4', 'mot5']; hasTerm("text dans lequel on souhaite chercher", motscles);

// Javascript

//Fonction qui renvoi si le chiffre est pair ou impair
function numIsPair(n) {
  return (!(n & 1));
}

// Fonction à insérer dans le code
if (numIsPair(nombre)) {
  console.log("Ce chiffre est pair"); // nombre = 2
} else {
  console.log("Ce chiffre est impair"); // nombre = 1
}
// Javascript //Fonction qui renvoi si le chiffre est pair ou impair function numIsPair(n) { return (!(n & 1)); } // Fonction à insérer dans le code if (numIsPair(nombre)) { console.log("Ce chiffre est pair"); // nombre = 2 } else { console.log("Ce chiffre est impair"); // nombre = 1 }

//Regex

// Capture ce qui se trouve entre le début de h2 et le < suivant
/<\s*h2[^>]*>(.*?)<\s*\s*/g

// Sélectionne des tags html correspondant (tag a dans l'exemple ci-dessous)
/<\s*a[^>]*>(.*?)<\s*/\s*a>/g

// Match tous les caractères spéciaux
\`|\~|\!|\@|\#|\$|\%|\^|\&|\*|\(|\)|\+|\=|\[|\{|\]|\}|\||\\|\'|\<|\,|\.|\>|\?|\/|\""|\;|\:|\s

// Match si une chaine de caractère est un MD5 hash
/^[a-f0-9]{32}$/gm

// Match un nom d'host valide
/^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\-]*[A-Za-z0-9])$/gm

// Match une variable ne contenant pas les mots bad words
/^((?!bad|words).)*$/gm
//Regex // Capture ce qui se trouve entre le début de h2 et le < suivant /<\s*h2[^>]*>(.*?)<\s*\s*/g // Sélectionne des tags html correspondant (tag a dans l'exemple ci-dessous) /<\s*a[^>]*>(.*?)<\s*/\s*a>/g // Match tous les caractères spéciaux \`|\~|\!|\@|\#|\$|\%|\^|\&|\*|\(|\)|\+|\=|\[|\{|\]|\}|\||\\|\'|\<|\,|\.|\>|\?|\/|\""|\;|\:|\s // Match si une chaine de caractère est un MD5 hash /^[a-f0-9]{32}$/gm // Match un nom d'host valide /^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\-]*[A-Za-z0-9])$/gm // Match une variable ne contenant pas les mots bad words /^((?!bad|words).)*$/gm

// Javascript

//Fonction pour afficher qu'une partie d'un texte si trop long
function truncateString(str, maxLength) {
  if (!str || str.length <= maxLength) {
    return str || '';  // Retourne une chaîne vide si str est falsy
  }
  return str.slice(0, maxLength) + "...";
}

// Examples d'utilisation
let longString = "Ceci est une très longue phrase qui dépasse le nombre de caractère max.";
let shortString = "Phrase courte.";

console.log(truncateString(longString, 30)); // output: "Ceci est une très longue p..."
console.log(truncateString(shortString, 30)); // output: "Phrase courte."
// Javascript //Fonction pour afficher qu'une partie d'un texte si trop long function truncateString(str, maxLength) { if (!str || str.length <= maxLength) { return str || ''; // Retourne une chaîne vide si str est falsy } return str.slice(0, maxLength) + "..."; } // Examples d'utilisation let longString = "Ceci est une très longue phrase qui dépasse le nombre de caractère max."; let shortString = "Phrase courte."; console.log(truncateString(longString, 30)); // output: "Ceci est une très longue p..." console.log(truncateString(shortString, 30)); // output: "Phrase courte."

// Javascript

// Fonction asynchrone pour charger un fichier JSON
async function fetchJsonData(url) {
  try {
    const response = await fetch(url, { method: 'GET', cache: 'no-store' }); // attend la réponse de l'API
    if (!response.ok) {
      throw new Error('Erreur de chargement du fichier JSON');
    }
    return await response.json(); // attend la conversion de la réponse en JSON
  } catch (error) {
    console.error('Erreur : ', error);
    throw error; // lancer l'erreur pour la gérer à l'extérieur de la fonction fetchJsonData
  }
}

// Fonction asynchrone pour charger les deux fichiers JSON consécutivement
async function loadJsonFiles() {
  try {
    // Charger le premier fichier JSON
    const jsonData1 = await fetchJsonData('url_du_premier_fichier.json');

    // Utiliser les informations du premier fichier pour construire l'URL du deuxième fichier
    const urlDuDeuxiemeFichier = `url_base/${jsonData1.info}`;

    // Charger le deuxième fichier JSON en utilisant l'URL construite
    const jsonData2 = await fetchJsonData(urlDuDeuxiemeFichier);

    // Traitement des données (ici, nous pouvons manipuler ou combiner les données des deux fichiers)
    const resultatFinal = {
      donneesFichier1: jsonData1,
      donneesFichier2: jsonData2
    };

    // Retourner le résultat final
    return resultatFinal;
  } catch (error) {
    console.error('Une erreur s\'est produite lors du chargement des fichiers JSON:', error);
    throw error; // lancer l'erreur pour la gérer à l'extérieur de la fonction loadJsonFiles
  }
}

// Appeler la fonction pour charger les fichiers JSON
loadJsonFiles()
  .then(resultatFinal => {
    titre_1 = resultatFinal.donneesFichier1['data_file'];
    donnees_1 = resultatFinal.donneesFichier1['data_entrees'];

    titre_2 = resultatFinal.donneesFichier2['title'];
    donnees_2 = resultatFinal.donneesFichier2['entrees'];

    console.log('Résultat final:', resultatFinal);
    // Vous pouvez effectuer d'autres opérations avec le résultat final ici
  })
  .catch(error => {
    console.error('Une erreur s\'est produite:', error);
  });


// Fichier Json 1

{
    "data_file":"Ceci est l'entête des données du fichier JSON 1",
    "data_entrees":[
        {
            "id" : 1,
            "data_01" : "Une donnée",
            "data_02" : "Une autre donnée"
        }
    ]
}

// Fichier Json 2

{
    "title":"Ceci est l'entête des données du fichier JSON 2",
    "entrees":[
        {
            "id" : 1,
            "data_01" : "Une donnée"
        },
        {
            "id": 2,
            "data_01" : "Encore une donnée",
            "data_02" : "Encore une autre donnée"
        }
    ]
}
// Javascript // Fonction asynchrone pour charger un fichier JSON async function fetchJsonData(url) { try { const response = await fetch(url, { method: 'GET', cache: 'no-store' }); // attend la réponse de l'API if (!response.ok) { throw new Error('Erreur de chargement du fichier JSON'); } return await response.json(); // attend la conversion de la réponse en JSON } catch (error) { console.error('Erreur : ', error); throw error; // lancer l'erreur pour la gérer à l'extérieur de la fonction fetchJsonData } } // Fonction asynchrone pour charger les deux fichiers JSON consécutivement async function loadJsonFiles() { try { // Charger le premier fichier JSON const jsonData1 = await fetchJsonData('url_du_premier_fichier.json'); // Utiliser les informations du premier fichier pour construire l'URL du deuxième fichier const urlDuDeuxiemeFichier = `url_base/${jsonData1.info}`; // Charger le deuxième fichier JSON en utilisant l'URL construite const jsonData2 = await fetchJsonData(urlDuDeuxiemeFichier); // Traitement des données (ici, nous pouvons manipuler ou combiner les données des deux fichiers) const resultatFinal = { donneesFichier1: jsonData1, donneesFichier2: jsonData2 }; // Retourner le résultat final return resultatFinal; } catch (error) { console.error('Une erreur s\'est produite lors du chargement des fichiers JSON:', error); throw error; // lancer l'erreur pour la gérer à l'extérieur de la fonction loadJsonFiles } } // Appeler la fonction pour charger les fichiers JSON loadJsonFiles() .then(resultatFinal => { titre_1 = resultatFinal.donneesFichier1['data_file']; donnees_1 = resultatFinal.donneesFichier1['data_entrees']; titre_2 = resultatFinal.donneesFichier2['title']; donnees_2 = resultatFinal.donneesFichier2['entrees']; console.log('Résultat final:', resultatFinal); // Vous pouvez effectuer d'autres opérations avec le résultat final ici }) .catch(error => { console.error('Une erreur s\'est produite:', error); }); // Fichier Json 1 { "data_file":"Ceci est l'entête des données du fichier JSON 1", "data_entrees":[ { "id" : 1, "data_01" : "Une donnée", "data_02" : "Une autre donnée" } ] } // Fichier Json 2 { "title":"Ceci est l'entête des données du fichier JSON 2", "entrees":[ { "id" : 1, "data_01" : "Une donnée" }, { "id": 2, "data_01" : "Encore une donnée", "data_02" : "Encore une autre donnée" } ] }