PageSourceSearch

https://saint-aubin.fr/wp-content/plugins/hob-agenda-popup/assets/js/hob-agenda-popup.js?ver=1.1.0

js saint-aubin.fr collected 2026-10-02 21:12:08 UTC 3,052 bytes, 123 lines download raw bytes

1( function () {
2	'use strict';
3
4	if ( typeof hobAgendaPopupSettings === 'undefined' ) {
5		return;
6	}
7
8	var settings = hobAgendaPopupSettings;
9
10	document.addEventListener( 'DOMContentLoaded', function () {
11		var popup = document.getElementById( 'hob-agenda-popup' );
12
13		if ( ! popup ) {
14			return;
15		}
16
17		if ( ! hob_agenda_popup_should_show( settings ) ) {
18			return;
19		}
20
21		var delay = parseInt( settings.delay, 10 ) || 0;
22
23		window.setTimeout( function () {
24			hob_agenda_popup_open( popup, settings );
25		}, delay );
26
27		var closers = popup.querySelectorAll( '[data-hob-popup-close]' );
28		for ( var i = 0; i < closers.length; i++ ) {
29			closers[ i ].addEventListener( 'click', function () {
30				hob_agenda_popup_close( popup, settings );
31			} );
32		}
33
34		document.addEventListener( 'keydown', function ( event ) {
35			if ( 'Escape' === event.key && ! popup.hasAttribute( 'hidden' ) ) {
36				hob_agenda_popup_close( popup, settings );
37			}
38		} );
39	} );
40
41	/**
42	 * Détermine si la pop-up doit être affichée selon la fréquence configurée.
43	 *
44	 * @param {Object} settings Réglages transmis par PHP.
45	 * @return {boolean}
46	 */
47	function hob_agenda_popup_should_show( settings ) {
48		if ( 'always' === settings.frequency ) {
49			return true;
50		}
51
52		if ( 'once_per_session' === settings.frequency ) {
53			var seenSession = window.sessionStorage.getItem( settings.storageKey + '_' + settings.postId );
54			return ! seenSession;
55		}
56
57		var stored = window.localStorage.getItem( settings.storageKey );
58		var data   = {};
59
60		try {
61			data = stored ? JSON.parse( stored ) : {};
62		} catch ( e ) {
63			data = {};
64		}
65
66		var entry = data[ settings.postId ];
67
68		if ( ! entry ) {
69			return true;
70		}
71
72		if ( 'once_ever' === settings.frequency ) {
73			return false;
74		}
75
76		var now         = Date.now();
77		var elapsed     = now - entry;
78		var oneDay      = 24 * 60 * 60 * 1000;
79		var limitMillis = ( 'once_per_week' === settings.frequency ) ? 7 * oneDay : oneDay;
80
81		return elapsed > limitMillis;
82	}
83
84	/**
85	 * Mémorise que la pop-up a été vue, selon la fréquence configurée.
86	 *
87	 * @param {Object} settings Réglages transmis par PHP.
88	 */
89	function hob_agenda_popup_mark_seen( settings ) {
90		if ( 'always' === settings.frequency ) {
91			return;
92		}
93
94		if ( 'once_per_session' === settings.frequency ) {
95			window.sessionStorage.setItem( settings.storageKey + '_' + settings.postId, '1' );
96			return;
97		}
98
99		var stored = window.localStorage.getItem( settings.storageKey );
100		var data   = {};
101
102		try {
103			data = stored ? JSON.parse( stored ) : {};
104		} catch ( e ) {
105			data = {};
106		}
107
108		data[ settings.postId ] = Date.now();
109
110		window.localStorage.setItem( settings.storageKey, JSON.stringify( data ) );
111	}
112
113	function hob_agenda_popup_open( popup, settings ) {
114		popup.removeAttribute( 'hidden' );
115		document.body.classList.add( 'hob-agenda-popup-open' );
116		hob_agenda_popup_mark_seen( settings );
117	}
118
119	function hob_agenda_popup_close( popup, settings ) {
120		popup.setAttribute( 'hidden', 'hidden' );
121		document.body.classList.remove( 'hob-agenda-popup-open' );
122	}
123} )();

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.