forked from aFarkas/lazysizes
-
Notifications
You must be signed in to change notification settings - Fork 0
/
lazysizes.min.js
3 lines (3 loc) · 6.3 KB
/
lazysizes.min.js
1
2
3
/*! lazysizes - v0.2.1-pre - 2014-10-21
Licensed MIT */
!function(a){window.lazySizes=a(),"function"==typeof define&&define.amd&&define(function(){return window.lazySizes})}(function(){"use strict";function a(a,b){var c;window.picturefill?picturefill({reevaluate:!0,reparse:!0,elements:[a]}):window.respimage&&!respimage._.observer?(b&&(c=a[respimage._.ns],c&&(c[b.srcset?"srcset":"src"]=void 0)),respimage({reparse:!0,elements:[a]})):!window.HTMLPictureElement&&window.console&&"complete"==t.readyState&&console.log("Please use a responsive image polyfill, like respimage or picturefill. https://github.com/aFarkas/respimage")}function b(a){u++,a=e(a),C(a,P),C(a,P,!0),clearTimeout(G),G=setTimeout(P,5e3)}function c(a){var b=t.createElement("script"),c=a.parentNode;return a.removeAttribute(j.srcAttr),c.insertBefore(b,a),A(function(){q(a,j.lazyClass)}),b}function d(){n=0,clearTimeout(m)}function e(b,d){var e,f,h,i,k,l,m,n,o,r=E(b,"lazybeforeunveil",{force:!!d});if(!r.defaultPrevented&&(k=b.getAttribute(j.sizesAttr),l=b.getAttribute(j.srcAttr),m=b.getAttribute(j.srcsetAttr),n=b.parentNode,l||m)){if(v.test(b.nodeName)&&(b=c(b)),x.test(b.nodeName||"")){if(B[l])return;B[l]=!0}else if(y.test(b.nodeName||"")){if(o=w.test(n.nodeName||""),!o&&!d&&!b.complete&&b.getAttribute("src")&&b.src&&!b.lazyload)return C(b,D),void C(b,D,!0);if(o)for(e=n.getElementsByTagName("source"),f=0,h=e.length;h>f;f++)i=e[f].getAttribute(j.srcsetAttr),i&&e[f].setAttribute("srcset",i)}k&&("auto"==k?g(b,!0):b.setAttribute("sizes",k),b.removeAttribute(j.sizesAttr),!m&&window.console&&b.getAttribute("srcset")&&console.log("using lazysizes with a `srcset` attribute is not good. Use `data-srcset` instead")),m?(b.setAttribute("srcset",m),b.removeAttribute(j.srcsetAttr)):l&&(b.setAttribute("src",l),b.removeAttribute(j.srcAttr))}return A(function(){q(b,j.lazyClass),"auto"==k&&p(b,j.autosizesClass),(m||k)&&a(b,{srcset:m,src:l})}),b}function f(){l=0,clearTimeout(k)}function g(b,c){var d,e,f,g,h,i,k,l;if(g=b.parentNode){if(d=g.offsetWidth,e=b.offsetWidth,f=e>d?e:d,!f&&!b._lazysizesWidth)for(;g&&g!=t.body&&!f;)f=g.offsetWidth,g=g.parentNode;if(l=E(b,"lazybeforesizes",{width:f,polyfill:!c}),!l.defaultPrevented&&(f=l.details.width,f&&f!==b._lazysizesWidth&&(!j.onlyLargerSizes||!b._lazysizesWidth||b._lazysizesWidth<f))){if(b._lazysizesWidth=f,f+="px",b.setAttribute("sizes",f),w.test(g.nodeName||""))for(h=g.getElementsByTagName("source"),i=0,k=h.length;k>i;i++)h[i].setAttribute("sizes",f);l.details.polyfill&&a(b)}}}if(Date.now&&window.document.getElementsByClassName){var h,i,j,k,l,m,n,o,p,q,r,s,t=window.document,u=0,v=/^(?:span|div)$/i,w=/^picture$/i,x=/^script$/i,y=/^img$/i,z=10,A=window.setImmediate||window.setTimeout,B={},C=function(a,b,c){var d=c?"addEventListener":"removeEventListener";a[d]("load",b,!1),a[d]("abort",b,!1),a[d]("readystatechange",b,!1),a[d]("error",b,!1)},D=function(a){C(a.target,D),e(a.target,!0)},E=function(a,b,c){var d=t.createEvent("Event");return d.initEvent(b,!0,!0),d.details=c||{},a.dispatchEvent(d),d};t.documentElement.classList?(p=function(a,b){a.classList.add(b)},q=function(a,b){a.classList.remove(b)},r=function(a,b){return a.classList.contains(b)}):(p=function(a,b){r(a,b)||(a.className+=" "+b)},q=function(a,b){var c;r(a,b)&&(c=new RegExp("(\\s|^)"+b+"(\\s|$)"),a.className=a.className.replace(c," "))},r=function(a,b){return a.className.match(new RegExp("(\\s|^)"+b+"(\\s|$)"))});var F,G,H,I,J,K,L,M,N,O=Date.now(),P=function(a){u--,clearTimeout(G),a&&a.target&&C(a.target,P),(!a||0>u||!a.target)&&(u=0)},Q=function(){var a,b,c=function(){b=!1},e=function(){clearTimeout(a),d(),R(),setTimeout(c)};return{debounce:function(){clearTimeout(a),clearTimeout(o),b=!0,a=setTimeout(e,66)},throttled:function(){var c;b||(b=!0,clearTimeout(a),c=Date.now()-O,c=c>300?9:99,a=setTimeout(e,c))}}}(),R=function(){var a,c,d;if(F=h.length,O=Date.now(),F){for(H=window.innerWidth+z,I=window.innerHeight+z,N=-1*z;F>n;n++)if(a=h[n].getBoundingClientRect(),(M=a.bottom)>=N&&(J=a.top)<=I&&(L=a.right)>=N&&(K=a.left)<=H&&(M||L||K||J))e(h[n]),d=!0;else{if(F-1>n&&Date.now()-O>9){n++,c=!1,m=setTimeout(R,4);break}!d&&s&&!c&&j.preloadAfterLoad&&2>u&&(M||L||K||J||"auto"!=h[n].getAttribute(j.sizesAttr))&&(c=h[n])}c&&!d&&b(c)}},S=function(){var a,b=function(){clearTimeout(a),f(),T()};return function(){clearTimeout(a),clearTimeout(k),a=setTimeout(b,99)}}(),T=function(){var a,b,c,d=i.length;if(d)for(b=Date.now(),c=l||0,a=c+3,f();d>c;c++)if(g(i[c]),c>a&&d-1>c&&Date.now()-b>9){l=c+1,k=setTimeout(T,4);break}},U=function(){z=400,clearTimeout(o),t.addEventListener("load",Q.throttled,!0),s=!0},V=function(){var a=t.body||t.documentElement;j.mutation&&(window.MutationObserver?new MutationObserver(Q.throttled).observe(t.documentElement,{childList:!0,subtree:!0,attributes:!0}):(a.addEventListener("DOMNodeInserted",Q.throttled,!0),t.documentElement.addEventListener("DOMAttrModified",Q.throttled,!0))),j.hover&&t.addEventListener("mouseover",Q.throttled,!0),t.addEventListener("focus",Q.throttled,!0),window.addEventListener("hashchange",Q.throttled,!0),"onmozfullscreenchange"in a?window.addEventListener("mozfullscreenchange",Q.throttled,!0):"onwebkitfullscreenchange"in a?window.addEventListener("webkitfullscreenchange",Q.throttled,!0):window.addEventListener("fullscreenchange",Q.throttled,!0),j.cssanimation&&(t.addEventListener("animationstart",Q.throttled,!0),t.addEventListener("transitionstart",Q.throttled,!0))};return setTimeout(function(){var a,b={mutation:!0,hover:!0,cssanimation:!0,lazyClass:"lazyload",autosizesClass:"lazyautosizes",srcAttr:"data-src",srcsetAttr:"data-srcset",sizesAttr:"data-sizes",preloadAfterLoad:!1,onlyLargerSizes:!0};j=window.lazySizesConfig||{};for(a in b)a in j||(j[a]=b[a]);h=t.getElementsByClassName(j.lazyClass),i=t.getElementsByClassName(j.autosizesClass),addEventListener("scroll",Q.throttled,!1),(t.body||t.documentElement).addEventListener("scroll",Q.throttled,!0),t.addEventListener("touchmove",Q.throttled,!1),addEventListener("resize",Q.debounce,!1),addEventListener("resize",S,!1),/^i|^loade|c/.test(t.readyState)?V():t.addEventListener("DOMContentLoaded",V,!1),"complete"==t.readyState?U():(addEventListener("load",U,!1),t.addEventListener("readystatechange",Q.throttled,!1)),Q.throttled(),"lazySizesConfig"in window&&(window.lazySizesConfig=null)},t.body?9:99),{updateAllSizes:S,updateAllLazy:Q.throttled,unveilLazy:function(a){r(a,j.lazyClass)&&e(a)},updateSizes:g,updatePolyfill:a}}});