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,19 +1,17 @@
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.options = options;
this.observer;
} }
if (browser.edge) { createObserver() {
require(['css!./lazyedgehack']); const callback = this.options.callback;
}
LazyLoader.prototype.createObserver = function () { const observer = new IntersectionObserver(
var callback = this.options.callback;
var observer = new IntersectionObserver(
(entries, observer) => { (entries, observer) => {
entries.forEach(entry => { entries.forEach(entry => {
callback(entry); callback(entry);
@ -22,55 +20,52 @@ define(['require', 'browser'], function (require, browser) {
}); });
this.observer = observer; this.observer = observer;
}; }
LazyLoader.prototype.addElements = function (elements) { addElements(elements) {
let observer = this.observer;
var observer = this.observer;
if (!observer) { if (!observer) {
this.createObserver(); this.createObserver();
observer = this.observer; observer = this.observer;
} }
this.elementCount = (this.elementCount || 0) + elements.length; Array.from(elements).forEach(element => {
observer.observe(element);
for (var i = 0, length = elements.length; i < length; i++) { });
observer.observe(elements[i]);
} }
};
LazyLoader.prototype.destroyObserver = function (elements) { destroyObserver(elements) {
const observer = this.observer;
var observer = this.observer;
if (observer) { if (observer) {
observer.disconnect(); observer.disconnect();
this.observer = null; this.observer = null;
} }
}; }
LazyLoader.prototype.destroy = function (elements) {
destroy(elements) {
this.destroyObserver(); this.destroyObserver();
this.options = null; 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
};