getlazy
Version:
Lightweight lazy loading content script.
9 lines • 2.8 kB
JavaScript
!function(e,s){"function"==typeof define&&define.amd?define(["lend","occurrence"],s):"object"==typeof exports?module.exports=s(require("lend"),require("occurrence")):e.getLazy=s(e.lend,e.occurrence)}(this,function(e,s){/*!
* getLazy v0.1: Lightweight lazy loading content script.
* (c) 2016 Erny Sans
*
* http://github.com/ernysans/getlazy
* http://erny.co
* MIT License
*/
;function t(){var e,s=document.querySelectorAll("."+g.successClass);for(e=0;e<s.length;e++)r(s[e])}function r(e){e&&e.classList.remove(g.successClass),n(e)}function a(){var e,s=document.querySelectorAll(".getLazy[data-src]:not(.getLazy__loaded)");for(e=0;e<s.length;e++)n(s[e])}function n(e){if(e)var s={};s.base=e.getAttribute(f.base),s.hd=e.getAttribute(f.hd),s.xl=e.getAttribute(f.xl),s.lg=e.getAttribute(f.lg),s.md=e.getAttribute(f.md),s.sm=e.getAttribute(f.sm),s.xs=e.getAttribute(f.xs),s.type=e.getAttribute(f.type);var t=c(s),r=d(s,t),a=e.getBoundingClientRect(),n=a.top,o=Math.max(window.innerHeight||document.documentElement.clientHeight||0),i=o+o/2;!e.classList.contains(g.successClass)&&i>=n&&l(r,s.type,e)}function c(e){return"hd"==b||"retina"==b?e.xl&&"xl"==x?"hd":e.lg&&"lg"==x?"xl":e.md&&"md"==x?"lg":e.sm&&"sm"==x?"md":e.xs&&"xs"==x?"sm":"base":"sd"==b?e.xl&&"xl"==x?"xl":e.lg&&"lg"==x?"lg":e.md&&"md"==x?"md":e.sm&&"sm"==x?"sm":e.xs&&"xs"==x?"xs":"base":"base"}function d(e,s){return"hd"==s?e.hd:"xl"==s?e.xl:"lg"==s?e.lg:"md"==s?e.md:"sm"==s?e.sm:"xs"==s?e.xs:e.base}function l(e,s,t){if("background"==s&&e)try{t.style.backgroundImage='url("'+e+'")',t.classList.add(g.successClass,i.successClass),t.classList.remove(g.errorClass,i.errorClass)}catch(r){t.classList.add(g.errorClass,i.errorClass)}else if(!s&&e)try{t.setAttribute("src",e),t.classList.add(g.successClass,i.successClass),t.classList.remove(g.errorClass,i.errorClass)}catch(r){t.classList.add(g.errorClass,i.errorClass)}}function o(e){u&&(i=s.mergeArray(m,e||{}),window.addEventListener("DOMContentLoaded",function(e){e.preventDefault(),a(),window.addEventListener("load",a(),!1),window.addEventListener("DOMSubtreeModified",C,!1),window.addEventListener("scroll",C,!1),window.addEventListener("resize",y,!1)},!1))}var i,u=!!document.querySelector&&!!window.addEventListener,m={successClass:null,errorClass:null},g={};g.selector=".getLazy",g.errorClass="getLazy__error",g.successClass="getLazy__loaded";var f={};f.current="src",f.base="data-src",f.hd="data-src-hd",f.xl="data-src-xl",f.lg="data-src-lg",f.md="data-src-md",f.sm="data-src-sm",f.xs="data-src-xs",f.type="data-src-type";var x=e.screenSize("bootstrap"),b=e.screenDensity(),y=s.debounce(function(s){s.preventDefault(),x=e.screenSize("bootstrap"),b=e.screenDensity(),t()},1e3),C=s.debounce(function(e){e.preventDefault(),a()},20);return o});