@thisissoon/angular-scrollspy
Version:
A simple lightweight library for Angular which automatically updates links to indicate the currently active section in the viewport
108 lines • 5.96 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} 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 }]
};
if (false) {
/**
* 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 {?}
* @private
*/
ScrollSpyItemDirective.prototype.cdRef;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nyb2xsLXNweS1pdGVtLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0B0aGlzaXNzb29uL2FuZ3VsYXItc2Nyb2xsc3B5LyIsInNvdXJjZXMiOlsiYXBwL3Njcm9sbC1zcHkvc2Nyb2xsLXNweS1pdGVtL3Njcm9sbC1zcHktaXRlbS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUNMLFdBQVcsRUFDWCxpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7Ozs7Ozs7Ozs7O0FBZXZCLE1BQU0sT0FBTyxzQkFBc0I7Ozs7OztJQTBDakMsWUFBb0IsS0FBd0I7UUFBeEIsVUFBSyxHQUFMLEtBQUssQ0FBbUI7Ozs7Ozs7UUFsQ3JDLFdBQU0sR0FBRyxLQUFLLENBQUM7Ozs7OztRQW9CZixlQUFVLEdBQUcsS0FBSyxDQUFDO0lBY3FCLENBQUM7Ozs7Ozs7O0lBUGhELElBQVcsT0FBTztRQUNoQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNwQyxDQUFDOzs7Ozs7O0lBV00sYUFBYTtRQUNsQixJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzdCLENBQUM7OztZQXJERixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLG1CQUFtQjthQUM5Qjs7OztZQWZDLGlCQUFpQjs7O3FCQXVCaEIsV0FBVyxTQUFDLGNBQWM7a0JBTzFCLEtBQUs7bUJBT0wsS0FBSzs7Ozs7Ozs7OztJQWROLHdDQUNzQjs7Ozs7OztJQU10QixxQ0FDbUI7Ozs7Ozs7SUFNbkIsc0NBQ29COzs7Ozs7O0lBTXBCLDRDQUEwQjs7Ozs7SUFjZCx1Q0FBZ0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBEaXJlY3RpdmUsXG4gIElucHV0LFxuICBIb3N0QmluZGluZyxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG4vKipcbiAqIEEgZGlyZWN0aXZlIHVzZWQgdG8gYWRkIGFuIGBhY3RpdmVgIGNsYXNzIHRvIGEgbmF2IGl0ZW1cbiAqIHdoZW4gdGhlIHNlY3Rpb24gaXMgaW4gdGhlIHZpZXdwb3J0XG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYGh0bWxcbiAqIDxhIHNuU2Nyb2xsU3B5SXRlbSBmb3I9XCJmb29cIiBocmVmPVwiI3NlY3Rpb24xXCI+U2VjdGlvbiAxPC9hPlxuICogYGBgXG4gKlxuICovXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbc25TY3JvbGxTcHlJdGVtXScsXG59KVxuZXhwb3J0IGNsYXNzIFNjcm9sbFNweUl0ZW1EaXJlY3RpdmUge1xuICAvKipcbiAgICogVHJ1ZSBpZiB0aGUgbmF2IGl0ZW0gaXMgdGhlIGFjdGl2ZSBpdGVtIGluIHRoZSBgaXRlbXNgIGxpc3RcbiAgICogZm9yIGBTY3JvbGxTcHlEaXJlY3RpdmVgIGluc3RhbmNlXG4gICAqXG4gICAqIEBtZW1iZXJvZiBTY3JvbGxTcHlJdGVtRGlyZWN0aXZlXG4gICAqL1xuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmFjdGl2ZScpXG4gIHB1YmxpYyBhY3RpdmUgPSBmYWxzZTtcbiAgLyoqXG4gICAqIElEIG9mIGBTY3JvbGxTcHlEaXJlY3RpdmVgIGluc3RhbmNlXG4gICAqXG4gICAqIEBtZW1iZXJvZiBTY3JvbGxTcHlJdGVtRGlyZWN0aXZlXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgZm9yOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBIYXNoIGZvciBzZWN0aW9uIHRvIGxpbmsgdG9cbiAgICpcbiAgICogQG1lbWJlcm9mIFNjcm9sbFNweUl0ZW1EaXJlY3RpdmVcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBocmVmOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBJZiB0cnVlIG1lYW5zIHRoZSBzZWN0aW9uIGlzIGluIHRoZSB2aWV3cG9ydFxuICAgKlxuICAgKiBAbWVtYmVyb2YgU2Nyb2xsU3B5SXRlbURpcmVjdGl2ZVxuICAgKi9cbiAgcHVibGljIGluVmlld3BvcnQgPSBmYWxzZTtcbiAgLyoqXG4gICAqIElkIG9mIHNlY3Rpb24gdGhhdCBsaW5rcyBuYXZpZ2F0ZXMgdG9cbiAgICpcbiAgICogQHJlYWRvbmx5XG4gICAqIEBtZW1iZXJvZiBTY3JvbGxTcHlJdGVtRGlyZWN0aXZlXG4gICAqL1xuICBwdWJsaWMgZ2V0IHNlY3Rpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5ocmVmLnJlcGxhY2UoJyMnLCAnJyk7XG4gIH1cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgU2Nyb2xsU3B5SXRlbURpcmVjdGl2ZS5cbiAgICogQG1lbWJlcm9mIFNjcm9sbFNweUl0ZW1EaXJlY3RpdmVcbiAgICovXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY2RSZWY6IENoYW5nZURldGVjdG9yUmVmKSB7fVxuICAvKipcbiAgICogTWFudWFsbHkgdHJpZ2dlciBjaGFuZ2UgZGV0ZWN0aW9uXG4gICAqXG4gICAqIEBtZW1iZXJvZiBTY3JvbGxTcHlJdGVtRGlyZWN0aXZlXG4gICAqL1xuICBwdWJsaWMgZGV0ZWN0Q2hhbmdlcygpOiB2b2lkIHtcbiAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgfVxufVxuIl19