1function initSlickVariableWidth(carousels, arrSlidesToShow, arrSlidesToScroll, arrDots, arrArrows) { 2 if (typeof carousels.slick === 'function') { 3 carousels.slick({ 4 slidesToShow: arrSlidesToShow[0], 5 slidesToScroll: arrSlidesToScroll[0], 6 infinite: false, 7 dots: arrDots[0], 8 arrows: arrArrows[0], 9 variableWidth: true, 10 responsive: [ 11 { 12 breakpoint: 1030, 13 settings: { 14 slidesToShow: arrSlidesToShow[1], 15 slidesToScroll: arrSlidesToScroll[1], 16 dots: arrDots[1], 17 arrows: arrArrows[1] 18 } 19 }, 20 { 21 breakpoint: 770, 22 settings: { 23 slidesToShow: arrSlidesToShow[2], 24 slidesToScroll: arrSlidesToScroll[2], 25 dots: arrDots[2], 26 arrows: arrArrows[2] 27 } 28 }, 29 { 30 breakpoint: 480, 31 settings: { 32 slidesToShow: arrSlidesToShow[3], 33 slidesToScroll: arrSlidesToScroll[3], 34 dots: arrDots[3], 35 arrows: arrArrows[3] 36 } 37 } 38 // You can unslick at a given breakpoint now by adding: 39 // settings: "unslick" 40 // instead of a settings object 41 ] 42 }); 43 } else { 44 console.log('slick konnte nicht initialisiert werden. Ist das js eingebunden?'); 45 } 46} 47 48/** benötigt für das Submenü mit allen Haupt-Headern der Seite */ 49function initFloatingNav(carousels) { 50 var floatingHeader = $('.floating-header'), 51 floatingHeaderContainer = $('#floating-header'), 52 offset = 0, 53 pageHeader = $('.page-header'), 54 submenuHeaders = $('.submenu-header'); 55 56 if (floatingHeader.length === 0) { 57 return; 58 } 59 60 // Ãberschriften (mit jeweiligem Offset) dem Floating Header hinzufügen 61 submenuHeaders.each(function (index, header) { 62 var offsetTop = $(header).offset().top - 150; 63 floatingHeaderContainer.append( 64 '<div class="slick-slide floating-header-submenu-item' + 65 (index === 0 ? ' slick-active' : '') + 66 '" data-scrolltoid="' + 67 $(header).closest('.submenu-block').attr('id') + 68 '"><span>' + 69 header.innerHTML + 70 '</span></div>' 71 ); 72 }); 73 74 var floatingHeaderSubmenuItem = $('.floating-header .floating-header-submenu-item'); 75 76 // Scroll-Funktionalität bei Klick hinzufügen 77 floatingHeaderSubmenuItem.each(function (index, item) { 78 $(item).click(function () { 79 // "60" enspricht der Höhe des Submenüs 80 $([document.documentElement, document.body]).animate( 81 { 82 scrollTop: $('#' + $(item).attr('data-scrolltoid')).offset().top - 50 83 }, 84 1000 85 ); 86 }); 87 }); 88 89 // Floating Header entsprechend fixieren 90 offset = pageHeader.offset(); 91 92 if (typeof offset !== 'undefined') { 93 offset = offset.top + pageHeader.innerHeight(); 94 } else { 95 offset = 0; 96 } 97 98 if ((window.scrollY || document.documentElement.scrollTop) > offset) { 99 floatingHeader.addClass('fixed-position').css({ 100 display: 'block', 101 position: 'fixed', 102 top: 0, 103 left: $('.container:first').offset().left, 104 right: $('.container:first').offset().left 105 }); 106 } 107 108 $(window).bind('scroll', function () { 109 if ((window.scrollY || document.documentElement.scrollTop) > offset) { 110 floatingHeader.addClass('fixed-position').css({ 111 display: 'block', 112 position: 'fixed', 113 top: 0, 114 left: $('.container:first').offset().left, 115 right: $('.container:first').offset().left 116 }); 117 118 goToSlideNumber = 0; 119 floatingHeaderSubmenuItem.each(function (index, header) { 120 if ( 121 $('#' + $(header).attr('data-scrolltoid')).offset().top - 60 < 122 (window.scrollY || document.documentElement.scrollTop) 123 ) { 124 goToSlideNumber = index; 125 } 126 }); 127 // Submenu-Ãberschrift per Klasse aktiv setzen (wenn bestimmter Header erreicht wurde) 128 floatingHeaderSubmenuItem.removeClass('activeHeader'); 129 floatingHeaderSubmenuItem.eq(goToSlideNumber).addClass('activeHeader'); 130 // zur Slick-Slide des aktiven Headers springen 131 carousels.slick('slickGoTo', goToSlideNumber); 132 } else { 133 floatingHeader.removeClass('fixed-position').css({ 134 display: 'none', 135 position: '', 136 top: '', 137 left: '', 138 right: '' 139 }); 140 } 141 }); 142} 143 144function animateValue(selector, endValue, duration) { 145 $(selector).each(function () { 146 $(this) 147 .prop('Counter', 0) 148 .animate( 149 { 150 Counter: endValue.toString() 151 }, 152 { 153 duration: duration, 154 easing: 'linear', 155 step: function (now) { 156 $(this).text(Math.ceil(now)); 157 } 158 } 159 ); 160 }); 161} 162 163// Play-Icon für Videos in Slick Slider 164function initVideoPlaySlick() { 165 var videoBoxes = $('.ps-slick-video');
166 $('.slick-slide.ps-slick-thumbnail-video img', videoBoxes).after( 167 '<span class="ps-slick-video-play-icon fa fa-play-circle"></span>' 168 ); 169} 170 171function initVideoPlaySlickAll() { 172 var videoBoxes = $('.ps-slick-video'); 173 $('.slick-slide img', videoBoxes).after( 174 '<span class="ps-slick-video-play-icon fa fa-play-circle"></span>' 175 ); 176} 177 178/** Zeitleisten 179 aktivieren der korrekten Event-punkte 180*/ 181function initZeitleiste() { 182 let element = $('.ps-zeitleiste'), 183 selectorMenuEntries = $('.ps-zeitleiste-menu li', element), 184 selectorMenuSelect = $('select.select2.ps-zeitleiste-menu', element), 185 selectorPoints = $('.ps-zeitleiste-ereignisse .ps-zeitleiste-point', element), 186 carouselElement = $('.carousel', element), 187 carousel = undefined; 188 189 if ($(carouselElement).length > 0) { 190 carousel = new bootstrap.Carousel(carouselElement, { 191 touch: true 192 }); 193 } 194 195 if ($(element).length > 0) { 196 selectorMenuEntries.each((index, element) => { 197 $(element).on('click', (e) => { 198 preventDefaultEvent(e); 199 selectorMenuSelect.val(index).trigger('change'); 200 carousel.to(index); 201 carousel.pause(); 202 selectorPoints.removeClass('active'); 203 $(selectorPoints[index]).addClass('active'); 204 }); 205 }); 206 207 selectorPoints.each((index, element) => { 208 //Initial Active setzen 209 if ($(element).attr('class').search('active') > -1) { 210 $($('.carousel-item', carouselElement)[index]).addClass('active'); 211 carousel.to(index); 212 carousel.pause(); 213 } 214 215 //Click Event 216 $(element).on('click', (e) => { 217 selectorPoints.removeClass('active'); 218 $(selectorPoints[index]).addClass('active'); 219 carousel.to(index); 220 carousel.pause(); 221 }); 222 }); 223 224 //Mobile Slider Touch 225 $(carouselElement).on('slide.bs.carousel', (e) => { 226 selectorMenuSelect.val($(e.relatedTarget).index()).trigger('change', false); 227 selectorPoints.removeClass('active'); 228 $(selectorPoints[$(e.relatedTarget).index()]).addClass('active'); 229 }); 230 231 //Select2 Selection 232 selectorMenuSelect.on('change', (e, shouldChangeCarouselSlide = true) => { 233 const index = e.currentTarget.value; 234 const activeCarouselIndex = $($('.carousel-item.active', carouselElement)).index(); 235 if (shouldChangeCarouselSlide && index !== activeCarouselIndex) { 236 carousel.to(index); 237 carousel.pause(); 238 selectorPoints.removeClass('active'); 239 $(selectorPoints[index]).addClass('active'); 240 } 241 }); 242 } 243} 244 245// https://kenwheeler.github.io/slick/ 246// overwrites function "initGalleryWithPreviewSlider" in custom.js, needs to be overwritten due to Lightbox default value 247// Example: Array(3, 3, 3, 2) --> shown slides for different breakpoints 248// 1. Lightbox: shouldShowSlickLightbox: Anpassung für Teqfinder, hat nichts mit der 'Lightbox' zu tun 249// 2. Lightbox: jquery.magnific-popup Lightbox benötigt class="lightbox" (tennis-pressemitteilung.html) 250function initGalleryWithPreviewSlider( 251 isInfinite, 252 previewImagesToShow, 253 shouldShowArrows, 254 shouldShowSlickLightbox, 255 gallerySelector 256) { 257 // due to IE (not supporting default values for parameter) 258 isInfinite = isInfinite === undefined ? true : isInfinite; 259 previewImagesToShow = previewImagesToShow === undefined ? Array(6, 4, 3, 2) : previewImagesToShow; 260 shouldShowArrows = shouldShowArrows === undefined ? false : shouldShowArrows; 261 shouldShowSlickLightbox = shouldShowSlickLightbox === undefined ? false : shouldShowSlickLightbox; 262 263 if (gallerySelector) { 264 var carouselsWithPreviewNav = $(gallerySelector).find('.single-carousel.with-preview-nav'); 265 var carouselsPreviewNav = $(gallerySelector).find('.preview-nav-carousel'); 266 } else { 267 var carouselsWithPreviewNav = $('.single-carousel.with-preview-nav'); 268 var carouselsPreviewNav = $('.preview-nav-carousel'); 269 } 270 //Main-Carousel 271 initSlickNavFor( 272 carouselsWithPreviewNav, 273 Array(1, 1, 1, 1), 274 Array(1, 1, 1, 1), 275 Array(false, false, false, false), 276 Array(shouldShowArrows, shouldShowArrows, shouldShowArrows, shouldShowArrows), 277 (gallerySelector ? gallerySelector + ' ' : '') + '.preview-nav-carousel', 278 false, 279 isInfinite, 280 '.slick-single-carousel-btn-prev', 281 '.slick-single-carousel-btn-next' 282 ); 283 //Preview-Carousel 284 initSlickNavFor( 285 carouselsPreviewNav, 286 previewImagesToShow, 287 Array(1, 1, 1, 1), 288 Array(false, false, false, false), 289 Array(false, false, false, false), 290 (gallerySelector ? gallerySelector + ' ' : '') + '.single-carousel.with-preview-nav', 291 true, 292 isInfinite, 293 null, //selector prev 294 null, //selector next 295 null, //center mode 296 false, //adaptive height not working 297 false //variable width not working 298 ); 299 initResponsiveDots(carouselsWithPreviewNav); 300 301 if (!isInfinite) { 302 initPreviewGalleryAdjustment(carouselsPreviewNav); 303 initSliderCounterPosition(carouselsPreviewNav, true); 304 } 305 306 // slide to clicked preview nav slide 307 $((gallerySelector ? gallerySelector + ' ' : '') + '.preview-nav-carousel').on( 308 'click', 309 '.slick-slide', 310 function (e) { 311 const $slide = $(e.target).closest('.slick-slide'); 312 const index = $(this).data('slick-index'); 313 if ($slide.length && !$slide.hasClass('slick-cloned') && typeof index !== 'undefined') { 314 $( 315 (gallerySelector ? gallerySelector + ' ' : '') + '.single-carousel.with-preview-nav' 316 ).slick('slickGoTo', index); 317 } 318 } 319 ); 320 321 if (shouldShowSlickLightbox) { 322 $(carouselsWithPreviewNav) 323 .find('.slick-slide') 324 .on('click', function () { 325 initSlickLightboxGallery(); 326 }); 327 328 $(carouselsWithPreviewNav) 329 .parent() 330 .find('.close-fullscreen') 331 .on('click', function () { 332 destroySlickLightboxGallery(); 333 }); 334 } 335} 336 337function initSlickNavFor( 338 carousels, 339 arrSlidesToShow, 340 arrSlidesToScroll, 341 arrDots, 342 arrArrows, 343 asNavForSelector, 344 isNavSlider, 345 isInfinite, 346 prevArrowSelector, 347 nextArrowSelector,
348 centerModeState, 349 adaptiveHeightState, 350 variableWidthState 351) { 352 if (typeof carousels.slick === 'function') { 353 var slickOptions = { 354 slidesToShow: arrSlidesToShow[0], 355 slidesToScroll: arrSlidesToScroll[0], 356 infinite: isInfinite, 357 dots: arrDots[0], 358 arrows: arrArrows[0], 359 variableWidth: false, 360 asNavFor: asNavForSelector, 361 //focusOnSelect conflicts with inifinite 362 //focusOnSelect: isNavSlider ? true : false, 363 responsive: [ 364 { 365 breakpoint: 1030, 366 settings: { 367 slidesToShow: arrSlidesToShow[1], 368 slidesToScroll: arrSlidesToScroll[1], 369 dots: arrDots[1], 370 arrows: arrArrows[1] 371 } 372 }, 373 { 374 breakpoint: 770, 375 settings: { 376 slidesToShow: arrSlidesToShow[2], 377 slidesToScroll: arrSlidesToScroll[2], 378 dots: arrDots[2], 379 arrows: arrArrows[2] 380 } 381 }, 382 { 383 breakpoint: 480, 384 settings: { 385 slidesToShow: arrSlidesToShow[3], 386 slidesToScroll: arrSlidesToScroll[3], 387 dots: arrDots[3], 388 arrows: arrArrows[3] 389 } 390 } 391 ] 392 }; 393 394 if (typeof centerModeState === 'boolean') { 395 slickOptions.centerMode = centerModeState; 396 } else { 397 // null or no value for this mode 398 slickOptions.centerMode = 399 isNavSlider && 400 $(carousels).find('.slick-slide:not(.slick-cloned)').length >= 5 && 401 isInfinite 402 ? true 403 : false; 404 } 405 406 if (typeof prevArrowSelector !== 'undefined' && prevArrowSelector !== null) { 407 slickOptions.prevArrow = prevArrowSelector; 408 } 409 410 if (typeof nextArrowSelector !== 'undefined' && nextArrowSelector !== null) { 411 slickOptions.nextArrow = nextArrowSelector; 412 } 413 414 if (typeof adaptiveHeightState === 'boolean') { 415 slickOptions.adaptiveHeight = adaptiveHeightState; 416 } 417 418 if (typeof variableWidthState === 'boolean') { 419 slickOptions.variableWidth = variableWidthState; 420 } 421 422 carousels.slick(slickOptions); 423 } else { 424 console.log('Slick Slider konnte nicht initialisiert werden. Ist das JS eingebunden?'); 425 } 426} 427 428function initTournamentProgressCircle(circleSelector = 'circle.progress-ring-circle') { 429 let circles = document.querySelectorAll(circleSelector); 430 431 circles.forEach((circle) => { 432 let radius = circle.r.baseVal.value; 433 let circumference = radius * 2 * Math.PI; 434 435 $(circleSelector).data('circumference', circumference); 436 437 circle.style.strokeDasharray = `${circumference} ${circumference}`; 438 circle.style.strokeDashoffset = `${circumference}`; 439 }); 440} 441 442function setTournamentProgressCircle(percent, circleSelector = 'circle.progress-ring-circle') { 443 let circles = document.querySelectorAll(circleSelector); 444 445 circles.forEach((circle) => { 446 let circumference = $(circleSelector).data('circumference'); 447 const offset = circumference - (percent / 100) * circumference; 448 circle.style.strokeDashoffset = offset; 449 }); 450} 451 452function initLiveTicker() { 453 let liveTicker = $('.live-ticker-light-container'); 454 let offset = liveTicker.offset().top; 455 456 $(window).on('scroll', function () { 457 if ($(window).scrollTop() > offset) { 458 liveTicker.addClass('sticky'); 459 } else { 460 liveTicker.removeClass('sticky'); 461 } 462 }); 463} 464 465// overwrites function "initLightbox" in custom.js, needs to be overwritten due to Lightbox Gallery Selector ('.row .slick-slide:not(.slick-cloned) .slick-slide a.lightbox') default value 466/** 467 * mit lightbox zu verarbeitende Bilder (werden auch gleich mit prev/next navigation initialisiert) 468 * <a href="<Bild-URL>" data-text="<Bild-Caption>" class="lightbox"><img /></a> 469 */ 470var lightBoxOpen = false; 471var videoStart = true; 472var soundStart = true; 473var videoId = ''; 474var soundId = ''; 475function initLightbox(dialog) { 476 // the selector for a gallery, if not all images should show up in the same gallery 477 var enabledGallery = true; 478 var imageLightbox = []; 479 var delegate = ''; 480 481 function lightboxEffect(element) { 482 $(element).magnificPopup({ 483 //imageLightbox.magnificPopup({ 484 delegate: delegate, 485 type: 'image', 486 closeMarkup: '<button title="%title%" class="mfp-close psicon-cross"></button>', 487 closeOnBgClick: true, 488 image: { 489 titleSrc: function (item) { 490 var source = item.el.attr('data-text'); 491 if (typeof source === 'undefined') { 492 return ''; 493 } 494 if (source.charAt(0) === '#') { 495 return $(source).html(); 496 } else { 497 return item.el.attr('data-text'); 498 } 499 } 500 }, 501 gallery: { 502 titleSrc: 'data-text', 503 enabled: enabledGallery, 504 navigateByImgClick: enabledGallery, 505 tCounter: '%curr% / %total%', 506 preload: [1, 1] 507 }, 508 callbacks: { 509 imageLoadComplete: function () { 510 var footerHeight = $('.mfp-figure figcaption .mfp-bottom-bar').outerHeight(); 511 var topHeight = parseInt($('.mfp-figure').css('margin-top'), 10); 512 var displayHeight = document.documentElement.clientHeight; 513 var imageHeight = displayHeight * 0.8 - footerHeight - topHeight; 514 $('.mfp-figure .mfp-img').css( 515 'max-height', 516 (imageHeight > displayHeight / 2 ? imageHeight : displayHeight / 2) + 'px' 517 ); 518 $('.mfp-figure figcaption').css({ height: footerHeight + 'px' }); 519 initTooltips(); 520 }, 521 change: function (item) { 522 var url = $(this.content).attr('data-url'); 523 var autoplay = false; 524 var attachmentid = ''; 525 if (videoId && typeof jwplayer('ContentVideoPlayer' + videoId).pause === 'function') { 526 jwplayer('ContentVideoPlayer' + videoId).pause(); 527 } 528 if (url !== undefined) { 529 var width = Number($(this.content).attr('data-width')); 530 var height = Number($(this.content).attr('data-height')); 531 var image = $(this.content).attr('data-image'); 532 var vttfile = $(this.content).attr('data-vttfile'); 533 var pid = $(this.content).attr('data-pid'); 534 autoplay = false; 535 attachmentid = $(this.content).attr('data-attachmentid'); 536 $('.mfp-counter', this.content).html( 537 this.currItem.index + 1 + ' / ' + this.items.length 538 ); 539 $('p', this.content).css('max-width', width); 540 videoId = attachmentid; 541 var video = $('.jwplayer', this.content).length; 542 if (video === 0) { 543 if (window.innerWidth > width) { 544 $('.video-container', $(this.content)).css({ 545 width: width, 546 height: height 547 }); 548 } else { 549 $('.video-container', $(this.content)).css({ 550 width: '100%', 551 height: '100%' 552 }); 553 } 554 setTimeout(function () { 555 initVideoPlayer( 556 url, 557 width, 558 height, 559 image, 560 autoplay, 561 attachmentid, 562 '', 563 pid, 564 '&embedded=1', 565 '', 566 vttfile 567 ); 568 }, 100); 569 } 570 initTooltips('.mfp-container '); 571 } else { 572 videoId = ''; 573 url = $(this.content).attr('data-sound-url'); 574 if (url !== undefined) { 575 attachmentid = $(this.content).attr('data-attachmentid'); 576 autoplay = false; 577 soundId = attachmentid; 578 var sound = $('.jwplayer', this.content).length; 579 if (sound === 0) { 580 setTimeout(function () { 581 initSoundPlayer(url, autoplay, attachmentid); 582 }, 100); 583 } 584 } else { 585 soundId = ''; 586 } 587 } 588 589 // display title accordiongly, interpret it as html not as a string (with hmtl tags) 590 const $popup = $.magnificPopup.instance.contentContainer; 591 let source = $.magnificPopup.instance.currItem.el.attr('data-text'); 592 let title = ''; 593 if (typeof source === 'undefined') { 594 title = ''; 595 } 596 if (source && source.charAt(0) === '#') { 597 title = $(source).html(); 598 } else { 599 title = item.el.attr('data-text'); 600 } 601 $popup.find('.mfp-title').html(title); 602 $popup 603 .find('.mfp-counter', this.content) 604 .html(this.currItem.index + 1 + ' / ' + this.items.length); 605 // prepare tooltips for initialization (not inside jwplayer lightbox content div) 606 const tooltips = $popup.find('> div:not([data-url]) [data-target-tooltip-id]'); 607 if (tooltips.length > 0) { 608 for (let i = 0; i < tooltips.length; i++) { 609 tooltips[i].removeAttribute('data-target-tooltip-id'); 610 } 611 } 612 }, 613 resize: function () { 614 var footerHeight = $('.mfp-figure figcaption .mfp-bottom-bar').outerHeight(); 615 var topHeight = parseInt($('.mfp-figure').css('margin-top'), 10); 616 var displayHeight = window.innerHeight; 617 var width = Number($(this.content).attr('data-width')); 618 var height = Number($(this.content).attr('data-height')); 619 if (window.innerWidth >= width) { 620 $('.video-container', $(this.content)).css({ 621 width: width, 622 height: height 623 }); 624 } else { 625 $('.video-container', $(this.content)).css({ 626 width: '100%', 627 height: '100%' 628 }); 629 } 630 $('.mfp-figure .mfp-img').css( 631 'max-height', 632 displayHeight * 0.8 - footerHeight - topHeight + 'px' 633 ); 634 $('.mfp-figure figcaption').css({ height: footerHeight + 'px' }); 635 }, 636 open: function () { 637 setTimeout(function () { 638 if (videoId && typeof jwplayer('ContentVideoPlayer' + videoId).play === 'function') { 639 jwplayer('ContentVideoPlayer' + videoId).play(videoStart); 640 videoStart = true; 641 } 642 }, 200); 643 setTimeout(function () { 644 if (soundId && typeof jwplayer('ContentVideoPlayer' + videoId).play === 'function') { 645 jwplayer('ContentSoundPlayer' + soundId).play(soundStart); 646 soundStart = true; 647 } 648 }, 200);
649 // Hammer: custom_old.js 650 }, 651 close: function () { 652 if (videoId && typeof jwplayer('ContentVideoPlayer' + videoId).pause === 'function') { 653 jwplayer('ContentVideoPlayer' + videoId).pause(); 654 } 655 } 656 } 657 }); 658 } 659 660 if (dialog !== true) { 661 imageLightbox = $('.row .slick-slide:not(.slick-cloned) .slick-slide a.lightbox'); //different galleries for each row (must have lightbox-elements) 662 if (imageLightbox.length === 0) { 663 imageLightbox = $('.ui-tabs-panel .ui-tabs-panel'); //different galleries for each panel 664 } else { 665 imageLightbox = $('.row .slick-slide:not(.slick-cloned) .slick-slide a.lightbox').closest( 666 '.row' 667 ); //different galleries for each row (if there are rows with lightbox-elements) 668 } 669 delegate = '.slick-slide:not(.slick-cloned) .slick-slide a.lightbox'; //element with the image-link 670 } 671 672 if (imageLightbox.length === 0 || dialog) { 673 //no gallery-groups available or dialog-mode 674 imageLightbox = $('.lightbox'); 675 delegate = ''; 676 } 677 678 if (dialog === true) { 679 enabledGallery = false; 680 } 681 682 if (imageLightbox.length > 0) { 683 if (delegate !== '') { 684 $(imageLightbox).each(function () { 685 // for each gallery 686 lightboxEffect(this); 687 galleries.push(this); 688 }); 689 } else { 690 //there is only one gallery with all lightbox-elements 691 lightboxEffect(imageLightbox); 692 galleries.push(imageLightbox); 693 } 694 } 695} 696 697function setPressReleaseItemsFullyClickable() { 698 const items = document.querySelectorAll('.press-release-item'); 699 if (items.length === 0) return; 700 for (let i = 0; i < items.length; i++) { 701 const item = items[i]; 702 const href = item.querySelector('.press-release-item-content [href]')?.getAttribute('href'); 703 if (!href || href.trim() === '' || href === '#') continue; 704 item.style.cursor = 'pointer'; 705 item.addEventListener('click', () => { 706 window.location.href = href; 707 }); 708 } 709}
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.