UNPKG

ng-lazyload-image-angular-universal

Version:

This is an extension from ng-lazyload-image, made available for Angular Universal.

68 lines 5.81 kB
/** * @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