PageSourceSearch

https://www.rdb-ev.de/files/rdb/js/script.js

js rdb-ev.de collected 2026-10-01 13:01:22 UTC 8,049 bytes, 257 lines download raw bytes

1// must be loaded at the end of the body element
2(function(){
3	var addEvent = function(element, event, func){
4			if(element.addEventListener){
5				element.addEventListener(event, func, false);
6			}
7			else{
8				element.attachEvent('on'+event, func);
9			}
10		},
11		eventPreventDefault = function(event){
12			event = event || window.event;
13			if(event.preventDefault){
14				event.preventDefault();
15			}
16			else{
17				event.returnValue = false;
18			}
19		},
20		elementMatches = function(element, selector) {
21			var methods = ['matches', 'matchesSelector', 'mozMatchesSelector', 'webkitMatchesSelector'];
22			for (var i = 0; i < methods.length; i++) {
23				if (methods[i] in element) {
24					return element[methods[i]](selector);
25				}
26			}
27			return false;
28		},
29		addClass = function(element, className) {
30			var elements = ('length' in element && !('className' in element))
31				? element
32				: [element];
33			for (var i = 0; i < elements.length; i++) {
34				if (!hasClass(elements[i], className)) {
35					elements[i].className += ' ' + className;
36				}
37			}
38		},
39		removeClass = function(element, className) {
40			var elements = ('length' in element && !('className' in element))
41				? element
42				: [element];
43			for (var i = 0; i < elements.length; i++) {
44				if (hasClass(elements[i], className)) {
45					elements[i].className = elements[i].className.replace(new RegExp('(?:^|\\s+)' + className + '(?:$|\\s+)'), ' ');
46				}
47			}
48		},
49		hasClass = function(element, className) {
50			return !!element.className.match('(?:^|\\s)' + className + '(?:$|\\s)');
51		},
52		toggleClass = function(element, className) {
53			return hasClass(element, className)
54				? removeClass(element, className)
55				: addClass(element, className);
56		},
57		footerForms = document.querySelectorAll('.page-footer-inner form'),
58		labels,
59		navMain = document.getElementById('main-navigation'),
60		navMainLis, i, element, navMainTouched, touchUsed;
61	if(footerForms && footerForms.length){
62		for(i = 0; i < footerForms.length; i++){
63			labels = footerForms[i].getElementsByTagName('label');
64			for(var j = 0; j < labels.length; j++){
65				(function(){
66					var label = labels[j],
67						labelFor,
68						input;
69					if(
70						(labelFor = label.getAttribute('for')) &&
71						(input = document.getElementById(labelFor)) &&
72						(input.tagName.toLowerCase() == 'textarea' || input.type.toLowerCase() == 'text' || input.type.toLowerCase() == 'email' || input.type.toLowerCase() == 'password' || input.type.toLowerCase() == 'search')
73					){
74						addEvent(input, 'focus', function(){
75							label.style.display = 'none';
76						});
77						addEvent(input, 'blur', function(){
78							if(!input.value){
79								label.style.display = '';
80							}
81						});
82						if(input.value){
83							label.style.display = 'none';
84						}
85					}
86				})();
87			}
88		}
89	}
90
91	// Edge dropdown touch fix
92	if(navMain && navMain.getElementsByTagName('ul').length){
93		navMainLis = navMain.getElementsByTagName('ul')[0].childNodes;
94		for(i = 0; i < navMainLis.length; i++){
95			if(navMainLis[i].nodeName && navMainLis[i].nodeName.toLowerCase() === 'li' && navMainLis[i].querySelector('ul,.mega-dropdown')){
96				element = navMainLis[i].getElementsByTagName('a');
97				if(element && (element = element[0])){
98					element.setAttribute('aria-haspopup', 'true');
99				}
100			}
101		}
102	}
103
104	// dropdown fix for all touch devices
105	if(window.Modernizr && Modernizr.touch){
106		if(navMain && navMain.getElementsByTagName('ul').length){
107			// devices supporting touch events may not mean touch input is used
108			// e.g. touch enabled laptops running Windows 8
109			addEvent(navMain, 'touchstart', function(event) {
110				touchUsed = true;
111			});
112			navMainLis = navMain.getElementsByTagName('ul')[0].childNodes;
113			for(i = 0; i < navMainLis.length; i++){
114				if(navMainLis[i].nodeName && navMainLis[i].nodeName.toLowerCase() === 'li' && navMainLis[i].querySelector('ul,.mega-dropdown')){
115					element = navMainLis[i].getElementsByTagName('a');
116					if(element && (element = element[0])){
117						addEvent(element, 'click', function(event){
118							if(navMainTouched !== this && touchUsed){
119								navMainTouched = this;
120								eventPreventDefault(event);
121							}
122						});
123					}
124				}
125			}
126		}
127	}
128
129	// Mobile navigation
130	(function(nav, page) {
131		if (!nav) {
132			return;
133		}
134		document.body.insertBefore(nav, document.body.firstChild);
135		var navLink;
136		var isOpened;
137		var open, close;
138		var updateHeight = function() {
139			if (!isOpened) {
140				return;
141			}
142			if (!nav.offsetHeight) {
143				// Close the nav if it is not visible anymore
144				return close();
145			}
146			nav.style.minHeight = 0;
147			page.style.height = Math.max((window.innerHeight || document.documentElement.clientHeight), nav.offsetHeight) + 'px';
148			page.style.position = 'relative';
149			page.style.overflow = 'hidden';
150			nav.style.minHeight = '';
151		};
152		open = function() {
153			isOpened = true;
154			addClass(nav, 'is-active');
155			updateHeight();
156		};
157		close = function() {
158			isOpened = false;
159			removeClass(nav, 'is-active');
160			page.style.height = '';
161			page.style.position = '';
162			page.style.overflow = '';
163		};
164		addEvent(window, 'resize', updateHeight);
165		addClass(nav, 'is-enabled');
166		navLink = document.createElement('a');
167		navLink.innerHTML = 'navigation';
168		navLink.href = '';
169		addClass(navLink, 'main-navigation-mobile-open');
170		addEvent(navLink, 'click', function(event) {
171			eventPreventDefault(event);
172			if (hasClass(nav, 'is-active')) {
173				close();
174			}
175			else {
176				open();
177			}
178		});
179		if (document.querySelector && document.querySelector('.page-wrapper')) {
180			document.querySelector('.page-wrapper').insertBefore(
181				navLink,
182				document.querySelector('.page-wrapper').firstChild
183			);
184		}
185		else {
186			nav.parentNode.insertBefore(navLink, nav);
187		}
188		closeButton = document.createElement('button');
189		closeButton.innerHTML = 'close';
190		addClass(closeButton, 'main-navigation-mobile-close');
191		addEvent(closeButton, 'click', function(event) {
192			if (isOpened) {
193				close();
194			}
195			eventPreventDefault(event);
196		});
197		nav.appendChild(closeButton);
198		var uls = nav.querySelectorAll('ul ul');
199		var button;
200		var buttonOnClick = function(event) {
201			toggleClass(this.parentNode, 'is-expanded');
202			toggleClass(this.parentNode, 'is-collapsed');
203			updateHeight();
204		};
205		for (var i = 0; i < uls.length; i++) {
206			button = document.createElement('button');
207			button.innerHTML = 'expand';
208			button.className = 'main-navigation-mobile-expand';
209			addEvent(button, 'click', buttonOnClick);
210			uls[i].parentNode.insertBefore(button, uls[i]);
211			if (hasClass(uls[i].parentNode, 'active') || hasClass(uls[i].parentNode, 'trail')) {
212				addClass(uls[i].parentNode, 'is-expanded');
213			}
214			else {
215				addClass(uls[i].parentNode, 'is-collapsed');
216			}
217		}
218	})(
219		document.querySelector && document.querySelector('.main-navigation-mobile'),
220		document.querySelector && document.querySelector('.page-wrapper')
221	);
222
223	// Animations
224	(function(elements) {
225		var filteredElements = [];
226		for (var i = 0; i < elements.length; i++) {
227			if (!elementMatches(elements[i], '.not-animated *, .not-animated')) {
228				filteredElements.push(elements[i]);
229			}
230		}
231		elements = filteredElements;
232		if (!elements.length || !(window.Modernizr && Modernizr.csstransitions)) {
233			return;
234		}
235		addClass(elements, 'not-in-view');
236		var update = function() {
237			var rect;
238			for (var i = 0; i < elements.length; i++) {
239				rect = elements[i].getBoundingClientRect();
240				if (rect.top < (window.innerHeight || document.documentElement.clientHeight) * 0.8) {
241					addClass(elements[i], 'in-view');
242					addClass(elements[i], 'has-shown');
243					removeClass(elements[i], 'not-in-view');
244				}
245				else if(rect.top > (window.innerHeight || document.documentElement.clientHeight) * 1.2) {
246					addClass(elements[i], 'not-in-view');
247					removeClass(elements[i], 'in-view');
248				}
249			}
250		};
251		addEvent(window, 'scroll', update);
252		//addEvent(window, 'resize', update);
253		//addEvent(window, 'load', update);
254		setTimeout(update, 0);
255	})(document.querySelectorAll && document.querySelectorAll('.is-animated'));
256
257})();

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.