{"version":3,"file":"ng-scroll-spy.mjs","sources":["../../src/directives/ng-scroll-spy.directive.ts","../../src/ng-scroll-spy.module.ts","../../src/ng-scroll-spy.ts"],"sourcesContent":["import {AfterContentInit, Directive, ElementRef, HostListener, Inject, Renderer2} from '@angular/core';\nimport {DOCUMENT} from '@angular/common';\n\nimport {extractElementPosition} from 'ng-html-util';\n\n@Directive({\n  selector: '[scroll-spy]'\n})\nexport class ScrollSpyDirective implements AfterContentInit {\n\n  private elements = [];\n  private currentActiveLink;\n  private directNavigation = false;\n\n  constructor(@Inject(DOCUMENT) private document: Document,\n              private el: ElementRef,\n              private renderer: Renderer2) {\n  }\n\n  public ngAfterContentInit(): void {\n    this.collectIds();\n  }\n\n  private collectIds(): void {\n    this.elements = [];\n    let elements = this.el.nativeElement.querySelectorAll('a');\n\n    for (let i = 0; i < elements.length; i++) {\n      let elem = elements.item(i);\n\n      let id = ScrollSpyDirective.getId(elem);\n      if (!id)\n        continue;\n\n      let destination = this._getPeerElement(id);\n\n      if (!destination)\n        continue;\n\n      elem.addEventListener('click', this._onLinkClicked.bind(this));\n\n      this.elements.push({\n        id,\n        link: elem,\n        destination\n      })\n    }\n  }\n\n  private _onLinkClicked(event: Event):  void {\n    event.preventDefault();\n\n    let target = event.currentTarget;\n    let id = ScrollSpyDirective.getId(target);\n    let destination = this._getPeerElement(id);\n    this.directNavigation = true;\n\n    let position = extractElementPosition(this.document, destination);\n\n    window.scrollTo({top: position.top - 25, left: 0, behavior: 'smooth'});\n\n    this._cleanCurrentLink();\n    this._setCurrentLink(target);\n    this.directNavigation = false;\n  }\n\n  private _getPeerElement(id): HTMLElement | null {\n\n    let destination = this.document.getElementById(id);\n\n    if (!destination)\n      return null;\n\n    return destination;\n  }\n\n  private static getId(elem): string {\n    let href = elem.getAttribute('href');\n\n    if (!href)\n      return null;\n\n    return href.replace('#', '');\n  }\n\n  @HostListener(\"window:scroll\", ['$event'])\n  onWindowScroll(event: Event): void {\n    if (this.directNavigation)\n      return;\n\n    for (let elem of this.elements) {\n      let top = elem.destination.getBoundingClientRect().top;\n      if (top > 0 && top < 25) {\n        this._cleanCurrentLink();\n        this._setCurrentLink(elem.link);\n        break;\n      }\n    }\n  }\n\n  private _cleanCurrentLink(): void {\n    if (!this.currentActiveLink)\n      return;\n\n    this.renderer.removeClass(this.currentActiveLink, 'active');\n  }\n\n  private _setCurrentLink(elem): void {\n    this.currentActiveLink = elem;\n    this.renderer.addClass(this.currentActiveLink, 'active');\n  }\n}\n","import {NgModule} from '@angular/core';\nimport {polyfill as smoothscroll} from 'smoothscroll-polyfill';\n\nimport {ScrollSpyDirective} from './directives/ng-scroll-spy.directive';\n\nexport * from './directives/ng-scroll-spy.directive';\n\n@NgModule({\n  declarations: [ScrollSpyDirective],\n  exports: [ScrollSpyDirective]\n})\nexport class ScrollSpyModule {\n  constructor(){\n    smoothscroll();\n  }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["smoothscroll"],"mappings":"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"}