PageSourceSearch

https://www.fuu.de/typo3conf/ext/ch_deeplfetranslate/Resources/Public/JavaScript/deepl-fetranslate.js

js fuu.de collected 2026-10-06 20:39:00 UTC 3,113 bytes, 104 lines download raw bytes

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.