1
0
Fork 0
mirror of https://github.com/jellyfin/jellyfin-web synced 2025-03-30 19:56:21 +00:00

Migrate lazyloader-intesctionobserver to ES6

This commit is contained in:
MrTimscampi 2020-04-12 00:23:16 +02:00
parent 343989f610
commit e97c659dc0
4 changed files with 49 additions and 59 deletions

View file

@ -99,7 +99,8 @@
"src/scripts/settings/webSettings.js", "src/scripts/settings/webSettings.js",
"src/scripts/dfnshelper.js", "src/scripts/dfnshelper.js",
"src/scripts/imagehelper.js", "src/scripts/imagehelper.js",
"src/scripts/inputManager.js" "src/scripts/inputManager.js",
"src/components/lazyloader/lazyloader-intersectionobserver.js"
], ],
"plugins": [ "plugins": [
"@babel/plugin-transform-modules-amd" "@babel/plugin-transform-modules-amd"

View file

@ -36,7 +36,6 @@ define(['lazyLoader', 'imageFetcher', 'layoutManager', 'browser', 'appSettings',
} }
function lazyChildren(elem) { function lazyChildren(elem) {
lazyLoader.lazyChildren(elem, fillImage); lazyLoader.lazyChildren(elem, fillImage);
} }

View file

@ -1,5 +0,0 @@
.lazy {
/* In edge, intersection observer will not fire on 0px sized elements */
min-width: 0.1em;
min-height: 0.1em;
}

View file

@ -1,76 +1,71 @@
define(['require', 'browser'], function (require, browser) { import require from 'require';
'use strict'; import browser from 'browser';
/* eslint-disable indent */
function LazyLoader(options) { export class LazyLoader {
constructor(options) {
this.options = options;
this.observer;
}
this.options = options; createObserver() {
} const callback = this.options.callback;
if (browser.edge) { const observer = new IntersectionObserver(
require(['css!./lazyedgehack']); (entries, observer) => {
} entries.forEach(entry => {
callback(entry);
},
{rootMargin: "50%"});
});
LazyLoader.prototype.createObserver = function () { this.observer = observer;
var callback = this.options.callback; }
var observer = new IntersectionObserver( addElements(elements) {
(entries, observer) => { let observer = this.observer;
entries.forEach(entry => {
callback(entry); if (!observer) {
}, this.createObserver();
{rootMargin: "50%"}); observer = this.observer;
}
Array.from(elements).forEach(element => {
observer.observe(element);
}); });
this.observer = observer;
};
LazyLoader.prototype.addElements = function (elements) {
var observer = this.observer;
if (!observer) {
this.createObserver();
observer = this.observer;
} }
this.elementCount = (this.elementCount || 0) + elements.length; destroyObserver(elements) {
const observer = this.observer;
for (var i = 0, length = elements.length; i < length; i++) { if (observer) {
observer.observe(elements[i]); observer.disconnect();
this.observer = null;
}
} }
};
LazyLoader.prototype.destroyObserver = function (elements) { destroy(elements) {
this.destroyObserver();
var observer = this.observer; this.options = null;
if (observer) {
observer.disconnect();
this.observer = null;
} }
}; }
LazyLoader.prototype.destroy = function (elements) {
this.destroyObserver();
this.options = null;
};
function unveilElements(elements, root, callback) { function unveilElements(elements, root, callback) {
if (!elements.length) { if (!elements.length) {
return; return;
} }
var lazyLoader = new LazyLoader({ const lazyLoader = new LazyLoader({
callback: callback callback: callback
}); });
lazyLoader.addElements(elements); lazyLoader.addElements(elements);
} }
LazyLoader.lazyChildren = function (elem, callback) { export function lazyChildren(elem, callback) {
unveilElements(elem.getElementsByClassName('lazy'), elem, callback); unveilElements(elem.getElementsByClassName('lazy'), elem, callback);
}; }
return LazyLoader; /* eslint-enable indent */
}); export default {
LazyLoader: LazyLoader,
lazyChildren: lazyChildren
};