vendor: 19,987 bytes, lines 1-814
1(function(window, factory) { 2 var lazySizes = factory(window, window.document, Date); 3 window.lazySizes = lazySizes; 4 if(typeof module == 'object' && module.exports){ 5 module.exports = lazySizes; 6 } 7}(typeof window != 'undefined' ? 8 window : {}, 9/** 10 * import("./types/global") 11 * @typedef { import("./types/lazysizes-config").LazySizesConfigPartial } LazySizesConfigPartial 12 */ 13function l(window, document, Date) { // Pass in the window Date function also for SSR because the Date class can be lost 14 'use strict'; 15 /*jshint eqnull:true */ 16 17 var lazysizes, 18 /** 19 * @type { LazySizesConfigPartial } 20 */ 21 lazySizesCfg; 22 23 (function(){ 24 var prop; 25 26 var lazySizesDefaults = { 27 lazyClass: 'lazyload', 28 loadedClass: 'lazyloaded', 29 loadingClass: 'lazyloading', 30 preloadClass: 'lazypreload', 31 errorClass: 'lazyerror', 32 //strictClass: 'lazystrict', 33 autosizesClass: 'lazyautosizes', 34 fastLoadedClass: 'ls-is-cached', 35 iframeLoadMode: 0, 36 srcAttr: 'data-src', 37 srcsetAttr: 'data-srcset', 38 sizesAttr: 'data-sizes', 39 //preloadAfterLoad: false, 40 minSize: 40, 41 customMedia: {}, 42 init: true, 43 expFactor: 1.5, 44 hFac: 0.8, 45 loadMode: 2, 46 loadHidden: true, 47 ricTimeout: 0, 48 throttleDelay: 125, 49 }; 50 51 lazySizesCfg = window.lazySizesConfig || window.lazysizesConfig || {}; 52 53 for(prop in lazySizesDefaults){ 54 if(!(prop in lazySizesCfg)){ 55 lazySizesCfg[prop] = lazySizesDefaults[prop]; 56 } 57 } 58 })(); 59 60 if (!document || !document.getElementsByClassName) { 61 return { 62 init: function () {}, 63 /** 64 * @type { LazySizesConfigPartial } 65 */ 66 cfg: lazySizesCfg, 67 /** 68 * @type { true } 69 */ 70 noSupport: true, 71 }; 72 } 73 74 var docElem = document.documentElement; 75 76 var supportPicture = window.HTMLPictureElement; 77 78 var _addEventListener = 'addEventListener'; 79 80 var _getAttribute = 'getAttribute'; 81 82 /** 83 * Update to bind to window because 'this' becomes null during SSR 84 * builds. 85 */ 86 var addEventListener = window[_addEventListener].bind(window); 87 88 var setTimeout = window.setTimeout; 89 90 var requestAnimationFrame = window.requestAnimationFrame || setTimeout; 91 92 var requestIdleCallback = window.requestIdleCallback; 93 94 var regPicture = /^picture$/i; 95 96 var loadEvents = ['load', 'error', 'lazyincluded', '_lazyloaded']; 97 98 var regClassCache = {}; 99 100 var forEach = Array.prototype.forEach; 101 102 /** 103 * @param ele {Element} 104 * @param cls {string} 105 */ 106 var hasClass = function(ele, cls) { 107 if(!regClassCache[cls]){ 108 regClassCache[cls] = new RegExp('(\\s|^)'+cls+'(\\s|$)'); 109 } 110 return regClassCache[cls].test(ele[_getAttribute]('class') || '') && regClassCache[cls]; 111 }; 112 113 /** 114 * @param ele {Element} 115 * @param cls {string} 116 */ 117 var addClass = function(ele, cls) { 118 if (!hasClass(ele, cls)){ 119 ele.setAttribute('class', (ele[_getAttribute]('class') || '').trim() + ' ' + cls); 120 } 121 }; 122 123 /** 124 * @param ele {Element} 125 * @param cls {string} 126 */ 127 var removeClass = function(ele, cls) { 128 var reg; 129 if ((reg = hasClass(ele,cls))) { 130 ele.setAttribute('class', (ele[_getAttribute]('class') || '').replace(reg, ' ')); 131 } 132 }; 133 134 var addRemoveLoadEvents = function(dom, fn, add){ 135 var action = add ? _addEventListener : 'removeEventListener'; 136 if(add){ 137 addRemoveLoadEvents(dom, fn); 138 } 139 loadEvents.forEach(function(evt){ 140 dom[action](evt, fn); 141 }); 142 }; 143 144 /** 145 * @param elem { Element } 146 * @param name { string } 147 * @param detail { any } 148 * @param noBubbles { boolean } 149 * @param noCancelable { boolean } 150 * @returns { CustomEvent } 151 */ 152 var triggerEvent = function(elem, name, detail, noBubbles, noCancelable){ 153 var event = document.createEvent('Event'); 154 155 if(!detail){ 156 detail = {}; 157 } 158 159 detail.instance = lazysizes; 160 161 event.initEvent(name, !noBubbles, !noCancelable); 162 163 event.detail = detail; 164 165 elem.dispatchEvent(event); 166 return event; 167 }; 168 169 var updatePolyfill = function (el, full){ 170 var polyfill; 171 if( !supportPicture && ( polyfill = (window.picturefill || lazySizesCfg.pf) ) ){ 172 if(full && full.src && !el[_getAttribute]('srcset')){ 173 el.setAttribute('srcset', full.src); 174 } 175 polyfill({reevaluate: true, elements: [el]}); 176 } else if(full && full.src){ 177 el.src = full.src; 178 } 179 }; 180 181 var getCSS = function (elem, style){ 182 return (getComputedStyle(elem, null) || {})[style]; 183 }; 184 185 /** 186 * 187 * @param elem { Element } 188 * @param parent { Element } 189 * @param [width] {number} 190 * @returns {number} 191 */ 192 var getWidth = function(elem, parent, width){ 193 width = width || elem.offsetWidth; 194 195 while(width < lazySizesCfg.minSize && parent && !elem._lazysizesWidth){ 196 width = parent.offsetWidth; 197 parent = parent.parentNode; 198 } 199 200 return width; 201 }; 202 203 var rAF = (function(){ 204 var running, waiting; 205 var firstFns = []; 206 var secondFns = []; 207 var fns = firstFns; 208 209 var run = function(){ 210 var runFns = fns; 211 212 fns = firstFns.length ? secondFns : firstFns; 213 214 running = true; 215 waiting = false; 216 217 while(runFns.length){ 218 runFns.shift()(); 219 } 220 221 running = false; 222 }; 223 224 var rafBatch = function(fn, queue){ 225 if(running && !queue){ 226 fn.apply(this, arguments); 227 } else { 228 fns.push(fn); 229 230 if(!waiting){ 231 waiting = true; 232 (document.hidden ? setTimeout : requestAnimationFrame)(run); 233 } 234 } 235 }; 236 237 rafBatch._lsFlush = run; 238 239 return rafBatch; 240 })(); 241 242 var rAFIt = function(fn, simple){ 243 return simple ? 244 function() { 245 rAF(fn); 246 } : 247 function(){ 248 var that = this; 249 var args = arguments; 250 rAF(function(){ 251 fn.apply(that, args); 252 }); 253 } 254 ; 255 }; 256 257 var throttle = function(fn){ 258 var running; 259 var lastTime = 0; 260 var gDelay = lazySizesCfg.throttleDelay; 261 var rICTimeout = lazySizesCfg.ricTimeout; 262 var run = function(){ 263 running = false; 264 lastTime = Date.now(); 265 fn(); 266 }; 267 var idleCallback = requestIdleCallback && rICTimeout > 49 ? 268 function(){ 269 requestIdleCallback(run, {timeout: rICTimeout}); 270 271 if(rICTimeout !== lazySizesCfg.ricTimeout){ 272 rICTimeout = lazySizesCfg.ricTimeout; 273 } 274 } : 275 rAFIt(function(){ 276 setTimeout(run); 277 }, true) 278 ; 279 280 return function(isPriority){ 281 var delay; 282 283 if((isPriority = isPriority === true)){ 284 rICTimeout = 33; 285 } 286 287 if(running){ 288 return; 289 } 290 291 running = true; 292 293 delay = gDelay - (Date.now() - lastTime); 294 295 if(delay < 0){ 296 delay = 0; 297 } 298 299 if(isPriority || delay < 9){ 300 idleCallback(); 301 } else { 302 setTimeout(idleCallback, delay); 303 } 304 }; 305 }; 306 307 //based on http://modernjavascript.blogspot.de/2013/08/building-better-debounce.html 308 var debounce = function(func) { 309 var timeout, timestamp; 310 var wait = 99; 311 var run = function(){ 312 timeout = null; 313 func(); 314 }; 315 var later = function() { 316 var last = Date.now() - timestamp; 317 318 if (last < wait) { 319 setTimeout(later, wait - last); 320 } else { 321 (requestIdleCallback || run)(run); 322 } 323 }; 324 325 return function() { 326 timestamp = Date.now(); 327 328 if (!timeout) { 329 timeout = setTimeout(later, wait); 330 } 331 }; 332 }; 333 334 var loader = (function(){ 335 var preloadElems, isCompleted, resetPreloadingTimer, loadMode, started; 336 337 var eLvW, elvH, eLtop, eLleft, eLright, eLbottom, isBodyHidden; 338 339 var regImg = /^img$/i; 340 var regIframe = /^iframe$/i; 341 342 var supportScroll = ('onscroll' in window) && !(/(gle|ing)bot/.test(navigator.userAgent)); 343 344 var shrinkExpand = 0; 345 var currentExpand = 0; 346 347 var isLoading = 0; 348 var lowRuns = -1; 349 350 var resetPreloading = function(e){ 351 isLoading--; 352 if(!e || isLoading < 0 || !e.target){ 353 isLoading = 0; 354 } 355 }; 356 357 var isVisible = function (elem) { 358 if (isBodyHidden == null) { 359 isBodyHidden = getCSS(document.body, 'visibility') == 'hidden'; 360 } 361 362 return isBodyHidden || !(getCSS(elem.parentNode, 'visibility') == 'hidden' && getCSS(elem, 'visibility') == 'hidden'); 363 }; 364 365 var isNestedVisible = function(elem, elemExpand){ 366 var outerRect; 367 var parent = elem; 368 var visible = isVisible(elem); 369 370 eLtop -= elemExpand; 371 eLbottom += elemExpand; 372 eLleft -= elemExpand; 373 eLright += elemExpand; 374 375 while(visible && (parent = parent.offsetParent) && parent != document.body && parent != docElem){ 376 visible = ((getCSS(parent, 'opacity') || 1) > 0); 377 378 if(visible && getCSS(parent, 'overflow') != 'visible'){ 379 outerRect = parent.getBoundingClientRect(); 380 visible = eLright > outerRect.left && 381 eLleft < outerRect.right && 382 eLbottom > outerRect.top - 1 && 383 eLtop < outerRect.bottom + 1 384 ; 385 } 386 } 387 388 return visible; 389 }; 390 391 var checkElements = function() { 392 var eLlen, i, rect, autoLoadElem, loadedSomething, elemExpand, elemNegativeExpand, elemExpandVal, 393 beforeExpandVal, defaultExpand, preloadExpand, hFac; 394 var lazyloadElems = lazysizes.elements; 395 396 if((loadMode = lazySizesCfg.loadMode) && isLoading < 8 && (eLlen = lazyloadElems.length)){ 397 398 i = 0; 399 400 lowRuns++; 401 402 for(; i < eLlen; i++){ 403 404 if(!lazyloadElems[i] || lazyloadElems[i]._lazyRace){continue;} 405 406 if(!supportScroll || (lazysizes.prematureUnveil && lazysizes.prematureUnveil(lazyloadElems[i]))){unveilElement(lazyloadElems[i]);continue;} 407 408 if(!(elemExpandVal = lazyloadElems[i][_getAttribute]('data-expand')) || !(elemExpand = elemExpandVal * 1)){ 409 elemExpand = currentExpand; 410 } 411 412 if (!defaultExpand) { 413 defaultExpand = (!lazySizesCfg.expand || lazySizesCfg.expand < 1) ? 414 docElem.clientHeight > 500 && docElem.clientWidth > 500 ? 500 : 370 : 415 lazySizesCfg.expand; 416 417 lazysizes._defEx = defaultExpand; 418 419 preloadExpand = defaultExpand * lazySizesCfg.expFactor; 420 hFac = lazySizesCfg.hFac; 421 isBodyHidden = null; 422 423 if(currentExpand < preloadExpand && isLoading < 1 && lowRuns > 2 && loadMode > 2 && !document.hidden){ 424 currentExpand = preloadExpand; 425 lowRuns = 0; 426 } else if(loadMode > 1 && lowRuns > 1 && isLoading < 6){ 427 currentExpand = defaultExpand; 428 } else { 429 currentExpand = shrinkExpand; 430 } 431 } 432 433 if(beforeExpandVal !== elemExpand){ 434 eLvW = innerWidth + (elemExpand * hFac); 435 elvH = innerHeight + elemExpand; 436 elemNegativeExpand = elemExpand * -1; 437 beforeExpandVal = elemExpand; 438 } 439 440 rect = lazyloadElems[i].getBoundingClientRect(); 441 442 if ((eLbottom = rect.bottom) >= elemNegativeExpand && 443 (eLtop = rect.top) <= elvH && 444 (eLright = rect.right) >= elemNegativeExpand * hFac && 445 (eLleft = rect.left) <= eLvW && 446 (eLbottom || eLright || eLleft || eLtop) && 447 (lazySizesCfg.loadHidden || isVisible(lazyloadElems[i])) && 448 ((isCompleted && isLoading < 3 && !elemExpandVal && (loadMode < 3 || lowRuns < 4)) || isNestedVisible(lazyloadElems[i], elemExpand))){ 449 unveilElement(lazyloadElems[i]); 450 loadedSomething = true; 451 if(isLoading > 9){break;} 452 } else if(!loadedSomething && isCompleted && !autoLoadElem && 453 isLoading < 4 && lowRuns < 4 && loadMode > 2 && 454 (preloadElems[0] || lazySizesCfg.preloadAfterLoad) && 455 (preloadElems[0] || (!elemExpandVal && ((eLbottom || eLright || eLleft || eLtop) || lazyloadElems[i][_getAttribute](lazySizesCfg.sizesAttr) != 'auto')))){ 456 autoLoadElem = preloadElems[0] || lazyloadElems[i]; 457 } 458 } 459 460 if(autoLoadElem && !loadedSomething){ 461 unveilElement(autoLoadElem); 462 } 463 } 464 }; 465 466 var throttledCheckElements = throttle(checkElements); 467 468 var switchLoadingClass = function(e){ 469 var elem = e.target; 470 471 if (elem._lazyCache) { 472 delete elem._lazyCache; 473 return; 474 } 475 476 resetPreloading(e); 477 addClass(elem, lazySizesCfg.loadedClass); 478 removeClass(elem, lazySizesCfg.loadingClass); 479 addRemoveLoadEvents(elem, rafSwitchLoadingClass); 480 triggerEvent(elem, 'lazyloaded'); 481 }; 482 var rafedSwitchLoadingClass = rAFIt(switchLoadingClass); 483 var rafSwitchLoadingClass = function(e){ 484 rafedSwitchLoadingClass({target: e.target}); 485 }; 486 487 var changeIframeSrc = function(elem, src){ 488 var loadMode = elem.getAttribute('data-load-mode') || lazySizesCfg.iframeLoadMode; 489 490 // loadMode can be also a string! 491 if (loadMode == 0) { 492 elem.contentWindow.location.replace(src); 493 } else if (loadMode == 1) { 494 elem.src = src; 495 } 496 }; 497 498 var handleSources = function(source){ 499 var customMedia; 500 501 var sourceSrcset = source[_getAttribute](lazySizesCfg.srcsetAttr); 502 503 if( (customMedia = lazySizesCfg.customMedia[source[_getAttribute]('data-media') || source[_getAttribute]('media')]) ){ 504 source.setAttribute('media', customMedia); 505 } 506 507 if(sourceSrcset){ 508 source.setAttribute('srcset', sourceSrcset); 509 } 510 }; 511 512 var lazyUnveil = rAFIt(function (elem, detail, isAuto, sizes, isImg){ 513 var src, srcset, parent, isPicture, event, firesLoad; 514 515 if(!(event = triggerEvent(elem, 'lazybeforeunveil', detail)).defaultPrevented){ 516 517 if(sizes){ 518 if(isAuto){ 519 addClass(elem, lazySizesCfg.autosizesClass); 520 } else { 521 elem.setAttribute('sizes', sizes); 522 } 523 } 524 525 srcset = elem[_getAttribute](lazySizesCfg.srcsetAttr); 526 src = elem[_getAttribute](lazySizesCfg.srcAttr); 527 528 if(isImg) { 529 parent = elem.parentNode; 530 isPicture = parent && regPicture.test(parent.nodeName || ''); 531 } 532 533 firesLoad = detail.firesLoad || (('src' in elem) && (srcset || src || isPicture)); 534 535 event = {target: elem}; 536 537 addClass(elem, lazySizesCfg.loadingClass); 538 539 if(firesLoad){ 540 clearTimeout(resetPreloadingTimer); 541 resetPreloadingTimer = setTimeout(resetPreloading, 2500); 542 addRemoveLoadEvents(elem, rafSwitchLoadingClass, true); 543 } 544 545 if(isPicture){ 546 forEach.call(parent.getElementsByTagName('source'), handleSources); 547 } 548 549 if(srcset){ 550 elem.setAttribute('srcset', srcset); 551 } else if(src && !isPicture){ 552 if(regIframe.test(elem.nodeName)){ 553 changeIframeSrc(elem, src); 554 } else { 555 elem.src = src; 556 } 557 } 558 559 if(isImg && (srcset || isPicture)){ 560 updatePolyfill(elem, {src: src}); 561 } 562 } 563 564 if(elem._lazyRace){ 565 delete elem._lazyRace; 566 } 567 removeClass(elem, lazySizesCfg.lazyClass); 568 569 rAF(function(){ 570 // Part of this can be removed as soon as this fix is older: https://bugs.chromium.org/p/chromium/issues/detail?id=7731 (2015) 571 var isLoaded = elem.complete && elem.naturalWidth > 1; 572 573 if( !firesLoad || isLoaded){ 574 if (isLoaded) { 575 addClass(elem, lazySizesCfg.fastLoadedClass); 576 } 577 switchLoadingClass(event); 578 elem._lazyCache = true; 579 setTimeout(function(){ 580 if ('_lazyCache' in elem) { 581 delete elem._lazyCache; 582 } 583 }, 9); 584 } 585 if (elem.loading == 'lazy') { 586 isLoading--; 587 } 588 }, true); 589 }); 590 591 /** 592 * 593 * @param elem { Element } 594 */ 595 var unveilElement = function (elem){ 596 if (elem._lazyRace) {return;} 597 var detail; 598 599 var isImg = regImg.test(elem.nodeName); 600 601 //allow using sizes="auto", but don't use. it's invalid. Use data-sizes="auto" or a valid value for sizes instead (i.e.: sizes="80vw") 602 var sizes = isImg && (elem[_getAttribute](lazySizesCfg.sizesAttr) || elem[_getAttribute]('sizes')); 603 var isAuto = sizes == 'auto'; 604 605 if( (isAuto || !isCompleted) && isImg && (elem[_getAttribute]('src') || elem.srcset) && !elem.complete && !hasClass(elem, lazySizesCfg.errorClass) && hasClass(elem, lazySizesCfg.lazyClass)){return;} 606 607 detail = triggerEvent(elem, 'lazyunveilread').detail; 608 609 if(isAuto){ 610 autoSizer.updateElem(elem, true, elem.offsetWidth); 611 } 612 613 elem._lazyRace = true; 614 isLoading++; 615 616 lazyUnveil(elem, detail, isAuto, sizes, isImg); 617 }; 618 619 var afterScroll = debounce(function(){ 620 lazySizesCfg.loadMode = 3; 621 throttledCheckElements(); 622 }); 623 624 var altLoadmodeScrollListner = function(){ 625 if(lazySizesCfg.loadMode == 3){ 626 lazySizesCfg.loadMode = 2; 627 } 628 afterScroll(); 629 }; 630 631 var onload = function(){ 632 if(isCompleted){return;} 633 if(Date.now() - started < 999){ 634 setTimeout(onload, 999); 635 return; 636 } 637 638 639 isCompleted = true; 640 641 lazySizesCfg.loadMode = 3; 642 643 throttledCheckElements(); 644 645 addEventListener('scroll', altLoadmodeScrollListner, true); 646 }; 647 648 return { 649 _: function(){ 650 started = Date.now(); 651 652 lazysizes.elements = document.getElementsByClassName(lazySizesCfg.lazyClass); 653 preloadElems = document.getElementsByClassName(lazySizesCfg.lazyClass + ' ' + lazySizesCfg.preloadClass); 654 655 addEventListener('scroll', throttledCheckElements, true); 656 657 addEventListener('resize', throttledCheckElements, true); 658 659 addEventListener('pageshow', function (e) { 660 if (e.persisted) { 661 var loadingElements = document.querySelectorAll('.' + lazySizesCfg.loadingClass); 662 663 if (loadingElements.length && loadingElements.forEach) { 664 requestAnimationFrame(function () { 665 loadingElements.forEach( function (img) { 666 if (img.complete) { 667 unveilElement(img); 668 } 669 }); 670 }); 671 } 672 } 673 }); 674 675 if(window.MutationObserver){ 676 new MutationObserver( throttledCheckElements ).observe( docElem, {childList: true, subtree: true, attributes: true} ); 677 } else { 678 docElem[_addEventListener]('DOMNodeInserted', throttledCheckElements, true); 679 docElem[_addEventListener]('DOMAttrModified', throttledCheckElements, true); 680 setInterval(throttledCheckElements, 999); 681 } 682 683 addEventListener('hashchange', throttledCheckElements, true); 684 685 //, 'fullscreenchange' 686 ['focus', 'mouseover', 'click', 'load', 'transitionend', 'animationend'].forEach(function(name){ 687 document[_addEventListener](name, throttledCheckElements, true); 688 }); 689 690 if((/d$|^c/.test(document.readyState))){ 691 onload(); 692 } else { 693 addEventListener('load', onload); 694 document[_addEventListener]('DOMContentLoaded', throttledCheckElements); 695 setTimeout(onload, 20000); 696 } 697 698 if(lazysizes.elements.length){ 699 checkElements(); 700 rAF._lsFlush(); 701 } else { 702 throttledCheckElements(); 703 } 704 }, 705 checkElems: throttledCheckElements, 706 unveil: unveilElement, 707 _aLSL: altLoadmodeScrollListner, 708 }; 709 })(); 710 711 712 var autoSizer = (function(){ 713 var autosizesElems; 714 715 var sizeElement = rAFIt(function(elem, parent, event, width){ 716 var sources, i, len; 717 elem._lazysizesWidth = width; 718 width += 'px'; 719 720 elem.setAttribute('sizes', width); 721 722 if(regPicture.test(parent.nodeName || '')){ 723 sources = parent.getElementsByTagName('source'); 724 for(i = 0, len = sources.length; i < len; i++){ 725 sources[i].setAttribute('sizes', width); 726 } 727 } 728 729 if(!event.detail.dataAttr){ 730 updatePolyfill(elem, event.detail); 731 } 732 }); 733 /** 734 * 735 * @param elem {Element} 736 * @param dataAttr 737 * @param [width] { number } 738 */ 739 var getSizeElement = function (elem, dataAttr, width){ 740 var event; 741 var parent = elem.parentNode; 742 743 if(parent){ 744 width = getWidth(elem, parent, width); 745 event = triggerEvent(elem, 'lazybeforesizes', {width: width, dataAttr: !!dataAttr}); 746 747 if(!event.defaultPrevented){ 748 width = event.detail.width; 749 750 if(width && width !== elem._lazysizesWidth){ 751 sizeElement(elem, parent, event, width); 752 } 753 } 754 } 755 }; 756 757 var updateElementsSizes = function(){ 758 var i; 759 var len = autosizesElems.length; 760 if(len){ 761 i = 0; 762 763 for(; i < len; i++){ 764 getSizeElement(autosizesElems[i]); 765 } 766 } 767 }; 768 769 var debouncedUpdateElementsSizes = debounce(updateElementsSizes); 770 771 return { 772 _: function(){ 773 autosizesElems = document.getElementsByClassName(lazySizesCfg.autosizesClass); 774 addEventListener('resize', debouncedUpdateElementsSizes); 775 }, 776 checkElems: debouncedUpdateElementsSizes, 777 updateElem: getSizeElement 778 }; 779 })(); 780 781 var init = function(){ 782 if(!init.i && document.getElementsByClassName){ 783 init.i = true; 784 autoSizer._(); 785 loader._(); 786 } 787 }; 788 789 setTimeout(function(){ 790 if(lazySizesCfg.init){ 791 init(); 792 } 793 }); 794 795 lazysizes = { 796 /** 797 * @type { LazySizesConfigPartial } 798 */ 799 cfg: lazySizesCfg, 800 autoSizer: autoSizer, 801 loader: loader, 802 init: init, 803 uP: updatePolyfill, 804 aC: addClass, 805 rC: removeClass, 806 hC: hasClass, 807 fire: triggerEvent, 808 gW: getWidth, 809 rAF: rAF, 810 }; 811 812 return lazysizes; 813} 814));
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.