UNPKG

materialize-angular

Version:
100 lines 9.16 kB
/** * @fileoverview added by tsickle * Generated from: app/completed-components/scroll-spy/scroll-spy.component.ts * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ /** * @license * Copyright Workylab. All Rights Reserved. * * Use of this source code is governed by an MIT-style license that can be * found in the LICENSE file at https://raw.githubusercontent.com/workylab/materialize-angular/master/LICENSE */ import { Component, ContentChildren, EventEmitter, Input, Output, QueryList } from '@angular/core'; import { config } from '../../config'; import { getOffseTop } from '../../utils/get-offset-top.util'; import { ScrollSpyItemComponent } from './scroll-spy-item/scroll-spy-item.component'; import { windowScrollPosition } from '../../utils/window-scroll-position.util'; export class ScrollSpyComponent { constructor() { this.className = ScrollSpyComponent.defaultProps.className; this.itemId = ScrollSpyComponent.defaultProps.itemId; this.onChangeEmitter = new EventEmitter(); this.onScroll = this.onScroll.bind(this); this.validateScroll = this.validateScroll.bind(this); window.addEventListener('scroll', this.onScroll); } /** * @return {?} */ ngAfterContentInit() { this.onScroll(); } /** * @return {?} */ onScroll() { setTimeout(this.validateScroll, 100); } /** * @return {?} */ validateScroll() { /** @type {?} */ const item = this.getCurrentItem(); if (this.itemId !== item.id) { this.itemId = item.id; this.onChangeEmitter.emit(this.itemId); } } /** * @return {?} */ getCurrentItem() { /** @type {?} */ const items = this.items.toArray(); for (let i = 0; i < items.length; i++) { /** @type {?} */ const elementOffsetTop = getOffseTop(items[i].element.nativeElement); if (elementOffsetTop > windowScrollPosition()) { /** @type {?} */ const prevItem = items[i - 1] ? items[i - 1] : items[0]; return prevItem; } } return items[items.length - 1]; } } ScrollSpyComponent.defaultProps = { className: '', itemId: '' }; ScrollSpyComponent.decorators = [ { type: Component, args: [{ selector: `${config.components.prefix}-scroll-spy`, template: "<div [ngClass]=\"className\">\n <ng-content select=\"materialize-scroll-spy-item\"></ng-content>\n</div>\n" }] } ]; /** @nocollapse */ ScrollSpyComponent.ctorParameters = () => []; ScrollSpyComponent.propDecorators = { items: [{ type: ContentChildren, args: [ScrollSpyItemComponent,] }], onChangeEmitter: [{ type: Output, args: ['onChange',] }], className: [{ type: Input }], itemId: [{ type: Input }] }; if (false) { /** @type {?} */ ScrollSpyComponent.defaultProps; /** @type {?} */ ScrollSpyComponent.prototype.items; /** @type {?} */ ScrollSpyComponent.prototype.onChangeEmitter; /** @type {?} */ ScrollSpyComponent.prototype.className; /** @type {?} */ ScrollSpyComponent.prototype.itemId; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nyb2xsLXNweS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9tYXRlcmlhbGl6ZS1hbmd1bGFyLyIsInNvdXJjZXMiOlsiYXBwL2NvbXBsZXRlZC1jb21wb25lbnRzL3Njcm9sbC1zcHkvc2Nyb2xsLXNweS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBUUEsT0FBTyxFQUFvQixTQUFTLEVBQUUsZUFBZSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNySCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUM5RCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUVyRixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQU0vRSxNQUFNLE9BQU8sa0JBQWtCO0lBYTdCO1FBSFMsY0FBUyxHQUFXLGtCQUFrQixDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUM7UUFDOUQsV0FBTSxHQUFXLGtCQUFrQixDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUM7UUFHL0QsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBRWxELElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekMsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUVyRCxNQUFNLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNuRCxDQUFDOzs7O0lBRUQsa0JBQWtCO1FBQ2hCLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNsQixDQUFDOzs7O0lBRUQsUUFBUTtRQUNOLFVBQVUsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7Ozs7SUFFRCxjQUFjOztjQUNOLElBQUksR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFO1FBRWxDLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxJQUFJLENBQUMsRUFBRSxFQUFFO1lBQzNCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUN0QixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDeEM7SUFDSCxDQUFDOzs7O0lBRUQsY0FBYzs7Y0FDTixLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUU7UUFFbEMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7O2tCQUMvQixnQkFBZ0IsR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUM7WUFFcEUsSUFBSSxnQkFBZ0IsR0FBRyxvQkFBb0IsRUFBRSxFQUFFOztzQkFDdkMsUUFBUSxHQUFHLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUMzQixDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQ2QsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7Z0JBRVosT0FBTyxRQUFRLENBQUM7YUFDakI7U0FDRjtRQUVELE9BQU8sS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDakMsQ0FBQzs7QUF0RGUsK0JBQVksR0FBbUI7SUFDN0MsU0FBUyxFQUFFLEVBQUU7SUFDYixNQUFNLEVBQUUsRUFBRTtDQUNYLENBQUM7O1lBUkgsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxHQUFJLE1BQU0sQ0FBQyxVQUFVLENBQUMsTUFBTyxhQUFhO2dCQUNwRCx1SEFBMEM7YUFDM0M7Ozs7O29CQU9FLGVBQWUsU0FBQyxzQkFBc0I7OEJBRXRDLE1BQU0sU0FBQyxVQUFVO3dCQUVqQixLQUFLO3FCQUNMLEtBQUs7Ozs7SUFWTixnQ0FHRTs7SUFFRixtQ0FBa0Y7O0lBRWxGLDZDQUEwRDs7SUFFMUQsdUNBQXVFOztJQUN2RSxvQ0FBaUUiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgV29ya3lsYWIuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3dvcmt5bGFiL21hdGVyaWFsaXplLWFuZ3VsYXIvbWFzdGVyL0xJQ0VOU0VcbiAqL1xuXG5pbXBvcnQgeyBBZnRlckNvbnRlbnRJbml0LCBDb21wb25lbnQsIENvbnRlbnRDaGlsZHJlbiwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0LCBRdWVyeUxpc3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGNvbmZpZyB9IGZyb20gJy4uLy4uL2NvbmZpZyc7XG5pbXBvcnQgeyBnZXRPZmZzZVRvcCB9IGZyb20gJy4uLy4uL3V0aWxzL2dldC1vZmZzZXQtdG9wLnV0aWwnO1xuaW1wb3J0IHsgU2Nyb2xsU3B5SXRlbUNvbXBvbmVudCB9IGZyb20gJy4vc2Nyb2xsLXNweS1pdGVtL3Njcm9sbC1zcHktaXRlbS5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2Nyb2xsU3B5TW9kZWwgfSBmcm9tICcuL3Njcm9sbC1zcHkubW9kZWwnO1xuaW1wb3J0IHsgd2luZG93U2Nyb2xsUG9zaXRpb24gfSBmcm9tICcuLi8uLi91dGlscy93aW5kb3ctc2Nyb2xsLXBvc2l0aW9uLnV0aWwnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6IGAkeyBjb25maWcuY29tcG9uZW50cy5wcmVmaXggfS1zY3JvbGwtc3B5YCxcbiAgdGVtcGxhdGVVcmw6ICcuL3Njcm9sbC1zcHkuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIFNjcm9sbFNweUNvbXBvbmVudCBpbXBsZW1lbnRzIFNjcm9sbFNweU1vZGVsLCBBZnRlckNvbnRlbnRJbml0IHtcbiAgc3RhdGljIHJlYWRvbmx5IGRlZmF1bHRQcm9wczogU2Nyb2xsU3B5TW9kZWwgPSB7XG4gICAgY2xhc3NOYW1lOiAnJyxcbiAgICBpdGVtSWQ6ICcnXG4gIH07XG5cbiAgQENvbnRlbnRDaGlsZHJlbihTY3JvbGxTcHlJdGVtQ29tcG9uZW50KSBpdGVtczogUXVlcnlMaXN0PFNjcm9sbFNweUl0ZW1Db21wb25lbnQ+O1xuXG4gIEBPdXRwdXQoJ29uQ2hhbmdlJykgb25DaGFuZ2VFbWl0dGVyOiBFdmVudEVtaXR0ZXI8c3RyaW5nPjtcblxuICBASW5wdXQoKSBjbGFzc05hbWU6IHN0cmluZyA9IFNjcm9sbFNweUNvbXBvbmVudC5kZWZhdWx0UHJvcHMuY2xhc3NOYW1lO1xuICBASW5wdXQoKSBpdGVtSWQ6IHN0cmluZyA9IFNjcm9sbFNweUNvbXBvbmVudC5kZWZhdWx0UHJvcHMuaXRlbUlkO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMub25DaGFuZ2VFbWl0dGVyID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cbiAgICB0aGlzLm9uU2Nyb2xsID0gdGhpcy5vblNjcm9sbC5iaW5kKHRoaXMpO1xuICAgIHRoaXMudmFsaWRhdGVTY3JvbGwgPSB0aGlzLnZhbGlkYXRlU2Nyb2xsLmJpbmQodGhpcyk7XG5cbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5vblNjcm9sbCk7XG4gIH1cblxuICBuZ0FmdGVyQ29udGVudEluaXQoKSB7XG4gICAgdGhpcy5vblNjcm9sbCgpO1xuICB9XG5cbiAgb25TY3JvbGwoKSB7XG4gICAgc2V0VGltZW91dCh0aGlzLnZhbGlkYXRlU2Nyb2xsLCAxMDApO1xuICB9XG5cbiAgdmFsaWRhdGVTY3JvbGwoKSB7XG4gICAgY29uc3QgaXRlbSA9IHRoaXMuZ2V0Q3VycmVudEl0ZW0oKTtcblxuICAgIGlmICh0aGlzLml0ZW1JZCAhPT0gaXRlbS5pZCkge1xuICAgICAgdGhpcy5pdGVtSWQgPSBpdGVtLmlkO1xuICAgICAgdGhpcy5vbkNoYW5nZUVtaXR0ZXIuZW1pdCh0aGlzLml0ZW1JZCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0Q3VycmVudEl0ZW0oKTogU2Nyb2xsU3B5SXRlbUNvbXBvbmVudCB7XG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLml0ZW1zLnRvQXJyYXkoKTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGVsZW1lbnRPZmZzZXRUb3AgPSBnZXRPZmZzZVRvcChpdGVtc1tpXS5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQpO1xuXG4gICAgICBpZiAoZWxlbWVudE9mZnNldFRvcCA+IHdpbmRvd1Njcm9sbFBvc2l0aW9uKCkpIHtcbiAgICAgICAgY29uc3QgcHJldkl0ZW0gPSBpdGVtc1tpIC0gMV1cbiAgICAgICAgICA/IGl0ZW1zW2kgLSAxXVxuICAgICAgICAgIDogaXRlbXNbMF07XG5cbiAgICAgICAgcmV0dXJuIHByZXZJdGVtO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBpdGVtc1tpdGVtcy5sZW5ndGggLSAxXTtcbiAgfVxufVxuIl19