1fpaAnimation = (function () { 2 "use strict"; 3 4 //variables 5 let m = {}, 6 windowWidth = $(window).width(), 7 controller = new ScrollMagic.Controller(); 8 9 m.init = function() { 10 11 //brand intro 12 if($('.fp-brand-intro').length){ 13 m.brandIntro(); 14 } 15 //homepage wayfinding 16 if($('.fp-home-page-wayfinding').length){ 17 m.homepageWayfinding(); 18 } 19 //Extended CLP Wayfinding 20 if($('.fp-extended-category-wayfinding').length){ 21 m.extendedClpWayfinding(); 22 } 23 //CLP Education 24 if($('.fp-clp-education-1').length){ 25 m.clpEducation1(); 26 } 27 if($('.fp-clp-education-2').length){ 28 m.clpEducation2(); 29 } 30 //unique selling points 31 if($('.fp-unique-selling-points').length){ 32 m.uniqueSellingPoints(); 33 } 34 //flagship products 35 if($('.fp-flagship-products').length){ 36 m.flagshipProducts(); 37 } 38 //flagship products minimal 39 if($('.fp-flagship-products-minimal').length){ 40 m.flagshipProductsMinimal(); 41 } 42 //brand pillars 43 if($('.fp-brand-pillars').length){ 44 m.brandPillars(); 45 } 46 // inspiration module 47 if($('.fp-inspiration-module').length){ 48 m.inspirationModule(); 49 } 50 // 2 up module 51 if($('.fp-two-up').length){ 52 m.genericModuleAnimation('.fp-two-up'); 53 } 54 // 3 up module 55 if($('.fp-three-up').length){ 56 m.genericModuleAnimation('.fp-three-up'); 57 } 58 // 4 up module 59 if($('.fp-4-up').length){ 60 m.genericModuleAnimation('.fp-4-up'); 61 } 62 // ecwf-carousel module 63 // Feature module 64 if($('.fp-feature').length){ 65 m.genericModuleAnimation('.fp-feature'); 66 } 67 // Quote Module 68 if($('.fp-quote').length){ 69 m.quoteGenerator(); 70 } 71 }; 72 73 m.brandIntro = function() { 74 let brandIntroHeading = $('.fp-brand-intro h2, .fp-brand-intro-small h1'), 75 brandIntroParagraph = $('.fp-brand-intro p'), 76 brandIntroBtn = $('.fp-brand-intro .btn'), 77 brandIntroTimeline = new TimelineLite(), 78 brandIntroScene = new ScrollMagic.Scene(); 79 80 brandIntroTimeline.from(brandIntroHeading, 1, { autoAlpha: 0, top: 20 }) 81 .from(brandIntroParagraph, 1, { autoAlpha: 0, top: 20}, "-=0.5") 82 .from(brandIntroBtn, 1, { autoAlpha: 0, top: 20 }, "-=0.5"); 83 84 brandIntroScene.setTween(brandIntroTimeline) 85 .triggerElement('.fp-brand-intro') 86 .triggerHook(0.5) 87 .reverse(false) 88 .addTo(controller); 89 90 //if element has video load create video tween 91 if($('.fp-brand-intro video').length && windowWidth > 1023){ 92 //m.setScrollingVideo('.fp-brand-intro'); 93 } 94 }; 95 96 m.homepageWayfinding = function() { 97 let homepageWayfindingItems = $('.fp-home-page-wayfinding .hpwf-carousel .item'); 98 99 let homepageWayfindingTimeline = new TimelineLite(); 100 homepageWayfindingTimeline.staggerFrom(homepageWayfindingItems, 0.75, { autoAlpha: 0, bottom: -20 }, 0.25, 0); 101 102 let homepageWayfindingScene = new ScrollMagic.Scene(); 103 homepageWayfindingScene.setTween(homepageWayfindingTimeline) 104 .triggerElement('.fp-home-page-wayfinding') 105 .triggerHook("onEnter") 106 .addTo(controller); 107 }; 108 109 m.clpWayfinding = function() { 110 let clpWayfindingItems = $('.fp-clp-wayfinding .clpwf-carousel .item'); 111 112 let clpWayfindingTimeline = new TimelineLite(); 113 clpWayfindingTimeline.staggerFrom(clpWayfindingItems, 0.75, { autoAlpha: 0, bottom: -20 }, 0.25, 0); 114 115 let clpWayfindingScene = new ScrollMagic.Scene(); 116 clpWayfindingScene.setTween(clpWayfindingTimeline) 117 .triggerElement('.fp-clp-wayfinding') 118 .triggerHook("onEnter") 119 .addTo(controller); 120 }; 121 122 m.extendedClpWayfinding = function() { 123 let extendedClpWayfindingItems = $('.fp-extended-category-wayfinding .ecwf-carousel .owl-item:not(.cloned) .item'); // Target items 124 125 let extendedClpWayfindingTimeline = new TimelineLite(); 126 // Match fp-4-up animation (fade from top, 0.25s stagger) 127 extendedClpWayfindingTimeline.staggerFrom(extendedClpWayfindingItems, 0.75, { autoAlpha: 0, top: 20 }, 0.25); 128 129 let extendedClpWayfindingScene = new ScrollMagic.Scene(); 130 extendedClpWayfindingScene.setTween(extendedClpWayfindingTimeline) 131 .triggerElement('.fp-extended-category-wayfinding') 132 .triggerHook("onEnter") 133 .reverse(false) // Ensure it only plays once on enter 134 .addTo(controller); 135 }; 136 137 m.clpEducation1 = function() { 138 let clpEducation1Heading = $('.fp-clp-education-1 h3'), 139 clpEducation1Paragraph = $('.fp-clp-education-1 .head p'), 140 clpEducation1Highlights = $('.fp-clp-education-1 .highlights'), 141 clpEducation1Timeline = new TimelineLite(), 142 clpEducation1Scene = new ScrollMagic.Scene(); 143 144 clpEducation1Timeline.from(clpEducation1Heading, 1, { autoAlpha: 0, top: -20 }) 145 .from(clpEducation1Paragraph, 1, { autoAlpha: 0, top: -20 }, "-=0.5") 146 .from(clpEducation1Highlights, 1, { autoAlpha: 0, top: -20 }, "-=0.5"); 147 148 clpEducation1Scene.setTween(clpEducation1Timeline) 149 .triggerElement('.fp-clp-education-1') 150 .triggerHook("onEnter") 151 .reverse(false) 152 .addTo(controller); 153 }; 154 155 m.clpEducation2 = function() { 156 let clpEducation2Head = $('.fp-clp-education-2 .head'), 157 clpEducation2Highlights = $('.fp-clp-education-2 .highlights'), 158 clpEducation2Timeline = new TimelineLite(), 159 clpEducation2Scene = new ScrollMagic.Scene(); 160 161 clpEducation2Timeline.from(clpEducation2Head, 1, { autoAlpha: 0, top: -20 }) 162 .from(clpEducation2Highlights, 1, { autoAlpha: 0, top: -20 }, "-=0.5"); 163 164 clpEducation2Scene.setTween(clpEducation2Timeline) 165 .triggerElement('.fp-clp-education-2') 166 .triggerHook("onEnter") 167 .reverse(false) 168 .addTo(controller); 169 }; 170 171 m.uniqueSellingPoints = function() { 172 let uspHeading1 = $('.fp-unique-selling-points .one h3'), 173 uspParagraph1 = $('.fp-unique-selling-points .one p'), 174 uspHeading2 = $('.fp-unique-selling-points .two h3'), 175 uspParagraph2 = $('.fp-unique-selling-points .two p'), 176 uspHeading3 = $('.fp-unique-selling-points .three h3'), 177 uspParagraph3 = $('.fp-unique-selling-points .three p'); 178 179 let uspTimeline = new TimelineLite(); 180 uspTimeline.from(uspHeading1, 1, { autoAlpha: 0, top: -20 }) 181 .from(uspParagraph1, 1, { autoAlpha: 0, bottom: -20 }, "-=1.0") 182 .from(uspHeading2, 1, { autoAlpha: 0, top: -20 }, "-=0.5") 183 .from(uspParagraph2, 1, { autoAlpha: 0, top: 20 }, "-=1.0") 184 .from(uspHeading3, 1, { autoAlpha: 0, top: -20 }, "-=0.5") 185 .from(uspParagraph3, 1, { autoAlpha: 0, top: 20 }, "-=1.0"); 186 187 let uspScene = new ScrollMagic.Scene(); 188 uspScene.setTween(uspTimeline) 189 .triggerElement('.fp-unique-selling-points') 190 .triggerHook("onEnter") 191 .reverse(false) 192 .addTo(controller); 193 }; 194 195 m.flagshipProducts = function() { 196 let flagshipHeading = $('.fp-flagship-products h2'), 197 flagshipParagraph = $('.fp-flagship-products .align p'), 198 flagshipTabs = $('.fp-flagship-products .nav-tabs'), 199 flagshipTabContent = $('.fp-flagship-products .tab-content'), 200 flagshipTimeline = new TimelineLite(), 201 flagshipScene = new ScrollMagic.Scene(); 202 203 flagshipTimeline.from(flagshipHeading, 1, { autoAlpha: 0, top: 20 }) 204 .from(flagshipParagraph, 1, { autoAlpha: 0, top: 20 }, "-=0.5") 205 .from(flagshipTabs, 1, { autoAlpha: 0, top: 20 }, "-=0.5") 206 .from(flagshipTabContent, 1, { autoAlpha: 0, top: 20 }, "-=1"); 207 208 flagshipScene.setTween(flagshipTimeline) 209 .triggerElement('.fp-flagship-products') 210 .triggerHook(0.5) 211 .reverse(false) 212 .addTo(controller); 213 }; 214 215 m.flagshipProductsMinimal = function() { 216 let flagshipHeading = $('.fp-flagship-products-minimal h2'), 217 flagshipParagraph = $('.fp-flagship-products-minimal .content > p'), 218 flagshipBtn = $('.fp-flagship-products-minimal .content > .btn'), 219 flagshipTimeline = new TimelineLite(), 220 flagshipScene = new ScrollMagic.Scene(); 221 222 flagshipTimeline.from(flagshipHeading, 1, { autoAlpha: 0, top: 20 }) 223 .from(flagshipParagraph, 1, { autoAlpha: 0, top: 20 }, "-=0.5") 224 .from(flagshipBtn, 1, { autoAlpha: 0, top: 20 }, "-=0.5"); 225 226 flagshipScene.setTween(flagshipTimeline) 227 .triggerElement('.fp-flagship-products-minimal') 228 .triggerHook(0.5) 229 .reverse(false) 230 .addTo(controller); 231 }; 232 233 m.brandPillars = function() { 234 235 //pillar intro tween 236 let pillarIntroHeading = $('.pillar-intro h2'), 237 pillarIntroCopy = $('.pillar-intro .copy'), 238 pillarIntroLine = $('.pillar-intro .pillar-line'), 239 pillar1 = $('#pillar-1 .intro'), 240 pillarIntroTimeline = new TimelineLite(), 241 pillarIntroScene = new ScrollMagic.Scene(); 242 243 pillarIntroTimeline.from(pillarIntroHeading, 1, { autoAlpha: 0, top: 20 }) 244 .from(pillarIntroCopy, 1, { autoAlpha: 0, top: 20 }, "-=0.5") 245 .from(pillarIntroLine, 2, { height:0 }) 246 .from(pillar1, 1, { autoAlpha: 0}); 247 248 pillarIntroScene.setTween(pillarIntroTimeline) 249 .triggerElement('.fp-brand-pillars') 250 .triggerHook("onEnter") 251 .reverse(false) 252 .addTo(controller); 253 254 //create tween for each .pillar element 255 $('.fp-brand-pillars .pillar').each(function(){ 256 let curId = $(this).attr("id"); 257 setPillarTween('#' + curId); 258 //if element has video load create video tween 259 if($('#' + curId + ' video').length && windowWidth > 1023){ 260 //m.setScrollingVideo('#' + curId); 261 } 262 }); 263 264 function setPillarTween(elementId){ 265 let pillarHeading = $(elementId + ' h3'), 266 pillarParagraph = $(elementId + ' .copy'), 267 pillarBtn = $(elementId + ' a'), 268 pillarTimeline = new TimelineLite(), 269 pillarScene = new ScrollMagic.Scene(); 270 271 pillarTimeline.from(pillarHeading, 1, { autoAlpha: 0, top: 20 }) 272 .from(pillarParagraph, 1, { autoAlpha: 0, top: 20 }, "-=0.5") 273 .from(pillarBtn, 1, { autoAlpha: 0, top: 20 }, "-=0.5"); 274 275 pillarScene.setTween(pillarTimeline) 276 .triggerElement(elementId) 277 .triggerHook(0.5) 278 .reverse(false) 279 .addTo(controller); 280 } 281 282 }; 283 284 m.quoteGenerator = function() { 285 let randomQuoteParagraph = $('.fp-quote p'),
286 randomQuoteCite = $('.fp-quote cite'), 287 randomQuoteTimeline = new TimelineLite(), 288 randomQuoteScene = new ScrollMagic.Scene(); 289 290 randomQuoteTimeline.from(randomQuoteParagraph, 1, { autoAlpha: 0, top: 20 }, "+=0.25") 291 .from(randomQuoteCite, 1, { autoAlpha: 0, top: 20}, "-=0.25"); 292 293 randomQuoteScene.setTween(randomQuoteTimeline) 294 .triggerElement('.fp-quote') 295 .triggerHook(0.9) 296 .reverse(false) 297 .addTo(controller); 298 299 }; 300 301 m.inspirationModule = function() { 302 303 304 // inspiration title setTween 305 let inspirationTitle = $('.fp-inspiration-module h2'), 306 inspirationTitleTimeline = new TimelineLite(), 307 inspirationTitleScene = new ScrollMagic.Scene(); 308 309 inspirationTitleTimeline.from(inspirationTitle, 1, { autoAlpha: 0, top: 20 }); 310 311 inspirationTitleScene.setTween(inspirationTitleTimeline) 312 .triggerElement('.fp-inspiration-module') 313 .triggerHook(0.5) 314 .reverse(false) 315 .addTo(controller); 316 317 // inspiration button setTween 318 //let inspirationButton = $('.inspiration-show-more .btn'), 319 //inspirationButtonTimeline = new TimelineLite(), 320 //inspirationButtonScene = new ScrollMagic.Scene(); 321 322 //inspirationButtonTimeline.from(inspirationButton, 1, { autoAlpha: 0, top: -20 }); 323 324 //inspirationButtonScene.setTween(inspirationButtonTimeline) 325 //.triggerElement('.inspiration-show-more') 326 //.triggerHook(0.9) 327 //.reverse(false) 328 //.addTo(controller); 329 330 //create tween for each .case-study element 331 $('.fp-inspiration-module .case-study').each(function(){ 332 let curId = $(this).attr("id"); 333 334 if(windowWidth < 1024 || (windowWidth > 1023 && curId==='case-study-2')){ 335 setSmallScreenInspirationModuleTween('#' + curId); 336 } else { 337 setLargeScreenInspirationModuleTween('#' + curId); 338 } 339 if(windowWidth > 1023){ 340 //if element has video load create video tween 341 if($('#' + curId + ' video').length){ 342 //m.setScrollingVideo('#' + curId); 343 } 344 } 345 }); 346 347 function setSmallScreenInspirationModuleTween(elementId){ 348 // change animation element of metadata 349 let metaDataAnimationTarget = null; 350 if(windowWidth < 1024){ 351 metaDataAnimationTarget = ' .case-study-meta dl'; 352 }else{ 353 metaDataAnimationTarget = ' .case-study-meta dl > *'; 354 } 355 let inspirationMetadata = $(elementId + metaDataAnimationTarget), 356 inspirationHeading = $(elementId + ' h3'), 357 inspirationParagraph = $(elementId + ' .content p'), 358 inspirationLink = $(elementId + ' .content a'), 359 inspirationTimeline = new TimelineLite(), 360 inspirationScene = new ScrollMagic.Scene(); 361 362 inspirationTimeline.staggerFrom(inspirationMetadata, 0.75, { autoAlpha: 0, left: 20 }, 0.25) 363 .from(inspirationHeading, 1, { autoAlpha: 0, top: 20 }, "-=0.5") 364 .from(inspirationParagraph, 1, { autoAlpha: 0, top: 20 }, "-=0.5") 365 .from(inspirationLink, 1, { autoAlpha: 0, top: 20 }, "-=0.5"); 366 367 inspirationScene.setTween(inspirationTimeline) 368 .triggerElement(elementId) 369 .triggerHook(0.5) 370 .reverse(false) 371 .addTo(controller); 372 } 373 374 function setLargeScreenInspirationModuleTween(elementId){ 375 let inspirationMetadata = $(elementId + ' .case-study-meta dl > *'), 376 inspirationHeading = $(elementId + ' .content h3'), 377 inspirationParagraph = $(elementId + ' .content p'), 378 inspirationLink = $(elementId + ' .content a'), 379 inspirationTimeline = new TimelineLite(), 380 inspirationScene = new ScrollMagic.Scene(); 381 382 inspirationTimeline.staggerFrom(inspirationMetadata, 0.75, { autoAlpha: 0, right: -20 }, 0.25) 383 .from(inspirationHeading, 1, { autoAlpha: 0, top: 20 }, "-=0.5") 384 .from(inspirationParagraph, 1, { autoAlpha: 0, top: 20 }, "-=0.5") 385 .from(inspirationLink, 1, { autoAlpha: 0, top: 20 }, "-=0.5"); 386 387 388 inspirationScene.setTween(inspirationTimeline) 389 .triggerElement(elementId) 390 .triggerHook(0.5) 391 .reverse(false) 392 .addTo(controller); 393 } 394 }; 395 396 m.genericModuleAnimation = function(container) { 397 398 //create tween for each container .row > div element 399 $(container).each(function(){ 400 let genericModuleCol = $(this).find('.row > div'), 401 genericModuleTimeline = new TimelineLite(), 402 genericModuleScene = new ScrollMagic.Scene(); 403 404 genericModuleTimeline.staggerFrom(genericModuleCol, 0.75, { autoAlpha: 0, top: 20 }, 0.25); 405 406 genericModuleScene.setTween(genericModuleTimeline) 407 .triggerElement(this) 408 .triggerHook('onEnter') 409 //.addIndicators() 410 .reverse(false) 411 .addTo(controller); 412 }); 413 414 }; 415 416 return m; 417 418})(); 419 420//INIT 421fpaAnimation.init(); 422/* eslint-disable linebreak-style */
423var brandIntro = (function () { 424 'use strict'; 425 426 // variables 427 var m = {}, 428 vh = window.innerHeight * 0.01, 429 vhPixel; 430 431 432 m.init = function () { 433 // show scroll arrow 434 setTimeout(m.showArrow, 5000); 435 m.setHeight(); 436 437 if ($('.fp-brand-intro-small').length) { 438 m.setContentHeight(); 439 } 440 441 $( window ).resize(function() { 442 m.setContentHeight(); 443 m.setHeight(); 444 }); 445 }; 446 447 m.showArrow = function () { 448 $('.fp-brand-intro .scroll-indicator').fadeIn('slow'); 449 }; 450 451 m.setHeight = function() { 452 vh = window.innerHeight * 0.01; 453 vhPixel = vh + 'px'; 454 document.documentElement.style.setProperty('--vh', vhPixel); 455 }; 456 457 m.setContentHeight = function () { 458 var headerHeight = $('header').height(); 459 var moduleHeight = $('.fp-brand-intro-small').height(); 460 var tabsHeight = 0; 461 if($('.fp-hero-tabs').length){ 462 tabsHeight = $('.fp-hero-tabs').height(); 463 } 464 465 $('.fp-brand-intro-small .content').css('height', moduleHeight - headerHeight - tabsHeight); 466 $('.fp-brand-intro-small .content').css('bottom', tabsHeight); 467 468 }; 469 470 return m; 471})(); 472 473// INIT 474if ($('.fp-brand-intro').length) { 475 brandIntro.init(); 476} 477var brandPillars = (function () { 478 "use strict"; 479 480 //variables 481 var m = {}, 482 toggleLink = '.toggle-expand', 483 closeLink = '.close-panel'; 484 485 486 m.init = function() { 487 //add click events 488 m.addClickEvents(); 489 }; 490 491 // Add click events 492 m.addClickEvents = function() { 493 //Scroll to content then expand more content 494 $(toggleLink).click(function(e){ 495 e.preventDefault(); 496 497 var target = e.target.hash, 498 source = target.replace('-content', ''), 499 buttonClosePanelText = e.target.getAttribute('data-panel-closed-text'), 500 buttonOpenPanelText = e.target.getAttribute('data-panel-open-text'); 501 502 if ($(target).is(':visible')) { 503 source = e.target.hash.replace('-content', ''); 504 e.target.textContent = buttonOpenPanelText; 505 } else { 506 source = target; 507 e.target.textContent = buttonClosePanelText; 508 } 509 510 $(target).slideToggle(); 511 $('html, body').animate({ 512 scrollTop: $(source).offset().top}, 250); 513 }); 514 515 $(closeLink).click(function(e){ 516 e.preventDefault(); 517 var target = e.target.hash, 518 source = target + '-content', 519 buttonOpenPanelText = $(toggleLink).attr('data-panel-open-text'); 520 521 $(target + ' a').text(buttonOpenPanelText); 522 523 $('html, body').animate({ 524 scrollTop: $(target).offset().top}, 500, function() { 525 setTimeout(function() { 526 $(source).slideUp('slow'); 527 }, 250); 528 529 }); 530 }); 531 }; 532 533 return m; 534 535})(); 536 537//INIT 538if($('.fp-brand-pillars').length){ 539 brandPillars.init(); 540}// Article navigation 541document.addEventListener("DOMContentLoaded", function() { 542 543 if( $('.fp-article-page-nav').length) { 544 // Only run if article page nav exists 545 546 // define variables for later use 547 var articleNavigation = $('.fp-article-page-nav'), 548 articleLinks = articleNavigation.find("a"), 549 articleNavigationOffsetTop = articleNavigation.offset().top, 550 lastId = null, 551 totalNavHeight = articleNavigation.outerHeight(), 552 scrollItems = articleLinks.map(function() { 553 var item = $($(this).attr("href")); 554 if (item.length) { 555 return item; 556 } 557 }); 558 559 // user clicks on menu, scroll to section 560 articleLinks.click(function(e) { 561 e.preventDefault(); 562 var additionalHeight = null; 563 if (!$(articleNavigation).hasClass('fixed')) { 564 additionalHeight = 78; 565 } 566 567 var href = $(this).attr("href"), 568 offsetTop = $(href).offset().top - totalNavHeight - additionalHeight; 569 570 $('html, body').stop().animate({scrollTop: offsetTop + 1,}, 500, "linear", function(){}); 571 572 setPageNavigation(href); 573 }); 574 575 // highlight the correct link as the user scrolls down the page 576 $(window).on('scroll', function() { 577 // stick/unstick nav to top of page when scrolling past 578 if ($(this).scrollTop() > articleNavigationOffsetTop) { 579 articleNavigation.addClass('fixed'); 580 } else { 581 articleNavigation.removeClass('fixed'); 582 } 583 584 // change active link on scroll 585 var fromTop = $(this).scrollTop() + totalNavHeight; 586 var cur = scrollItems.map(function() { 587 if ($(this).offset().top < fromTop){ 588 return this; 589 } 590 }); 591 592 cur = cur[cur.length - 1]; 593 var id = cur && cur.length ? cur[0].id : ""; 594 595 if (lastId !== id) { 596 lastId = id; 597 id = "#" + id; 598 599 setPageNavigation(id); 600 } 601 }); 602 603 } 604 605 function setPageNavigation(newId) { 606 articleLinks.removeClass("active"); 607 articleLinks.filter('[href="' + newId + '"]').addClass("active"); 608 609 var newlink = $("ul").find('[href="${newId}"]'); 610 var linkOffset = newlink.offset().left + 20; 611 612 if(linkOffset < 20){ 613 //scroll right 614 $(articleNavigation).stop().animate({ 615 scrollLeft: 0, 616 }, 1000, "linear",function(){} 617 ); 618 }else if(linkOffset > 300){ 619 //scroll left 620 $(articleNavigation).stop().animate({ 621 scrollLeft: 500, 622 }, 623 1000, 624 "linear", 625 function(){} 626 ); 627 } 628 } 629});/* eslint-disable strict */ 630 631var extendedWayfinding = (function () { 632 'use strict'; 633 634 // variables 635 var m = {}; 636 var scrollbarWidth = 637 window.innerWidth - document.documentElement.clientWidth; 638 var numItems = document.querySelectorAll('#ecwf-carousel .item').length; 639 var extendedCategoryWayfinding = $('.fp-extended-category-wayfinding');
640 var curBreakpoint = 1024; 641 642 var clpCarouselEx = $('#ecwf-carousel'); 643 var owlOptions = { 644 stagePadding: 0, 645 dots: false, 646 nav: false, 647 loop: true, 648 center: true, 649 autoWidth: true 650 }; 651 652 switch (numItems) { 653 case 3: 654 curBreakpoint = 375; 655 break; 656 case 4: 657 curBreakpoint = 768; 658 break; 659 case 7: 660 case 8: 661 case 9: 662 curBreakpoint = 1330; 663 break; 664 default: 665 } 666 667 m.init = function () { 668 // Show Carousel based on number of items in the "#ecwf-carousel div container 669 if ($('.fp-extended-category-wayfinding').length) { 670 $(extendedCategoryWayfinding).on('load', function () { 671 if (numItems > 2) { 672 m.showCarousel(); 673 } 674 }); 675 $(window).on('resize', function () { 676 if (numItems > 2) { 677 m.showCarousel(); 678 } 679 }); 680 } 681 }; 682 683 m.activateCarousel = function () { 684 clpCarouselEx.owlCarousel(owlOptions); 685 clpCarouselEx.removeClass('off'); 686 }; 687 688 m.deActivateCarousel = function () { 689 clpCarouselEx.addClass('off').trigger('destroy.owl.carousel'); 690 clpCarouselEx.find('.owl-stage-outer').children(':eq(0)').unwrap(); 691 }; 692 693 m.showCarousel = function () { 694 if ($(window).width() + scrollbarWidth < curBreakpoint) { 695 m.activateCarousel(); 696 } else { 697 m.deActivateCarousel(); 698 } 699 }; 700 701 return m; 702})(); 703 704// INIT 705extendedWayfinding.init(); 706flagshipProducts = (function () { 707 "use strict"; 708 709 //variables 710 var m = {}, 711 tabLinks = '.nav-tabs a', 712 imageContainer = '.image-wrap .image', 713 replaceImageClass = 'image image-'; 714 715 716 m.init = function() { 717 m.addClickEvents(); 718 }; 719 720 // Add click events 721 m.addClickEvents = function() { 722 //extent bootstrap tab to swap out image as well 723 $(tabLinks).click(function(e){ 724 e.preventDefault(); 725 $(this).tab('show'); 726 var idx = $(this).index(tabLinks) + 1; 727 //$(imageContainer).removeClass().addClass(replaceImageClass + idx); 728 $(this).closest('.fp-flagship-products').find(imageContainer).removeClass().addClass(replaceImageClass + idx); 729 730 }); 731 }; 732 733 return m; 734 735})(); 736 737//INIT 738if($('.fp-flagship-products').length){ 739 flagshipProducts.init(); 740} 741document.addEventListener("DOMContentLoaded", function () { 742 $('.select').on('click', function () { 743 $(this).toggleClass('opened'); 744 }); 745 $('.select').on('focusout', function () { 746 if ($(this).hasClass('opened')) { 747 $(this).toggleClass('opened'); 748 } 749 }); 750 $('#country-select').on('change', function () { 751 var url = $(this).val(); 752 if (url) { 753 window.location = window.location.protocol + "//" + window.location.hostname + url; //redirect specific to each site 754 } 755 return false; 756 }); 757 }); 758/* eslint-disable linebreak-style */ 759/* eslint-disable one-var */ 760var heroTabs = (function () { 761 'use strict'; 762 763 // variables 764 var m = {}; 765 var scrollableElement = $('.fp-hero-tabs ul'); 766 var selectedItem = $('.fp-hero-tabs .selected'); 767 var offset = selectedItem.offset(); 768 769 770 m.init = function () { 771 // if selected item is not in viewport 772 // trigger function to move it into view 773 if (!m.isElementInViewport()) { 774 m.scrollSelectedItem(); 775 } 776 }; 777 778 m.scrollSelectedItem = function () { 779 $(scrollableElement).scrollLeft(offset.left - 16); 780 }; 781 782 m.isElementInViewport = function () { 783 // special bonus for those using jQuery 784 if (typeof jQuery === 'function' && selectedItem instanceof jQuery) { 785 selectedItem = selectedItem[0]; 786 } 787 var selectedBox = selectedItem.getBoundingClientRect(); 788 return ( 789 selectedBox.top >= 0 && 790 selectedBox.left >= 0 && 791 selectedBox.bottom <= (window.innerHeight || document.documentElement.clientHeight) && /* or $(window).height() */ 792 selectedBox.right <= (window.innerWidth || document.documentElement.clientWidth) /* or $(window).width() */ 793 ); 794 }; 795 return m; 796})(); 797 798// INIT 799if ($('.fp-hero-tabs').length) { 800 heroTabs.init(); 801} 802var npiLandingPage = (function () { 803 // "use strict"; 804 805 //variables 806 var m = {}, 807 controller = new ScrollMagic.Controller(); 808 $('.bg-box').height($(document).height()); 809 810 m.init = function () { 811 // Quote Module 812 if ($('.container-hero').length) { 813 m.videoFrame1(); 814 } 815 816 if ($('.container-series').length) { 817 m.videoFrame2(); 818 } 819 820 if ($('.container-cohesion').length) { 821 m.videoFrame3(); 822 } 823 824 if ($('.container-products').length) { 825 m.videoFrame4(); 826 } 827 828 }; 829 830 const html = document.documentElement; 831 // const textContent = document.querySelector('.text-content'); 832 // const textContent2 = document.querySelector('.text-content2'); 833 // const textContentHeight = textContent.offsetHeight; 834 835 m.scroll = window.requestAnimationFrame || 836 function (callback) { 837 window.setTimeout(callback, 1000 / 60); 838 }; 839 840 // const elementsToShow = document.querySelectorAll('.show-on-scroll'); 841 842 // let log = console.log; 843 844 m.isElementInViewport = function (element) { 845 let rect = element.getBoundingClientRect(); 846 return ( 847 (rect.top <= 0 && rect.bottom >= 0) || (rect.bottom >= (window.innerHeight || document.documentElement.clientHeight) && 848 rect.top <= (window.innerHeight || document.documentElement.clientHeight)) || (rect.top >= 0 && rect.bottom <= (window.innerHeight || document.documentElement.clientHeight)) 849 ); 850 }; 851 852 /** 853 * By Ken Fyrstenberg Nilsen 854 * 855 * drawImageProp(context, image [, x, y, width, height [,offsetX, offsetY]]) 856 * 857 * If image and context are only arguments rectangle will equal canvas 858 */ 859 m.drawImageProp = function (ctx, img, x, y, w, h, offsetX, offsetY) { 860 861 if (arguments.length === 2) { 862 x = y = 0; 863 w = ctx.canvas.width; 864 h = ctx.canvas.height; 865 } 866 867 // default offset is center
868 offsetX = typeof offsetX === "number" ? offsetX : 0.5; 869 offsetY = typeof offsetY === "number" ? offsetY : 0.5; 870 871 // keep bounds [0.0, 1.0] 872 if (offsetX < 0) { offsetX = 0; } 873 if (offsetY < 0) { offsetY = 0; } 874 if (offsetX > 1) { offsetX = 1; } 875 if (offsetY > 1) { offsetY = 1; } 876 877 var iw = img.width, 878 ih = img.height, 879 r = Math.min(w / iw, h / ih), 880 nw = iw * r, // new prop. width 881 nh = ih * r, // new prop. height 882 cx, cy, cw, ch, ar = 1; 883 884 // decide which gap to fill 885 if (nw < w) { ar = w / nw; } 886 if (Math.abs(ar - 1) < 1e-14 && nh < h) { ar = h / nh; } // updated 887 nw *= ar; 888 nh *= ar; 889 890 // calc source rectangle 891 cw = iw / (nw / w); 892 ch = ih / (nh / h); 893 894 cx = (iw - cw) * offsetX; 895 cy = (ih - ch) * offsetY; 896 897 // make sure source rectangle is valid 898 if (cx < 0) { cx = 0; } 899 if (cy < 0) { cy = 0; } 900 if (cw > iw) { cw = iw; } 901 if (ch > ih) { ch = ih; } 902 903 // fill image in dest. rectangle 904 ctx.drawImage(img, cx, cy, cw, ch, x, y, w, h); 905 }; 906 907 m.loadFrames = function (media, frameCount, canvasEl, triggerEl) { 908 909 const currentFrame = index => ( 910 `${media}${index.toString().padStart(4, '0')}.jpg` 911 ); 912 913 const canvas = document.querySelector('#' + canvasEl); 914 const triggerElement = document.querySelector(triggerEl); 915 const context = canvas.getContext('2d'); 916 context.canvas.width = window.innerWidth; 917 context.canvas.height = window.Height; 918 919 // const frameCount = 359; 920 canvas.height = window.innerWidth; 921 canvas.height = window.innerHeight; 922 const img = new Image(); 923 img.src = currentFrame(1); 924 img.onload = function () { 925 // context.drawImage(img, 0, 0); 926 m.drawImageProp(context, img, 0, 0, canvas.width, canvas.height); 927 }; 928 929 const updateImage = index => { 930 931 img.src = currentFrame(index); 932 // context.drawImage(img, 0, 0); 933 m.drawImageProp(context, img, 0, 0, canvas.width, canvas.height); 934 }; 935 936 // Preload images 937 // for (let i = 1; 1 < frameCount; i++) { 938 // const img = new Image(); 939 // img.src = currentFrame(i); 940 // log('From Preload Images: ', img.src); 941 // } 942 943 // const maxScrollTop = triggerElement.getBoundingClientRect().bottom - window.innerHeight; 944 // const topOfTriggerElement = triggerElement.getBoundingClientRect().top; 945 document.addEventListener('scroll', () => { 946 947 // $(this).addClass('isActive'); 948 if (m.isElementInViewport(triggerElement)) { 949 // const scrollTop = html.scrollTop - triggerElement.getBoundingClientRect().top; 950 const scrollTop = html.scrollTop; 951 console.log(scrollTop); 952 // const maxScrollTop = html.scrollHeight - window.innerHeight; 953 const maxScrollTop = html.scrollHeight - triggerElement.innerHeight; 954 // const maxScrollTop = html.scrollHeight - (triggerElement.getBoundingClientRect().height - window.innerHeight); 955 // const maxScrollTop = triggerElement.getBoundingClientRect().height - window.innerHeight; 956 const scrollFraction = scrollTop / maxScrollTop; 957 const frameIndex = Math.min(frameCount - 1, Math.floor(scrollFraction * frameCount)); 958 959 // Text Content Scrolling 960 requestAnimationFrame(() => updateImage(frameIndex + 1)); 961 962 } 963 }); 964 965 }; 966 967 968 m.animateBlock = function (element) { 969 970 $(element).each(function () { 971 972 // Loop through all elements with a class fade-el 973 var animateBlock = new TimelineLite(); 974 975 // Create a new Timeline for the tween 976 animateBlock.from($(this), 1.5, {autoAlpha: 0, y: '+=100, ease:Linear.easeNone'}); 977 animateBlock.to($(this), 1.5, {delay: 5, autoAlpha: 0, y: '-=50, ease:Linear.easeNone' }); 978 979 // Create a scene 980 var blockAnimScene = new ScrollMagic.Scene(); 981 982 // Set the Scene 983 blockAnimScene.setTween(animateBlock) 984 .triggerElement(this) 985 .duration(750) 986 .setPin(this, { 987 pushFollowers: false 988 }) 989 .addTo(controller); 990 }); 991 }; 992 993 m.setHeight = function(dataAttr) { 994 let textContainer = document.querySelectorAll(`[${dataAttr}]`); 995 996 textContainer.forEach((container) => { 997 let setHeight = container.dataset.containerHeight.toString(); 998 container.style.height = setHeight; 999 }); 1000 }; 1001 1002 m.setHeight('data-container-height'); 1003
1004 m.setBackground = function() { 1005 let panels = document.querySelectorAll('.panel'); 1006 window.addEventListener('scroll', () => { 1007 panels.forEach((panel) => { 1008 1009 var contentPanel = String(panel.dataset.content); 1010 if(m.isElementInViewport(document.querySelector(contentPanel))) { 1011 panels.forEach(el => el.classList.remove('isActive')); 1012 1013 panel.classList.add('isActive'); 1014 } 1015 }); 1016 }); 1017 }; 1018 1019 m.setBackground(); 1020 1021 1022 m.videoFrame1 = function () { 1023 m.animateBlock('.textAnimate'); 1024 1025 var containerIntroTimeline = new TimelineLite(), 1026 containerIntroScene = new ScrollMagic.Scene(); 1027 1028 containerIntroScene.setTween(containerIntroTimeline) 1029 .triggerElement('.container-intro') 1030 .on('start', function () { 1031 const element = document.querySelector('.panel-2'); 1032 const media = element.dataset.media; 1033 const canvasEl = element.dataset.videoid; 1034 const content = element.dataset.content; 1035 const frames = parseInt(element.dataset.frames); 1036 m.loadFrames(media, frames, canvasEl, content); 1037 }) 1038 .triggerHook(0) 1039 .reverse(true) 1040 // .addIndicators() // add indicators (requires plugin) 1041 .addTo(controller); 1042 1043 }; 1044 1045 m.videoFrame2 = function () { 1046 var containerSeriesTimeline = new TimelineLite(), 1047 containerSeriesScene = new ScrollMagic.Scene(); 1048 1049 containerSeriesScene.setTween(containerSeriesTimeline) 1050 .triggerElement('.container-series') 1051 .on('start', function () { 1052 const element = document.querySelector('.panel-3'); 1053 const media = element.dataset.media; 1054 const canvasEl = element.dataset.videoid; 1055 const content = element.dataset.content; 1056 const frames = parseInt(element.dataset.frames); 1057 m.loadFrames(media, frames, canvasEl, content); 1058 }) 1059 // .setClassToggle('.panel-1', 'isActive') 1060 // .on('start', function () { 1061 // $('.panel-1').removeClass('isActive'); 1062 // $('.panel-2').addClass('isActive'); 1063 // }) 1064 .triggerHook(0) 1065 .reverse(true) 1066 // .addIndicators() // add indicators (requires plugin) 1067 .addTo(controller); 1068 1069 1070 }; 1071 1072 1073 1074 m.videoFrame3 = function () { 1075 m.animateBlock('.container-cohesion div.animate'); 1076 1077 var containerCohesionTimeline = new TimelineLite(), 1078 containerCohesionScene = new ScrollMagic.Scene(); 1079 1080 containerCohesionScene.setTween(containerCohesionTimeline) 1081 .triggerElement('.container-cohesion') 1082 // .setClassToggle('.canvas-wrapper-22', 'isActive') 1083 .on('start', function () { 1084 // $('.panel div:first-child').removeClass('isActive'); 1085 // $('.canvas-wrapper-22').addClass('isActive'); 1086 }) 1087 .triggerHook(0) 1088 .reverse(true) 1089 .addTo(controller); 1090 1091 }; 1092 1093 m.videoFrame3 = function () { 1094 // const frameCount = 359; 1095 // const media = 'https://res.cloudinary.com/dxgcygglu/image/upload/v1612221229/poc/blackglass4/'; 1096 // const canvasEl = 'scrollable-video-3'; 1097 // const wrapperClass = '.canvas-wrapper-3'; 1098 // const triggerEl = '.container-products'; 1099 1100 // m.animateBlock('.container-series'); 1101 // m.loadFrames(media, frameCount, canvasEl, wrapperClass, triggerEl); 1102 1103 }; 1104 1105 return m; 1106 1107})(); 1108 1109npiLandingPage.init();let randomQuote = (function() { 1110 "use strict"; 1111 1112 // variables 1113 let m = {}; 1114 let quotes = document.querySelectorAll(".fp-quote blockquote"), 1115 randomNum = Math.floor(Math.random() * quotes.length); 1116 1117 m.init = function() { 1118 // Use randomNum to select an element and add display block inline style 1119 quotes[randomNum].style.display = "block"; 1120 }; 1121 1122 return m; 1123})(); 1124 1125// INIT 1126if (document.querySelector(".fp-quote")) { 1127 randomQuote.init(); 1128} 1129fpaVideo = (function () { 1130 "use strict"; 1131 1132 //variables 1133 var m = {}, 1134 windowWidth = window.innerWidth, 1135 fullViewportPlayer = '.full-width-video', 1136 curLoop = null; 1137 1138 1139 m.init = function() { 1140 if($(fullViewportPlayer) && $(fullViewportPlayer).length){ 1141 $(fullViewportPlayer).on("loadedmetadata", m.scaleVideo); 1142 $(window).on("resize", m.scaleVideo); 1143 } 1144 m.addClickEvents();
1145 m.addHoverEvents(); 1146 }; 1147 1148 m.addClickEvents = function() { 1149 //play video 1150 $( ".play-video" ).click(function() { 1151 //get closest video player ID 1152 var playerId = '#' + $(this).parent().find('video').attr('id'); 1153 var curSrc = $(this).parent().find('video').attr('src'); 1154 //test if src has been set 1155 if(typeof curSrc !== typeof undefined && curSrc !== false){ 1156 $(playerId)[0].play(); 1157 $(this).fadeOut("slow"); 1158 }else{ 1159 m.loadVideo(playerId); 1160 $(playerId)[0].play(); 1161 $(this).fadeOut("slow"); 1162 } 1163 $(this).parent().find('.video-controls').fadeIn("slow"); 1164 1165 $(playerId).on('ended',function(){ 1166 $(this).parent().find('.play-video').fadeIn("slow"); 1167 $(this).parent().find('.video-controls').fadeOut("slow"); 1168 $(playerId)[0].currentTime = 0; 1169 }); 1170 }); 1171 1172 //enter full screenSize 1173 $( ".fullscreen-video" ).click(function() { 1174 //get closest video player ID 1175 var playerId = '#' + $(this).parent().parent().find('video').attr('id'); 1176 if($(playerId)[0].requestFullScreen){ 1177 $(playerId)[0].requestFullScreen(); 1178 } else if($(playerId)[0].webkitRequestFullScreen){ 1179 $(playerId)[0].webkitRequestFullScreen(); 1180 } else if($(playerId)[0].mozRequestFullScreen){ 1181 $(playerId)[0].mozRequestFullScreen(); 1182 } else if($(playerId)[0].msRequestFullscreen){ 1183 $(playerId)[0].msRequestFullscreen(); 1184 }else if($(playerId)[0].webkitEnterFullscreen){ 1185 $(playerId)[0].webkitEnterFullscreen(); 1186 }else if($(playerId)[0].enterFullscreen){ 1187 $(playerId)[0].enterFullscreen(); 1188 } 1189 }); 1190 1191 // toggle captions 1192 $( ".toggle-captions" ).click(function() { 1193 //get closest video player ID 1194 var videoId = '#' + $(this).parent().parent().find('video').attr('id'); 1195 const tracks = $(videoId)[0].textTracks; // All <track> elements 1196 1197 if (!tracks || tracks.length === 0) { 1198 return; 1199 } 1200 1201 const track = tracks[0]; // Use the first track (or loop for multiple languages) 1202 1203 // Toggle between showing and hiding 1204 if (track.mode === 'showing') { 1205 track.mode = 'hidden'; // Hide captions (but keep track loaded) 1206 $(this).addClass('off'); 1207 $(this).text('Show Captions'); 1208 } else { 1209 track.mode = 'showing'; // Show captions 1210 $(this).removeClass('off'); 1211 $(this).text('Hide Captions'); 1212 } 1213 }); 1214 1215 //pause video 1216 $( ".pause-video" ).click(function() { 1217 //get closest video player ID 1218 var playerId = '#' + $(this).parent().parent().find('video').attr('id'); 1219 //test if src has been set 1220 $(playerId)[0].pause(); 1221 $(this).parent().parent().find('.play-video').fadeIn("slow"); 1222 $(this).parent().fadeOut("slow"); 1223 }); 1224 1225 //toggle mute 1226 $( ".toggle-mute, .toggle-unmute" ).click(function() { 1227 //get closest video player ID 1228 var playerId = '#' + $(this).parent().parent().find('video').attr('id'); 1229 //test if video has been muted 1230 $(playerId).prop("muted", !$(playerId).prop("muted")); 1231 1232 if($(this ).hasClass('toggle-mute')){ 1233 $(this).removeClass('toggle-mute').addClass('toggle-unmute'); 1234 }else{ 1235 $(this).removeClass('toggle-unmute').addClass('toggle-mute'); 1236 } 1237 1238 }); 1239 }; 1240 1241 m.addHoverEvents = function() { 1242 //SHOW HIDE CONTROLS 1243 //handle mouse enter 1244 $('.asset-wrapper, .image-wrap').on('mouseenter', function () { 1245 if($(this).find('.play-video').is(':hidden')){ 1246 $(this).find('.video-controls').fadeIn("slow"); 1247 } 1248 }); 1249 //handle touch 1250 $('.asset-wrapper, .image-wrap').on('touchstart', function () { 1251 if($(this).find('.play-video').is(':hidden')){ 1252 $(this).find('.video-controls').fadeIn("slow"); 1253 }else{ 1254 $(this).find('.video-controls').fadeOut("slow"); 1255 } 1256 }); 1257 //handle blur mouseleave
1258 $('.asset-wrapper, .image-wrap').on('blur, mouseleave', function () { 1259 if($(this).find('.play-video').is(':hidden')){ 1260 $(this).find('.video-controls').fadeOut("slow"); 1261 } 1262 }); 1263 }; 1264 1265 1266 1267 m.scaleVideo = function() { 1268 //get current window width and height 1269 var curWindowWidth = window.innerWidth, 1270 curWindowHeight = window.innerHeight; 1271 1272 //remove any existing styles 1273 $(fullViewportPlayer).removeAttr('style'); 1274 1275 //get video height and width 1276 var videoNativeWidth = $(fullViewportPlayer).width(); 1277 var videoNativeHeight = $(fullViewportPlayer).height(); 1278 1279 //calculate whether we need to adjust the height or width 1280 var heightDifference = curWindowHeight - videoNativeHeight; 1281 var widthDifference = curWindowWidth - videoNativeWidth; 1282 1283 //only adjust the dimensions of the player if 1284 //the difference is not a negative number 1285 if(heightDifference >= 0 || widthDifference >= 0){ 1286 if(heightDifference > widthDifference){ 1287 $(fullViewportPlayer).height(curWindowHeight); 1288 }else{ 1289 $(fullViewportPlayer).width(curWindowWidth); 1290 } 1291 } 1292 1293 1294 }; 1295 1296 //load video for 1024 or higher 1297 m.loadVideo = function(playerId) { 1298 1299 //get video player 1300 //var playerId = '#' + $(vidPlayerId).attr('id'); 1301 var lowResVersion = $(playerId).attr('data-src-low'); 1302 var highResVersion = $(playerId).attr('data-src-hi'); 1303 var screenSize = $(playerId).attr('data-screen-size'); 1304 var loop = $(playerId).attr('data-loop'); 1305 var triggerOnScroll = $(playerId).attr('data-trigger-on-scroll'); 1306 1307 curLoop = loop; 1308 1309 //if screenSize = large only, load video on devices greater than 1023 1310 if(screenSize === "large"){ 1311 if(windowWidth > 1023 && windowWidth < 1400){ 1312 if(lowResVersion && lowResVersion.length){ 1313 $(playerId).attr("src",lowResVersion); 1314 } 1315 }else if(windowWidth > 1400){ 1316 if(highResVersion && highResVersion.length){ 1317 $(playerId).attr("src",highResVersion); 1318 } 1319 } 1320 }else{ 1321 //load low res on all screen sizes < 1400 1322 if(windowWidth < 1400){ 1323 if(lowResVersion && lowResVersion.length){ 1324 $(playerId).attr("src",lowResVersion); 1325 } 1326 }else{ 1327 if(highResVersion && highResVersion.length){ 1328 $(playerId).attr("src",highResVersion); 1329 } 1330 } 1331 } 1332 //set loop 1333 if(loop === 'true'){ 1334 $(playerId).attr('loop','loop'); 1335 } 1336 1337 //set scroll triggers 1338 if(triggerOnScroll === 'true'){ 1339 m.setVideoScrollTriggers(playerId); 1340 } 1341 1342 return; 1343 }; 1344 1345 m.setVideoScrollTriggers = function(scrollPlayerId){ 1346 var curVideoEnded = false; 1347 1348 //set variable if looping is set to false 1349 if(curLoop === 'false'){ 1350 $(scrollPlayerId).on('ended',function(){ 1351 curVideoEnded = true; 1352 }); 1353 } 1354 1355 $(window).scroll(function() { 1356 var top_of_element = $(scrollPlayerId).offset().top + 300; 1357 var bottom_of_element = $(scrollPlayerId).offset().top + $(scrollPlayerId).outerHeight() - 300; 1358 var bottom_of_screen = $(window).scrollTop() + $(window).innerHeight(); 1359 var top_of_screen = $(window).scrollTop() ; 1360 1361 if(!curVideoEnded){ 1362 if ((bottom_of_screen > top_of_element) && (top_of_screen < bottom_of_element)){ 1363 $(scrollPlayerId)[0].play(); 1364 } else { 1365 $(scrollPlayerId)[0].pause(); 1366 } 1367 } 1368 }); 1369 }; 1370 1371 return m; 1372 1373})(); 1374 1375//INIT 1376fpaVideo.init();
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.