UNPKG

ng-spy

Version:

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

49 lines 5.29 kB
import { Directive, Input } from '@angular/core'; import * as i0 from "@angular/core"; import * as i1 from "./scroll-spy.service"; export class SpyOnDirective { constructor(el, renderer, spyService) { this.el = el; this.renderer = renderer; this.spyService = spyService; this.isActive = false; } ngOnInit() { this.spyService.activeSpyTarget.subscribe((targetName) => { if (!this.isActive && targetName === this.spyOn) { this.setActive(); } else if (this.isActive && targetName !== this.spyOn) { this.setInActive(); } }); } get htmlElement() { return this.el.nativeElement; } setActive() { this.isActive = true; if (this.activeClass) { this.renderer.addClass(this.htmlElement, this.activeClass); } } setInActive() { this.isActive = false; if (this.activeClass) { this.renderer.removeClass(this.htmlElement, this.activeClass); } } } SpyOnDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: SpyOnDirective, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i1.ScrollSpyService }], target: i0.ɵɵFactoryTarget.Directive }); SpyOnDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.1.0", type: SpyOnDirective, selector: "[spyOn]", inputs: { activeClass: "activeClass", spyOn: "spyOn" }, ngImport: i0 }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: SpyOnDirective, decorators: [{ type: Directive, args: [{ selector: '[spyOn]' }] }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i1.ScrollSpyService }]; }, propDecorators: { activeClass: [{ type: Input }], spyOn: [{ type: Input }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3B5LW9uLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXNweS9zcmMvbGliL3NweS1vbi5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBeUIsS0FBSyxFQUFVLE1BQU0sZUFBZSxDQUFDOzs7QUFPaEYsTUFBTSxPQUFPLGNBQWM7SUFNekIsWUFBb0IsRUFBYyxFQUFVLFFBQW1CLEVBQVUsVUFBNEI7UUFBakYsT0FBRSxHQUFGLEVBQUUsQ0FBWTtRQUFVLGFBQVEsR0FBUixRQUFRLENBQVc7UUFBVSxlQUFVLEdBQVYsVUFBVSxDQUFrQjtRQUY3RixhQUFRLEdBQUcsS0FBSyxDQUFDO0lBRWdGLENBQUM7SUFFMUcsUUFBUTtRQUNOLElBQUksQ0FBQyxVQUFVLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FDdkMsQ0FBQyxVQUFVLEVBQUUsRUFBRTtZQUNiLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLFVBQVUsS0FBSyxJQUFJLENBQUMsS0FBSyxFQUFFO2dCQUMvQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7YUFDbEI7aUJBQU0sSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLFVBQVUsS0FBSyxJQUFJLENBQUMsS0FBSyxFQUFFO2dCQUNyRCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7YUFDcEI7UUFDSCxDQUFDLENBQ0YsQ0FBQztJQUNKLENBQUM7SUFFRCxJQUFZLFdBQVc7UUFDckIsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQztJQUMvQixDQUFDO0lBRUQsU0FBUztRQUNQLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1FBQ3JCLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNwQixJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztTQUM1RDtJQUNILENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7UUFDdEIsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ3BCLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1NBQy9EO0lBQ0gsQ0FBQzs7MkdBcENVLGNBQWM7K0ZBQWQsY0FBYzsyRkFBZCxjQUFjO2tCQUgxQixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxTQUFTO2lCQUNwQjt3SkFHVSxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgUmVuZGVyZXIyLCBJbnB1dCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IFNjcm9sbFNweVNlcnZpY2UgfSBmcm9tICcuL3Njcm9sbC1zcHkuc2VydmljZSc7XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tzcHlPbl0nXG59KVxuZXhwb3J0IGNsYXNzIFNweU9uRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0IHtcblxuICBASW5wdXQoKSBhY3RpdmVDbGFzczogc3RyaW5nO1xuICBASW5wdXQoKSBzcHlPbjogc3RyaW5nO1xuICBwcml2YXRlIGlzQWN0aXZlID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBlbDogRWxlbWVudFJlZiwgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLCBwcml2YXRlIHNweVNlcnZpY2U6IFNjcm9sbFNweVNlcnZpY2UpIHsgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuc3B5U2VydmljZS5hY3RpdmVTcHlUYXJnZXQuc3Vic2NyaWJlKFxuICAgICAgKHRhcmdldE5hbWUpID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLmlzQWN0aXZlICYmIHRhcmdldE5hbWUgPT09IHRoaXMuc3B5T24pIHtcbiAgICAgICAgICB0aGlzLnNldEFjdGl2ZSgpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNBY3RpdmUgJiYgdGFyZ2V0TmFtZSAhPT0gdGhpcy5zcHlPbikge1xuICAgICAgICAgIHRoaXMuc2V0SW5BY3RpdmUoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGdldCBodG1sRWxlbWVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5lbC5uYXRpdmVFbGVtZW50O1xuICB9XG5cbiAgc2V0QWN0aXZlKCkge1xuICAgIHRoaXMuaXNBY3RpdmUgPSB0cnVlO1xuICAgIGlmICh0aGlzLmFjdGl2ZUNsYXNzKSB7XG4gICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMuaHRtbEVsZW1lbnQsIHRoaXMuYWN0aXZlQ2xhc3MpO1xuICAgIH1cbiAgfVxuXG4gIHNldEluQWN0aXZlKCkge1xuICAgIHRoaXMuaXNBY3RpdmUgPSBmYWxzZTtcbiAgICBpZiAodGhpcy5hY3RpdmVDbGFzcykge1xuICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLmh0bWxFbGVtZW50LCB0aGlzLmFjdGl2ZUNsYXNzKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==