PageSourceSearch

https://jeremyjoron.re/_osdln/js/modules/Popin/Popin.js?v=

js jeremyjoron.re collected 2026-10-07 22:02:44 UTC 6,569 bytes, 232 lines download raw bytes

1import {premier_chargement_module} from '/_osdln/js/lib/utilitaires.js'
2export class Popin
3{	
4	//----------------------------------------------------------------------------
5	//														     									ouvrir
6	 static async ouvrir(contenu, classe, callback_apres_fermeture, callback_apres_creation)
7	{
8		if(!contenu)
9		{
10			throw new Error(`Vous devez compléter le premier paramètre (CONTENU) pour ajouter du texte à la popin`, { cause: 'contenu_vide' });
11			
12			
13			return false
14		}
15		
16		//si une popin existe déjà, on l'a supprime
17		this.supprimer_ancienne_popin()
18		
19		//blackhole
20		this.creer_blackhole(classe)
21		
22		if(classe != 'chargement')
23			this.blackhole_init(callback_apres_fermeture);
24		
25		//popin
26		this.creer(contenu, classe)
27		this.init()
28		
29		//callback_apres_creation
30		if(callback_apres_creation) callback_apres_creation();
31		
32		
33	}//ouvrir
34	
35	//----------------------------------------------------------------------------
36	//														     								par_etape
37	static par_etape(campagne, contenu, classe, callback_apres_fermeture, callback_apres_creation)
38	{
39		const that = this
40		
41		if(!contenu)
42		{
43			throw new Error(`Vous devez compléter le premier paramètre pour ajouter du CONTENU à la popin`, { cause: 'contenu_vide' });
44			
45			return false
46		}
47		
48		try 
49		{
50			if (window.localStorage) 
51			{ 
52				const cookie							= localStorage.getItem(campagne);
53				if(cookie)
54				return {retour:true, msg:"deja_proposer"};
55			}
56		}
57		catch(erreur)
58		{
59			console.error(erreur)
60			return false
61		}
62		
63		//s'il n'y a pas un callback apres la fermeture de la popin
64		//alors on utilise celui par défaut
65		if(!callback_apres_fermeture) callback_apres_fermeture = function(){that.par_etape_callback(campagne)}
66		
67		//si une popin existe déjà, on l'a supprime
68		this.supprimer_ancienne_popin()
69		
70		//blackhole
71		this.creer_blackhole(classe)
72		this.blackhole_init(callback_apres_fermeture);
73		
74		//popin
75		this.creer(contenu, classe)
76		this.init()
77		
78		//callback_apres_creation
79		if(callback_apres_creation) callback_apres_creation();
80		
81		//configurer ce qu'il se passe quand on clique sur le bouton suivant
82		this.config_btn_etape_suivante()
83	
84		return {retour:true, msg:"ok"};
85	}//par_etape
86	
87	
88	//----------------------------------------------------------------------------
89	//														     	  	  config_btn_etape_suivante
90	static config_btn_etape_suivante()
91	{
92		const btn_suivants 							= document.querySelectorAll('#popin .suivant')
93		
94		btn_suivants.forEach(btn_suivant => 
95		{
96			const suivant 								= btn_suivant.getAttribute('data-suivant')				
97			if(!suivant) return false
98			
99			btn_suivant.addEventListener('click', function()
100			{
101				const ancien 							= document.querySelector('#popin .afficher')
102				ancien.classList.remove('afficher');
103				
104				const prochain 						= document.querySelector('#popin #'+suivant)
105				if(prochain) prochain.classList.add('afficher')
106			})	
107		})	
108	}//config_btn_etape_suivante
109	
110	//----------------------------------------------------------------------------
111	//														     					par_etape_callback
112	static async par_etape_callback(cle)
113	{		
114		try 
115		{			
116			const {enregistrer} 						= await import('/_osdln/js/lib/Donnees_locales.js?v='+v_donnees_locales);
117			var date = new Date()
118			date = date.setDate(date.getDate() + 1).toString()
119			enregistrer(cle, 1, date)
120				 
121		} catch (e) {
122			 // traitement lors de l'exception
123			 console.error(e)
124		}
125		
126	}//par_etape_callback
127	
128	//----------------------------------------------------------------------------
129	//														     			supprimer_ancienne_popin
130	static supprimer_ancienne_popin()
131	{
132		//si une popin existe déjà, on l'a supprime
133		const ancien = document.querySelector('#blackhole')
134		if(ancien) ancien.remove();
135		
136		const popin = document.querySelector('#popin')
137		if(popin) popin.remove()
138		
139	}//supprimer_ancienne_popin
140	
141	//----------------------------------------------------------------------------
142	//														     						creer_blackhole
143	static creer_blackhole(classe)
144	{
145		const blackhole = document.createElement('div');
146		blackhole.setAttribute('id', 'blackhole' )
147		if(classe) blackhole.className = 'bk_'+classe
148		
149		if(classe == 'chargement')
150		{
151			this.ajouter_animation_chargement(blackhole)
152		}
153		document.querySelector('body').appendChild(blackhole);
154		
155		return blackhole
156	}//creer_blackhole
157	
158	static ajouter_animation_chargement(blackhole)
159	{
160		const tpl = document.querySelector("#tpl_chargement_nouvelle_page");
161		var contenu = document.importNode(tpl.content, true);
162		blackhole.appendChild(contenu);	
163
164	}
165	//----------------------------------------------------------------------------
166	//														     						 blackhole_init
167	static blackhole_init(callback_apres_fermeture)
168	{
169		
170		const blackhole = document.querySelector('#blackhole')
171		const that = this;
172		
173		blackhole.addEventListener('click', function(event) 
174		{			
175			that.fermer(callback_apres_fermeture)
176		});
177		
178	}
179	
180	//----------------------------------------------------------------------------
181	//														     									fermer
182	static fermer(callback_apres_fermeture)
183	{
184		const blackhole = document.querySelector('#blackhole')
185		if(blackhole) blackhole.remove();
186		
187		const popin = document.querySelector('#popin')
188		if(popin) popin.remove();
189		
190		if(callback_apres_fermeture) callback_apres_fermeture()
191	}//fermer
192	
193	//----------------------------------------------------------------------------
194	//														     									 creer
195	static creer(contenu, classe)
196	{
197		var popin = document.createElement('div');
198		popin.setAttribute('id', 'popin' )
199		if(classe) popin.className = classe
200			
201		popin.innerHTML = contenu;
202		popin.innerHTML += '<p class="fermer"><i class="fas fa-times"></i></p>';
203		
204		document.querySelector('body').appendChild(popin);
205		window.dispatchEvent(new CustomEvent('nouveau_conteneur_charger'));
206		
207		
208	}//creer
209	
210	//----------------------------------------------------------------------------
211	//														     									  init
212	 static init()
213	 {
214		 const blackhole = document.querySelector('#blackhole')
215		 const popin = document.querySelector('#popin')
216		 const fermer = popin.querySelector('.fermer')
217		 
218		 fermer.addEventListener('click', function(event) 
219		 {
220			  blackhole.click();
221		 });
222		 
223	 }//init
224	
225}//popin
226
227//une fois que le module est chargé
228//on charge également son css
229//toute fois on ajoute un id à la balise link pour indiquer
230//que le fichier a été chargé une fois
231//pour ne pas réimporter le css plusieurs fois
232premier_chargement_module('Popin')

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.