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.