1(function () { 2'use strict'; 3var COOKIE = 'dw_lang'; 4var DISMISSED = 'dw_lang_dismissed'; 5var SIX_MONTHS_SECONDS = 60 * 60 * 24 * 183; 6function readCookie(name) { 7var match = document.cookie.match(new RegExp('(?:^|; )' + name + '=([^;]*)')); 8return match ? decodeURIComponent(match[1]) : null; 9} 10function writeCookie(name, value) { 11document.cookie = 12name + 13'=' + 14encodeURIComponent(value) + 15'; Max-Age=' + 16SIX_MONTHS_SECONDS + 17'; Path=/; SameSite=Lax' + 18(location.protocol === 'https:' ? '; Secure' : ''); 19} 20var root = document.querySelector('[data-dw-lang]'); 21if (!root) return; 22var current = root.getAttribute('data-dw-current') || 'en'; 23var basePath = root.getAttribute('data-dw-path') || '/'; 24var available = (root.getAttribute('data-dw-available') || '') 25.split(',') 26.filter(Boolean) 27.map(function (pair) { 28var bits = pair.split(':'); 29return { code: bits[0], label: bits.slice(1).join(':') }; 30}); 31var toggle = root.querySelector('[data-dw-lang-toggle]'); 32var menu = root.querySelector('.dw-lang__menu'); 33function close() { 34if (!menu || menu.hidden) return; 35menu.hidden = true; 36toggle.setAttribute('aria-expanded', 'false'); 37} 38function open() { 39if (!menu) return; 40menu.hidden = false; 41toggle.setAttribute('aria-expanded', 'true'); 42var first = menu.querySelector('a'); 43if (first) first.focus(); 44} 45if (toggle && menu) { 46toggle.addEventListener('click', function (event) { 47event.preventDefault(); 48menu.hidden ? open() : close(); 49}); 50document.addEventListener('click', function (event) { 51if (!root.contains(event.target)) close(); 52}); 53document.addEventListener('keydown', function (event) { 54if (event.key === 'Escape') close(); 55}); 56menu.addEventListener('keydown', function (event) { 57if (event.key !== 'ArrowDown' && event.key !== 'ArrowUp') return; 58event.preventDefault(); 59var links = Array.prototype.slice.call(menu.querySelectorAll('a')); 60var index = links.indexOf(document.activeElement); 61var next = event.key === 'ArrowDown' ? index + 1 : index - 1; 62if (next < 0) next = links.length - 1; 63if (next >= links.length) next = 0; 64links[next].focus(); 65}); 66} 67root.addEventListener('click', function (event) { 68var link = event.target.closest('[data-dw-lang-choice]'); 69if (!link) return; 70close(); 71if (toggle) toggle.focus(); 72writeCookie(COOKIE, link.getAttribute('data-dw-lang-choice')); 73}); 74var AUTO_DETECT = true; 75function isCrawler() { 76return /bot|crawl|spider|slurp|googleother|google-inspectiontool|lighthouse|headlesschrome|facebookexternalhit|embedly|preview|archiver|monitoring/i.test( 77navigator.userAgent || '' 78); 79} 80function bare(path) { 81for (var i = 0; i < available.length; i++) { 82var code = available[i].code; 83if (code === 'en') continue; 84if (path === '/' + code) return '/'; 85if (path.indexOf('/' + code + '/') === 0) return path.slice(code.length + 1); 86} 87return path; 88} 89function isLive(code) { 90for (var i = 0; i < available.length; i++) if (available[i].code === code) return true; 91return false; 92} 93function preferred() { 94var list = 95navigator.languages && navigator.languages.length 96? navigator.languages 97: [navigator.language]; 98for (var i = 0; i < list.length; i++) { 99var primary = String(list[i] || '') 100.toLowerCase() 101.split('-')[0]; 102if (isLive(primary)) return primary; 103} 104return null; 105} 106function readsCurrent() { 107var list = 108navigator.languages && navigator.languages.length 109? navigator.languages 110: [navigator.language]; 111for (var i = 0; i < list.length; i++) 112if ( 113String(list[i] || '') 114.toLowerCase() 115.split('-')[0] === current 116) 117return true; 118return false; 119} 120var chosen = readCookie(COOKIE); 121var target = null; 122if (chosen && isLive(chosen)) { 123if (chosen !== current) target = chosen; 124} else if (AUTO_DETECT && !isCrawler() && !readsCurrent()) { 125var SEEN = 'dw_lang_auto'; 126var already; 127try { 128already = window.sessionStorage.getItem(SEEN); 129} catch (e) { 130already = '1'; 131} 132if (!already) { 133try { 134window.sessionStorage.setItem(SEEN, '1'); 135} catch (e) { 136} 137var want = preferred(); 138if (want && want !== current) target = want; 139} 140} 141if (!target) return; 142var path = bare(window.location.pathname); 143var url = target === 'en' ? path : '/' + target + (path === '/' ? '' : path); 144if (url !== window.location.pathname) 145window.location.replace(url + window.location.search + window.location.hash); 146})();
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.