ngx-page-scroll
Version:
Convenience directive for animated scrolling functionality for angular written in pure typescript
1 lines • 12.6 kB
Source Map (JSON)
{"version":3,"file":"ngx-page-scroll.mjs","sources":["../../../projects/ngx-page-scroll/src/lib/ngx-page-scroll.directive.ts","../../../projects/ngx-page-scroll/src/lib/ngx-page-scroll.module.ts","../../../projects/ngx-page-scroll/src/public-api.ts","../../../projects/ngx-page-scroll/src/ngx-page-scroll.ts"],"sourcesContent":["/* eslint-disable @angular-eslint/no-host-metadata-property, @angular-eslint/directive-selector */\n\nimport {\n Directive,\n EventEmitter,\n Inject,\n Input,\n OnChanges,\n OnDestroy,\n Optional,\n Output,\n SimpleChanges,\n DOCUMENT\n} from '@angular/core';\nimport { NavigationCancel, NavigationEnd, NavigationError, Router, UrlTree } from '@angular/router';\n\n\nimport { EasingLogic, PageScrollInstance, PageScrollOptions, PageScrollService } from 'ngx-page-scroll-core';\nimport { filter, take } from 'rxjs/operators';\n\n@Directive({\n selector: '[pageScroll]',\n host: {\n '(click)': 'handleClick($event)',\n }\n})\nexport class NgxPageScrollDirective implements OnChanges, OnDestroy {\n\n @Input()\n public routerLink;\n\n @Input()\n public href: string;\n\n @Input()\n public fragment: string;\n\n @Input()\n public pageScrollTarget: string;\n\n @Input()\n public pageScrollHorizontal: boolean;\n\n @Input()\n public pageScrollOffset: number;\n\n @Input()\n public pageScrollDuration: number;\n\n @Input()\n public pageScrollSpeed: number;\n\n @Input()\n public pageScrollEasing: EasingLogic;\n\n @Input()\n public pageScrollInterruptible: boolean;\n\n @Input()\n public pageScrollInView: boolean;\n\n @Input()\n public pageScrollAdjustHash = false;\n\n @Input()\n public pageScroll: string;\n\n @Output()\n pageScrollFinish: EventEmitter<boolean> = new EventEmitter<boolean>();\n\n private pageScrollInstance: PageScrollInstance;\n private readonly document: Document;\n\n constructor(private readonly pageScrollService: PageScrollService, @Optional() private readonly router: Router, @Inject(DOCUMENT) document) {\n this.document = (document as Document);\n }\n\n ngOnChanges(changes: SimpleChanges): void {// eslint-disable-line @typescript-eslint/no-unused-vars\n // Some inputs changed, reset the pageScrollInstance\n this.pageScrollInstance = undefined;\n }\n\n ngOnDestroy(): void {\n if (this.pageScrollInstance) {\n this.pageScrollService.stop(this.pageScrollInstance);\n }\n }\n\n private getPageScrollTarget(): string {\n return this.pageScrollTarget || this.href || (this.fragment ? '#' + this.fragment : '');\n }\n\n private generatePageScrollInstance(): PageScrollInstance {\n if (this.pageScrollInstance === undefined || this.pageScrollInstance === null) {\n const options: PageScrollOptions = {\n document: this.document,\n scrollTarget: this.getPageScrollTarget(),\n };\n\n if (this.pageScroll) {\n options.namespace = this.pageScroll;\n }\n if (this.pageScrollHorizontal !== undefined && this.pageScrollHorizontal !== null) {\n options.verticalScrolling = !this.pageScrollHorizontal;\n }\n if (this.pageScrollOffset !== undefined && this.pageScrollOffset !== null) {\n options.scrollOffset = this.pageScrollOffset;\n }\n if (this.pageScrollInterruptible !== undefined && this.pageScrollInterruptible !== null) {\n options.interruptible = this.pageScrollInterruptible;\n }\n if (this.pageScrollInView !== undefined && this.pageScrollInView !== null) {\n options.scrollInView = this.pageScrollInView;\n }\n if (this.pageScrollEasing) {\n options.easingLogic = this.pageScrollEasing;\n }\n if (this.pageScrollDuration !== undefined && this.pageScrollDuration !== null) {\n options.duration = this.pageScrollDuration;\n }\n if (this.pageScrollSpeed !== undefined && this.pageScrollSpeed !== null) {\n options.speed = this.pageScrollSpeed;\n }\n if (this.pageScrollFinish) {\n options.scrollFinishListener = this.pageScrollFinish;\n }\n this.pageScrollInstance = this.pageScrollService.create(options);\n }\n\n return this.pageScrollInstance;\n }\n\n private pushRouterState(): void {\n if (this.pageScrollAdjustHash && typeof this.pageScrollInstance.pageScrollOptions.scrollTarget === 'string'\n && (this.pageScrollInstance.pageScrollOptions.scrollTarget as string).substr(0, 1) === '#') {\n // \"Navigate\" to the current route again and this time set the fragment/hash\n this.router.navigate([], {\n fragment: (this.pageScrollInstance.pageScrollOptions.scrollTarget as string).substr(1),\n queryParamsHandling: 'preserve',\n });\n }\n }\n\n private scroll(): void {\n const pageScrollInstance = this.generatePageScrollInstance();\n this.pushRouterState();\n this.pageScrollService.start(pageScrollInstance);\n }\n\n public handleClick(clickEvent: Event): boolean { // eslint-disable-line @typescript-eslint/no-unused-vars\n if (this.routerLink && this.router !== null && this.router !== undefined) {\n let urlTree: UrlTree;\n if (typeof this.routerLink === 'string') {\n urlTree = this.router.parseUrl(this.routerLink);\n } else {\n urlTree = this.router.createUrlTree(this.routerLink);\n }\n if (!this.router.isActive(urlTree, true)) {\n // We need to navigate their first.\n // Navigation is handled by the routerLink directive so we only need to listen for route change\n this.router.events.pipe(filter(routerEvent => {\n // We're only interested in successful navigations or when the navigation fails\n return routerEvent instanceof NavigationEnd || routerEvent instanceof NavigationError\n || routerEvent instanceof NavigationCancel;\n }),\n // Consume only one event, automatically \"unsubscribing\" from the event stream afterwards\n take(1)\n ).subscribe((routerEvent) => {\n if (routerEvent instanceof NavigationEnd) {\n // use a timeout to start scrolling as soon as the stack is cleared\n setTimeout(() => {\n this.scroll();\n }, 0);\n }\n });\n\n return false; // to preventDefault()\n }\n }\n this.scroll();\n\n return false; // to preventDefault()\n }\n}\n","import { NgModule } from '@angular/core';\n\nimport { NgxPageScrollCoreModule } from 'ngx-page-scroll-core';\n\nimport { NgxPageScrollDirective } from './ngx-page-scroll.directive';\n\n@NgModule({\n imports: [\n NgxPageScrollCoreModule,\n NgxPageScrollDirective,\n ],\n exports: [\n NgxPageScrollDirective,\n ],\n})\nexport class NgxPageScrollModule {\n}\n","/*\n * Public API Surface of ngx-page-scroll\n */\n\nexport { NgxPageScrollModule } from './lib/ngx-page-scroll.module';\n\nexport { NgxPageScrollDirective } from './lib/ngx-page-scroll.directive';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}