1(function(){ 2 /** 3 * Create Overlay 4 * 5 * Creates the overlay element if it doesn't exist and returns it. 6 * 7 * @since 1.0.0 8 */ 9 function createOverlay() { 10 if ( ! document.getElementById('kellogSovereignTeamOverlay') ) { 11 const overlayNode = document.createElement( 'div' ); 12 overlayNode.id = "kellogSovereignTeamOverlay"; 13 overlayNode.classList.add('kellogg-sovereign-team-overlay'); 14 overlayNode.style.display = "none"; 15 overlayNode.setAttribute( 'data-overlay', 'toggle' ); 16 overlayNode.innerHTML = ` 17 <div class="module"> 18 <div class="full-image"> 19 <div> 20 <img> 21 </div> 22 </div> 23 <div class="bio"> 24 <p class="name"></p> 25 <p class="title"></p> 26 <hr class="orange"> 27 <div class="description"></div> 28 </div> 29 <ul class="footer"></ul> 30 <div class="close"> 31 <button data-overlay="toggle"> 32 <svg version="1.1" viewBox="0 0 5.7274 5.7274" xmlns="http://www.w3.org/2000/svg"><g transform="translate(-103.7 -60.966)"><path d="m103.98 61.249 5.1617 5.1617"></path><path d="m109.14 61.249-5.1617 5.1617"></path></g></svg> 33 </button> 34 </div> 35 </div>`; 36 document.body.append( overlayNode ); 37 } 38 return document.getElementById('kellogSovereignTeamOverlay'); 39 } 40 /** 41 * Fill Overlay 42 * 43 * Fills the popup overlay with data for the team member. 44 * 45 * @since 1.0.0 46 */ 47 function fillOverlay( overlay, previewCard ) { 48 const overlayFields = { 49 name: overlay.querySelector('.bio>.name'), 50 title: overlay.querySelector('.bio>.title'), 51 description: overlay.querySelector('.bio>.description'), 52 footer: overlay.querySelector('.module>.footer'), 53 image: overlay.querySelector('.module>.full-image img'), 54 }; 55 const dataForPopup = { 56 name: previewCard.querySelector('.name').innerHTML, 57 title: previewCard.querySelector('.title').innerHTML, 58 email: previewCard.querySelector('.email').innerHTML, 59 certification: previewCard.querySelector('.certification').innerHTML, 60 division: previewCard.querySelector('.division').innerHTML, 61 description: previewCard.querySelector('.for-popup').innerHTML, 62 image: previewCard.querySelector('.for-popup').dataset.src, 63 }; 64 overlayFields.name.innerHTML = dataForPopup.name; 65 overlayFields.title.innerHTML = dataForPopup.title; 66 overlayFields.description.innerHTML = dataForPopup.description; 67 overlayFields.image.src = dataForPopup.image; 68 overlayFields.footer.innerHTML = 69 ( dataForPopup.email ? `<li>${dataForPopup.email}</li>` : '' ) + 70 ( dataForPopup.certification ? `<li>${dataForPopup.certification}</li>` : '' ) + 71 ( dataForPopup.division ? `<li>${dataForPopup.division}</li>` : '' ); 72 } 73 /** 74 * Toggle Overlay 75 * 76 * Adjusts the visibility of the popup and makes sure it is filled with team member data. 77 * 78 * @since 1.0.0 79 */ 80 function toggle( previewCard, event ) { 81 const overlay = document.getElementById('kellogSovereignTeamOverlay'); 82 if ( overlay.locked ) { 83 return false; 84 } 85 if ( event && event.target.dataset.overlay !== "toggle" ) { 86 return false; 87 } 88 overlay.locked = true; 89 if ( overlay.style.display === "flex" ) { 90 overlay.style.opacity="0"; 91 setTimeout( () => { 92 overlay.style.display="none"; 93 overlay.locked = false; 94 }, 300 ); 95 } 96 else { 97 overlay.style.display="none"; 98 overlay.style.opacity="0"; 99 fillOverlay( overlay, previewCard ); 100 overlay.style.display="flex"; 101 window.requestAnimationFrame( () => { 102 overlay.style.opacity="1"; 103 } ); 104 setTimeout( () => { 105 overlay.locked = false; 106 }, 300 ); 107 } 108 } 109 /** 110 * Initial Function 111 * 112 * Manages all aspects of the popup overlay. 113 * 114 * @since 1.0.0 115 */ 116 function init() { 117 const overlay = createOverlay(); 118 overlay.addEventListener( 'click', ( event ) => { toggle( false, event ) } ); 119 overlay.querySelector('.close button').addEventListener( 'click', () => { toggle() } ); 120 document.querySelectorAll('.kellogg-sovereign-team').forEach( teamMember => { 121 teamMember.querySelector('.preview-card').addEventListener( 'click', () => { toggle( teamMember ) } ); 122 });
123 } 124 init(); 125})();
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.