1let deeplTranslate = { 2 menuSelector: '.deepl-menu', 3 menu: null, 4 menuWrapperSelector: '#ch-deepl-llmenu', 5 menuWrapper: null, 6 menuOpenerSelector: '.deepl-menu-opener', 7 current: 'DE', 8 init: function() { 9 let $ctrl = this; 10 11 $ctrl.menuWrapper = document.querySelector($ctrl.menuWrapperSelector); 12 if (!$ctrl.menuWrapper) 13 return; 14 15 $ctrl.menu = document.querySelector($ctrl.menuSelector); 16 if (!$ctrl.menu) 17 return; 18 19 const urlParams = new URLSearchParams(window.location.search); 20 if (urlParams.has('translateTo')) 21 $ctrl.current = urlParams.get('translateTo'); 22 23 if ($ctrl.current != 'DE') { 24 $ctrl.deepLLabelCorrection(); 25 $ctrl.modifyLinks(); 26 } 27 28 $ctrl.bindEvents(); 29 $ctrl.loadLinkLabels(); 30 31 }, 32 modifyLinks: function() { 33 let $ctrl = this; 34 let pageLinks = document.querySelectorAll('a'); 35 for(let i = 0; i < pageLinks.length; i++) { 36 $ctrl.insertCurrentLanguageToLink(pageLinks[i]); 37 } 38 }, 39 insertCurrentLanguageToLink: function(link) { 40 let $ctrl = this; 41 if (link.href && link.href.length > 0 && link.href.includes(window.location.host)) { 42 let url = new URL(link.href); 43 url.searchParams.set('translateTo', $ctrl.current); 44 let newLocation = url.href; 45 link.href = newLocation; 46 } 47 }, 48 bindEvents: function() { 49 let $ctrl = this; 50 let opener = document.querySelector($ctrl.menuOpenerSelector); 51 if (opener) { 52 if (!$ctrl.menu.getAttribute('data-status')) 53 $ctrl.menu.setAttribute('data-status', 'close'); 54 55 opener.addEventListener('click', function(event) { 56 event.preventDefault(); 57 let status = $ctrl.menu.getAttribute('data-status'); 58 $ctrl.menu.setAttribute('data-status', status == 'close' ? 'open' : 'close'); 59 return false; 60 }); 61 } 62 63 let links = document.querySelectorAll($ctrl.menuSelector + ' a'); 64 for(let i = 0; i < links.length; i++) { 65 let link = links[i]; 66 link.addEventListener('click', function(event) { 67 event.preventDefault(); 68 let language = event.target.getAttribute('data-language'); 69 let url = new URL(window.location.href); 70 url.searchParams.set('translateTo', language); 71 let newLocation = url.href; 72 window.location = newLocation; 73 return false; 74 }); 75 } 76 }, 77 loadLinkLabels: function() { 78 let $ctrl = this; 79 let links = document.querySelectorAll($ctrl.menuSelector + ' a'); 80 let opener = document.querySelector($ctrl.menuOpenerSelector); 81 for(let i = 0; i < links.length; i++) { 82 let link = links[i]; 83 const label = link.getAttribute('data-label'); 84 const llKey = link.getAttribute('data-language'); 85 link.innerText = label; 86 if (llKey == $ctrl.current) { 87 link.classList.add('selected'); 88 let openerLabel = opener.querySelector('.deepl-menu-opener-status'); 89 openerLabel.innerText = label; 90 } 91 } 92 }, 93 deepLLabelCorrection: function() { 94 let $ctrl = this; 95 let elements = document.querySelectorAll('.powermail_fieldset label'); 96 97 for (let index = 0; index < elements.length; index++) { 98 let label = elements[index]; 99 let field = label.parentElement.querySelectorAll('input'); 100 field.placeholder = label.innerText; 101 } 102 } 103} 104deeplTranslate.init();
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.