UNPKG

ng-lazyload-image-angular-universal

Version:

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

62 lines 5.83 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { empty, Observable } from 'rxjs'; import { sampleTime, share, startWith } from 'rxjs/operators'; import { isWindowDefined } from '../util'; /** @type {?} */ const scrollListeners = new WeakMap(); /** * @param {?} obs * @param {?=} scheduler * @return {?} */ export function sampleObservable(obs, scheduler) { return obs.pipe(sampleTime(100, scheduler), share(), startWith('')); } // Only create one scroll listener per target and share the observable. // Typical, there will only be one observable per application /** @type {?} */ export const getScrollListener = (/** * @param {?} scrollTarget * @return {?} */ (scrollTarget) => { if (!scrollTarget || typeof scrollTarget.addEventListener !== 'function') { if (isWindowDefined()) { console.warn('`addEventListener` on ' + scrollTarget + ' (scrollTarget) is not a function. Skipping this target'); } return empty(); } if (scrollListeners.has(scrollTarget)) { return scrollListeners.get(scrollTarget); } /** @type {?} */ const srollEvent = Observable.create((/** * @param {?} observer * @return {?} */ observer => { /** @type {?} */ const eventName = 'scroll'; /** @type {?} */ const handler = (/** * @param {?} event * @return {?} */ event => observer.next(event)); /** @type {?} */ const options = { passive: true, capture: false }; scrollTarget.addEventListener(eventName, handler, options); return (/** * @return {?} */ () => scrollTarget.removeEventListener(eventName, handler, options)); })); /** @type {?} */ const listener = sampleObservable(srollEvent); scrollListeners.set(scrollTarget, listener); return listener; }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nyb2xsLWxpc3RlbmVyLmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmctbGF6eWxvYWQtaW1hZ2UtYW5ndWxhci11bml2ZXJzYWwvIiwic291cmNlcyI6WyJsaWIvc2Nyb2xsLXByZXNldC9zY3JvbGwtbGlzdGVuZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxTQUFTLENBQUM7O01BRXBDLGVBQWUsR0FBRyxJQUFJLE9BQU8sRUFBd0I7Ozs7OztBQUUzRCxNQUFNLFVBQVUsZ0JBQWdCLENBQUMsR0FBb0IsRUFBRSxTQUFlO0lBQ3BFLE9BQU8sR0FBRyxDQUFDLElBQUksQ0FDYixVQUFVLENBQUMsR0FBRyxFQUFFLFNBQVMsQ0FBQyxFQUMxQixLQUFLLEVBQUUsRUFDUCxTQUFTLENBQUMsRUFBRSxDQUFDLENBQ2QsQ0FBQztBQUNKLENBQUM7Ozs7QUFJRCxNQUFNLE9BQU8saUJBQWlCOzs7O0FBQUcsQ0FBQyxZQUFZLEVBQThCLEVBQUU7SUFDNUUsSUFBSSxDQUFDLFlBQVksSUFBSSxPQUFPLFlBQVksQ0FBQyxnQkFBZ0IsS0FBSyxVQUFVLEVBQUU7UUFDeEUsSUFBSSxlQUFlLEVBQUUsRUFBRTtZQUNyQixPQUFPLENBQUMsSUFBSSxDQUFDLHdCQUF3QixHQUFHLFlBQVksR0FBRyx5REFBeUQsQ0FBQyxDQUFDO1NBQ25IO1FBQ0QsT0FBTyxLQUFLLEVBQUUsQ0FBQztLQUNoQjtJQUNELElBQUksZUFBZSxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsRUFBRTtRQUNyQyxPQUFPLGVBQWUsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUM7S0FDMUM7O1VBRUssVUFBVSxHQUFHLFVBQVUsQ0FBQyxNQUFNOzs7O0lBQUMsUUFBUSxDQUFDLEVBQUU7O2NBQ3hDLFNBQVMsR0FBRyxRQUFROztjQUNwQixPQUFPOzs7O1FBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBOztjQUN2QyxPQUFPLEdBQUcsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUU7UUFDakQsWUFBWSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDM0Q7OztRQUFPLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxFQUFDO0lBQzdFLENBQUMsRUFBQzs7VUFFSSxRQUFRLEdBQUcsZ0JBQWdCLENBQUMsVUFBVSxDQUFDO0lBQzdDLGVBQWUsQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQzVDLE9BQU8sUUFBUSxDQUFDO0FBQ2xCLENBQUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGVtcHR5LCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBzYW1wbGVUaW1lLCBzaGFyZSwgc3RhcnRXaXRoIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgaXNXaW5kb3dEZWZpbmVkIH0gZnJvbSAnLi4vdXRpbCc7XG5cbmNvbnN0IHNjcm9sbExpc3RlbmVycyA9IG5ldyBXZWFrTWFwPGFueSwgT2JzZXJ2YWJsZTxhbnk+PigpO1xuXG5leHBvcnQgZnVuY3Rpb24gc2FtcGxlT2JzZXJ2YWJsZShvYnM6IE9ic2VydmFibGU8YW55Piwgc2NoZWR1bGVyPzogYW55KSB7XG4gIHJldHVybiBvYnMucGlwZShcbiAgICBzYW1wbGVUaW1lKDEwMCwgc2NoZWR1bGVyKSxcbiAgICBzaGFyZSgpLFxuICAgIHN0YXJ0V2l0aCgnJylcbiAgKTtcbn1cblxuLy8gT25seSBjcmVhdGUgb25lIHNjcm9sbCBsaXN0ZW5lciBwZXIgdGFyZ2V0IGFuZCBzaGFyZSB0aGUgb2JzZXJ2YWJsZS5cbi8vIFR5cGljYWwsIHRoZXJlIHdpbGwgb25seSBiZSBvbmUgb2JzZXJ2YWJsZSBwZXIgYXBwbGljYXRpb25cbmV4cG9ydCBjb25zdCBnZXRTY3JvbGxMaXN0ZW5lciA9IChzY3JvbGxUYXJnZXQpOiBPYnNlcnZhYmxlPEV2ZW50IHwgU3RyaW5nPiA9PiB7XG4gIGlmICghc2Nyb2xsVGFyZ2V0IHx8IHR5cGVvZiBzY3JvbGxUYXJnZXQuYWRkRXZlbnRMaXN0ZW5lciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIGlmIChpc1dpbmRvd0RlZmluZWQoKSkge1xuICAgICAgY29uc29sZS53YXJuKCdgYWRkRXZlbnRMaXN0ZW5lcmAgb24gJyArIHNjcm9sbFRhcmdldCArICcgKHNjcm9sbFRhcmdldCkgaXMgbm90IGEgZnVuY3Rpb24uIFNraXBwaW5nIHRoaXMgdGFyZ2V0Jyk7XG4gICAgfVxuICAgIHJldHVybiBlbXB0eSgpO1xuICB9XG4gIGlmIChzY3JvbGxMaXN0ZW5lcnMuaGFzKHNjcm9sbFRhcmdldCkpIHtcbiAgICByZXR1cm4gc2Nyb2xsTGlzdGVuZXJzLmdldChzY3JvbGxUYXJnZXQpO1xuICB9XG5cbiAgY29uc3Qgc3JvbGxFdmVudCA9IE9ic2VydmFibGUuY3JlYXRlKG9ic2VydmVyID0+IHtcbiAgICBjb25zdCBldmVudE5hbWUgPSAnc2Nyb2xsJztcbiAgICBjb25zdCBoYW5kbGVyID0gZXZlbnQgPT4gb2JzZXJ2ZXIubmV4dChldmVudCk7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHsgcGFzc2l2ZTogdHJ1ZSwgY2FwdHVyZTogZmFsc2UgfTtcbiAgICBzY3JvbGxUYXJnZXQuYWRkRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIGhhbmRsZXIsIG9wdGlvbnMpO1xuICAgIHJldHVybiAoKSA9PiBzY3JvbGxUYXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIGhhbmRsZXIsIG9wdGlvbnMpO1xuICB9KTtcblxuICBjb25zdCBsaXN0ZW5lciA9IHNhbXBsZU9ic2VydmFibGUoc3JvbGxFdmVudCk7XG4gIHNjcm9sbExpc3RlbmVycy5zZXQoc2Nyb2xsVGFyZ2V0LCBsaXN0ZW5lcik7XG4gIHJldHVybiBsaXN0ZW5lcjtcbn07XG4iXX0=