77 lines
2.5 KiB
JavaScript
77 lines
2.5 KiB
JavaScript
// prévention de l'empilement d'alertes, qui entrainerait la suppression de tous les messages sauf le dernier
|
|
// Pour cela, on utilise une file et une fonction asynchrone qui boucle et vide la file alerte par alerte
|
|
let file_alertes = []
|
|
|
|
function ouvrirAlerte(message,prompt=false){
|
|
|
|
// on renvoie une promise pour couvrir le cas d'une alerte en mode prompt
|
|
// qui se doit donc de renvoyer le texte saisi par l'utilisateur
|
|
return new Promise((resolve) => {
|
|
file_alertes.push({message,prompt,resolve})
|
|
|
|
// si c'est la seule alerte en attente, on l'affiche
|
|
if(file_alertes.length == 1 ) {
|
|
afficherAlerte(file_alertes[0].message, file_alertes[0].prompt)
|
|
}
|
|
// sinon, elle sera automatiquement affichée lors de la fermeture de l'alerte juste avant dans la file
|
|
})
|
|
|
|
}
|
|
|
|
|
|
// Fonction pour afficher une alerte mais plus jolie que celle par défaut
|
|
function afficherAlerte(message,prompt) {
|
|
// on signale une alerte en train d'être visionnée
|
|
flag = true
|
|
|
|
|
|
// on prend les elements
|
|
let modal = document.getElementById("alerte_jolie")
|
|
|
|
const message_ele = document.getElementById("message_alerte_jolie")
|
|
|
|
// Mettre le message
|
|
message_ele.textContent = message;
|
|
|
|
// afficher la barre de saisie de texte si besoin
|
|
const alerte_input = document.getElementById("input_alerte_jolie")
|
|
if(prompt){
|
|
//inline pour mettre l'input à coté du bouton OK :)
|
|
alerte_input.style.display = "inline-block";
|
|
}else{
|
|
alerte_input.style.display = "none";
|
|
}
|
|
|
|
// et on affiche en changeant la propriété css
|
|
modal.style.display = "block";
|
|
}
|
|
|
|
|
|
// Fonction pour fermer l'alerte
|
|
function fermerAlerte() {
|
|
|
|
var modal = document.getElementById('alerte_jolie');
|
|
|
|
// et on cache en changeant la propriété css
|
|
modal.style.display = "none";
|
|
|
|
// enlève notre élément de la file
|
|
|
|
const alerte_vue = file_alertes.shift()
|
|
console.log(alerte_vue)
|
|
|
|
// resolve la promise de ouvrirAlerte avec la valeur de l'input
|
|
// quand l'utilisateur a fermé l'alerte
|
|
// dans le cas d'une alerte sans le mode prompt, on ne récupère pas de valeur
|
|
// donc on se moque de ce que cela peut renvoyer (Nan, sans doute)
|
|
const alerte_input = document.getElementById("input_alerte_jolie")
|
|
if(alerte_vue.resolve){
|
|
alerte_vue.resolve(alerte_input.value)
|
|
}
|
|
|
|
// affiche récursivement les autres alertes en attentes
|
|
if(file_alertes.length > 0){
|
|
afficherAlerte(file_alertes[0].message, file_alertes[0].prompt)
|
|
}
|
|
|
|
}
|