ngx-infinite-scroll
Version:
[](https://travis-ci.org/orizens/ngx-infinite-scroll) [](#backers) [![Sponso
1 lines • 35.5 kB
Source Map (JSON)
{"version":3,"file":"ngx-infinite-scroll.mjs","sources":["../../../projects/ngx-infinite-scroll/src/lib/services/ngx-ins-utils.ts","../../../projects/ngx-infinite-scroll/src/lib/services/axis-resolver.ts","../../../projects/ngx-infinite-scroll/src/lib/services/event-trigger.ts","../../../projects/ngx-infinite-scroll/src/lib/services/position-resolver.ts","../../../projects/ngx-infinite-scroll/src/lib/services/scroll-resolver.ts","../../../projects/ngx-infinite-scroll/src/lib/services/scroll-state.ts","../../../projects/ngx-infinite-scroll/src/lib/services/scroll-register.ts","../../../projects/ngx-infinite-scroll/src/lib/ngx-infinite-scroll.directive.ts","../../../projects/ngx-infinite-scroll/src/lib/ngx-infinite-scroll.module.ts","../../../projects/ngx-infinite-scroll/src/public-api.ts","../../../projects/ngx-infinite-scroll/src/ngx-infinite-scroll.ts"],"sourcesContent":["import { ElementRef, SimpleChange } from '@angular/core';\n\nexport function resolveContainerElement(\n selector: string | any,\n scrollWindow: boolean,\n defaultElement: ElementRef<any>,\n fromRoot: boolean\n): any {\n const hasWindow = window && !!window.document && window.document.documentElement;\n let container = hasWindow && scrollWindow ? window : defaultElement;\n if (selector) {\n const containerIsString =\n selector && hasWindow && typeof selector === 'string';\n container = containerIsString\n ? findElement(selector, defaultElement.nativeElement, fromRoot)\n : selector;\n if (!container) {\n throw new Error('ngx-infinite-scroll {resolveContainerElement()}: selector for');\n }\n }\n return container;\n}\n\nexport function findElement(\n selector: string | any,\n customRoot: ElementRef | any,\n fromRoot: boolean\n) {\n const rootEl = fromRoot ? window.document : customRoot;\n return rootEl.querySelector(selector);\n}\n\nexport function inputPropChanged(prop: SimpleChange): boolean {\n return prop && !prop.firstChange;\n}\n\nexport function hasWindowDefined(): boolean {\n return typeof window !== 'undefined';\n}\n","const VerticalProps = {\n clientHeight: \"clientHeight\",\n offsetHeight: \"offsetHeight\",\n scrollHeight: \"scrollHeight\",\n pageYOffset: \"pageYOffset\",\n offsetTop: \"offsetTop\",\n scrollTop: \"scrollTop\",\n top: \"top\"\n};\n\nconst HorizontalProps = {\n clientHeight: \"clientWidth\",\n offsetHeight: \"offsetWidth\",\n scrollHeight: \"scrollWidth\",\n pageYOffset: \"pageXOffset\",\n offsetTop: \"offsetLeft\",\n scrollTop: \"scrollLeft\",\n top: \"left\"\n};\n\nexport class AxisResolver {\n private propsMap: any;\n\n constructor(private vertical: boolean = true) {\n this.propsMap = vertical ? VerticalProps : HorizontalProps;\n }\n clientHeightKey() {\n return this.propsMap.clientHeight;\n }\n offsetHeightKey() {\n return this.propsMap.offsetHeight;\n }\n scrollHeightKey() {\n return this.propsMap.scrollHeight;\n }\n pageYOffsetKey() {\n return this.propsMap.pageYOffset;\n }\n offsetTopKey() {\n return this.propsMap.offsetTop;\n }\n scrollTopKey() {\n return this.propsMap.scrollTop;\n }\n topKey() {\n return this.propsMap.top;\n }\n}\n","import { IInfiniteScrollEvent, IPositionStats } from '../../models';\n\nexport interface IScrollerProps extends IDistanceRange {\n container: IPositionStats;\n alwaysCallback: boolean;\n disabled: boolean;\n}\n\nexport interface ITriggerEvents {\n down: (event: any) => any;\n up: (event: any) => any;\n}\n\nexport interface IDistanceRange {\n down: number;\n up: number;\n}\n\nexport interface IScrollConfig {\n alwaysCallback: boolean;\n shouldFireScrollEvent: boolean;\n}\n\nexport function shouldTriggerEvents(\n alwaysCallback: boolean,\n shouldFireScrollEvent: boolean,\n isTriggeredCurrentTotal: boolean\n) {\n if (alwaysCallback && shouldFireScrollEvent) {\n return true;\n }\n if (!isTriggeredCurrentTotal && shouldFireScrollEvent) {\n return true;\n }\n return false;\n}\n","import { ElementRef } from '@angular/core';\n\nimport {\n ContainerRef,\n IPositionElements,\n IPositionStats,\n IResolver,\n} from '../../models';\nimport { AxisResolver } from './axis-resolver';\n\nexport function createResolver({\n windowElement,\n axis,\n}: IPositionElements): IResolver {\n return createResolverWithContainer(\n { axis, isWindow: isElementWindow(windowElement) },\n windowElement\n );\n}\n\nexport function createResolverWithContainer(\n resolver: any,\n windowElement: ContainerRef\n) {\n const container =\n resolver.isWindow || (windowElement && !windowElement.nativeElement)\n ? windowElement\n : windowElement.nativeElement;\n return { ...resolver, container };\n}\n\nexport function isElementWindow(windowElement: ContainerRef): boolean {\n const isWindow = ['Window', 'global'].some((obj: string) =>\n Object.prototype.toString.call(windowElement).includes(obj)\n );\n return isWindow;\n}\n\nexport function getDocumentElement(\n isContainerWindow: boolean,\n windowElement: any\n) {\n return isContainerWindow ? windowElement.document.documentElement : null;\n}\n\nexport function calculatePoints(element: ElementRef, resolver: IResolver) {\n const height = extractHeightForElement(resolver);\n return resolver.isWindow\n ? calculatePointsForWindow(height, element, resolver)\n : calculatePointsForElement(height, element, resolver);\n}\n\nexport function calculatePointsForWindow(\n height: number,\n element: ElementRef,\n resolver: IResolver\n): IPositionStats {\n const { axis, container, isWindow } = resolver;\n const { offsetHeightKey, clientHeightKey } = extractHeightPropKeys(axis);\n // scrolled until now / current y point\n const scrolled =\n height +\n getElementPageYOffset(\n getDocumentElement(isWindow, container),\n axis,\n isWindow\n );\n // total height / most bottom y point\n const nativeElementHeight = getElementHeight(\n element.nativeElement,\n isWindow,\n offsetHeightKey,\n clientHeightKey\n );\n const totalToScroll =\n getElementOffsetTop(element.nativeElement, axis, isWindow) +\n nativeElementHeight;\n return { height, scrolled, totalToScroll, isWindow };\n}\n\nexport function calculatePointsForElement(\n height: number,\n element: ElementRef,\n resolver: IResolver\n): IPositionStats {\n const { axis, container } = resolver;\n // perhaps use container.offsetTop instead of 'scrollTop'\n const scrolled = container[axis.scrollTopKey()];\n const totalToScroll = container[axis.scrollHeightKey()];\n return { height, scrolled, totalToScroll, isWindow: false };\n}\n\nexport function extractHeightPropKeys(axis: AxisResolver) {\n return {\n offsetHeightKey: axis.offsetHeightKey(),\n clientHeightKey: axis.clientHeightKey(),\n };\n}\n\nexport function extractHeightForElement({\n container,\n isWindow,\n axis,\n}: IResolver) {\n const { offsetHeightKey, clientHeightKey } = extractHeightPropKeys(axis);\n return getElementHeight(\n container,\n isWindow,\n offsetHeightKey,\n clientHeightKey\n );\n}\nexport function getElementHeight(\n elem: any,\n isWindow: boolean,\n offsetHeightKey: string,\n clientHeightKey: string\n) {\n if (isNaN(elem[offsetHeightKey])) {\n const docElem = getDocumentElement(isWindow, elem);\n return docElem ? docElem[clientHeightKey] : 0;\n } else {\n return elem[offsetHeightKey];\n }\n}\n\nexport function getElementOffsetTop(\n elem: ContainerRef,\n axis: AxisResolver,\n isWindow: boolean\n) {\n const topKey = axis.topKey();\n // elem = elem.nativeElement;\n if (!elem.getBoundingClientRect) {\n // || elem.css('none')) {\n return;\n }\n return (\n elem.getBoundingClientRect()[topKey] +\n getElementPageYOffset(elem, axis, isWindow)\n );\n}\n\nexport function getElementPageYOffset(\n elem: ContainerRef,\n axis: AxisResolver,\n isWindow: boolean\n) {\n const pageYOffset = axis.pageYOffsetKey();\n const scrollTop = axis.scrollTopKey();\n const offsetTop = axis.offsetTopKey();\n\n if (isNaN(window.pageYOffset)) {\n return getDocumentElement(isWindow, elem)[scrollTop];\n } else if (elem.ownerDocument) {\n return elem.ownerDocument.defaultView[pageYOffset];\n } else {\n return elem[offsetTop];\n }\n}\n","import { IPositionStats, IScrollState, IScrollerDistance } from '../../models';\n\nexport function shouldFireScrollEvent(\n container: IPositionStats,\n distance: IScrollerDistance = { down: 0, up: 0 },\n scrollingDown: boolean\n) {\n let remaining: number;\n let containerBreakpoint: number;\n if (container.totalToScroll <= 0) {\n return false;\n }\n\n const scrolledUntilNow = container.isWindow\n ? container.scrolled\n : container.height + container.scrolled;\n if (scrollingDown) {\n remaining =\n (container.totalToScroll - scrolledUntilNow) / container.totalToScroll;\n const distanceDown = distance?.down ? distance.down : 0;\n containerBreakpoint = distanceDown / 10;\n } else {\n const totalHiddenContentHeight =\n container.scrolled + (container.totalToScroll - scrolledUntilNow);\n remaining = container.scrolled / totalHiddenContentHeight;\n const distanceUp = distance?.up ? distance.up : 0;\n containerBreakpoint = distanceUp / 10;\n }\n\n const shouldFireEvent: boolean = remaining <= containerBreakpoint;\n return shouldFireEvent;\n}\n\nexport function isScrollingDownwards(\n lastScrollPosition: number,\n container: IPositionStats\n) {\n return lastScrollPosition < container.scrolled;\n}\n\nexport function getScrollStats(\n lastScrollPosition: number,\n container: IPositionStats,\n distance: IScrollerDistance\n) {\n const scrollDown = isScrollingDownwards(lastScrollPosition, container);\n return {\n fire: shouldFireScrollEvent(container, distance, scrollDown),\n scrollDown,\n };\n}\n\nexport function updateScrollPosition(\n position: number,\n scrollState: IScrollState\n) {\n return (scrollState.lastScrollPosition = position);\n}\n\nexport function updateTotalToScroll(\n totalToScroll: number,\n scrollState: IScrollState\n) {\n if (scrollState.lastTotalToScroll !== totalToScroll) {\n scrollState.lastTotalToScroll = scrollState.totalToScroll;\n scrollState.totalToScroll = totalToScroll;\n }\n}\n\nexport function isSameTotalToScroll(scrollState: IScrollState) {\n return scrollState.totalToScroll === scrollState.lastTotalToScroll;\n}\n\nexport function updateTriggeredFlag(\n scroll: number,\n scrollState: IScrollState,\n triggered: boolean,\n isScrollingDown: boolean\n) {\n if (isScrollingDown) {\n scrollState.triggered.down = scroll;\n } else {\n scrollState.triggered.up = scroll;\n }\n}\n\nexport function isTriggeredScroll(\n totalToScroll: number,\n scrollState: IScrollState,\n isScrollingDown: boolean\n) {\n return isScrollingDown\n ? scrollState.triggered.down === totalToScroll\n : scrollState.triggered.up === totalToScroll;\n}\n\nexport function updateScrollState(\n scrollState: IScrollState,\n scrolledUntilNow: number,\n totalToScroll: number\n) {\n updateScrollPosition(scrolledUntilNow, scrollState);\n updateTotalToScroll(totalToScroll, scrollState);\n // const isSameTotal = isSameTotalToScroll(scrollState);\n // if (!isSameTotal) {\n // updateTriggeredFlag(scrollState, false, isScrollingDown);\n // }\n}\n","import { IScrollState, IScrollerDistance } from '../../models';\n\nexport class ScrollState implements IScrollState {\n lastScrollPosition = 0;\n lastTotalToScroll = 0;\n totalToScroll = 0;\n triggered: IScrollerDistance = {\n down: 0,\n up: 0,\n };\n\n constructor(attrs: Partial<ScrollState>) {\n Object.assign(this, attrs);\n }\n\n updateScrollPosition(position: number) {\n return (this.lastScrollPosition = position);\n }\n\n updateTotalToScroll(totalToScroll: number) {\n if (this.lastTotalToScroll !== totalToScroll) {\n this.lastTotalToScroll = this.totalToScroll;\n this.totalToScroll = totalToScroll;\n }\n }\n\n updateScroll(scrolledUntilNow: number, totalToScroll: number) {\n this.updateScrollPosition(scrolledUntilNow);\n this.updateTotalToScroll(totalToScroll);\n }\n\n updateTriggeredFlag(scroll: number, isScrollingDown: boolean) {\n if (isScrollingDown) {\n this.triggered.down = scroll;\n } else {\n this.triggered.up = scroll;\n }\n }\n\n isTriggeredScroll(totalToScroll: number, isScrollingDown: boolean) {\n return isScrollingDown\n ? this.triggered.down === totalToScroll\n : this.triggered.up === totalToScroll;\n }\n}\n","import { Observable, of, fromEvent } from 'rxjs';\nimport { map, mergeMap, tap, throttleTime, filter } from 'rxjs/operators';\n\nimport * as Models from '../../models';\nimport { AxisResolver } from './axis-resolver';\nimport { shouldTriggerEvents } from './event-trigger';\nimport { resolveContainerElement } from './ngx-ins-utils';\nimport { calculatePoints, createResolver } from './position-resolver';\nimport * as ScrollResolver from './scroll-resolver';\nimport { ScrollState } from './scroll-state';\n\nexport function createScroller(config: Models.IScroller) {\n const { scrollContainer, scrollWindow, element, fromRoot } = config;\n const resolver = createResolver({\n axis: new AxisResolver(!config.horizontal),\n windowElement: resolveContainerElement(\n scrollContainer,\n scrollWindow,\n element,\n fromRoot\n ),\n });\n const scrollState = new ScrollState({\n totalToScroll: calculatePoints(element, resolver).totalToScroll,\n });\n const options: Models.IScrollRegisterConfig = {\n container: resolver.container,\n throttle: config.throttle,\n };\n const distance = {\n up: config.upDistance,\n down: config.downDistance,\n };\n return attachScrollEvent(options).pipe(\n mergeMap(() => of(calculatePoints(element, resolver))),\n map((positionStats: Models.IPositionStats) =>\n toInfiniteScrollParams(\n scrollState.lastScrollPosition,\n positionStats,\n distance\n )\n ),\n tap(({ stats }: Models.IScrollParams) =>\n scrollState.updateScroll(stats.scrolled, stats.totalToScroll)\n ),\n filter(\n ({ fire, scrollDown, stats: { totalToScroll } }: Models.IScrollParams) =>\n shouldTriggerEvents(\n config.alwaysCallback,\n fire,\n scrollState.isTriggeredScroll(totalToScroll, scrollDown)\n )\n ),\n tap(({ scrollDown, stats: { totalToScroll } }: Models.IScrollParams) => {\n scrollState.updateTriggeredFlag(totalToScroll, scrollDown);\n }),\n map(toInfiniteScrollAction)\n );\n}\n\nexport function attachScrollEvent(\n options: Models.IScrollRegisterConfig\n): Observable<{}> {\n let obs = fromEvent(options.container, 'scroll');\n // For an unknown reason calling `sampleTime()` causes trouble for many users, even with `options.throttle = 0`.\n // Let's avoid calling the function unless needed.\n // Replacing with throttleTime seems to solve the problem\n // See https://github.com/orizens/ngx-infinite-scroll/issues/198\n if (options.throttle) {\n obs = obs.pipe(\n throttleTime(options.throttle, undefined, {\n leading: true,\n trailing: true,\n })\n );\n }\n return obs as any;\n}\n\nexport function toInfiniteScrollParams(\n lastScrollPosition: number,\n stats: Models.IPositionStats,\n distance: Models.IScrollerDistance\n): Models.IScrollParams {\n const { scrollDown, fire } = ScrollResolver.getScrollStats(\n lastScrollPosition,\n stats,\n distance\n );\n return {\n scrollDown,\n fire,\n stats,\n };\n}\n\nexport const InfiniteScrollActions = {\n DOWN: '[NGX_ISE] DOWN',\n UP: '[NGX_ISE] UP',\n};\n\nexport function toInfiniteScrollAction(\n response: Models.IScrollParams\n): Models.IInfiniteScrollAction {\n const {\n scrollDown,\n stats: { scrolled: currentScrollPosition },\n } = response;\n return {\n type: scrollDown ? InfiniteScrollActions.DOWN : InfiniteScrollActions.UP,\n payload: {\n currentScrollPosition,\n },\n };\n}\n","import {\n AfterViewInit,\n Directive,\n ElementRef,\n EventEmitter,\n Input,\n NgZone,\n OnChanges,\n OnDestroy,\n Output,\n SimpleChanges,\n} from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { IInfiniteScrollEvent, IInfiniteScrollAction } from '../models';\nimport { hasWindowDefined, inputPropChanged } from './services/ngx-ins-utils';\nimport {\n createScroller,\n InfiniteScrollActions,\n} from './services/scroll-register';\n\n@Directive({\n selector: '[infiniteScroll], [infinite-scroll], [data-infinite-scroll]',\n standalone: true\n})\nexport class InfiniteScrollDirective\n implements OnDestroy, OnChanges, AfterViewInit\n{\n @Output() scrolled = new EventEmitter<IInfiniteScrollEvent>();\n @Output() scrolledUp = new EventEmitter<IInfiniteScrollEvent>();\n\n @Input() infiniteScrollDistance: number = 2;\n @Input() infiniteScrollUpDistance: number = 1.5;\n @Input() infiniteScrollThrottle: number = 150;\n @Input() infiniteScrollDisabled: boolean = false;\n @Input() infiniteScrollContainer: any = null;\n @Input() scrollWindow: boolean = true;\n @Input() immediateCheck: boolean = false;\n @Input() horizontal: boolean = false;\n @Input() alwaysCallback: boolean = false;\n @Input() fromRoot: boolean = false;\n\n private disposeScroller?: Subscription;\n\n constructor(private element: ElementRef, private zone: NgZone) {}\n\n ngAfterViewInit() {\n if (!this.infiniteScrollDisabled) {\n this.setup();\n }\n }\n\n ngOnChanges({\n infiniteScrollContainer,\n infiniteScrollDisabled,\n infiniteScrollDistance,\n }: SimpleChanges) {\n const containerChanged = inputPropChanged(infiniteScrollContainer);\n const disabledChanged = inputPropChanged(infiniteScrollDisabled);\n const distanceChanged = inputPropChanged(infiniteScrollDistance);\n const shouldSetup =\n (!disabledChanged && !this.infiniteScrollDisabled) ||\n (disabledChanged && !infiniteScrollDisabled.currentValue) ||\n distanceChanged;\n\n if (containerChanged || disabledChanged || distanceChanged) {\n this.destroyScroller();\n if (shouldSetup) {\n this.setup();\n }\n }\n }\n\n ngOnDestroy() {\n this.destroyScroller();\n }\n\n private setup() {\n if (!hasWindowDefined()) { return; }\n\n this.zone.runOutsideAngular(() => {\n this.disposeScroller = createScroller({\n fromRoot: this.fromRoot,\n alwaysCallback: this.alwaysCallback,\n disable: this.infiniteScrollDisabled,\n downDistance: this.infiniteScrollDistance,\n element: this.element,\n horizontal: this.horizontal,\n scrollContainer: this.infiniteScrollContainer,\n scrollWindow: this.scrollWindow,\n throttle: this.infiniteScrollThrottle,\n upDistance: this.infiniteScrollUpDistance,\n }).subscribe((payload) => this.handleOnScroll(payload));\n });\n }\n\n private handleOnScroll({ type, payload }: IInfiniteScrollAction) {\n const emitter =\n type === InfiniteScrollActions.DOWN ? this.scrolled : this.scrolledUp;\n\n if (hasObservers(emitter)) {\n this.zone.run(() => emitter.emit(payload));\n }\n }\n\n private destroyScroller() {\n if (this.disposeScroller) {\n this.disposeScroller.unsubscribe();\n }\n }\n}\n\nfunction hasObservers<T>(emitter: EventEmitter<T>): boolean {\n // Note: The `observed` property is available only in RxJS@7.2.0, which means it's\n // not available for users running the lower version.\n return emitter.observed ?? emitter.observers.length > 0;\n}\n","import { NgModule } from '@angular/core';\nimport { InfiniteScrollDirective } from './ngx-infinite-scroll.directive';\n\n/**\n * @deprecated Import InfiniteScrollDirective instead\n */\n@NgModule({\n exports: [InfiniteScrollDirective],\n imports: [InfiniteScrollDirective],\n})\nexport class InfiniteScrollModule {}\n","/*\n * Public API Surface of ngx-infinite-scroll\n */\n\nexport { InfiniteScrollDirective } from './lib/ngx-infinite-scroll.directive';\nexport { InfiniteScrollModule } from './lib/ngx-infinite-scroll.module';\nexport {\n ContainerRef,\n IInfiniteScrollEvent,\n IPositionElements,\n IPositionStats,\n IResolver,\n} from './models';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["ScrollResolver.getScrollStats"],"mappings":"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"}