1// Revisar el lenguaje activo y poner clase activa 2document.addEventListener("DOMContentLoaded", function () { 3 // Mostrar u ocultar el chatBox al hacer clic en el botón 4 let currentLang = document.documentElement.lang ?? 'ca'; 5 if(currentLang === 'en-US') currentLang = 'en'; 6 if(currentLang === 'es-ES') currentLang = 'es'; 7 updateLanguage(currentLang); 8 9 const chatButton = document.querySelector('.chatButton'); 10 const chatBot = document.querySelector('.chatBot'); 11 const chatBox = document.querySelector('.chatBox'); 12 13 // Rate 14 let rated = false; 15 const chatRate = document.querySelector('.chatRate'); 16 function toggleRate(actualVisiblity) { 17 if (!rated) { 18 chatRate.classList.toggle('show'); 19 setTimeout(() => { 20 chatButton.classList.toggle('big'); 21 }, actualVisiblity ? 0 : 1000); 22 } 23 } 24 25 const stars = document.querySelectorAll('.chatRate-star'); 26 stars.forEach((star, index) => { 27 star.addEventListener('mouseover', function () { 28 console.log('asd'); 29 stars.forEach((star2, starIndex) => { 30 if (starIndex <= index) { 31 star2.classList.add('hover'); 32 } 33 }); 34 }); 35 36 star.addEventListener('mouseleave', function () { 37 stars.forEach((star2, starIndex) => { 38 if (starIndex <= index) { 39 star2.classList.remove('hover'); 40 } 41 }); 42 }); 43 44 star.addEventListener('click', function () { 45 stars.forEach((star2, starIndex) => { 46 if (starIndex <= index) { 47 // star2.classList.add('active'); 48 } else { 49 // star2.classList.remove('active'); 50 } 51 }); 52 rated = true; 53 }) 54 }) 55 56 // Lenguaje 57 const chatLangChevron = document.querySelector('.chatBox-header-languageSelect-lang svg'); 58 const chatLangSelect = document.querySelector('.chatBox-header-languageSelect-lang'); 59 const chatLangList = document.querySelector('.chatBox-header-languageSelect-list'); 60 const options = Array.from(chatLangList.children); 61 62 function handleLanguageClick() { 63 chatLangList.hidden = true; 64 chatLangList.classList.remove('show'); 65 chatLangSelect.setAttribute('aria-expanded', false); 66 chatLangSelect.focus(); 67 } 68 69 function handleUpdateLanguage(element, event) { 70 let currentLang = document.documentElement.lang; 71 72 if(currentLang === 'en-US') currentLang = 'en'; 73 if(currentLang === 'es-ES') currentLang = 'es'; 74 const picketValue = event.target.dataset.value.toLowerCase(); 75 76 if (picketValue !== currentLang) { 77 element.classList.add('active'); 78 document.documentElement.lang = picketValue; 79 // Dispatch a custom event named 'languageUpdated' 80 const customEvent = new CustomEvent('languageUpdated', { detail: { language: picketValue } }); 81 document.dispatchEvent(customEvent); 82 } 83 } 84 85 // Cambiar idioma 86 document.addEventListener('click', function (event) { 87 if (chatLangSelect.contains(event.target)) { 88 chatLangList.classList.toggle('show'); 89 chatLangChevron.classList.toggle('show'); 90 const isExpanded = chatLangSelect.getAttribute('aria-expanded') === 'true'; 91 chatLangSelect.setAttribute('aria-expanded', !isExpanded) 92 if (!isExpanded) { 93 options[0].focus(); 94 } 95 return; 96 } 97 98 const isExpanded = chatLangSelect.getAttribute('aria-expanded') === 'true'; 99 if (isExpanded && !chatLangList.contains(event.target)) { 100 handleLanguageClick() 101 } 102 }); 103 104 options.forEach((option, index) => { 105 option.addEventListener('click', function (event) { 106 handleUpdateLanguage(option, event); 107 handleLanguageClick(); 108 }); 109 option.addEventListener('keydown', (event) => { 110 switch (event.key) { 111 case 'ArrowDown': 112 if (index < options.length - 1) { 113 options[index + 1].focus(); 114 } 115 break; 116 case 'ArrowUp': 117 if (index > 0) { 118 options[index - 1].focus(); 119 } 120 break; 121 case 'Enter': 122 case ' ': 123 handleUpdateLanguage(option, event); 124 handleLanguageClick(); 125 break; 126 } 127 event.preventDefault(); 128 }); 129 }); 130 131 // Cerrar menu al seleccionar un idioma 132 chatLangList.addEventListener('click', function () { 133 chatLangList.classList.remove('show'); 134 }) 135 136}); 137 138document.addEventListener('languageUpdated', function (event) { 139 updateLanguage(event.detail.language); 140});
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.