1// lazy loading 2var lazyLoadInstance = new LazyLoad({ 3 // Your custom settings go here 4}); 5 6 7if ($('.lazyscroll').length > 0) { 8 var myLazyLoad = new LazyLoad({ 9 container: document.querySelector(".lazyscroll") 10 }); 11} 12 13 14$(document).ready(function () { 15 16 //mobile menu toggle 17 function toggleMobileMenu() { 18 $(".menudrop").slideToggle(); 19 $('.menubar__trigger__link').toggleClass('menubar__trigger__link--active'); 20 $(".menudrop").toggleClass('menudrop--active'); 21 22 $(".menu").toggleClass('menu-open'); 23 $("body").toggleClass('noscroll'); 24 } 25 $(".menubar__trigger__link").click(function (event) { 26 event.preventDefault(); 27 toggleMobileMenu(); 28 }); 29 30 //dropdown nav desktop 31 $( ".menubar__list__item.with-dropdown .menubar__list__item-link" ).click(function(event) { 32 var dropdownid = $("#" + $(this).data( "dropdown" )); 33 var dropdowntrigger = $(this); 34 35 $(".menubar__list__item.with-dropdown .menubar__list__item-link").not($(this)).removeClass('active'); 36 $(this).toggleClass('open'); 37 38 event.preventDefault(); 39 event.stopPropagation(); 40 41 dropdownid.fadeToggle(); 42 $('.menubar__list__item__dropdown').not(dropdownid).hide(); 43 44 $(document).click(function() { 45 dropdowntrigger.removeClass('open'); 46 dropdownid.hide(); 47 dropdownid.unbind( "click" ); 48 }); 49 50 }); 51//dropdown nav - mobile 52 $('.menudrop__list__item.with-dropdown .menudrop__list__item-link').click(function () { 53 // Toggle the accordion content 54 $(this).toggleClass('active'); 55 $(this).next('.menudrop__list__item-drop').slideToggle(); 56 }); 57 58}); 59 60 61 62 63 64 const controls_main_video = ` 65 <div class="plyr__controls"> 66 <button type="button" class="plyr__control plyr__custombtn" data-plyr="play" title="Play/Pause Video"> 67 <i class="icon--pressed icn icn-pause"></i> 68 <i class="icon--not-pressed icn icn-play"></i> 69 </button> 70 </div> 71 <button type="button" class="plyr__control plyr__btn-full" data-plyr="fullscreen" title="Open Video in full screen"> 72 <i class="icon--pressed icn icn-full-false"></i> 73 <i class="icon--not-pressed icn icn-full-true"></i> 74 </button> 75 <div class="plyr__progress"> 76 <input data-plyr="seek" type="range" min="0" max="100" step="0.01" value="0" aria-label="Seek"> 77 <progress class="plyr__progress__buffer" min="0" max="100" value="0">% buffered</progress> 78 </div> 79 `; 80 81 82$(document).ready(function() { 83 if ($('#mainVideoPlayer').length > 0) { 84 const mainVideoPlayer = new Plyr('#mainVideoPlayer', { 85 preload:false, 86 controls: controls_main_video 87 }); 88 } 89 }); 90 91 92 93 94 95 //glightbox - lightbox modal and gallery 96 const customLightboxHTML = ` 97 <div id="glightbox-body" class="glightbox-container lightboxgallery brand-general--video"> 98 <div class="gloader visible lightboxgallery__loader"></div> 99 <div class="goverlay lightboxgallery__overlay"></div> 100 <div class="gcontainer lightboxgallery__cont"> 101 <div class="lightboxgallery__btn"> 102 <div class="lightboxgallery__btn__cont"> 103 <button class="gmute gbtn lightboxgallery__btn__cont-volume" tabindex="2" aria-label="Mute"> 104 <i class="icn-unmute"></i> 105 </button> 106 <button class="gprev gbtn lightboxgallery__btn__cont-prev" tabindex="1" aria-label="Previous"> 107 <i class="icn-arrow-left"></i> 108 </button> 109 <button class="gnext gbtn lightboxgallery__btn__cont-next" tabindex="0" aria-label="Next"> 110 <i class="icn-arrow-right"></i> 111 </button> 112 <button class="gclose gbtn lightboxgallery__btn__cont-close" tabindex="2" aria-label="Close"> 113 <i class="icn-close"></i> 114 </button> 115 116 </div> 117 </div> 118 <div id="glightbox-slider" class="gslider lightboxgallery__slider"></div> 119 </div> 120 </div> 121 `; 122
123 let customSlideHTML = ` 124 <div class="gslide"> 125 <div class="gslide-inner-content"> 126 <div class="ginner-container"> 127 <div class="gslide-media"> 128 </div> 129 <div class="gslide-description"> 130 <div class="gdesc-inner"> 131 <div class="gslide-title"></div> 132 <div class="gslide-desc"></div> 133 </div> 134 </div> 135 </div> 136 </div> 137 </div> 138`; 139$(document).ready(function() { 140 if ($('.glightbox').length > 0) { 141 const lightbox = GLightbox({ 142 lightboxHTML: customLightboxHTML, 143 slideHTML: customSlideHTML, 144 skin: 'custom', 145 closeOnOutsideClick: false, 146 zoomable: true, 147 plyr: { 148 css: '', 149 js: '', 150 autopause: false, 151 preload:false, 152 autoplay:false, 153 muted: false, 154 config: { 155 controls: controls_main_video, 156 muted: false 157 } 158 159 } 160 }); 161 162 lightbox.on('slide_after_load', (data) => { 163 const { slideIndex, slideNode, slideConfig, player, trigger } = data; 164 // console.log(data) 165 var posterimage = trigger.getAttribute('data-poster'); 166 167 }); 168 } 169 }); 170 171 172 173 174 175 176 177 //blogs slider 178 179// const swiper5 = new Swiper('#blogslider', { 180// loop: false, 181// spaceBetween: 40, 182// slidesPerView: 1, 183// breakpoints: { 184// 992: { 185// slidesPerView: 2 186// }, 187// 1200: { 188// slidesPerView: 3 189// }, 190// } 191// }); 192 193 194 195 196//client video slider 197$(document).ready(function() { 198 if ($('.client-players').length > 0) { 199 200 const controls3 = ` 201 <div class="plyr__controls"> 202 203 <button type="button" class="plyr__control plyr__custombtn" data-plyr="play" title="Play/Pause Video"> 204 <i class="icon--pressed icn icn-pause"></i> 205 <i class="icon--not-pressed icn icn-play"></i> 206 </button> 207 208 209 210 <button type="button" class="plyr__control plyr__custombtn" data-plyr="mute" title="Mute Video"> 211 <i class="icon--pressed icn icn-unmute"></i> 212 </button> 213 214 </div> 215 <button type="button" class="plyr__control plyr__btn-full" data-plyr="fullscreen" title="Open Video in full screen"> 216 <i class="icon--pressed icn icn-full-false"></i> 217 <i class="icon--not-pressed icn icn-full-true"></i> 218 </button> 219 <div class="plyr__progress"> 220 <input data-plyr="seek" type="range" min="0" max="100" step="0.01" value="0" aria-label="Seek"> 221 <progress class="plyr__progress__buffer" min="0" max="100" value="0">% buffered</progress> 222 </div> 223 `; 224 225 const players = Plyr.setup('.client-players', { 226 muted: true, 227 preload: false, 228 captions: { active: true }, 229 controls: controls3 230 }); 231 232 players.forEach(player => { 233 // const poster = $(player.elements.container).find('.plyr__poster'); 234 // const mediaElement = player.media; 235 236 // player.on('play', () => { 237 // poster.css('opacity', 0); 238 // }); 239 240 // player.on('pause', () => { 241 // poster.css('opacity', 1); 242 // }); 243 // player.on('ready', () => { 244 245 // }); 246 }); 247 248 249 let userInteracted = false; 250 251 // Set flag when user clicks or touches the page 252 window.addEventListener('click', () => userInteracted = true, { once: true }); 253 window.addEventListener('touchstart', () => userInteracted = true, { once: true }); 254 255 // Initialize Swiper 256 const swiper6 = new Swiper('#clientv-slider', { 257 spaceBetween: 20, 258 slidesPerView: 1, 259 // mousewheel: true, 260 centeredSlides: true, 261 loop: true, 262 initialSlide: 3, 263 observer: true, 264 direction: 'horizontal', 265 observeParents: true, 266 parallax:true, 267 268 navigation: { 269 nextEl: '.clientv__controls--next', 270 prevEl: '.clientv__controls--prev', 271 }, 272 breakpoints: { 273 992: { 274 slidesPerView: 3, 275 spaceBetween: 40, 276 }, 277 }, 278 on: { 279 init: function() { 280 281 const activePlyrInstance = players[this.realIndex]; 282 activePlyrInstance.muted = true; 283 284 285 ScrollTrigger.create({ 286 once: true, 287 trigger: '#clientv-slider', 288 start: 'top 50%', // Adjust trigger position as needed 289 end: 'bottom 40%', 290 immediateRender:false, 291 onEnter: () => { 292 // activePlyrInstance.play(); 293 }, 294 onLeave: () => { 295 activePlyrInstance.pause(); 296 }, 297 298 onLeaveBack: () => { 299 if (activePlyrInstance.isHTML5) { 300 activePlyrInstance.pause(); 301 } 302 }, 303 304 }); 305 }, 306 // Swiper callback 307 slideChange: function () { 308 const activeSlideIndex = this.realIndex; 309 const activePlyrInstance = players[activeSlideIndex]; 310
311 players.forEach((instance, index) => { 312 if (index !== activeSlideIndex) { 313 if (instance.isHTML5) { 314 instance.pause(); 315 } 316 const muteButton = $(instance.elements.container).find('[data-plyr="mute"]'); 317 if (muteButton.length > 0) { 318 muteButton.hide(); 319 } 320 } 321 }); 322 323 activePlyrInstance.muted = false; 324 325 if (activePlyrInstance.isHTML5 && userInteracted) { 326 activePlyrInstance.play().catch(err => console.warn('Play blocked:', err)); 327 } 328 } 329 }, 330 }); 331 332 // Play video on slide click 333 $('.clientv__item').on('click', function() { 334 const index = $(this).index(); 335 swiper6.slideTo(index); 336 }); 337 338 // Hide mute button on click 339 $('[data-plyr="mute"]').on('click', function() { 340 341 $(this).fadeOut(); 342 }); 343 344 345 346 } 347 }); 348 349 350 351 const swiper8 = new Swiper('#clientext-slider', { 352 loop: true, 353 autoHeight: true, //enable auto height 354 spaceBetween: 40, 355 slidesPerView: 1, 356 autoplay: { 357 delay: 5000, 358 pauseOnMouseEnter:true 359 }, 360 navigation: { 361 nextEl: '.clientext__wrapper__controls--next', 362 prevEl: '.clientext__wrapper__controls--prev', 363 }, 364 }); 365 366 367//case studies slider 368 369// Initialize Swiper without autoplay 370const swcasest = new Swiper(".swcasest", { 371 loop: true, 372 spaceBetween: 100, 373 374 autoplay: false, // Disable autoplay for now, will trigger when the slider is in view 375 376 navigation: { 377 nextEl: "#swcasest-next", 378 prevEl: "#swcasest-prev" 379 }, 380 381 allowTouchMove: false, // Default (for large screens) 382 breakpoints: { 383 1136: { allowTouchMove: false}, // Tablets 384 0: { allowTouchMove: true } // Mobile phones 385 }, 386 387 on: { 388 // Event that runs when Swiper is initialized 389 init: function() { 390 // Ensure the animation runs when Swiper is initialized (for the first slide) 391 const activeSlide = this.slides[this.activeIndex]; 392 const cover = activeSlide.querySelector('.casestudysw__cover'); 393 if (cover) { 394 cover.classList.add('slidein'); 395 } 396 }, 397 398 // Event that runs when the slide change starts 399 slideChangeTransitionStart: function() { 400 const activeSlide = this.slides[this.activeIndex]; 401 402 // Handle .casestudysw__cover animation (from translateX(100%) to translateX(0%)) 403 const cover = activeSlide.querySelector('.casestudysw__cover'); 404 if (cover) { 405 cover.classList.remove('slidein'); 406 void cover.offsetWidth; // Forces reflow 407 cover.classList.add('slidein'); 408 } 409 }, 410 411 // Event that runs when the slide change transition ends 412 slideChangeTransitionEnd: function() { 413 const activeSlide = this.slides[this.activeIndex]; 414 const arrows = activeSlide.querySelectorAll('.casestudysw__bx__row--num---item----arrow'); 415 416 arrows.forEach((arrow, index) => { 417 setTimeout(() => { 418 arrow.classList.add('pulse'); 419 }, index * 500); // Stagger the pulse animation for each arrow 420 }); 421 } 422 } 423}); 424 425// Set up IntersectionObserver to trigger autoplay when the slider is in view 426const swcasestobserver = new IntersectionObserver((entries, swcasestobserver) => { 427 entries.forEach(entry => { 428 if (entry.isIntersecting) { 429 // Start the Swiper autoplay when it's in view 430 swcasest.autoplay.start(); 431 } else { 432 // Stop autoplay when it's out of view (optional) 433 swcasest.autoplay.stop(); 434 } 435 }); 436}, { 437 threshold: 0.5 // Trigger when 50% of the slider is in view 438}); 439 440 441if ($('.swcasest').length > 0) { 442 // Observe the Swiper container 443 const swiperContainer = document.querySelector('.swcasest'); 444 swcasestobserver.observe(swiperContainer); 445}; 446 447 448//services grid load on mobile only 449$(document).ready(function () { 450 const breakpoint = window.matchMedia('(min-width:993px)'); 451 452 let mySwiper; 453 454 const breakpointChecker = function () { 455 if (breakpoint.matches === true) {
456 if (mySwiper !== undefined) mySwiper.destroy(true, true) 457 return; 458 } else if (breakpoint.matches === false) { 459 return enableSwiper(); 460 } 461 }; 462 const enableSwiper = function () { 463 mySwiper = new Swiper('#servicesgrid-slider', { 464 loop: true, 465 slidesPerView: 'auto', 466 keyboardControl: true, 467 grabCursor: true, 468 pagination: '.swiper-pagination', 469 paginationClickable: true 470 }); 471 }; 472 breakpoint.addListener(breakpointChecker); 473 breakpointChecker(); 474}); 475 476 477 478 479 480 481//video gallery play on hover 482$(document).ready(function () { 483 $(".gallerygrid__item.type-video").hover(function () { 484 var videoElement = $(this).children("video"); 485 486 if (videoElement.length > 0) { 487 var el = videoElement[0]; 488 if (el.paused) { 489 el.play(); 490 } 491 } 492 }, function () { 493 var videoElement2 = $(this).children("video"); 494 495 if (videoElement2.length > 0) { 496 var el2 = videoElement2[0]; 497 el2.pause(); 498 } 499 }); 500}); 501 502 503//----------------faq section 504 505//accordion setup 506function setupFAQAccordion(itemContentClass, itemClass, activeClass) { 507 $(itemContentClass).each(function() { 508 if ($(this).parent().parent('li').hasClass(activeClass)) { 509 $(this).show(); 510 } 511 }); 512 513 $(itemClass).on('click', function() { 514 var content = $(this).find(itemContentClass); 515 516 $(itemContentClass).not(content).slideUp(); 517 $(itemContentClass).not(content).parent().parent('li').removeClass(activeClass); 518 519 content.slideToggle(); 520 content.parent().parent('li').toggleClass(activeClass); 521 }); 522 523} 524//light up on mouse over effect 525function setupProximityManager(contProximityClass, itemProximityClass, ProxColor, ProxRad) { 526 const proximityContainer = document.querySelector(contProximityClass); 527 proximityContainer.addEventListener("mousemove", function(e) { 528 let proxims = document.querySelectorAll(itemProximityClass); 529 proxims.forEach(function(proxim) { 530 effect(proxim, e); 531 }); 532 }); 533 534 function effect(proxim, e) { 535 let rect = proxim.getBoundingClientRect(); 536 let x = e.x - rect.left; // offset from corner 537 let y = e.y - rect.top; 538 proxim.style.background = `radial-gradient( circle at ${x}px ${y}px, ${ProxColor} 0%, transparent ${ProxRad}%)`; 539 } 540} 541 542$(document).ready(function() { 543 if ($('.faq').length) { 544 setupFAQAccordion('.faqacc__item__content', '.faqacc__item', 'active'); 545 // setupProximityManager('.faqacc','.faqacc__item__inner','rgba( 255, 255, 255, 0.2 )','50'); 546 } 547}); 548 549 550 551 552//expandcard 553$(document).ready(function () { 554 var flexaccItems = $(".expandcard_acc__item"); 555 556 // Click event handler for 'flexacc__item' 557 flexaccItems.on("click", function () { 558 var dataAttribute = $(this).data("text-id"); 559 560 // Hide all elements with the class 'flexacctxt--text' 561 $(".expandcard_text-item").hide().removeClass("active"); 562 563 // Remove the 'active' class from all 'flexacc__item' elements 564 flexaccItems.removeClass("active"); 565 566 // Add the 'active' class to the clicked 'flexacc__item' 567 $(this).addClass("active"); 568 569 $(".expandcard_text-item[data-text-id='" + dataAttribute + "']").show(); 570 }); 571 572 flexaccItems.first().click(); // Trigger click on the first item to show initial content 573}); 574 575 576 577//modal 578$('.modal-open').on('click', function(event) { 579 event.preventDefault(); 580 var modal_id = $(this).data('modal'); 581 var modal = document.getElementById(modal_id); 582 modal.showModal(); 583}); 584 585$('.modal-close').on('click', function(event) { 586 event.preventDefault(); 587 var modal_id = $(this).data('modal'); 588 var modal = document.getElementById(modal_id); 589 modal.close(); 590}); 591 592 593 594 595 596 597//video 598$(document).ready(function() { 599 var $gridItems = $('.gallerygrid__item.item-video-hover'); 600 if ($gridItems.length) { 601 $gridItems.hover( 602 function() { 603 var video = $(this).find('video').get(0); 604 if (video.paused) { 605 video.play(); 606 } 607 }, 608 function() { 609 var video = $(this).find('video').get(0); 610 if (!video.paused) { 611 video.pause(); 612 // video.currentTime = 0; // Resets video to beginning 613 } 614 } 615 ); 616 } 617}); 618 619 620 621 622 623$(document).ready(function() { 624 var glowingButtons = document.querySelectorAll('.btn-glow'); 625 626 var observer = new IntersectionObserver(function(entries) {
627 entries.forEach(function(entry) { 628 if (entry.isIntersecting) { 629 entry.target.classList.add('glow'); 630 } else { 631 entry.target.classList.remove('glow'); 632 } 633 }); 634 }, { threshold: 0 }); 635 636 glowingButtons.forEach(function(button) { 637 observer.observe(button); 638 }); 639 640 setInterval(function() { 641 glowingButtons.forEach(function(button) { 642 if (button.classList.contains('glow')) { 643 button.classList.remove('glow'); 644 } else { 645 button.classList.add('glow'); 646 } 647 }); 648 }, 5000); // Toggle glow effect every 5 seconds 649}); 650 651 652 653 654 655//link reveal buttons for services expand 656$(document).ready(function(){ 657 $('.sliderexp__btn-link').click(function() { 658 $('.sliderexp__collapsed').slideToggle(); 659 $(this).toggleClass('active'); 660 }); 661 662 663 664 $('.reveal__btn-link').click(function() { 665 $(this).closest('.reveal__item').find('.reveal__collapsed').slideToggle(); 666 $(this).toggleClass('active'); 667 }); 668 669 $('.linkreveal__btn-link').click(function() { 670 $(this).closest('.linkreveal').find('.linkreveal__collapsed').slideToggle(); 671 $(this).toggleClass('active'); 672 }); 673 674 $('.boxreveal__btn-link').one('click', function() { // .one() ensures it runs only once 675 $(this).closest('.boxreveal').find('.boxreveal__collapsed').slideToggle(); 676 $(this).closest('.boxreveal').addClass('expanded'); 677 $(this).closest('.boxreveal__btn').remove(); // Removes the button from the DOM 678 }); 679}); 680 681 682 683document.addEventListener("DOMContentLoaded", () => { 684 // Query all the service slider containers (assuming each container has a unique class or structure) 685 const sliders = document.querySelectorAll('.servicegallery'); 686 687 sliders.forEach((sliderContainer, index) => { 688 const ServicethumbsElement = sliderContainer.querySelector('.swserviceth'); 689 const ServicemainElement = sliderContainer.querySelector('.swservice'); 690 const navigationContainer = sliderContainer.querySelector('.swarrownav'); // Container for the navigation buttons 691 692 // Determine allowTouchMove value based on a class on the .servicegallery element 693 const allowTouchMove = !sliderContainer.classList.contains('disable-swipe'); 694 695 // Initialize the thumbs swiper only if the element exists 696 let ServicethumbsSwiper = null; 697 if (ServicethumbsElement) { 698 ServicethumbsSwiper = new Swiper(ServicethumbsElement, { 699 spaceBetween: 10, // Spacing between thumbnails 700 watchSlidesProgress: true, // Helps with syncing 701 slidesPerView: 5, // Default (for large screens) 702 breakpoints: { 703 1024: { slidesPerView: 5 }, // Large screens (e.g., desktops) 704 768: { slidesPerView: 4 }, // Tablets 705 480: { slidesPerView: 3 }, // Small tablets 706 320: { slidesPerView: 2.5 }, // Mobile phones 707 0: { slidesPerView: 2.5 } // Mobile phones 708 } 709 }); 710 } 711 712 // Initialize the main swiper only if the element exists 713 if (ServicemainElement) { 714 const mainSwiper = new Swiper(ServicemainElement, { 715 loop: true, 716 spaceBetween: 20, // Set space in pixels between slides 717 autoplay: { 718 delay: 9000, 719 disableOnInteraction: true, 720 pauseOnMouseEnter: true 721 }, 722 allowTouchMove: allowTouchMove, // Control swipe interactions based on the class 723 navigation: { 724 nextEl: navigationContainer?.querySelector('.swarrownav-next'), // Use the shared class inside the container 725 prevEl: navigationContainer?.querySelector('.swarrownav-prev') // Use the shared class inside the container 726 }, 727 thumbs: ServicethumbsSwiper ? { swiper: ServicethumbsSwiper } : undefined // Only include thumbs if they exist 728 }); 729 } 730 731 // Select all slides with a scroll message 732 const slides = sliderContainer.querySelectorAll('.swiper-slide'); 733 734 slides.forEach((slide) => { 735 const scrollMessage = slide.querySelector('.swservice__item__image-message'); 736 const scrollElement = slide.querySelector('.swservice__item__image'); // The element that scrolls 737 738 if (scrollMessage && scrollElement) { 739 // Function to check if there is a scrollbar and toggle the scroll message visibility 740 const toggleScrollMessage = () => { 741 const hasScrollbar = scrollElement.scrollHeight > scrollElement.clientHeight; // Check if scrollbar exists 742 743 if (hasScrollbar) { 744 // If there's a scrollbar, we show the message 745 scrollElement.classList.add('scroll-fade'); 746 scrollElement.addEventListener('scroll', () => { 747 // Add a class to hide the message when the user scrolls 748 scrollMessage.classList.add('hidden'); 749 750 scrollElement.classList.remove('scroll-fade'); 751 }); 752 } else { 753 754 755 scrollMessage.classList.add('hidden'); 756 757 758 759 } 760 }; 761 762 // Add a scroll event listener to the scrollable element 763 scrollElement.addEventListener('scroll', toggleScrollMessage); 764 765 // Optionally, call the function on page load to set initial visibility 766 toggleScrollMessage(); 767 } 768 }); 769 }); 770}); 771 772 773 // Initialize Swiper without autoplay 774 const swclutch = new Swiper("#clutchrev-slider", { 775 loop: true, 776 spaceBetween: 50, 777 778 autoplay: false, // Disable autoplay for now, will trigger when the slider is
778in view 779 allowTouchMove: false, // Default (for large screens) 780 breakpoints: { 781 1136: { slidesPerView: 3.5,spaceBetween: 30}, // Tablets 782 768: { slidesPerView: 2.5,spaceBetween: 20 }, // Tablets 783 0: { slidesPerView: 1.5,spaceBetween: 20,allowTouchMove: true } // Mobile phones 784 }, 785 navigation: { 786 nextEl: "#swclutch-next", 787 prevEl: "#swclutch-prev" 788 } 789 }); 790 791 792 // Initialize Swiper without autoplay 793 const swsalesl = new Swiper("#salesl-slider", { 794 loop: true, 795 spaceBetween: 20, 796 797 centeredSlides: true, 798 initialSlide: 2, 799 autoplay: true, // Disable autoplay for now, will trigger when the slider is in view 800 allowTouchMove: false, 801 slidesPerView: 1.2, // Default (for large screens) 802 breakpoints: { 803 1136: { slidesPerView: 1.2,spaceBetween: 20}, // Tablets 804 0: { slidesPerView: 1,spaceBetween: 20,allowTouchMove: true } // Mobile phones 805 }, 806 navigation: { 807 nextEl: "#swsalesl-next", 808 prevEl: "#swsalesl-prev" 809 } 810 }); 811 812 813 814 document.addEventListener("input", function (e) { 815 if (e.target.classList.contains("auto-expand")) { 816 e.target.style.height = "auto"; // Reset height 817 e.target.style.height = e.target.scrollHeight + "px"; // Set to scroll height 818 } 819 });
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.