1//HEADER 2 3 4if (!document.body.classList.contains('elementor-editor-active')) { 5 document.querySelectorAll('.kontener_slider .menu_slide1 li.menu-item') 6 .forEach(li => li.addEventListener('click', () => { 7 const span = li.querySelector('span[menu3]'); 8 if (!span) return; // brak <span> â nic nie rób 9 const klucz = span.getAttribute('menu3'); // np. "warszawa" 10 11 // 2) Ukryj wszystkie .menu_slide2 12 document.querySelectorAll('.kontener_slider .menu_slide2') 13 .forEach(el => el.style.display = 'none'); 14 15 // 3) Pokaż ten, który ma ten sam atrybut 16 const cel = document.querySelector(`.kontener_slider .menu_slide2[menu3="${klucz}"]`); 17 if (cel) { 18 cel.style.display = 'block'; 19 fokusujPierwszyButtonSlide2(cel); // â NOWA LINIA 20 } 21 })); 22 23 24 /* âââ UKRYWANIE SLIDEâA (cofnij) âââ */ 25 function schowajSlide(btn) { 26 const slide = btn.closest('.menu_slide2'); // rodzic .menu_slide2 27 if (!slide) return; 28 29 const klucz = slide.getAttribute('menu3'); // np. âwarszawaâ 30 slide.style.display = 'none';
30 // ukryj obecny slide 31 32 /* âºÂ PrzenieÅ fokus na pierwszy li.menu-item otwartego slide1 */ 33 const widocznySlide1 = Array.from( 34 document.querySelectorAll('.kontener_slider .menu_slide1') 35 ).find(el => getComputedStyle(el).display !== 'none'); 36 37 if (widocznySlide1) { 38 fokusujPierwszyLiWSlide1(widocznySlide1); 39 } 40 } 41 42 /* Delegacja zdarzeÅ na caÅy kontener, by dziaÅaÅo także dla przyszÅych elementów */ 43 const kontener = document.querySelectorAll('.kontener_slider'); 44 45 kontener.forEach((el)=>{ 46 /* KlikniÄcie myszkÄ */ 47 el.addEventListener('click', (e) => { 48 const btn = e.target.closest('.menu_slide2 .menu_cofnij_btn'); 49 if (btn) schowajSlide(btn); 50 }); 51 52 /* Enter z klawiatury (keydown â bo keyup nie Åapie we wszystkich przeglÄ darkach) */ 53 el.addEventListener('keydown', (e) => { 54 if (e.key !== 'Enter') return; 55 const btn = e.target.closest('.menu_slide2 .menu_cofnij_btn'); 56 if (btn) { 57 e.preventDefault(); // żeby np. <button> nie wysÅaÅ formularza 58 schowajSlide(btn); 59 } 60 }); 61 }) 62 63 64 65 function zamknijGlowneMenu() { 66 // obsÅuż i ID, i klasÄ â użyj jednego z nich, jeÅli znasz wÅaÅciwy 67 const glowny = document.querySelector('#glowny_kontener_menu, .glowny_kontener_menu'); 68 if (glowny) glowny.style.display = 'none'; 69 // UsuÅ klasÄ .rozwiniete z wszystkich pozycji w gÅównym menu 70 document 71 .querySelectorAll('.glowne_menu li.menu-item.rozwiniete') 72 .forEach(item => item.classList.remove('rozwiniete')); 73 } 74 75 /* klikniÄcie .menu_zamknij_btn (globalnie â może byÄ poza .kontener_slider) */ 76 document.addEventListener('click', (e) => { 77 if (e.target.closest('.menu_zamknij_btn')) { 78 zamknijGlowneMenu(); 79 } 80 }); 81 82 /* Enter na .menu_zamknij_btn */ 83 document.addEventListener('keydown', (e) => { 84 if (e.key !== 'Enter') return; 85 if (e.target.closest('.menu_zamknij_btn')) { 86 e.preventDefault(); 87 zamknijGlowneMenu(); 88 } 89 }); 90 91 92 /* âââ POKAZYWANIE .menu_slide1 NA PODSTAWIE menu2 âââ */ 93 function pokazSlide1DlaMenu2(klucz, sidebar) { 94 // 0) UsuÅ klasÄ .rozwiniete tylko w tym sidebarze 95 if (sidebar) { 96 sidebar 97 .querySelectorAll('li.menu-item.rozwiniete') 98 .forEach(li => li.classList.remove('rozwiniete')); 99 } 100 101 const podmenu = sidebar.closest('.kontener_podmenu'); 102 if (!podmenu) return; // brak kontekstu â nic nie rób 103 104 105 // 2) W jego obrÄbie znajdź slider 106 const kontener = podmenu.querySelector('.kontener_slider'); 107 if (!kontener) return; 108 109 // 1) Ukryj wszystkie .menu_slide2 110 kontener.querySelectorAll('.kontener_slider .menu_slide2') 111 .forEach(el => el.style.display = 'none'); 112 113 // 2) Ukryj wszystkie .menu_slide1 114 kontener.querySelectorAll('.kontener_slider .menu_slide1') 115 .forEach(el => el.style.display = 'none'); 116 117 // 3) Pokaż ten, który ma ten sam atrybut menu2 118 const docelowy = kontener.querySelector(`.kontener_slider .menu_slide1[menu2="${klucz}"]`); 119 if (docelowy) { 120 docelowy.style.display = 'flex'; 121 fokusujPierwszyLiWSlide1(docelowy); 122 } 123 } 124 125 // pobieramy wszystkie sidebary 126 document.querySelectorAll('.menu_sidebar') 127 .forEach(sidebar => { 128 /* KlikniÄcie myszkÄ */ 129 sidebar.addEventListener('click', e => { 130 const li = e.target.closest('li.menu-item'); 131 if (!li) return; 132 133 const span = li.querySelector('span[menu2]'); 134 if (!span) return; 135 136 const klucz = span.getAttribute('menu2'); 137 // czyÅcimy wszystkie rozwiniete 138 sidebar 139 .querySelectorAll('li .menu_rodzic_right.rozwiniete') 140 .forEach(el => el.classList.remove('rozwiniete')); 141 142 pokazSlide1DlaMenu2(klucz, sidebar); 143 144 const rodzicRight = li.querySelector('.menu_rodzic_right'); 145 if (rodzicRight) rodzicRight.classList.add('rozwiniete'); 146 }); 147 148 /* NaciÅniÄcie Enter */ 149 sidebar.addEventListener('keydown', e => { 150 if (e.key !== 'Enter') return; 151 const li = e.target.closest('li.menu-item'); 152 if (!li) return; 153 154 const span = li.querySelector('span[menu2]'); 155 if (!span) return; 156 e.preventDefault(); 157
158 const klucz = span.getAttribute('menu2'); 159 sidebar 160 .querySelectorAll('li .menu_rodzic_right.rozwiniete') 161 .forEach(el => el.classList.remove('rozwiniete')); 162 163 pokazSlide1DlaMenu2(klucz, sidebar); 164 165 const rodzicRight = li.querySelector('.menu_rodzic_right'); 166 if (rodzicRight) rodzicRight.classList.add('rozwiniete'); 167 }); 168 }); 169 170 171 /* ââ 1. Funkcja pomocnicza: ukrywa wszystko ââ */ 172 function zamknijWszystkiePodmenu() { 173 document.querySelectorAll('.kontener_podmenu') 174 .forEach(el => el.style.display = 'none'); 175 } 176 177 /* ââ 2. ObsÅuga jednego klikniÄcia / Enter ââ */ 178 function obsluzKlikLubEnter(li) { 179 if (li.classList.contains('rozwiniete')) { 180 zamknijGlowneMenu(); 181 return; 182 } 183 184 // 0) UsuÅ klasÄ .rozwiniete ze wszystkich elementów w gÅównym menu 185 document 186 .querySelectorAll('.glowne_menu li.menu-item.rozwiniete') 187 .forEach(el => el.classList.remove('rozwiniete')); 188 189 zamknijWszystkiePodmenu(); // zawsze najpierw reset 190 191 const span = li.querySelector('span[menu1]'); 192 const glowny = document.querySelector('.glowny_kontener_menu'); 193 194 if (span) { // <span menu1="â¦"> istnieje 195 const klucz = span.getAttribute('menu1'); 196 const podmenu = document.querySelector(`.kontener_podmenu[menu1="${klucz}"]`); 197 if (podmenu) { 198 podmenu.style.display = 'block'; 199 przeniesFokusNaSidebar(podmenu); // â NOWA LINIA 200 } 201 if (glowny) glowny.style.display = 'block'; 202 203 // b) Dodaj klasÄ .rozwiniete do .menu_rodzic_down w klikniÄtym li 204 li.classList.add('rozwiniete'); 205 206 } else { // brak <span> â chowamy kontener 207 if (glowny) glowny.style.display = 'none'; 208 } 209 } 210 211 /* ââ 3. Dodajemy nasÅuch do KAÅ»DEGO li.menu-item ââ */ 212 document.querySelectorAll('.glowne_menu ul li.menu-item').forEach(li => { 213 214 /* Klik myszÄ */ 215 li.addEventListener('click', () => obsluzKlikLubEnter(li)); 216 217 /* Enter z klawiatury */ 218 li.addEventListener('keydown', e => { 219 if (e.key !== 'Enter') return; 220 e.preventDefault(); // blokuje np. przewiniÄcie strony 221 obsluzKlikLubEnter(li); 222 }); 223 224 /* (opcjonalnie) JeÅli <li> nie jest fokusowalne, 225 odkomentuj liniÄ poniżej, by dziaÅaÅ Enter: */ 226 // li.setAttribute('tabindex', '0'); 227 }); 228 229 230 /* ââ Ustaw fokus na pierwszym li.menu-item w sidebarze ââ */ 231 function przeniesFokusNaSidebar(podmenu) { 232 // pierwszy li.menu-item w otwartym podâmenu 233 const firstLi = podmenu.querySelector('.menu_sidebar ul li.menu-item'); 234 if (!firstLi) return; 235 236 // jeżeli <li> zawiera <a>/<button> lub element z tabindex, 237 // skupiamy siÄ na nim â inaczej na samym <li> 238 const target = firstLi.querySelector('a, button, [tabindex]') || firstLi; 239 240 // upewnij siÄ, że element jest fokusowalny 241 if (target === firstLi && !target.hasAttribute('tabindex')) { 242 target.setAttribute('tabindex', '-1'); // -1 â fokusowalny, ale nie w kolejnoÅci TAB 243 } 244 245 // minimalne opóźnienie, by mieÄ pewnoÅÄ, że DOM jest już widoczny 246 setTimeout(() => target.focus(), 0); 247 } 248 249 /* ââ Fokus na pierwszym li.menu-item w slide1 ââ */ 250 function fokusujPierwszyLiWSlide1(slide1) { 251 const firstLi = slide1.querySelector('ul li.menu-item'); 252 if (!firstLi) return; 253 254 const target = firstLi.querySelector('a, button, [tabindex]') || firstLi; 255 256 if (target === firstLi && !target.hasAttribute('tabindex')) { 257 target.setAttribute('tabindex', '-1'); // element staje siÄ fokusowalny 258 } 259 260 setTimeout(() => target.focus(), 0); // minimalne opóźnienie â pewnoÅÄ, że widaÄ 261 } 262 263 function fokusujPierwszyButtonSlide2(slide2) { 264 const btn = slide2.querySelector('.elementor-button'); 265 if (!btn) return; 266 267 setTimeout(() => btn.focus(), 0); // mikroâopóźnienie, by mieÄ pewnoÅÄ widocznoÅci 268 } 269} 270 271 272 273 274//OBSÅUGA IFRAMÃW 275 276 277 278 279 280 281 282 window.addEventListener("message", function(event) { 283 284 console.log( "WiadomoÅÄ z ramki:", event.data ); 285 console.log( "WiadomoÅÄ z ramki:", event.data.type); 286 if(event.data.type !== undefined && event.data.type==='registerToVisit') 287 { 288 dataLayer.push ({ 'event': 'godzina', 'godz': {'godzina': event.data.data.slot } }) ; 289 290 window.scrollTo({ top: 0, behavior: 'smooth' }); 291 iframe.style.height = '1000px'; 292 } 293 294 if (event.data.type !== undefined && event.data.type === 'resize') { 295 var height = crossDomainMessage.data.data.height; 296 iframe.style.height = height+20+'px'; 297 } 298 299 if ( event.data.data.event!== undefined && event.data.data.event === 'pp.proceedWithoutLogin' ) dataLayer.push ({ 'event': 'proceedwithoutloginBtnClick' }) ; 300 if ( event.data.data.event!== undefined && event.data.data.event === 'pp.createAccount' ) dataLayer.push ({ 'event': 'createAccountBtnClick' }) ; 301 if ( event.data.data.event!== undefined && event.data.data.event === 'registered' ) { 302 dataLayer.push ({ 'event': 'umowienieWizyty' , 303 'daneWizyty': 304 { //'godzina': event.data.data.slot, 305 'value': parseInt(event.data.data.value, 10), 306 'doktor': event.data.data.doctor.lastname+' '+event.data.data.doctor.name, 307 'doktoruuid': event.data.data.doctor.uuid, 308 } 309 310 }) ; 311 } 312 313 314 }) ; 315 316 317 318 319 320 (function() { 321 322 if(document.querySelectorAll('#myIframe').length > 0){ 323 var iframe = document.getElementById('myIframe'); 324 iframe.scrolling = 'no'; 325 326 window.onmessage = function (crossDomainMessage) { 327 328 329 if (crossDomainMessage.data.type !== undefined && crossDomainMessage.data.type == 'registerToVisit'){ 330 window.scrollTo({ top: 0, behavior: 'smooth' }); 331 iframe.style.height = '1000px'; 332 } 333 334 if ( crossDomainMessage.data.type !== undefined && crossDomainMessage.data.type == 'resize') { 335 var height = crossDomainMessage.data.data.height; 336 iframe.style.height = height+20+'px'; 337 } 338 if ( crossDomainMessage.data.type !== undefined && crossDomainMessage.data.type == 'doctorClick') { 339 fetch('/impDataApp/mydoctor.json') 340 .then(response => response.json()) 341 .then(data => { // console.log(crossDomainMessage.data.data.uuid); 342 var result = data.find(item =>item.UUID === crossDomainMessage.data.data.uuid ); 343 // if(typeof result !== undefined ) { location.href= result.link2; }else{ } 344 location.href= result.link2; 345 }) 346 .catch(error => { 347 console.error('WystÄ piÅ bÅÄ d podczas pobierania danych:', error); 348 }); 349 } 350 } 351 } 352 })(); 353 354 355 // WYWOÅANIE FORMULARZA WYSZUKIWARKI 356 jQuery('.form-col.submit button').on('click', function (e) { 357 e.preventDefault(); 358 359 // Szukamy tylko w obrÄbie konkretnej instancji wyszukiwarki (shortcodu) 360 const root = this.closest('.c-app.minApp'); 361 if (!root) return; 362 363 // Klinika / miasto
364 const klinikaOpt = root.querySelector( 365 '.form-col.clinic .custom-select-option.is-selected' 366 ); 367 const klinikaID = klinikaOpt ? klinikaOpt.getAttribute('data-value') : ''; 368 369 // SpecjalnoÅÄ 370 const specjalnoscOpt = root.querySelector( 371 '.form-col.specialty .custom-select-option.is-selected' 372 ); 373 const specjalnoscID = specjalnoscOpt ? specjalnoscOpt.getAttribute('data-value') : ''; 374 375 // Lekarz(e) â multi-select (zaznaczone w danym shortcodzie) 376 const lekarzID = Array.from( 377 root.querySelectorAll('.form-col.doctor .custom-select-option.zaznaczone') 378 ) 379 .map((el) => el.getAttribute('data-value')) 380 .join('||'); 381 382 // Godziny 383 let startTimeEl = root.querySelector('#timeMyStart'); 384 let endTimeEl = root.querySelector('#timeMyEnd'); 385 let startTime = startTimeEl ? startTimeEl.value : ''; 386 let endTime = endTimeEl ? endTimeEl.value : ''; 387 388 if (startTime) { 389 startTime = startTime.replace(':', '%3A'); 390 } 391 if (endTime) { 392 endTime = endTime.replace(':', '%3A'); 393 } 394 395 // Daty 396 let startDateEl = root.querySelector('#dateStart'); 397 let endDateEl = root.querySelector('#dateEnd'); 398 let startDate = startDateEl ? startDateEl.value : ''; 399 let endDate = endDateEl ? endDateEl.value : ''; 400 401 if (startDate !== '') { 402 let parts = startDate.split('-'); // Y-m-d 403 startDate = parts[2] + '%2F' + parts[1] + '%2F' + parts[0]; // d/m/Y 404 } else { 405 startDate = ''; 406 } 407 408 if (endDate !== '') { 409 let parts = endDate.split('-'); 410 endDate = parts[2] + '%2F' + parts[1] + '%2F' + parts[0]; 411 } else { 412 endDate = ''; 413 } 414 415 const url = 416 '/wyszukiwarka/?klinika=' + 417 encodeURIComponent(klinikaID) + 418 '&specjalnosc=' + 419 encodeURIComponent(specjalnoscID) + 420 '&lekarz=' + 421 encodeURIComponent(lekarzID) + 422 '&data_od=' + 423 startDate + 424 '&data_do=' + 425 endDate + 426 '&godz_od=' + 427 startTime + 428 '&godz_do=' + 429 endTime; 430 431 window.location.href = url; 432 });
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.