(doc, scrollElement = '.mdl-layout__content')
| 761 | let lazyimages: any[] = []; |
| 762 | |
| 763 | export function lazyload(doc, scrollElement = '.mdl-layout__content') { |
| 764 | /* lazyload.js (c) Lorenzo Giuliani |
| 765 | * MIT License (http://www.opensource.org/licenses/mit-license.html) |
| 766 | * |
| 767 | * expects a list of: |
| 768 | * `<img src="blank.gif" data-src="my_image.png" width="600" height="400" class="lazy">` |
| 769 | */ |
| 770 | // eslint-disable-next-line |
| 771 | function loadImage(el, fn) { |
| 772 | if (!j.$(el).is(':visible')) return false; |
| 773 | if (j.$(el).hasClass('lazyBack')) { |
| 774 | j.$(el) |
| 775 | .css('background-image', `url(${el.getAttribute('data-src')})`) |
| 776 | .removeClass('lazyBack'); |
| 777 | } else { |
| 778 | const img = new Image(); |
| 779 | const src = el.getAttribute('data-src'); |
| 780 | img.onload = function () { |
| 781 | if (el.parent) el.parent.replaceChild(img, el); |
| 782 | else el.src = src; |
| 783 | // eslint-disable-next-line |
| 784 | fn ? fn() : null; |
| 785 | }; |
| 786 | img.src = src; |
| 787 | } |
| 788 | } |
| 789 | |
| 790 | for (let i = 0; i < lazyimages.length; i++) { |
| 791 | $(lazyimages[i]).addClass('init'); |
| 792 | } |
| 793 | |
| 794 | lazyimages = []; |
| 795 | const query = doc.find('img.lazy.init, .lazyBack.init'); |
| 796 | const processScroll = function () { |
| 797 | for (let i = 0; i < lazyimages.length; i++) { |
| 798 | if (utils.elementInViewport(lazyimages[i], 600)) { |
| 799 | // eslint-disable-next-line |
| 800 | loadImage(lazyimages[i], function() { |
| 801 | lazyimages.splice(i, i); |
| 802 | }); |
| 803 | } |
| 804 | if (!$(lazyimages[i]).length) { |
| 805 | lazyimages.splice(i, i); |
| 806 | } |
| 807 | } |
| 808 | }; |
| 809 | // Array.prototype.slice.call is not callable under our lovely IE8 |
| 810 | for (let i = 0; i < query.length; i++) { |
| 811 | lazyimages.push(query[i]); |
| 812 | $(query[i]).removeClass('init'); |
| 813 | } |
| 814 | |
| 815 | processScroll(); |
| 816 | |
| 817 | if (!lazyloaded) { |
| 818 | lazyloaded = true; |
| 819 | doc.find(scrollElement).scroll(function () { |
| 820 | processScroll(); |
nothing calls this directly
no test coverage detected