ng-lazyload-image-angular-universal
Version:
This is an extension from ng-lazyload-image, made available for Angular Universal.
68 lines • 5.81 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { empty, Observable, Subject } from 'rxjs';
import { filter } from 'rxjs/operators';
import { isWindowDefined } from '../util';
/** @type {?} */
const observers = new WeakMap();
/** @type {?} */
const intersectionSubject = new Subject();
/**
* @param {?} entrys
* @return {?}
*/
function loadingCallback(entrys) {
entrys.forEach((/**
* @param {?} entry
* @return {?}
*/
entry => intersectionSubject.next(entry)));
}
/** @type {?} */
export const getIntersectionObserver = (/**
* @param {?} attributes
* @return {?}
*/
(attributes) => {
if (!attributes.scrollContainer && !isWindowDefined()) {
return empty();
}
/** @type {?} */
const options = {
root: attributes.scrollContainer
};
if (attributes.offset) {
options.rootMargin = `${attributes.offset}px`;
}
/** @type {?} */
const scrollContainer = attributes.scrollContainer || window;
/** @type {?} */
let observer = observers.get(scrollContainer);
if (!observer) {
observer = new IntersectionObserver(loadingCallback, options);
observers.set(scrollContainer, observer);
}
observer.observe(attributes.element);
return Observable.create((/**
* @param {?} obs
* @return {?}
*/
obs => {
/** @type {?} */
const subscription = intersectionSubject.pipe(filter((/**
* @param {?} entry
* @return {?}
*/
entry => entry.target === attributes.element))).subscribe(obs);
return (/**
* @return {?}
*/
() => {
subscription.unsubscribe();
observer.unobserve(attributes.element);
});
}));
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJzZWN0aW9uLWxpc3RlbmVyLmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmctbGF6eWxvYWQtaW1hZ2UtYW5ndWxhci11bml2ZXJzYWwvIiwic291cmNlcyI6WyJsaWIvaW50ZXJzZWN0aW9uLW9ic2VydmVyLXByZXNldC9pbnRlcnNlY3Rpb24tbGlzdGVuZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNsRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLFNBQVMsQ0FBQzs7TUFPcEMsU0FBUyxHQUFHLElBQUksT0FBTyxFQUFzQzs7TUFFN0QsbUJBQW1CLEdBQUcsSUFBSSxPQUFPLEVBQTZCOzs7OztBQUVwRSxTQUFTLGVBQWUsQ0FBQyxNQUFtQztJQUMxRCxNQUFNLENBQUMsT0FBTzs7OztJQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFDLENBQUM7QUFDM0QsQ0FBQzs7QUFFRCxNQUFNLE9BQU8sdUJBQXVCOzs7O0FBQUcsQ0FBQyxVQUFzQixFQUFFLEVBQUU7SUFDaEUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxlQUFlLElBQUksQ0FBQyxlQUFlLEVBQUUsRUFBRTtRQUNyRCxPQUFPLEtBQUssRUFBRSxDQUFDO0tBQ2hCOztVQUVLLE9BQU8sR0FBb0I7UUFDL0IsSUFBSSxFQUFFLFVBQVUsQ0FBQyxlQUFlO0tBQ2pDO0lBQ0QsSUFBSSxVQUFVLENBQUMsTUFBTSxFQUFFO1FBQ3JCLE9BQU8sQ0FBQyxVQUFVLEdBQUcsR0FBRyxVQUFVLENBQUMsTUFBTSxJQUFJLENBQUM7S0FDL0M7O1VBRUssZUFBZSxHQUFHLFVBQVUsQ0FBQyxlQUFlLElBQUksTUFBTTs7UUFFeEQsUUFBUSxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDO0lBRTdDLElBQUksQ0FBQyxRQUFRLEVBQUU7UUFDYixRQUFRLEdBQUcsSUFBSSxvQkFBb0IsQ0FBQyxlQUFlLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDOUQsU0FBUyxDQUFDLEdBQUcsQ0FBQyxlQUFlLEVBQUUsUUFBUSxDQUFDLENBQUM7S0FDMUM7SUFFRCxRQUFRLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUVyQyxPQUFPLFVBQVUsQ0FBQyxNQUFNOzs7O0lBQUMsR0FBRyxDQUFDLEVBQUU7O2NBQ3ZCLFlBQVksR0FBRyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsTUFBTTs7OztRQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxVQUFVLENBQUMsT0FBTyxFQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDO1FBQ2xIOzs7UUFBTyxHQUFHLEVBQUU7WUFDVixZQUFZLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDM0IsUUFBUSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDekMsQ0FBQyxFQUFDO0lBQ0osQ0FBQyxFQUFDLENBQUM7QUFDTCxDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBlbXB0eSwgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlsdGVyIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQXR0cmlidXRlcyB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IGlzV2luZG93RGVmaW5lZCB9IGZyb20gJy4uL3V0aWwnO1xuXG50eXBlIE9ic2VydmVyT3B0aW9ucyA9IHtcbiAgcm9vdD86IEVsZW1lbnQ7XG4gIHJvb3RNYXJnaW4/OiBzdHJpbmc7XG59O1xuXG5jb25zdCBvYnNlcnZlcnMgPSBuZXcgV2Vha01hcDxFbGVtZW50IHwge30sIEludGVyc2VjdGlvbk9ic2VydmVyPigpO1xuXG5jb25zdCBpbnRlcnNlY3Rpb25TdWJqZWN0ID0gbmV3IFN1YmplY3Q8SW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbnRyeT4oKTtcblxuZnVuY3Rpb24gbG9hZGluZ0NhbGxiYWNrKGVudHJ5czogSW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbnRyeVtdKSB7XG4gIGVudHJ5cy5mb3JFYWNoKGVudHJ5ID0+IGludGVyc2VjdGlvblN1YmplY3QubmV4dChlbnRyeSkpO1xufVxuXG5leHBvcnQgY29uc3QgZ2V0SW50ZXJzZWN0aW9uT2JzZXJ2ZXIgPSAoYXR0cmlidXRlczogQXR0cmlidXRlcykgPT4ge1xuICBpZiAoIWF0dHJpYnV0ZXMuc2Nyb2xsQ29udGFpbmVyICYmICFpc1dpbmRvd0RlZmluZWQoKSkge1xuICAgIHJldHVybiBlbXB0eSgpO1xuICB9XG5cbiAgY29uc3Qgb3B0aW9uczogT2JzZXJ2ZXJPcHRpb25zID0ge1xuICAgIHJvb3Q6IGF0dHJpYnV0ZXMuc2Nyb2xsQ29udGFpbmVyXG4gIH07XG4gIGlmIChhdHRyaWJ1dGVzLm9mZnNldCkge1xuICAgIG9wdGlvbnMucm9vdE1hcmdpbiA9IGAke2F0dHJpYnV0ZXMub2Zmc2V0fXB4YDtcbiAgfVxuXG4gIGNvbnN0IHNjcm9sbENvbnRhaW5lciA9IGF0dHJpYnV0ZXMuc2Nyb2xsQ29udGFpbmVyIHx8IHdpbmRvdztcblxuICBsZXQgb2JzZXJ2ZXIgPSBvYnNlcnZlcnMuZ2V0KHNjcm9sbENvbnRhaW5lcik7XG5cbiAgaWYgKCFvYnNlcnZlcikge1xuICAgIG9ic2VydmVyID0gbmV3IEludGVyc2VjdGlvbk9ic2VydmVyKGxvYWRpbmdDYWxsYmFjaywgb3B0aW9ucyk7XG4gICAgb2JzZXJ2ZXJzLnNldChzY3JvbGxDb250YWluZXIsIG9ic2VydmVyKTtcbiAgfVxuXG4gIG9ic2VydmVyLm9ic2VydmUoYXR0cmlidXRlcy5lbGVtZW50KTtcblxuICByZXR1cm4gT2JzZXJ2YWJsZS5jcmVhdGUob2JzID0+IHtcbiAgICBjb25zdCBzdWJzY3JpcHRpb24gPSBpbnRlcnNlY3Rpb25TdWJqZWN0LnBpcGUoZmlsdGVyKGVudHJ5ID0+IGVudHJ5LnRhcmdldCA9PT0gYXR0cmlidXRlcy5lbGVtZW50KSkuc3Vic2NyaWJlKG9icyk7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgb2JzZXJ2ZXIudW5vYnNlcnZlKGF0dHJpYnV0ZXMuZWxlbWVudCk7XG4gICAgfTtcbiAgfSk7XG59O1xuIl19