@q149/angular-scrollspy
Version:
A simple lightweight library for Angular which automatically updates links to indicate the currently active section in the viewport
107 lines (106 loc) • 7.22 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
import { Component, Input } from '@angular/core';
import { ScrollSpyService } from '../scroll-spy-service/scroll-spy.service';
/**
* A component to wrap section content within that will update the
* `ScrollSpyService` when it's in view
*
* \@example
* ```html
* <sn-scroll-spy-section id="section1" for="foo">
* ...
* </sn-scroll-spy-section>
* ```
*/
var ScrollSpySectionComponent = /** @class */ (function () {
/**
* Creates an instance of ScrollSpySectionComponent.
* @memberof ScrollSpySectionComponent
*/
function ScrollSpySectionComponent(scrollSpySvc) {
this.scrollSpySvc = scrollSpySvc;
/**
* Amount of time in ms to wait for other scroll events
* before running event handler
*
* \@default 0
* \@memberof ScrollSpySectionComponent
*/
this.debounce = 0;
}
/**
* Updates `ScrollSpy` section when element enters/leaves viewport
*
* \@memberof ScrollSpySectionComponent
* @param {?} inViewport
* @return {?}
*/
ScrollSpySectionComponent.prototype.onInViewportChange = /**
* Updates `ScrollSpy` section when element enters/leaves viewport
*
* \@memberof ScrollSpySectionComponent
* @param {?} inViewport
* @return {?}
*/
function (inViewport) {
this.scrollSpySvc.setSpySectionStatus(this.id, this.for, inViewport);
};
ScrollSpySectionComponent.decorators = [
{ type: Component, args: [{
selector: 'sn-scroll-spy-section',
template: "<div\n class=\"sn-hidden\"\n snInViewport\n [offsetTop]=\"500\"\n (inViewportChange)=\"onInViewportChange($event)\"\n [debounce]=\"debounce\">\n</div>\n<ng-content></ng-content>\n",
styles: [":host{display:block;position:relative}.sn-hidden{bottom:0;left:0;opacity:0;position:absolute;right:0;top:0;z-index:-1}"]
},] },
];
/** @nocollapse */
ScrollSpySectionComponent.ctorParameters = function () { return [
{ type: ScrollSpyService, },
]; };
ScrollSpySectionComponent.propDecorators = {
"id": [{ type: Input },],
"for": [{ type: Input },],
"debounce": [{ type: Input },],
};
return ScrollSpySectionComponent;
}());
export { ScrollSpySectionComponent };
function ScrollSpySectionComponent_tsickle_Closure_declarations() {
/** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */
ScrollSpySectionComponent.decorators;
/**
* @nocollapse
* @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>}
*/
ScrollSpySectionComponent.ctorParameters;
/** @type {!Object<string,!Array<{type: !Function, args: (undefined|!Array<?>)}>>} */
ScrollSpySectionComponent.propDecorators;
/**
* Identifies the section
*
* \@memberof ScrollSpySectionComponent
* @type {?}
*/
ScrollSpySectionComponent.prototype.id;
/**
* Specifies which `ScrollSpy` instance to update
*
* \@memberof ScrollSpySectionComponent
* @type {?}
*/
ScrollSpySectionComponent.prototype.for;
/**
* Amount of time in ms to wait for other scroll events
* before running event handler
*
* \@default 0
* \@memberof ScrollSpySectionComponent
* @type {?}
*/
ScrollSpySectionComponent.prototype.debounce;
/** @type {?} */
ScrollSpySectionComponent.prototype.scrollSpySvc;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nyb2xsLXNweS1zZWN0aW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BxMTQ5L2FuZ3VsYXItc2Nyb2xsc3B5LyIsInNvdXJjZXMiOlsiYXBwL3Njcm9sbC1zcHkvc2Nyb2xsLXNweS1zZWN0aW9uL3Njcm9sbC1zcHktc2VjdGlvbi5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDBDQUEwQyxDQUFDOzs7Ozs7Ozs7Ozs7O0lBK0MxRTs7O09BR0c7SUFDSCxtQ0FBb0IsWUFBOEI7UUFBOUIsaUJBQVksR0FBWixZQUFZLENBQWtCOzs7Ozs7Ozt3QkFMdkIsQ0FBQztLQUswQjs7Ozs7Ozs7SUFNL0Msc0RBQWtCOzs7Ozs7O2NBQUMsVUFBbUI7UUFDM0MsSUFBSSxDQUFDLFlBQVksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsVUFBVSxDQUFDLENBQUM7OztnQkE3Q3hFLFNBQVMsU0FBQztvQkFDVCxRQUFRLEVBQUUsdUJBQXVCO29CQUNqQyxRQUFRLEVBQUUsMExBUVg7b0JBQ0MsTUFBTSxFQUFFLENBQUMsd0hBQXdILENBQUM7aUJBQ25JOzs7O2dCQXpCUSxnQkFBZ0I7Ozt1QkFnQ3RCLEtBQUs7d0JBTUwsS0FBSzs2QkFRTCxLQUFLOztvQ0EvQ1I7O1NBMkJhLHlCQUF5QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgU2Nyb2xsU3B5U2VydmljZSB9IGZyb20gJy4uL3Njcm9sbC1zcHktc2VydmljZS9zY3JvbGwtc3B5LnNlcnZpY2UnO1xyXG5cclxuLyoqXHJcbiAqIEEgY29tcG9uZW50IHRvIHdyYXAgc2VjdGlvbiBjb250ZW50IHdpdGhpbiB0aGF0IHdpbGwgdXBkYXRlIHRoZVxyXG4gKiBgU2Nyb2xsU3B5U2VydmljZWAgd2hlbiBpdCdzIGluIHZpZXdcclxuICpcclxuICogQGV4YW1wbGVcclxuICogYGBgaHRtbFxyXG4gKiAgPHNuLXNjcm9sbC1zcHktc2VjdGlvbiBpZD1cInNlY3Rpb24xXCIgZm9yPVwiZm9vXCI+XHJcbiAqICAgIC4uLlxyXG4gKiAgPC9zbi1zY3JvbGwtc3B5LXNlY3Rpb24+XHJcbiAqIGBgYFxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdzbi1zY3JvbGwtc3B5LXNlY3Rpb24nLFxyXG4gIHRlbXBsYXRlOiBgPGRpdlxuICBjbGFzcz1cInNuLWhpZGRlblwiXG4gIHNuSW5WaWV3cG9ydFxuICBbb2Zmc2V0VG9wXT1cIjUwMFwiXG4gIChpblZpZXdwb3J0Q2hhbmdlKT1cIm9uSW5WaWV3cG9ydENoYW5nZSgkZXZlbnQpXCJcbiAgW2RlYm91bmNlXT1cImRlYm91bmNlXCI+XG48L2Rpdj5cbjxuZy1jb250ZW50PjwvbmctY29udGVudD5cbmAsXHJcbiAgc3R5bGVzOiBbYDpob3N0e2Rpc3BsYXk6YmxvY2s7cG9zaXRpb246cmVsYXRpdmV9LnNuLWhpZGRlbntib3R0b206MDtsZWZ0OjA7b3BhY2l0eTowO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjA7dG9wOjA7ei1pbmRleDotMX1gXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgU2Nyb2xsU3B5U2VjdGlvbkNvbXBvbmVudCB7XHJcbiAgLyoqXHJcbiAgICogSWRlbnRpZmllcyB0aGUgc2VjdGlvblxyXG4gICAqXHJcbiAgICogQG1lbWJlcm9mIFNjcm9sbFNweVNlY3Rpb25Db21wb25lbnRcclxuICAgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgaWQ6IHN0cmluZztcclxuICAvKipcclxuICAgKiBTcGVjaWZpZXMgd2hpY2ggYFNjcm9sbFNweWAgaW5zdGFuY2UgdG8gdXBkYXRlXHJcbiAgICpcclxuICAgKiBAbWVtYmVyb2YgU2Nyb2xsU3B5U2VjdGlvbkNvbXBvbmVudFxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBmb3I6IHN0cmluZztcclxuICAvKipcclxuICAgKiBBbW91bnQgb2YgdGltZSBpbiBtcyB0byB3YWl0IGZvciBvdGhlciBzY3JvbGwgZXZlbnRzXHJcbiAgICogYmVmb3JlIHJ1bm5pbmcgZXZlbnQgaGFuZGxlclxyXG4gICAqXHJcbiAgICogQGRlZmF1bHQgMFxyXG4gICAqIEBtZW1iZXJvZiBTY3JvbGxTcHlTZWN0aW9uQ29tcG9uZW50XHJcbiAgICovXHJcbiAgQElucHV0KCkgcHVibGljIGRlYm91bmNlID0gMDtcclxuICAvKipcclxuICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIFNjcm9sbFNweVNlY3Rpb25Db21wb25lbnQuXHJcbiAgICogQG1lbWJlcm9mIFNjcm9sbFNweVNlY3Rpb25Db21wb25lbnRcclxuICAgKi9cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHNjcm9sbFNweVN2YzogU2Nyb2xsU3B5U2VydmljZSkge31cclxuICAvKipcclxuICAgKiBVcGRhdGVzIGBTY3JvbGxTcHlgIHNlY3Rpb24gd2hlbiBlbGVtZW50IGVudGVycy9sZWF2ZXMgdmlld3BvcnRcclxuICAgKlxyXG4gICAqIEBtZW1iZXJvZiBTY3JvbGxTcHlTZWN0aW9uQ29tcG9uZW50XHJcbiAgICovXHJcbiAgcHVibGljIG9uSW5WaWV3cG9ydENoYW5nZShpblZpZXdwb3J0OiBib29sZWFuKTogdm9pZCB7XHJcbiAgICB0aGlzLnNjcm9sbFNweVN2Yy5zZXRTcHlTZWN0aW9uU3RhdHVzKHRoaXMuaWQsIHRoaXMuZm9yLCBpblZpZXdwb3J0KTtcclxuICB9XHJcbn1cclxuIl19