1// site navigation fixed 2const fiFixSiteNavigation = () => { 3 const scrollY = window.scrollY 4 const header = document.querySelector('#amagaz-header .logo') 5 const top = header?.offsetHeight ?? 0 6 if(scrollY > top) { 7 document.querySelector('body').classList.add('is-scrolling') 8 } else { 9 document.querySelector('body').classList.remove('is-scrolling') 10 } 11} 12fiFixSiteNavigation() 13 14// live preview fixed 15const fiFixLiveVideoPreview = () => { 16 const previews = document.querySelectorAll('.fi-live-video-preview') 17 const scrollY = window.scrollY 18 previews.forEach(preview => { 19 const offsetTop = preview.offsetTop 20 if(scrollY > offsetTop) { 21 preview.classList.add('fi-live-video-preview--fixed') 22 } else { 23 preview.classList.remove('fi-live-video-preview--fixed') 24 } 25 }) 26} 27fiFixLiveVideoPreview() 28 29document.addEventListener("scroll", (e) => { 30 fiFixSiteNavigation() 31 fiFixLiveVideoPreview() 32}) 33 34// check event listener 35const fiCheckEventListener = (element, role) => { 36 const attr = element.getAttribute('data-fi-listeners') || '' 37 if(!attr.includes(role)) { 38 element.setAttribute('data-fi-listeners', attr+role) 39 return true 40 } 41 return false 42} 43 44const fiAddQueryVar = (permalink = '', key, value) => { 45 const permalinkNoQuery = permalink.split('?')[0] 46 const query = permalink.split('?')[1] || '' 47 const params = new URLSearchParams(query) 48 if(value) { 49 params.set(key, value) 50 } else { 51 params.delete(key) 52 } 53 if(key === 'fi-competition-date' && value) { 54 params.delete('fi-past') 55 } 56 if(key === 'fi-past' && value) { 57 params.delete('fi-competition-date') 58 } 59 if(params.size) { 60 return permalinkNoQuery+'?'+params.toString() 61 } else { 62 return permalinkNoQuery 63 } 64} 65 66// Show modal 67const fiShowModal = (selector) => { 68 const modal = document.querySelector(`.fi-modal[data-fi-modal="${selector}"]`); 69 if(modal) { 70 modal.classList.add('fi-modal--active'); 71 const overlay = modal.querySelector('.fi-modal__overlay'); 72 if(overlay) { 73 overlay.addEventListener('click', (e) => { 74 fiHideModal(selector) 75 }) 76 } 77 document.querySelector('body').classList.add('overflow-hidden'); 78 } 79} 80// Hide modal 81const fiHideModal = (selector) => { 82 const modal = document.querySelector(`.fi-modal[data-fi-modal="${selector}"]`); 83 if(modal) { 84 modal.classList.remove('fi-modal--active'); 85 const overlay = modal.querySelector('.fi-modal__overlay'); 86 if(overlay) { 87 overlay.removeEventListener('click', (e) => { 88 fiHideModal(selector) 89 }) 90 } 91 document.querySelector('body').classList.remove('overflow-hidden'); 92 } 93} 94 95const fiInit = () => { 96 /** 97 * Competitions filter select 98 */ 99 const fiCompetitionsFilterFields = document.querySelectorAll('[data-fi-role*="fi-competitions-filter,"]') 100 fiCompetitionsFilterFields.forEach(fiCompetitionsFilterField => { 101 if(fiCheckEventListener(fiCompetitionsFilterField, 'fi-competitions-filter,')) { 102 fiCompetitionsFilterField.addEventListener('change', e => { 103 let permalink = null 104 const name = fiCompetitionsFilterField.getAttribute('name') 105 const type = fiCompetitionsFilterField.getAttribute('type') 106 const value = type !== 'checkbox' ? fiCompetitionsFilterField.value : fiCompetitionsFilterField.checked ? 1 : undefined 107 if(fiCompetitionsFilterField.tagName === 'SELECT') { 108 const selectedOption = e.target.options[e.target.selectedIndex] 109 permalink = selectedOption?.getAttribute('data-fi-permalink'); 110 } else { 111 permalink = fiAddQueryVar(fiCompetitionsFilterField.getAttribute('data-fi-permalink'), fiCompetitionsFilterField.getAttribute('name'), value) 112 } 113 if(!permalink) { return undefined } 114 location.href = permalink 115 }, true) 116 } 117 }) 118 119 /** 120 * Modal 121 */ 122 // Setup activators 123 document.querySelectorAll('[data-ly-role*="modal-activator,"]').forEach(activator => { 124 const fiSetupModalShowActivator = (e) => { 125 const modalId = activator.getAttribute('data-fi-modal-id') 126 if(modalId) { 127 fiShowModal(modalId) 128 } 129 } 130 activator.onclick = fiSetupModalShowActivator 131 }) 132 const fiSetupModalHideActivator = (e) => { 133 const modalId = e.target.getAttribute('data-fi-modal-id') 134 if(modalId) { 135 fiHideModal(modalId) 136 } 137 } 138 document.querySelectorAll('[data-ly-role*="modal-hide,"]').forEach(activator => { 139 if(fiCheckEventListener(activator, 'modal-hide,')) { 140 activator.addEventListener('click', fiSetupModalHideActivator) 141 } 142 }) 143} 144
145fiInit();
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.