@q149/angular-scrollspy
Version:
A simple lightweight library for Angular which automatically updates links to indicate the currently active section in the viewport
115 lines (114 loc) • 6.46 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
import { Directive, Input, HostBinding, ChangeDetectorRef } from '@angular/core';
/**
* A directive used to add an `active` class to a nav item
* when the section is in the viewport
*
* \@example
* ```html
* <a snScrollSpyItem for="foo" href="#section1">Section 1</a>
* ```
*
*/
export class ScrollSpyItemDirective {
/**
* Creates an instance of ScrollSpyItemDirective.
* \@memberof ScrollSpyItemDirective
* @param {?} cdRef
*/
constructor(cdRef) {
this.cdRef = cdRef;
/**
* True if the nav item is the active item in the `items` list
* for `ScrollSpyDirective` instance
*
* \@memberof ScrollSpyItemDirective
*/
this.active = false;
/**
* If true means the section is in the viewport
*
* \@memberof ScrollSpyItemDirective
*/
this.inViewport = false;
}
/**
* Id of section that links navigates to
*
* \@readonly
* \@memberof ScrollSpyItemDirective
* @return {?}
*/
get section() {
return this.href.replace('#', '');
}
/**
* Manually trigger change detection
*
* \@memberof ScrollSpyItemDirective
* @return {?}
*/
detectChanges() {
this.cdRef.detectChanges();
}
}
ScrollSpyItemDirective.decorators = [
{ type: Directive, args: [{
selector: '[snScrollSpyItem]'
},] },
];
/** @nocollapse */
ScrollSpyItemDirective.ctorParameters = () => [
{ type: ChangeDetectorRef, },
];
ScrollSpyItemDirective.propDecorators = {
"active": [{ type: HostBinding, args: ['class.active',] },],
"for": [{ type: Input },],
"href": [{ type: Input },],
};
function ScrollSpyItemDirective_tsickle_Closure_declarations() {
/** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */
ScrollSpyItemDirective.decorators;
/**
* @nocollapse
* @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>}
*/
ScrollSpyItemDirective.ctorParameters;
/** @type {!Object<string,!Array<{type: !Function, args: (undefined|!Array<?>)}>>} */
ScrollSpyItemDirective.propDecorators;
/**
* True if the nav item is the active item in the `items` list
* for `ScrollSpyDirective` instance
*
* \@memberof ScrollSpyItemDirective
* @type {?}
*/
ScrollSpyItemDirective.prototype.active;
/**
* ID of `ScrollSpyDirective` instance
*
* \@memberof ScrollSpyItemDirective
* @type {?}
*/
ScrollSpyItemDirective.prototype.for;
/**
* Hash for section to link to
*
* \@memberof ScrollSpyItemDirective
* @type {?}
*/
ScrollSpyItemDirective.prototype.href;
/**
* If true means the section is in the viewport
*
* \@memberof ScrollSpyItemDirective
* @type {?}
*/
ScrollSpyItemDirective.prototype.inViewport;
/** @type {?} */
ScrollSpyItemDirective.prototype.cdRef;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nyb2xsLXNweS1pdGVtLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BxMTQ5L2FuZ3VsYXItc2Nyb2xsc3B5LyIsInNvdXJjZXMiOlsiYXBwL3Njcm9sbC1zcHkvc2Nyb2xsLXNweS1pdGVtL3Njcm9sbC1zcHktaXRlbS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUNMLFdBQVcsRUFDWCxpQkFBaUIsRUFDbEIsTUFBTSxlQUFlLENBQUM7Ozs7Ozs7Ozs7O0FBZXZCLE1BQU07Ozs7OztJQXVDSixZQUFvQixLQUF3QjtRQUF4QixVQUFLLEdBQUwsS0FBSyxDQUFtQjs7Ozs7OztzQkFoQ0MsS0FBSzs7Ozs7OzBCQWtCOUIsS0FBSztLQWN1Qjs7Ozs7Ozs7UUFQckMsT0FBTztRQUNoQixNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDOzs7Ozs7OztJQVk3QixhQUFhO1FBQ2xCLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUM7Ozs7WUFqRDlCLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsbUJBQW1CO2FBQzlCOzs7O1lBZkMsaUJBQWlCOzs7dUJBdUJoQixXQUFXLFNBQUMsY0FBYztvQkFNMUIsS0FBSztxQkFNTCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBEaXJlY3RpdmUsXHJcbiAgSW5wdXQsXHJcbiAgSG9zdEJpbmRpbmcsXHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWZcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbi8qKlxyXG4gKiBBIGRpcmVjdGl2ZSB1c2VkIHRvIGFkZCBhbiBgYWN0aXZlYCBjbGFzcyB0byBhIG5hdiBpdGVtXHJcbiAqIHdoZW4gdGhlIHNlY3Rpb24gaXMgaW4gdGhlIHZpZXdwb3J0XHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAqIGBgYGh0bWxcclxuICogPGEgc25TY3JvbGxTcHlJdGVtIGZvcj1cImZvb1wiIGhyZWY9XCIjc2VjdGlvbjFcIj5TZWN0aW9uIDE8L2E+XHJcbiAqIGBgYFxyXG4gKlxyXG4gKi9cclxuQERpcmVjdGl2ZSh7XHJcbiAgc2VsZWN0b3I6ICdbc25TY3JvbGxTcHlJdGVtXSdcclxufSlcclxuZXhwb3J0IGNsYXNzIFNjcm9sbFNweUl0ZW1EaXJlY3RpdmUge1xyXG4gIC8qKlxyXG4gICAqIFRydWUgaWYgdGhlIG5hdiBpdGVtIGlzIHRoZSBhY3RpdmUgaXRlbSBpbiB0aGUgYGl0ZW1zYCBsaXN0XHJcbiAgICogZm9yIGBTY3JvbGxTcHlEaXJlY3RpdmVgIGluc3RhbmNlXHJcbiAgICpcclxuICAgKiBAbWVtYmVyb2YgU2Nyb2xsU3B5SXRlbURpcmVjdGl2ZVxyXG4gICAqL1xyXG4gIEBIb3N0QmluZGluZygnY2xhc3MuYWN0aXZlJykgcHVibGljIGFjdGl2ZSA9IGZhbHNlO1xyXG4gIC8qKlxyXG4gICAqIElEIG9mIGBTY3JvbGxTcHlEaXJlY3RpdmVgIGluc3RhbmNlXHJcbiAgICpcclxuICAgKiBAbWVtYmVyb2YgU2Nyb2xsU3B5SXRlbURpcmVjdGl2ZVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBmb3I6IHN0cmluZztcclxuICAvKipcclxuICAgKiBIYXNoIGZvciBzZWN0aW9uIHRvIGxpbmsgdG9cclxuICAgKlxyXG4gICAqIEBtZW1iZXJvZiBTY3JvbGxTcHlJdGVtRGlyZWN0aXZlXHJcbiAgICovXHJcbiAgQElucHV0KCkgcHVibGljIGhyZWY6IHN0cmluZztcclxuICAvKipcclxuICAgKiBJZiB0cnVlIG1lYW5zIHRoZSBzZWN0aW9uIGlzIGluIHRoZSB2aWV3cG9ydFxyXG4gICAqXHJcbiAgICogQG1lbWJlcm9mIFNjcm9sbFNweUl0ZW1EaXJlY3RpdmVcclxuICAgKi9cclxuICBwdWJsaWMgaW5WaWV3cG9ydCA9IGZhbHNlO1xyXG4gIC8qKlxyXG4gICAqIElkIG9mIHNlY3Rpb24gdGhhdCBsaW5rcyBuYXZpZ2F0ZXMgdG9cclxuICAgKlxyXG4gICAqIEByZWFkb25seVxyXG4gICAqIEBtZW1iZXJvZiBTY3JvbGxTcHlJdGVtRGlyZWN0aXZlXHJcbiAgICovXHJcbiAgcHVibGljIGdldCBzZWN0aW9uKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5ocmVmLnJlcGxhY2UoJyMnLCAnJyk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgU2Nyb2xsU3B5SXRlbURpcmVjdGl2ZS5cclxuICAgKiBAbWVtYmVyb2YgU2Nyb2xsU3B5SXRlbURpcmVjdGl2ZVxyXG4gICAqL1xyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY2RSZWY6IENoYW5nZURldGVjdG9yUmVmKSB7fVxyXG4gIC8qKlxyXG4gICAqIE1hbnVhbGx5IHRyaWdnZXIgY2hhbmdlIGRldGVjdGlvblxyXG4gICAqXHJcbiAgICogQG1lbWJlcm9mIFNjcm9sbFNweUl0ZW1EaXJlY3RpdmVcclxuICAgKi9cclxuICBwdWJsaWMgZGV0ZWN0Q2hhbmdlcygpOiB2b2lkIHtcclxuICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxufVxyXG4iXX0=