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.