ng-lazyload-image-angular-universal
Version:
This is an extension from ng-lazyload-image, made available for Angular Universal.
62 lines • 5.83 kB
JavaScript
/**
* @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=