1/* Cookie expiry date */ 2 3// Years * Weeks * Days * Hours * Minutes * Seconds * Milliseconds 4var expiry_time = Number(13*7*24*60*60*1000) 5 6 7var wcagcontrast; 8/* var wcagfont; */ 9 10if (loadcookie('wcagcontrast') !== '') { 11 wcagcontrast = loadcookie('wcagcontrast'); 12} else { 13 wcagcontrast = 0; 14} 15 16/* if (loadcookie('wcagfont') !== '') { 17 wcagfont = loadcookie('wcagfont'); 18} else { 19 wcagfont = 0; 20} */ 21 22var tempwcagcontrast = wcagcontrast; 23/* var tempwcagfont = wcagfont; */ 24 25var wcagdialog; 26var wcagdialog_contrast_options; 27 28function loadcookie(cookiename) { 29 var name = cookiename + "="; 30 var decodedCookie = decodeURIComponent(document.cookie); 31 var ca = decodedCookie.split(';'); 32 33 for (var i = 0; i < ca.length; i++) { 34 var c = ca[i]; 35 36 while (c.charAt(0) == ' ') 37 c = c.substring(1); 38 39 if (c.indexOf(name) == 0) 40 return c.substring(name.length, c.length); 41 } 42 43 return ""; 44} 45 46function wcaginput() { 47 var wcagdialogclasses = wcagdialog.className.split(' '); 48 49 var wcagcontrastradio = document.getElementsByName('wcag-contrast'); 50 /* var wcagfontradio = document.getElementsByName('wcag-font'); */ 51 52 for (var i = 0; i < wcagcontrastradio.length; i++) { 53 console.log(wcagcontrastradio[i]) 54 if (wcagcontrastradio[i].checked) { 55 tempwcagcontrast = i; 56 console.log('checked') 57 } 58 } 59 60 /* for (var i = 0; i < wcagfontradio.length; i++) { 61 if (wcagfontradio[i].checked) { 62 tempwcagfont = i; 63 } 64 } */ 65 66 for (var i = 0; i < wcagdialogclasses.length; i++) { 67 if (/^wcag\-contrast\-l[0-9]{1}$/.test(wcagdialogclasses[i])) { 68 wcagdialogclasses[i] = 'wcag-contrast-l' + tempwcagcontrast; 69 } 70 71 /* if (/^wcag\-font\-l[0-9]{1}$/.test(wcagdialogclasses[i])) { 72 wcagdialogclasses[i] = 'wcag-font-l' + tempwcagfont; 73 } */ 74 } 75 76 wcagdialog.className = wcagdialogclasses.join(' '); 77} 78 79function wcagreset(event) { 80 e_key = event.which || event.keyCode 81 e_valid_keys = [1, 13, 32] 82 83 if(e_valid_keys.indexOf(e_key) != -1){ 84 var wcagdialogclasses = wcagdialog.className.split(' '); 85 86 tempwcagcontrast = wcagcontrast; 87 /* tempwcagfont = wcagfont; */ 88 89 for (var i = 0; i < wcagdialogclasses.length; i++) { 90 if (/^wcag\-contrast\-l[0-9]{1}$/.test(wcagdialogclasses[i])) { 91 wcagdialogclasses[i] = 'wcag-contrast-l' + tempwcagcontrast; 92 } 93 94 /* if (/^wcag\-font\-l[0-9]{1}$/.test(wcagdialogclasses[i])) { 95 wcagdialogclasses[i] = 'wcag-font-l' + tempwcagfont; 96 } */ 97 } 98 99 for (var i = 0; i < wcagdialog_contrast_options.length; i++) { 100 wcagdialog_contrast_options[i].checked = false 101 } 102 103 wcagdialog.className = wcagdialogclasses.join(' '); 104 } 105} 106 107function wcagsubmit(event, firstrun = false) { 108 e_key = event.which || event.keyCode 109 e_valid_keys = [1, 13, 32] 110 //console.log('submitted') 111 //console.log(e_key) 112 113 if(e_valid_keys.indexOf(e_key) != -1 || firstrun){ 114 //console.log('submitted p2') 115 if (event.preventDefault) { 116 event.preventDefault(); 117 } else { 118 event.returnValue = false; 119 } 120 //console.log('submitted p3') 121 122 var htmlclasses = document.documentElement.className.split(' '); 123 var bodyclasses = document.body.className.split(' '); 124 125 wcagcontrast = tempwcagcontrast; 126 /* wcagfont = tempwcagfont; */ 127 128 for (var i = 0; i < bodyclasses.length; i++) { 129 if (/^wcag\-contrast\-l[0-9]{1}$/.test(bodyclasses[i])) { 130 bodyclasses[i] = 'wcag-contrast-l' + wcagcontrast; 131 } 132 133 /* if (/^wcag\-font\-l[0-9]{1}$/.test(bodyclasses[i])) { 134 bodyclasses[i] = 'wcag-font-l' + wcagfont; 135 } */ 136 } 137 138 for (var i = 0; i < htmlclasses.length; i++) { 139 if (/^wcag\-contrast\-l[0-9]{1}$/.test(htmlclasses[i])) { 140 htmlclasses[i] = 'wcag-contrast-l' + wcagcontrast; 141 } 142 143 /* if (/^wcag\-font\-l[0-9]{1}$/.test(htmlclasses[i])) { 144 htmlclasses[i] = 'wcag-font-l' + wcagfont; 145 } */ 146 } 147 148 let expiry = new Date() 149 expiry.setTime(expiry.getTime()+expiry_time) 150 151 document.cookie = 'wcagcontrast=' + wcagcontrast + '; expires='+expiry.toGMTString()+'; path=/; samesite=strict'; 152 /* document.cookie = 'wcagfont=' + wcagfont + '; expires='+expiry.toGMTString()+'; path=/; samesite=strict'; */ 153 154 document.documentElement.className = htmlclasses.join(' ');
155 document.body.className = bodyclasses.join(' '); 156 } 157} 158 159 160 161/* Modals */ 162 163var modalopenbtns; 164var modalclosebtns; 165var modal; 166 167var nonmodals = []; 168var nonmodal_tabs = []; 169 170function modalopen(mdname) { 171 var key = event.keyCode || event.charCode || event.which; 172 if (key !== undefined && key !== 1 && key !== 13 && key !== 32) { 173 return; 174 } else { 175 event.preventDefault(); 176 } 177 178 modal = document.getElementById(mdname); 179 180 modal.classList.add('active'); 181 modal.setAttribute('aria-hidden', 'false'); 182 modal.removeAttribute('aria-hidden'); 183 modal.setAttribute('hidden', 'false'); 184 modal.removeAttribute('hidden'); 185 186 modal.focus(); 187 188 define_nonmodals() 189 190 for (let i = 0; i < nonmodals.length; i++){ 191 if (nonmodals[i]) 192 nonmodals[i].setAttribute('aria-hidden', true) 193 } 194 for (let i = 0; i < nonmodal_tabs.length; i++){ 195 if (nonmodal_tabs[i]) { 196 if (nonmodal_tabs[i].tabIndex) { 197 nonmodal_tabs[i].dataset.prevTabindex = nonmodal_tabs[i].tabIndex 198 } else { 199 nonmodal_tabs[i].dataset.prevTabindex = "unset" 200 } 201 nonmodal_tabs[i].tabIndex = -1 202 } 203 } 204} 205 206function modalclose(mdname) { 207 var key = event.keyCode || event.charCode || event.which; 208 if (key !== undefined && key !== 1 && key !== 13 && key !== 32) { 209 return; 210 } else { 211 event.preventDefault(); 212 } 213 214 modal = document.getElementById(mdname); 215 216 modal.classList.remove('active'); 217 modal.setAttribute('aria-hidden', 'true'); 218 modal.setAttribute('hidden', 'true'); 219 220 define_nonmodals() 221 222 for (let i = 0; i < nonmodals.length; i++){ 223 if (nonmodals[i]) { 224 nonmodals[i].setAttribute('aria-hidden', false) 225 nonmodals[i].removeAttribute('aria-hidden') 226 } 227 } 228 for (let i = 0; i < nonmodal_tabs.length; i++){ 229 if (nonmodal_tabs[i]) 230 if (nonmodal_tabs[i].dataset.prevTabindex != "unset") { 231 nonmodal_tabs[i].tabIndex = nonmodal_tabs[i].dataset.prevTabindex 232 } else { 233 nonmodal_tabs[i].removeAttribute('tabindex') 234 } 235 } 236 237 document.documentElement.focus(); 238} 239 240function modalcloseviaoverlay(event) { 241 var key = event.keyCode || event.charCode || event.which; 242 if (key !== undefined && key !== 1 && key !== 13 && key !== 32) { 243 return; 244 } else { 245 event.preventDefault(); 246 } 247 248 if ( 249 (modal !== undefined && modal !== null) && 250 (modal.getAttribute('id') !== undefined && modal.getAttribute('id') !== null) 251 ) { 252 if (event.target == modal) { 253 modalclose(modal.getAttribute('id')); 254 } 255 } 256} 257 258function openModalOnPageload() { 259 var isModalClosed = /#close/i.test(window.location.href); 260 if (isModalClosed) { 261 window.history.replaceState(document.documentElement.innerHTML, document.title, window.location.pathname + window.location.search); 262 } 263} 264 265 266 267/* Close WCAG Toolbar */ 268 269function hidewcagtoolbar() { 270 var key = event.keyCode || event.charCode || event.which; 271 if (key !== undefined && key !== 1 && key !== 13 && key !== 32) { 272 return; 273 } else { 274 event.preventDefault(); 275 } 276 277 wcagtoolbar = document.getElementById('wcag-toolbar'); 278 wcagtoolbar.classList.add('hidden'); 279 wcagtoolbar.setAttribute('aria-hidden', 'true'); 280 wcagtoolbar.setAttribute('hidden', 'true'); 281 282 wcagtoolbartoggle = document.getElementById('toggle-wcag-toolbar'); 283 wcagtoolbartoggle.classList.remove('hidden'); 284 wcagtoolbartoggle.setAttribute('aria-hidden', 'false'); 285 wcagtoolbartoggle.removeAttribute('aria-hidden'); 286 wcagtoolbartoggle.setAttribute('hidden', 'false'); 287 wcagtoolbartoggle.removeAttribute('hidden'); 288 289 let expiry = new Date() 290 expiry.setTime(expiry.getTime()+expiry_time) 291 292 document.cookie = 'wcagtoolbar=hidden; expires='+expiry.toGMTString()+'; path=/; samesite=strict'; 293 294 modalclose('wcag-confirm'); 295} 296 297function showwcagtoolbar() { 298 var key = event.keyCode || event.charCode || event.which; 299 if (key !== undefined && key !== 1 && key !== 13 && key !== 32) { 300 return; 301 } else { 302 event.preventDefault(); 303 } 304 305 wcagtoolbar = document.getElementById('wcag-toolbar'); 306 wcagtoolbar.classList.remove('hidden'); 307 wcagtoolbar.setAttribute('aria-hidden', 'false'); 308 wcagtoolbar.removeAttribute('aria-hidden'); 309 wcagtoolbar.setAttribute('hidden', 'false'); 310 wcagtoolbar.removeAttribute('hidden'); 311 312 wcagtoolbartoggle = document.getElementById('toggle-wcag-toolbar'); 313 wcagtoolbartoggle.classList.add('hidden'); 314 wcagtoolbartoggle.setAttribute('aria-hidden', 'true'); 315 wcagtoolbartoggle.setAttribute('hidden', 'true'); 316 317 let expiry = new Date() 318 expiry.setTime(expiry.getTime()+expiry_time) 319 320 document.cookie = 'wcagtoolbar=shown; expires='+expiry.toGMTString()+'; path=/; samesite=strict'; 321 322 wcagtoolbar.focus(); 323} 324 325 326 327/* Privacy Policy */ 328 329var cookie_banner; 330var cookie_button; 331 332function getCookie(cookiename) { 333 var name = cookiename + "="; 334 var decodedCookie = decodeURIComponent(document.cookie); 335 var ca = decodedCookie.split(';'); 336 337 for (var i = 0; i < ca.length; i++) { 338 var c = ca[i]; 339 340 while (c.charAt(0) == ' ') 341 c = c.substring(1); 342 343 if (c.indexOf(name) == 0) 344 return c.substring(name.length, c.length); 345 } 346 347 return ""; 348} 349 350 351 352/* Non-Modals */ 353 354function define_nonmodals(firstrun = false) { 355 if (firstrun) { 356 nonmodals = [] 357 nonmodal_tabs = [] 358 359 let nm_wcag = document.querySelectorAll('#wcag-toolbar, #cookie-banner, body > header, body > nav, body > main, body > footer, body > #tab_content') 360 361 let nm_wcag_tabs = document.querySelectorAll( 362 '#wcag-toolbar [tabindex], #wcag-toolbar a, #wcag-toolbar button, #wcag-toolbar input, #wcag-toolbar select, #wcag-toolbar textarea, #wcag-toolbar iframe, ' + 363 '#cookie-banner [tabindex], #cookie-banner a, #cookie-banner button, #cookie-banner input, #cookie-banner select, #cookie-banner textarea, #cookie-banner iframe, ' + 364 'body > header [tabindex], body > header a, body > header button, body > header input, body > header select, body > header textarea, body > header iframe, ' + 365 'body > nav [tabindex], body > nav a, body > nav button, body > nav input, body > nav select, body > nav textarea, body > nav iframe, ' + 366 'body > main [tabindex], body > main a, body > main button, body > main input, body > main select, body > main textarea, body > main iframe, ' + 367 'body > footer [tabindex], body > footer a, body > footer button, body > footer input, body > footer select, body > footer textarea, body > footer iframe, ' + 368 'body > #tab_content [tabindex], body > #tab_content a, body > #tab_content button, body > #tab_content input, body > #tab_content select, body > #tab_content textarea, body > #tab_content iframe' 369 ) 370 371 for (let i = 0; i < nm_wcag.length; i++) 372 nonmodals.push(nm_wcag[i]) 373 374 for (let i = 0; i < nm_wcag_tabs.length; i++) 375 nonmodal_tabs.push(nm_wcag_tabs[i]) 376 }else{ 377 // For Google reCaptcha and other script loaded iframes we must recheck 378 let nm_iframe_tabs = document.querySelectorAll('#wcag-toolbar iframe, #cookie-banner iframe, body > header iframe, body > nav iframe, body > main iframe, body > footer iframe, body > #tab_content iframe') 379 380 for (let i = 0; i < nm_iframe_tabs.length; i++) 381 if (nonmodal_tabs.indexOf(nm_iframe_tabs[i]) == -1) 382 nonmodal_tabs.push(nm_iframe_tabs[i]) 383 } 384} 385 386 387 388/* Password Requirements script */ 389 390document.addEventListener('DOMContentLoaded', () => { 391 const pw_req_str = '#passwordRequirements' 392 const pw_req_field_str = '[aria-details="passwordRequirements"]' 393 const pw_req_field_toggle_str = '.pw-toggle' 394 395 const pw_req = document.querySelector(pw_req_str) 396 const pw_req_field = document.querySelector(pw_req_field_str) 397 398 let pw_req_runs = 0 399 let pw_req_shown = false 400 401 if (pw_req && pw_req_field) { 402 pw_req.hidden = true 403 pw_req.setAttribute('aria-hidden', true) 404 pw_req.setAttribute('role', 'alert') 405 pw_req.setAttribute('aria-live', 'polite') 406 407 const pw_req_toggle = () => { 408 if ( 409 (event.target.closest(pw_req_field_str) || event.target.closest(pw_req_str) || event.target.closest(pw_req_field_toggle_str)) && 410 (pw_req_shown == false) 411 ) { 412 // if (pw_req_runs >= 1) 413 // pw_req.setAttribute('aria-live', 'off') 414 415 pw_req.hidden = false 416 pw_req.setAttribute('aria-hidden', false) 417 pw_req.removeAttribute('aria-hidden') 418 419 pw_req_shown = true 420 pw_req_runs++ 421 }else if ( 422 (!event.target.closest(pw_req_field_str) && !event.target.closest(pw_req_str) && !event.target.closest(pw_req_field_toggle_str)) && 423 (pw_req_shown == true) 424 ) { 425 pw_req.hidden = true 426 pw_req.setAttribute('aria-hidden', true) 427 428 pw_req_shown = false 429 } 430 } 431 432 var pw_req_spec = {} 433 pw_req_spec['pwl'] = document.querySelector('#passwordRequirements .pw-l')
434 pw_req_spec['pwc'] = document.querySelector('#passwordRequirements .pw-c') 435 pw_req_spec['pwa'] = document.querySelector('#passwordRequirements .pw-a') 436 pw_req_spec['pwn'] = document.querySelector('#passwordRequirements .pw-n') 437 pw_req_spec['pws'] = document.querySelector('#passwordRequirements .pw-s') 438 439 const pw_req_update = () => { 440 // ✔ â 441 // ✗ â 442 // l-cans (length-capital-alphabetic-numeric-special) 443 // ^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[!@#\$&*~]).{8,}$ 444 // if (pw_req_runs >= 1) 445 // pw_req.setAttribute('aria-live', 'off') 446 447 if (/^(.*).{12,}$/.test(pw_req_field.value) && pw_req_spec['pwl'].classList.contains('warning')) { 448 pw_req_spec['pwl'].classList.remove('warning') 449 pw_req_spec['pwl'].children[0].innerHTML = '✔' 450 pw_req_spec['pwl'].children[1].innerHTML = '(Completed)' 451 }else if (!/^(.*).{12,}$/.test(pw_req_field.value)) { 452 pw_req_spec['pwl'].classList.add('warning') 453 pw_req_spec['pwl'].children[0].innerHTML = '✗' 454 pw_req_spec['pwl'].children[1].innerHTML = '' 455 } 456 457 if (/^(?=.*?[A-Z]).{1,}$/.test(pw_req_field.value) && pw_req_spec['pwc'].classList.contains('warning')) { 458 pw_req_spec['pwc'].classList.remove('warning') 459 pw_req_spec['pwc'].children[0].innerHTML = '✔' 460 pw_req_spec['pwc'].children[1].innerHTML = '(Completed)' 461 }else if(!/^(?=.*?[A-Z]).{1,}$/.test(pw_req_field.value)) { 462 pw_req_spec['pwc'].classList.add('warning') 463 pw_req_spec['pwc'].children[0].innerHTML = '✗' 464 pw_req_spec['pwc'].children[1].innerHTML = '' 465 } 466 467 if (/^(?=.*?[a-z]).{1,}/.test(pw_req_field.value) && pw_req_spec['pwa'].classList.contains('warning')) { 468 pw_req_spec['pwa'].classList.remove('warning') 469 pw_req_spec['pwa'].children[0].innerHTML = '✔' 470 pw_req_spec['pwa'].children[1].innerHTML = '(Completed)' 471 }else if(!/^(?=.*?[a-z]).{1,}/.test(pw_req_field.value)) { 472 pw_req_spec['pwa'].classList.add('warning') 473 pw_req_spec['pwa'].children[0].innerHTML = '✗' 474 pw_req_spec['pwa'].children[1].innerHTML = '' 475 } 476 477 if (/^(?=.*?[0-9]).{1,}/.test(pw_req_field.value) && pw_req_spec['pwn'].classList.contains('warning')) { 478 pw_req_spec['pwn'].classList.remove('warning') 479 pw_req_spec['pwn'].children[0].innerHTML = '✔' 480 pw_req_spec['pwn'].children[1].innerHTML = '(Completed)' 481 }else if(!/^(?=.*?[0-9]).{1,}/.test(pw_req_field.value)) { 482 pw_req_spec['pwn'].classList.add('warning') 483 pw_req_spec['pwn'].children[0].innerHTML = '✗' 484 pw_req_spec['pwn'].children[1].innerHTML = '' 485 } 486 487 if (/^(?=.*?[!@#\$&*~]).{1,}/.test(pw_req_field.value) && pw_req_spec['pws'].classList.contains('warning')) { 488 pw_req_spec['pws'].classList.remove('warning') 489 pw_req_spec['pws'].children[0].innerHTML = '✔' 490 pw_req_spec['pws'].children[1].innerHTML = '(Completed)' 491 }else if(!/^(?=.*?[!@#\$&*~]).{1,}/.test(pw_req_field.value)) { 492 pw_req_spec['pws'].classList.add('warning') 493 pw_req_spec['pws'].children[0].innerHTML = '✗' 494 pw_req_spec['pws'].children[1].innerHTML = '' 495 } 496 497 pw_req_runs++ 498 } 499 500 // We check every click and input event, and their target, 501 // TODO: Check if we can replace it with focus and blur eventListener on target element 502 document.addEventListener('click', pw_req_toggle) 503 document.addEventListener('keydown', pw_req_toggle) 504 document.addEventListener('keyup', pw_req_toggle) 505 506 // We update the password requirements as the user types 507 //console.log(pw_req_spec) 508 for (let i in pw_req_spec) { 509 //console.log(pw_req_spec[i]) 510 pw_req_spec[i].children[0].innerHTML = '✗' 511 } 512 pw_req_field.addEventListener('input', pw_req_update) 513 } 514}) 515 516 517 518/* Miles to Currency conversion */ 519document.addEventListener('DOMContentLoaded', () => { 520 let ml_in = document.querySelector('input#miles[name="miles"]') 521 522 let ml_price = document.querySelector('.js-calc-mileage-price') 523 let ml_cont = document.querySelector('.js-calc-mileage-container') 524 525 let ml_out_label = document.querySelector('.js-calc-amount-output') 526 let ml_out = document.querySelector('.js-calc-amount-output .amount') 527 528 const showMileagePrice = (auto = false) => { 529 if (auto) ml_out_label.setAttribute('aria-live', 'polite') 530 531 let miles_amount = Number(ml_in.value) * Number(ml_price.innerHTML)
532 ml_out.innerHTML = miles_amount.toLocaleString('en-GB', { style: 'currency', currency: 'GBP' }) 533 } 534 535 if (ml_in && ml_price && ml_cont && ml_out) { 536 ml_in.addEventListener('input', showMileagePrice) 537 showMileagePrice() 538 } 539}) 540 541 542 543/* Password Visibility */ 544document.addEventListener('DOMContentLoaded', () => { 545 let pw_toggles = document.querySelectorAll('input.pw-toggle') 546 547 const ShowHidePW = (e) => { 548 if (e.getAttribute('aria-controls')) { 549 let pw_field_selectors = e.getAttribute('aria-controls') 550 if (pw_field_selectors) { 551 pw_field_selectors = pw_field_selectors.split(' ') 552 553 let pw_toggle_icon_selector = 'label.pw-toggle[for="'+e.id+'"]' 554 let pw_toggle_icon = document.querySelectorAll(pw_toggle_icon_selector) 555 556 let pw_toggle_text_selector = 'label.pw-toggle[for="'+e.id+'"] span' 557 let pw_toggle_text = document.querySelectorAll(pw_toggle_text_selector) 558 559 pw_field_selectors.forEach((pw_field_selector) => { 560 if (pw_field_selector) { 561 let pw_field = document.getElementById(pw_field_selector) 562 563 if (pw_field) { 564 if (pw_field.type == 'password') { 565 pw_field.type = 'text' 566 pw_toggle_icon.forEach((icon) => { 567 icon.title = 'Hide Password' 568 icon.classList.add('active') 569 }) 570 pw_toggle_text.forEach((text) => { 571 text.innerHTML = 'Hide Password' 572 }) 573 } else { 574 pw_field.type = 'password' 575 pw_toggle_icon.forEach((icon) => { 576 icon.title = 'Show Password' 577 icon.classList.remove('active') 578 }) 579 pw_toggle_text.forEach((text) => { 580 text.innerHTML = 'Show Password' 581 }) 582 } 583 } 584 } 585 }) 586 } 587 } 588 } 589 590 pw_toggles.forEach((pw_toggle) => { 591 pw_toggle.addEventListener('change', (e) => { 592 ShowHidePW(e.target) 593 }) 594 }) 595}) 596 597 598 599/* Date Fields and error messages */ 600 601document.addEventListener('DOMContentLoaded', () => { 602 /* Custom Invalid messages */ 603 604 const setInvalid = () => { 605 const c_invalids = document.querySelectorAll('[data-c-invalid]') 606 607 c_invalids.forEach((c_invalid) => { 608 let inv_str = c_invalid.dataset.cInvalid ? c_invalid.dataset.cInvalid : 'Please fill in this field' 609 610 // console.log(c_invalid.name) 611 // console.log(inv_str) 612 613 c_invalid.addEventListener('invalid', () => {c_invalid.setCustomValidity(inv_str)}) 614 c_invalid.addEventListener('input', () => {c_invalid.setCustomValidity('')}) 615 616 c_invalid.title = inv_str 617 }) 618 } 619 620 621 /* Custom Date selection for Safari */ 622 623 let _test 624 625 try { 626 _test = document.createElement("input") 627 _test.type = "date" 628 629 if (_test.type === "date") { 630 let _dateIns = document.querySelectorAll('[data-date-format]') 631 let _dateCIns = document.querySelectorAll('[data-c-date-format]') 632 633 // console.log(_dateIns) 634 // console.log(_dateCIns) 635 636 _dateIns.forEach((_dateIn) => { 637 _dateIn.innerHTML = 'dd/mm/yyyy' 638 }) 639 _dateCIns.forEach((_dateCIn) => { 640 _dateCIn.dataset.cInvalid = 'Please select a past date or enter it in dd/mm/yyyy format' 641 }) 642 643 setInvalid() 644 } else { 645 return 646 } 647 } catch(e) { 648 return 649 } 650}) 651 652 653 654/* Initialisation */ 655 656document.addEventListener('DOMContentLoaded', function(event) { 657 wcagdialog = document.getElementById('wcag-options-dialog-content') 658 wcagdialog_contrast_options = document.querySelectorAll('[name="wcag-contrast"]') 659 wcagsubmit(event, true) 660 661 var wcagS = document.getElementById('wcag-switch') 662 if (wcagS !== undefined && wcagS !== null) { 663 wcagS.addEventListener('click', function() { 664 modalopen('wcag-options-dialog') 665 }) 666 wcagS.addEventListener('keydown', function() { 667 modalopen('wcag-options-dialog') 668 }) 669 } 670 671 // id="wcag-options-dialog-close" onclick="javascript:wcagreset();modalclose('wcag-options-dialog');" 672 var wcagODC = document.getElementById('wcag-options-dialog-close') 673 wcagODC.addEventListener('click', function(event) { 674 wcagreset(event) 675 modalclose('wcag-options-dialog') 676 }) 677 wcagODC.addEventListener('keydown', function(event) { 678 wcagreset(event) 679 modalclose('wcag-options-dialog') 680 }) 681 682 // id="wcag-form" oninput="javascript:wcaginput();" onsubmit="javascript:wcagsubmit(event);modalclose('wcag-options-dialog');"
683 var wcagF = document.getElementById('wcag-form') 684 wcagF.addEventListener('input', function() { 685 wcaginput() 686 }) 687 /* wcagF.addEventListener('submit', function(event) { 688 wcagsubmit(event); 689 modalclose('wcag-options-dialog'); 690 }); /* */ 691 692 // id="wcag-options-dialog-discard" onclick="javascript:wcagreset();modalclose('wcag-options-dialog');" 693 var wcagODD = document.getElementById('wcag-options-dialog-discard') 694 wcagODD.addEventListener('click', function(event) { 695 wcagreset(event) 696 modalclose('wcag-options-dialog') 697 }) 698 wcagODD.addEventListener('keydown', function(event) { 699 wcagreset(event) 700 modalclose('wcag-options-dialog') 701 }) 702 703 // id="wcag-options-dialog-apply" onclick="javascript:wcagsubmit(event);modalclose('wcag-options-dialog');" 704 var wcagODA = document.getElementById('wcag-options-dialog-apply'); 705 wcagODA.addEventListener('click', function(event) { 706 wcagsubmit(event) 707 modalclose('wcag-options-dialog') 708 }) 709 wcagODA.addEventListener('keydown', function(event) { 710 wcagsubmit(event) 711 modalclose('wcag-options-dialog') 712 }) 713 714 715 716 /* Modals */ 717 718 window.addEventListener('hashchange', openModalOnPageload) 719 openModalOnPageload() 720 721 define_nonmodals(true) 722 723 724 725 /* Privacy Policy */ 726 727 cookie_banner = document.getElementById("cookie-banner") 728 cookie_button = document.getElementById("cookie-button") 729 730 if(cookie_banner && cookie_button){ 731 cookie_button.addEventListener('click', function() { 732 let expiry = new Date() 733 expiry.setTime(expiry.getTime()+expiry_time) 734 735 document.cookie = "accept_cookie=True; expires="+expiry.toGMTString()+"; path=/; samesite=strict" 736 cookie_banner.remove() 737 }); 738 739 if (getCookie("accept_cookie") == "True") { 740 cookie_banner.remove() 741 } 742 } 743 744 if (getCookie("wcagtoolbar") == "hidden") { 745 hidewcagtoolbar() 746 } 747});
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.