PageSourceSearch

https://www.gtb.de/wp-content/themes/Avada-Child-Theme/js/karat.js?ver=1

js gtb.de collected 2026-09-25 05:33:00 UTC 14,466 bytes, 517 lines download raw bytes

1jQuery(document).ready(function () {
2	startSlider();
3	partnerSlider();
4	nextEventSlider();
5	partnerEventSlider();
6	cloneSubmenuThirdLevel();
7	cloneSubmenuThirdLevel2()
8	filterPartner();
9	flagEmptyEvents();
10	blogOverviewFilter();
11
12	/* JS Back Button - Subpages */
13	jQuery('.backbtn').on("click", function () {
14		/*if (document.referrer.indexOf(window.location.host) >= 0) {
15			window.history.back();
16		}
17		else {
18			window.location = '/';
19		}*/
20
21		//console.log(window.location.pathname);
22
23		let pathArray = window.location.pathname.split("/");
24		pathArray = pathArray.slice(1, -2);
25		let pathURL = "/" + pathArray.join("/") + "/";
26		if (pathURL === '//') pathURL = '/';
27		window.location = pathURL;
28		//console.log(pathURL);
29	});
30
31	/* Level Popup */
32	jQuery(".levelButton").on("click", function (event) {
33		event.preventDefault();
34		jQuery("body").find(".levelPopup").removeClass("active");
35		jQuery(this).parent().find('.levelPopup').addClass('active');
36	});
37
38	jQuery(".levelPopup .closePopup").on("click", function () {
39		jQuery(this).parent().removeClass('active');
40	});
41
42	jQuery(document).click(function (event) {
43		//if you click on anything except the modal itself or the "open modal" link, close the modal
44		if (!jQuery(event.target).closest(".levelPopup,.levelButton").length) {
45			jQuery("body").find(".levelPopup").removeClass("active");
46		}
47	});
48
49	/* Submenu toggle */
50	jQuery('.sabmenuicon').on("click", function () {
51		jQuery('.submenu-container').addClass('activenav');
52	});
53
54	jQuery('.sabmenuiconclose').on("click", function () {
55		jQuery('.submenu-container').removeClass('activenav');
56	});
57
58	/* Auto open menu child - Home */
59	jQuery('.startmenu #menu-submenue li.opensubmenu:first-child').addClass('expanded');
60	jQuery('.startmenu #menu-submenue li.opensubmenu:first-child .awb-menu__open-nav-submenu_click').attr('aria-expanded', 'true');
61	jQuery('.startmenu #menu-submenue-1 li.opensubmenu:first-child ul.awb-menu__sub-ul').css({ "display": "block" });
62
63	jQuery('#menu-submenue li.opensubmenu.current-menu-ancestor .awb-menu__open-nav-submenu_click').attr('aria-expanded', 'true');
64	jQuery('#menu-submenue-1 li.opensubmenu.current-menu-ancestor ul.awb-menu__sub-ul').css({ "display": "block" });
65
66	jQuery('.startmenu #menu-sub-menu li.opensubmenu:first-child').addClass('expanded');
67	jQuery('.startmenu #menu-sub-menu li.opensubmenu:first-child .awb-menu__open-nav-submenu_click').attr('aria-expanded', 'true');
68	jQuery('.startmenu #menu-sub-menu-1 li.opensubmenu:first-child ul.awb-menu__sub-ul').css({ "display": "block" });
69
70	jQuery('#menu-sub-menu li.opensubmenu.current-menu-ancestor .awb-menu__open-nav-submenu_click').attr('aria-expanded', 'true');
71	jQuery('#menu-sub-menu-1 li.opensubmenu.current-menu-ancestor ul.awb-menu__sub-ul').css({ "display": "block" });
72
73	/* Accordion Premium Partner */
74	const content = jQuery('.partner-content');
75	const button = jQuery('.partner-toggle');
76	let count = 1;
77	button.each(function () {
78		jQuery(this).addClass('button-' + count);
79		content.eq(count - 1).addClass('content-' + count);
80		jQuery(this).attr('data-target', count);
81
82		jQuery(this).click(function () {
83			const attr = jQuery(this).attr('data-target');
84			jQuery(this).toggleClass("closed");
85
86			if (jQuery(this).hasClass("closed")) {
87				jQuery('.content-' + attr).hide();
88			}
89			else {
90				jQuery('.content-' + attr).show();
91			}
92		});
93
94		count++;
95	});
96});
97
98jQuery(window).on('load', function () {
99	/* Event Tracking */
100	var eventpath = window.location.pathname;
101	var pathSegments = eventpath.split("/").filter(segment => segment !== "");
102
103	if ((eventpath.startsWith("/kurs/") || eventpath.startsWith("/en/kurs/")) && pathSegments.length > 1) {
104		// Warten auf gtag
105		var ctitle = jQuery(".coursetitle h3").text();
106		var cresult = ctitle.match(/\((.*)\)/);
107		var coursetitle = cresult[1];
108		coursetitle = coursetitle.replace('.', '').replace('-', '').replace('–', '').replace(/ /g, '').toLowerCase();
109
110		var providername = jQuery(".providername").text();
111		providername = providername.replace('.', '').replace('-', '').replace('–', '').replace(/ /g, '').toLowerCase().substr(0, 20);
112
113		//var formstart = 'formstart_' + providername + '_' + coursetitle;
114		//var formend = 'formend_' + providername + '_' + coursetitle;
115
116		waitForGtag(() => {
117			//gtag('event', 'test_event', { 'event_category': 'debug' });
118			if (jQuery(".fusion-alert.success").length) {
119				//console.log(formend + ' - ' + window.location.pathname);
120				//gtag('event', formend, {'link_url': window.location.pathname});
121				window.dataLayer = window.dataLayer || [];
122				window.dataLayer.push({
123					'event': 'angebotsanfrage_end',
124					'anbieter': providername,
125					'themen': coursetitle
126				});
127			}
128			else {
129				if (jQuery(".fusion-alert.error").length == 0) {
130					//console.log(formstart + ' - ' + window.location.pathname);
131					//gtag('event', formstart, {'link_url': window.location.pathname});
132					window.dataLayer = window.dataLayer || [];
133					window.dataLayer.push({
134						'event': 'angebotsanfrage_start',
135						'anbieter': providername,
136						'themen': coursetitle
137					});
138				}
139			}
140		});
141	}
142});
143
144jQuery(document).on('scroll', function () {
145	partnerSlider();
146});
147
148function waitForGtag(callback, timeout = 5000, interval = 100) {
149	let elapsedTime = 0;
150	let checkInterval = setInterval(() => {
151		if (typeof gtag === 'function') {
152			clearInterval(checkInterval);
153			//console.log("gtag bereit – Event wird gesendet");
154			callback();
155		} else {
156			elapsedTime += interval;
157			if (elapsedTime >= timeout) {
158				clearInterval(checkInterval);
159				//console.warn("gtag wurde nicht innerhalb von 5 Sekunden geladen.");
160			}
161		}
162	}, interval);
163}
164
165function partnerSlider() {
166	let mobile = window.matchMedia("(max-width: 640px)").matches;
167	const $partnerContainer = jQuery('.ppartnerContainer');
168
169	if (mobile && !$partnerContainer.hasClass('slick-initialized')) {
170		$partnerContainer.slick({
171			centerMode: true,
172			variableWidth: true,
173			slidesToShow: 3,
174			arrows: false,
175			responsive: [
176				{
177					breakpoint: 480,
178					settings: {
179						slidesToShow: 1
180					}
181				}
182			]
183		});
184	}
185	else if (!mobile && $partnerContainer.hasClass('slick-initialized')) {
186		$partnerContainer.slick('unslick');
187	}
188}
189
190function nextEventSlider() {
191	const $nextEventContainer = jQuery('.nexteventContainer:not(.partnereventContainer)');
192
193	$nextEventContainer.slick({
194		slidesToShow: 5,
195		infinite: false,
196		arrows: true,
197		prevArrow: '<button type="button" class="slick-prev"></button>',
198		nextArrow: '<button type="button" class="slick-next"></button>',
199		responsive: [
200			{
201				breakpoint: 1501,
202				settings: {
203					slidesToShow: 4
204				}
205			},
206			{
207				breakpoint: 1201,
208				settings: {
209					slidesToShow: 3
210				}
211			},
212			{
213				breakpoint: 991,
214				settings: {
215					slidesToShow: 2
216				}
217			},
218			{
219				breakpoint: 641,
220				settings: {
221					slidesToShow: 1,
222					arrows: false,
223					centerMode: true
224				}
225			}
226		]
227	});
228}
229function partnerEventSlider() {
230	const $partnerEventContainer = jQuery('.partnereventContainer');
231
232	$partnerEventContainer.slick({
233		slidesToShow: 4,
234		arrows: true,
235		prevArrow: '<button type="button" class="slick-prev"></button>',
236		nextArrow: '<button type="button" class="slick-next"></button>',
237		responsive: [
238			// {
239			// 	breakpoint: 1501,
240			// 	settings: {
241			// 		slidesToShow: 4
242			// 	}
243			// },
244			{
245				breakpoint: 1799,
246				settings: {
247					slidesToShow: 3
248				}
249			},
250			{
251				breakpoint: 1501,
252				settings: {
253					slidesToShow: 2
254				}
255			},
256			{
257				breakpoint: 991,
258				settings: {
259					slidesToShow: 1,
260				}
261			},
262			{
263				breakpoint: 641,
264				settings: {
265					slidesToShow: 1,
266					// arrows: false,
267					// centerMode: true,
268					// infinite: false,
269				}
270			}
271		]
272	});
273}
274
275function startSlider() {
276	const $startslider = jQuery('.startslider');
277	if (!$startslider.length) return;
278	$startslider.slick({
279		slidesToShow: 1,
280		arrows: true,
281		dots: true,
282		autoplay: false,
283		prevArrow: '<button type="button" class="slick-prev"></button>',
284		nextArrow: '<button type="button" class="slick-next"></button>',
285	});
286
287	slickWithProgressbar($startslider);
288}
289
290
291function slickWithProgressbar($slick) {
292	var time = 6;
293	var isPause;
294	var tick;
295	var percentTime;
296	var hasBeenStarted = false;
297
298	$slick.after('<div class="slider-progress"><div class="slickprogress"></div></div>');
299
300	var $bar = $slick.parent().find('.slickprogress');
301
302
303	var startProgressbar = function () {
304		resetProgressbar();
305		percentTime = 0;
306		isPause = false;
307		tick = setInterval(interval, 30);
308	}
309
310	var startProgressbarOnce = function () {
311		if (hasBeenStarted === false) {
312			startProgressbar();
313			hasBeenStarted = true;
314		}
315	}
316
317	var interval = function () {
318		if (isPause === false) {
319			percentTime += 1 / (time + 0.1);
320			$bar.css({
321				width: percentTime + "%"
322			});
323			if (percentTime >= 100) {
324				$slick.slick('slickNext');
325				startProgressbar();
326			}
327		}
328	}
329
330	var resetProgressbar = function () {
331		$bar.css({
332			width: 0 + '%'
333		});
334		clearTimeout(tick);
335	}
336
337	jQuery(window).on('scroll load', function () {
338
339		var rect = $slick.get(0).getBoundingClientRect();
340
341		if (rect.top - window.innerHeight < 0) {
342			startProgressbarOnce();
343		}
344
345	});
346
347	$slick.on('beforeChange', function (event, slick, currentSlide) {
348		startProgressbar();
349	})
350}
351
352function cloneSubmenuThirdLevel() {
353	let thirdLevel = '';
354	if (jQuery('#menu-submenue > li.current-menu-ancestor > ul li.current-menu-ancestor ul').length) {
355		thirdLevel = jQuery('#menu-submenue > li.current-menu-ancestor > ul li.current-menu-ancestor ul').clone();
356	} else if (jQuery('#menu-submenue > li.current-menu-ancestor > ul li.current-menu-item ul').length) {
357		thirdLevel = jQuery('#menu-submenue > li.current-menu-ancestor > ul li.current-menu-item ul').clone();
358	} else {
359		return;
360	}
361	const $target = jQuery('#menu-submenue > li.current-menu-ancestor > ul');
362
363	$target.append('<div class="extra"></div>');
364	$target.find('.extra').append(thirdLevel);
365}
366
367function cloneSubmenuThirdLevel2() {
368	let thirdLevel = '';
369	if (jQuery('#menu-sub-menu > li.current-menu-ancestor > ul li.current-menu-ancestor ul').length) {
370		thirdLevel = jQuery('#menu-sub-menu > li.current-menu-ancestor > ul li.current-menu-ancestor ul').clone();
371	} else if (jQuery('#menu-sub-menu > li.current-menu-ancestor > ul li.current-menu-item ul').length) {
372		thirdLevel = jQuery('#menu-sub-menu > li.current-menu-ancestor > ul li.current-menu-item ul').clone();
373	} else {
374		return;
375	}
376	const $target = jQuery('#menu-sub-menu > li.current-menu-ancestor > ul');
377
378	$target.append('<div class="extra"></div>');
379	$target.find('.extra').append(thirdLevel);
380}
381
382function filterPartner() {
383	if (!jQuery('.partnerFilterBlock').length) return;
384	const activeFilters = new Map;
385
386	const $buttonList = jQuery('.partnerFilterBlock .filter');
387	const $itemList = jQuery('.fusion-grid .post-card');
388
389	$buttonList.on('click', function () {
390		const $button = jQuery(this);
391		const attr = $button.attr('data-target');
392
393		if (!activeFilters.has(attr)) {
394			activeFilters.set(attr);
395			$button.addClass('active');
396		} else {
397			$button.removeClass('active');
398			activeFilters.delete(attr);
399		}
400
401		render();
402	});
403
404	//console.log($itemList);
405
406	const render = () => {
407		$itemList.removeClass('filtered');
408
409		if (activeFilters.size !== 0) {
410			$itemList.each(function () {
411				const $item = jQuery(this);
412				const classList = $item.find('.filterClasses').get(0).className.split(' ');
413
414				let filtered = true;
415
416				// console.log(classList);
417
418				classList.forEach((cl) => {
419					//console.log(cl);
420					if (activeFilters.has(cl)) {
421						filtered = false;
422					}
423				});
424				// console.log(filtered);
425
426				if (filtered) {
427					$item.addClass('filtered');
428				}
429			});
430		}
431	}
432}
433
434function flagEmptyEvents() {
435	const $wrapper = jQuery('.testingeventWrapper');
436	if ($wrapper.hasClass('eventcount-0')) {
437		$wrapper.parents('.fullwidth-box').addClass('event-hidden');
438	}
439}
440
441function blogOverviewFilter() {
442	const overviews = document.querySelectorAll('[data-blog-overview]');
443
444	overviews.forEach(function (overview) {
445		const filterButtons = overview.querySelectorAll('[data-filter]');
446		const itemsContainer = overview.querySelector('[data-blog-items]');
447
448		if (!itemsContainer || !filterButtons.length) {
449			return;
450		}
451
452		const getBlogItems = () => Array.from(itemsContainer.querySelectorAll('.blog-item'));
453		const getSeparators = () => Array.from(itemsContainer.querySelectorAll('.separator'));
454
455		const updateSeparators = () => {
456			const items = getBlogItems();
457			const separators = getSeparators();
458
459			separators.forEach(separator => {
460				separator.style.display = 'none';
461			});
462
463			const visibleItems = items.filter(item => item.style.display !== 'none');
464
465			visibleItems.forEach((item, index) => {
466				const visibleIndex = index + 1;
467
468				if (visibleIndex % 2 === 0 && visibleIndex < visibleItems.length) {
469					let counter = 0;
470
471					for (const node of itemsContainer.children) {
472						if (node.classList.contains('blog-item') && node.style.display !== 'none') {
473							counter++;
474						}
475
476						if (counter === visibleIndex) {
477							const nextNode = node.nextElementSibling;
478							if (nextNode && nextNode.classList.contains('separator')) {
479								nextNode.style.display = '';
480							}
481							break;
482						}
483					}
484				}
485			});
486		};
487
488		const applyFilter = (filterValue) => {
489			const items = getBlogItems();
490
491			items.forEach(function (item) {
492				const tags = (item.dataset.tags || '').split(' ').filter(Boolean);
493
494				if (filterValue === 'all' || tags.includes(filterValue)) {
495					item.style.display = '';
496				} else {
497					item.style.display = 'none';
498				}
499			});
500
501			updateSeparators();
502		};
503
504		filterButtons.forEach(function (button) {
505			button.addEventListener('click', function () {
506				const filterValue = button.dataset.filter;
507
508				filterButtons.forEach(btn => btn.classList.remove('is-active'));
509				button.classList.add('is-active');
510
511				applyFilter(filterValue);
512			});
513		});
514
515		updateSeparators();
516	});
517}

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.