1class Wcag { 2 body; 3 contrastButtonActiveClass = 'contrast-button--active'; 4 contrastButton; 5 contrastCookieName = 'leafcon'; 6 7 constructor() { 8 this.body = document.querySelector('body'); 9 this.contrastButton = document.querySelector('.contrast-block__contrast-button'); 10 this.initialize(); 11 } 12 13 initialize() { 14 this.initializeBodyClasses(); 15 this.initializeContrastButton(); 16 this.initializeKeyboardMenu(); 17 this.initializeAriaHiddenEmptyLinks(); 18 this.initializeMiscFixes(); 19 this.initializeSearchForm(); 20 } 21 22 getCookieValue(name) { 23 return document.cookie.match('(^|;)\\s*' + name + '\\s*=\\s*([^;]+)')?.pop() || ''; 24 } 25 26 setCookieValue(name, value, days = 365) { 27 let expires = ''; 28 if (days) { 29 let date = new Date(); 30 date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000)); 31 expires = '; expires=' + date.toUTCString(); 32 } 33 document.cookie = name + '=' + (value || '') + expires + '; path=/'; 34 } 35 36 eraseCookie(name) { 37 document.cookie = name + '=; Max-Age=0; path=/;'; 38 } 39 40 initializeBodyClasses() { 41 this.updateBodyContrastClass(this.getCookieValue(this.contrastCookieName) === '1'); 42 } 43 44 updateBodyContrastClass(isContrast) { 45 if (isContrast) { 46 this.body.classList.add('body--contrast'); 47 this.contrastButton.querySelector('span.visually-hidden').innerText = this.contrastButton.dataset.contrastOff; 48 this.contrastButton.classList.add(this.contrastButtonActiveClass); 49 } else { 50 this.body.classList.remove('body--contrast'); 51 this.contrastButton.querySelector('span.visually-hidden').innerText = this.contrastButton.dataset.contrastOn; 52 this.contrastButton.classList.remove(this.contrastButtonActiveClass); 53 } 54 } 55 56 initializeContrastButton() { 57 let current = this; 58 59 this.contrastButton.addEventListener('click', function (e) { 60 e.preventDefault(); 61 62 if (current.body.classList.contains('body--contrast')) { 63 current.eraseCookie(current.contrastCookieName); 64 current.updateBodyContrastClass(false); 65 66 } else { 67 current.body.classList.add('body--contrast'); 68 current.setCookieValue(current.contrastCookieName, '1'); 69 current.updateBodyContrastClass(true); 70 } 71 }); 72 } 73 74 initializeKeyboardMenu() { 75 var menuItems = document.querySelectorAll('.menu li.parent'); 76 Array.prototype.forEach.call(menuItems, function (el, i) { 77 el.querySelector('a').setAttribute('aria-expanded', "false"); 78 // el.querySelector('div.submenu-container').setAttribute('aria-hidden', "true"); 79 let childMenuLinks = el.querySelectorAll('div.submenu-container a'); 80 childMenuLinks.forEach(function (childMenuLink) { 81 // childMenuLink.setAttribute('aria-hidden', "true"); 82 }); 83 84 el.querySelector('div.submenu-container').style.visibility = 'hidden'; 85 el.querySelector('a').addEventListener("click", function (event) { 86 if (this.parentNode.classList.contains('open-keyboard') == false) { 87 this.parentNode.classList.add("open-keyboard"); 88 this.setAttribute('aria-expanded', "true"); 89 this.parentNode.querySelector('div.submenu-container').style.visibility = 'visible'; 90 } else { 91 this.parentNode.classList.remove("open-keyboard"); 92 this.setAttribute('aria-expanded', "false"); 93 this.parentNode.querySelector('div.submenu-container').style.visibility = 'hidden'; 94 } 95 event.preventDefault(); 96 return false; 97 }); 98 99 // gdy najedziemy muszkÄ na element menu to otwieramy menu dodajÄ c visibility: visible na div.submenu-container 100 el.addEventListener("mouseover", function (event) { 101 this.querySelector('div.submenu-container').style.visibility = 'visible'; 102 }); 103 104 // gdy zjeżdżamy z elementu menu to zamykamy menu dodajÄ c visibility: hidden n
104a div.submenu-container 105 el.addEventListener("mouseout", function (event) { 106 document.querySelector('li.menu-item.open-keyboard ')?.classList.remove("open-keyboard"); 107 this.querySelector('div.submenu-container').style.visibility = 'hidden'; 108 }); 109 110 }); 111 } 112 113 initializeAriaHiddenEmptyLinks() { 114 var emptyLinks = document.querySelectorAll('a[href=""],a[href="#"]'); 115 Array.prototype.forEach.call(emptyLinks, function (el, i) { 116 // el.setAttribute('aria-hidden', "true"); 117 }); 118 } 119 120 121 initializeSearchForm() { 122 var searchForm = document.querySelector('#search-form'); 123 var searchFormButton = searchForm.querySelector('.hover-search-form__submit'); 124 var searchFormInput = searchForm.querySelector('.hover-search-form__input'); 125 //akcja po klikniÄciu w searhcFormButton 126 searchFormButton.addEventListener('click', function (e) { 127 if(this.type==='button') { 128 e.preventDefault(); 129 } 130 searchForm.classList.toggle('hover-search-form--active', true); 131 this.querySelector('.visually-hidden').innerText = this.dataset.submitLabel; 132 this.type = 'submit'; 133 // przenieÅ focus na searchFormInput 134 searchForm.querySelector('.hover-search-form__input').style.visibility = 'visible'; 135 searchForm.querySelector('.hover-search-form__input').focus(); 136 }); 137 138 document.addEventListener('keydown', function (e) { 139 if (e.key === 'Escape') { 140 searchForm.classList.toggle('hover-search-form--active', false); 141 searchFormButton.querySelector('.visually-hidden').innerText = searchFormButton.dataset.buttonLabel; 142 searchFormButton.type = 'button'; 143 searchFormInput.style.visibility = 'hidden'; 144 } 145 }); 146 147 //akcja po wciÅniÄciu Enter w searchFormInput 148 searchFormButton.addEventListener('keyup', function (e) { 149 if (e.key === "Enter") { 150 if(searchFormButton.type==='button') { 151 searchFormButton.click(); 152 } 153 } 154 }); 155 156 // // akcja po wejÅciu z screenreadera w searchFormInput 157 // searchFormButton.addEventListener('focusin', function (e) { 158 // console.log('button focusin'); 159 // searchFormButton.click(); 160 // }); 161 162 searchFormInput.addEventListener('focusout', function (e) { 163 if (e.relatedTarget !== searchFormButton) { 164 searchForm.classList.toggle('hover-search-form--active', false); 165 searchFormButton.querySelector('.visually-hidden').innerText = searchFormButton.dataset.buttonLabel; 166 searchFormButton.type = 'button'; 167 searchFormInput.style.visibility = 'hidden'; 168 } 169 }); 170 171 document.addEventListener('keyup', function (e) { 172 if (e.key === "Escape" && searchForm.classList.contains('hover-search-form--active')) { 173 searchForm.classList.toggle('hover-search-form--active', false); 174 searchFormButton.querySelector('.visually-hidden').innerText = searchFormButton.dataset.buttonLabel; 175 searchFormButton.type = 'button'; 176 searchFormInput.style.visibility = 'hidden'; 177 } 178 }); 179 180 } 181 182 initializeMiscFixes() { 183 // dodaj do .cli-modal-close atrybut aria-label="Zamknij" 184 // var cliModelClose = document.querySelectorAll('.cli-modal-close'); 185 // Array.prototype.forEach.call(cliModelClose, function (el, i) { 186 // el.setAttribute('aria-label', "Zamknij"); 187 // }); 188 189 // usuÅ atrybut title z linków, jeÅli jest taki sam jak tekst linka 190 var allUrlsWithTitle = document.querySelectorAll('a[title]'); 191 Array.prototype.forEach.call(allUrlsWithTitle, function (el, i) { 192 if (el.title === el.textContent) { 193 el.removeAttribute('title'); 194 } 195 }); 196 197 // // dla linków o powtarzajÄ cym siÄ href ustaw atrybut aria-disabled="true" 198 // var allUrls = document.querySelectorAll('a'); 199 // var allUrlsArray = Array.prototype.slice.call(allUrls); 200 // var allUrlsArrayHref = allUrlsArray.map(function (el) { 201 // return el.getAttribute('href'); 202 // }); 203 // var allUrlsArrayHrefUnique = allUrlsArrayHref.filter(function (value, index, self) { 204 // return self.indexOf(value) === index; 205 // }); 206 // allUrlsArrayHrefUnique.forEach(function (href) {
207 // var allUrlsWithHref = document.querySelectorAll('a[href="' + href + '"]'); 208 // if (allUrlsWithHref.length > 1) { 209 // Array.prototype.forEach.call(allUrlsWithHref, function (el, i) { 210 // el.setAttribute('aria-disabled', "true"); 211 // el.setAttribute('role', "presentation"); 212 // }); 213 // } 214 // }); 215 } 216 217} 218 219function initializeWcag() { 220 const wcag = new Wcag(); 221} 222 223if (document.readyState === 'loading') { 224 document.addEventListener('DOMContentLoaded', initializeWcag); 225} else { 226 initializeWcag(); 227}
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.