UNPKG

@avtest/ng-spy

Version:

A lightweight, dependency-free scrollspy for angular. Use this library to spy on HTML elements on your page when the window is scrolled or resized.

1 lines 22.1 kB
{"version":3,"file":"avtest-ng-spy.mjs","sources":["../../../projects/ng-spy/src/lib/tokens/resize-threshold.token.ts","../../../projects/ng-spy/src/lib/tokens/scroll-threshold.token.ts","../../../projects/ng-spy/src/lib/window.service.ts","../../../projects/ng-spy/src/lib/scroll-spy.service.ts","../../../projects/ng-spy/src/lib/spy-on.directive.ts","../../../projects/ng-spy/src/lib/spy-target.directive.ts","../../../projects/ng-spy/src/lib/scroll-spy.module.ts","../../../projects/ng-spy/src/public-api.ts","../../../projects/ng-spy/src/avtest-ng-spy.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\n\nexport const RESIZE_TIME_THRESHOLD: InjectionToken<number> = new InjectionToken('Time in milli-seconds', {\n providedIn: 'root',\n factory: () => 300\n});\n","import { InjectionToken } from '@angular/core';\n\nexport const SCROLL_TIME_THRESHOLD: InjectionToken<number> = new InjectionToken('Time in milli-seconds', {\n providedIn: 'root',\n factory: () => 10\n});\n","import { isPlatformBrowser } from '@angular/common';\nimport { ElementRef, Inject, Injectable, PLATFORM_ID } from '@angular/core';\nimport { EMPTY, fromEvent, Observable } from 'rxjs';\nimport { auditTime } from 'rxjs/operators';\nimport { RESIZE_TIME_THRESHOLD } from './tokens/resize-threshold.token';\nimport { SCROLL_TIME_THRESHOLD } from './tokens/scroll-threshold.token';\n\n\n@Injectable({\n providedIn: 'root'\n})\nexport class WindowService {\n private isBrowser = true;\n private scrollEvent$: Observable<Event>;\n private resizeEvent$: Observable<Event>;\n\n constructor(\n @Inject(PLATFORM_ID) platformId,\n @Inject(RESIZE_TIME_THRESHOLD) private resizeTime: number,\n @Inject(SCROLL_TIME_THRESHOLD) private scrollTime: number\n ) {\n if (!isPlatformBrowser(platformId)) {\n this.isBrowser = false;\n this.scrollEvent$ = this.resizeEvent$ = EMPTY;\n } else {\n this.scrollEvent$ = fromEvent(window, 'scroll', { passive: true }).pipe(auditTime(this.scrollTime));\n this.resizeEvent$ = fromEvent(window, 'resize', { passive: true }).pipe(auditTime(this.resizeTime));\n }\n }\n\n getScrollEventForContainer(scrollContainer: ElementRef) {\n if (!this.isBrowser) {\n return EMPTY;\n }\n\n return fromEvent(scrollContainer.nativeElement, 'scroll', { passive: true }).pipe(auditTime(this.scrollTime));\n }\n\n get scrollEvent() {\n return this.scrollEvent$;\n }\n\n get resizeEvent() {\n return this.resizeEvent$;\n }\n\n get scrollTop() {\n if (!this.isBrowser) {\n return 0;\n }\n\n return Math.max(window.pageYOffset, document.documentElement.scrollTop, document.body.scrollTop);\n }\n\n get viewportHeight() {\n if (!this.isBrowser) {\n return 0;\n }\n\n return Math.max(document.documentElement.clientHeight, window.innerHeight || 0);\n }\n\n getElementHeight(el: ElementRef) {\n if (!this.isBrowser) {\n return 0;\n }\n\n return el.nativeElement.offsetHeight;\n }\n\n getElementOffsetTop(el: ElementRef) {\n if (!this.isBrowser) {\n return 0;\n }\n\n return el.nativeElement.offsetTop;\n }\n\n getElementScrollTop(el: ElementRef) {\n if (!this.isBrowser) {\n return 0;\n }\n\n return el.nativeElement.scrollTop;\n }\n}\n","import {ElementRef, Injectable} from '@angular/core';\nimport {Observable, Subject} from 'rxjs';\nimport {takeUntil} from 'rxjs/operators';\nimport {SpyTarget} from './spy-target.model';\nimport {WindowService} from './window.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ScrollSpyService {\n private stopSpying$ = new Subject();\n private activeSpyTarget$ = new Subject<string>();\n private scrollEvent: Observable<Event>;\n private resizeEvent: Observable<Event>;\n private spyTargets: SpyTarget[] = [];\n private thresholdTop = 0;\n private thresholdBottom = 0;\n private scrollContainer: ElementRef;\n private isSpying = false;\n\n constructor(private windowService: WindowService) {\n this.scrollEvent = this.windowService.scrollEvent.pipe(takeUntil(this.stopSpying$));\n this.resizeEvent = this.windowService.resizeEvent.pipe(takeUntil(this.stopSpying$));\n }\n\n spy({ scrollContainer, thresholdTop = 0, thresholdBottom = 0 }: SpyOptions = {}) {\n // this is to prevent duplicate listeners\n if (this.isSpying) {\n return;\n }\n\n this.isSpying = true;\n this.scrollContainer = scrollContainer;\n this.thresholdTop = thresholdTop;\n this.thresholdBottom = thresholdBottom;\n\n this.scrollEvent.subscribe(() => this.checkActiveElement(scrollContainer));\n this.resizeEvent.subscribe(() => this.checkActiveElement(scrollContainer));\n\n if (scrollContainer != null) {\n this.windowService.getScrollEventForContainer(scrollContainer)\n .pipe(takeUntil(this.stopSpying$))\n .subscribe(() => this.checkActiveElement(scrollContainer));\n }\n\n this.checkActiveElement(scrollContainer);\n }\n\n addTarget(target: SpyTarget) {\n this.spyTargets.push({ ...target });\n this.checkActiveElement(this.scrollContainer);\n }\n\n removeTarget(target: string) {\n this.spyTargets = this.spyTargets.filter(spyTarget => target !== spyTarget.name);\n this.checkActiveElement(this.scrollContainer);\n }\n\n checkActiveElement(scrollContainer: ElementRef = this.scrollContainer) {\n let activeTarget: SpyTarget = null;\n let scrollContainerOffset = this.getTotalOffset(scrollContainer);\n\n for (const target of this.spyTargets) {\n const activeElement = activeTarget != null ? activeTarget.element : null;\n if (this.isElementActive(target.element, scrollContainer, scrollContainerOffset, activeElement)) {\n activeTarget = target;\n }\n }\n\n this.activeSpyTarget$.next(activeTarget ? activeTarget.name : null);\n }\n\n isElementActive(element: ElementRef, scrollContainer?: ElementRef, scrollContainerOffset?: number, currentActiveElement?: ElementRef) {\n const targetOffsetTop = this.windowService.getElementOffsetTop(element);\n const targetHeight = this.windowService.getElementHeight(element);\n\n if (currentActiveElement != null && this.windowService.getElementOffsetTop(currentActiveElement) < targetOffsetTop) {\n return false;\n }\n\n return this.isElementInsideWindow(element, scrollContainer, scrollContainerOffset, targetHeight, targetOffsetTop);\n }\n\n private getTotalOffset(element: ElementRef): number{\n if(!element){\n return 0;\n }\n let totalOffset = 0;\n let current = element.nativeElement;\n while(current.offsetParent != null){\n totalOffset += current.offsetTop;\n current = current.offsetParent;\n }\n return totalOffset;\n }\n\n private isElementInsideWindow(element: ElementRef, scrollContainer: ElementRef, scrollContainerOffset: number, elementHeight: number, elementOffsetTop: number) {\n const scrollTop = this.windowService.scrollTop;\n const viewportHeight = this.windowService.viewportHeight;\n\n // target bottom edge is below window top edge && target top edge is above window bottom edge\n // if target has a container, don't check for thresholds on the window\n if (scrollContainer != null) {\n // element has to be inside the portion of the container that is visible\n const containerHeight = this.windowService.getElementHeight(scrollContainer);\n const containerScrollTop = this.windowService.getElementScrollTop(scrollContainer);\n // < 0: container is \"above\" the screen\n // > 0: container is on or below the screen\n const distanceToContainer = scrollContainerOffset - scrollTop;\n const visibleContainerHeight = Math.min(viewportHeight - distanceToContainer, containerHeight);\n // < 0: it is too far down to see\n if (visibleContainerHeight < 0){\n return false;\n }\n // elementOffsetTop is a \"global\" value so we have to calculate the offset _inside_ the container\n const relativeElementOffset = this.getTotalOffset(element);\n // now we need figure out which scrolled _part_ of the container is visible\n return (relativeElementOffset + elementHeight) > (scrollContainerOffset + containerScrollTop)\n && relativeElementOffset < (scrollContainerOffset + containerScrollTop + visibleContainerHeight);\n }\n\n return elementOffsetTop + elementHeight > scrollTop + this.thresholdTop\n && elementOffsetTop < scrollTop + viewportHeight - this.thresholdBottom;\n }\n\n get activeSpyTarget() {\n return this.activeSpyTarget$.asObservable();\n }\n\n stopSpying() {\n this.stopSpying$.next();\n this.spyTargets = [];\n this.isSpying = false;\n }\n}\n\ninterface SpyOptions {\n scrollContainer?: ElementRef;\n thresholdTop?: number;\n thresholdBottom?: number;\n}\n","import { Directive, ElementRef, Renderer2, Input, OnInit } from '@angular/core';\n\nimport { ScrollSpyService } from './scroll-spy.service';\n\n@Directive({\n selector: '[spyOn]',\n standalone: true\n})\nexport class SpyOnDirective implements OnInit {\n\n @Input() activeClass: string;\n @Input() spyOn: string;\n private isActive = false;\n\n constructor(private el: ElementRef, private renderer: Renderer2, private spyService: ScrollSpyService) { }\n\n ngOnInit() {\n this.spyService.activeSpyTarget.subscribe(\n (targetName) => {\n if (!this.isActive && targetName === this.spyOn) {\n this.setActive();\n } else if (this.isActive && targetName !== this.spyOn) {\n this.setInActive();\n }\n }\n );\n }\n\n private get htmlElement() {\n return this.el.nativeElement;\n }\n\n setActive() {\n this.isActive = true;\n if (this.activeClass) {\n this.renderer.addClass(this.htmlElement, this.activeClass);\n }\n }\n\n setInActive() {\n this.isActive = false;\n if (this.activeClass) {\n this.renderer.removeClass(this.htmlElement, this.activeClass);\n }\n }\n}\n","import { Directive, ElementRef, Input, OnInit, Renderer2, OnDestroy } from '@angular/core';\n\nimport { ScrollSpyService } from './scroll-spy.service';\n\n@Directive({\n selector: '[spyTarget]',\n standalone: true\n})\nexport class SpyTargetDirective implements OnInit, OnDestroy {\n\n @Input() spyTarget: string;\n\n constructor(private el: ElementRef, private spyService: ScrollSpyService, private renderer: Renderer2) { }\n\n ngOnInit() {\n this.renderer.setAttribute(this.htmlElement, 'id', this.spyTarget);\n this.spyService.addTarget({ name: this.spyTarget, element: this.el });\n }\n\n private get htmlElement() {\n return this.el.nativeElement;\n }\n\n ngOnDestroy() {\n this.spyService.removeTarget(this.spyTarget);\n }\n}\n","import { NgModule } from '@angular/core';\nimport { SpyTargetDirective } from './spy-target.directive';\nimport { SpyOnDirective } from './spy-on.directive';\n\n@NgModule({\n imports: [\n SpyTargetDirective, SpyOnDirective\n ],\n exports: [SpyTargetDirective, SpyOnDirective]\n})\nexport class ScrollSpyModule { }\n","/*\n * Public API Surface of scroll-spy\n */\n\nexport * from './lib/scroll-spy.service';\nexport * from './lib/tokens/resize-threshold.token';\nexport * from './lib/tokens/scroll-threshold.token';\nexport * from './lib/spy-on.directive';\nexport * from './lib/spy-target.directive';\nexport * from './lib/scroll-spy.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.WindowService","i1.ScrollSpyService"],"mappings":"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"}