UNPKG

theme-lib

Version:

This is a simple example Angular Library published to npm.

152 lines 12.7 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Directive, ContentChildren, QueryList, Input, ElementRef, Output, EventEmitter, } from '@angular/core'; import { takeWhile } from 'rxjs/operators'; import 'intersection-observer'; import { NbListItemComponent } from './list.component'; /* * List pager directive * * Directive allows you to determine page of currently viewing items. * */ export class NbListPageTrackerDirective { constructor() { this.alive = true; /* * Page to start counting with. */ this.startPage = 1; /* * Emits when another page become visible. */ this.pageChange = new EventEmitter(); this.observer = new IntersectionObserver(entries => this.checkForPageChange(entries), { threshold: 0.5 }); } /** * @return {?} */ ngAfterViewInit() { if (this.listItems && this.listItems.length) { this.observeItems(); } this.listItems.changes .pipe(takeWhile(() => this.alive)) .subscribe(() => this.observeItems()); } /** * @return {?} */ ngOnDestroy() { this.observer.disconnect && this.observer.disconnect(); } /** * @private * @return {?} */ observeItems() { this.listItems.forEach(i => this.observer.observe(i.nativeElement)); } /** * @private * @param {?} entries * @return {?} */ checkForPageChange(entries) { /** @type {?} */ const mostVisiblePage = this.findMostVisiblePage(entries); if (mostVisiblePage && this.currentPage !== mostVisiblePage) { this.currentPage = mostVisiblePage; this.pageChange.emit(this.currentPage); } } /** * @private * @param {?} entries * @return {?} */ findMostVisiblePage(entries) { /** @type {?} */ const intersectionRatioByPage = new Map(); for (const entry of entries) { if (entry.intersectionRatio < 0.5) { continue; } /** @type {?} */ const elementIndex = this.elementIndex(entry.target); if (elementIndex === -1) { continue; } /** @type {?} */ const page = this.startPage + Math.floor(elementIndex / this.pageSize); /** @type {?} */ let ratio = entry.intersectionRatio; if (intersectionRatioByPage.has(page)) { ratio += intersectionRatioByPage.get(page); } intersectionRatioByPage.set(page, ratio); } /** @type {?} */ let maxRatio = 0; /** @type {?} */ let mostVisiblePage; intersectionRatioByPage.forEach((ratio, page) => { if (ratio > maxRatio) { maxRatio = ratio; mostVisiblePage = page; } }); return mostVisiblePage; } /** * @private * @param {?} element * @return {?} */ elementIndex(element) { return element.parentElement && element.parentElement.children ? Array.from(element.parentElement.children).indexOf(element) : -1; } } NbListPageTrackerDirective.decorators = [ { type: Directive, args: [{ selector: '[nbListPageTracker]', },] } ]; /** @nocollapse */ NbListPageTrackerDirective.ctorParameters = () => []; NbListPageTrackerDirective.propDecorators = { pageSize: [{ type: Input }], startPage: [{ type: Input }], pageChange: [{ type: Output }], listItems: [{ type: ContentChildren, args: [NbListItemComponent, { read: ElementRef },] }] }; if (false) { /** * @type {?} * @private */ NbListPageTrackerDirective.prototype.alive; /** * @type {?} * @private */ NbListPageTrackerDirective.prototype.observer; /** * @type {?} * @private */ NbListPageTrackerDirective.prototype.currentPage; /** @type {?} */ NbListPageTrackerDirective.prototype.pageSize; /** @type {?} */ NbListPageTrackerDirective.prototype.startPage; /** @type {?} */ NbListPageTrackerDirective.prototype.pageChange; /** @type {?} */ NbListPageTrackerDirective.prototype.listItems; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC1wYWdlLXRyYWNrZXIuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vdGhlbWUtbGliLyIsInNvdXJjZXMiOlsibGliL2NvbXBvbmVudHMvbGlzdC9saXN0LXBhZ2UtdHJhY2tlci5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsZUFBZSxFQUNmLFNBQVMsRUFDVCxLQUFLLEVBQ0wsVUFBVSxFQUdWLE1BQU0sRUFDTixZQUFZLEdBQ2IsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sdUJBQXVCLENBQUM7QUFDL0IsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7Ozs7Ozs7QUFXdkQsTUFBTSxPQUFPLDBCQUEwQjtJQTRCckM7UUExQlEsVUFBSyxHQUFHLElBQUksQ0FBQzs7OztRQWVyQixjQUFTLEdBQVcsQ0FBQyxDQUFDOzs7O1FBTXRCLGVBQVUsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBTXRDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxvQkFBb0IsQ0FDdEMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLEVBQzNDLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxDQUNuQixDQUFDO0lBQ0osQ0FBQzs7OztJQUVELGVBQWU7UUFDYixJQUFJLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUU7WUFDM0MsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1NBQ3JCO1FBRUQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPO2FBQ25CLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQ2pDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FB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biAgRGlyZWN0aXZlLFxyXG4gIENvbnRlbnRDaGlsZHJlbixcclxuICBRdWVyeUxpc3QsXHJcbiAgSW5wdXQsXHJcbiAgRWxlbWVudFJlZixcclxuICBBZnRlclZpZXdJbml0LFxyXG4gIE9uRGVzdHJveSxcclxuICBPdXRwdXQsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyB0YWtlV2hpbGUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCAnaW50ZXJzZWN0aW9uLW9ic2VydmVyJztcclxuaW1wb3J0IHsgTmJMaXN0SXRlbUNvbXBvbmVudCB9IGZyb20gJy4vbGlzdC5jb21wb25lbnQnO1xyXG5cclxuLypcclxuICogTGlzdCBwYWdlciBkaXJlY3RpdmVcclxuICpcclxuICogRGlyZWN0aXZlIGFsbG93cyB5b3UgdG8gZGV0ZXJtaW5lIHBhZ2Ugb2YgY3VycmVudGx5IHZpZXdpbmcgaXRlbXMuXHJcbiAqXHJcbiAqL1xyXG5ARGlyZWN0aXZlKHtcclxuICBzZWxlY3RvcjogJ1tuYkxpc3RQYWdlVHJhY2tlcl0nLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgTmJMaXN0UGFnZVRyYWNrZXJEaXJlY3RpdmUgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xyXG5cclxuICBwcml2YXRlIGFsaXZlID0gdHJ1ZTtcclxuXHJcbiAgcHJpdmF0ZSBvYnNlcnZlcjogSW50ZXJzZWN0aW9uT2JzZXJ2ZXI7XHJcbiAgcHJpdmF0ZSBjdXJyZW50UGFnZTogbnVtYmVyO1xyXG5cclxuICAvKlxyXG4gICAqIEl0ZW1zIHBlciBwYWdlLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgcGFnZVNpemU6IG51bWJlcjtcclxuXHJcbiAgLypcclxuICAgKiBQYWdlIHRvIHN0YXJ0IGNvdW50aW5nIHdpdGguXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzdGFydFBhZ2U6IG51bWJlciA9IDE7XHJcblxyXG4gIC8qXHJcbiAgICogRW1pdHMgd2hlbiBhbm90aGVyIHBhZ2UgYmVjb21lIHZpc2libGUuXHJcbiAgICovXHJcbiAgQE91dHB1dCgpXHJcbiAgcGFnZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xyXG5cclxuICBAQ29udGVudENoaWxkcmVuKE5iTGlzdEl0ZW1Db21wb25lbnQsIHsgcmVhZDogRWxlbWVudFJlZiB9KVxyXG4gIGxpc3RJdGVtczogUXVlcnlMaXN0PEVsZW1lbnRSZWY+O1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIHRoaXMub2JzZXJ2ZXIgPSBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoXHJcbiAgICAgIGVudHJpZXMgPT4gdGhpcy5jaGVja0ZvclBhZ2VDaGFuZ2UoZW50cmllcyksXHJcbiAgICAgIHsgdGhyZXNob2xkOiAwLjUgfSxcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICBpZiAodGhpcy5saXN0SXRlbXMgJiYgdGhpcy5saXN0SXRlbXMubGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMub2JzZXJ2ZUl0ZW1zKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5saXN0SXRlbXMuY2hhbmdlc1xyXG4gICAgICAucGlwZSh0YWtlV2hpbGUoKCkgPT4gdGhpcy5hbGl2ZSkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5vYnNlcnZlSXRlbXMoKSk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIHRoaXMub2JzZXJ2ZXIuZGlzY29ubmVjdCAmJiB0aGlzLm9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgb2JzZXJ2ZUl0ZW1zKCkge1xyXG4gICAgdGhpcy5saXN0SXRlbXMuZm9yRWFjaChpID0+IHRoaXMub2JzZXJ2ZXIub2JzZXJ2ZShpLm5hdGl2ZUVsZW1lbnQpKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2hlY2tGb3JQYWdlQ2hhbmdlKGVudHJpZXM6IEludGVyc2VjdGlvbk9ic2VydmVyRW50cnlbXSkge1xyXG4gICAgY29uc3QgbW9zdFZpc2libGVQYWdlID0gdGhpcy5maW5kTW9zdFZpc2libGVQYWdlKGVudHJpZXMpO1xyXG5cclxuICAgIGlmIChtb3N0VmlzaWJsZVBhZ2UgJiYgdGhpcy5jdXJyZW50UGFnZSAhPT0gbW9zdFZpc2libGVQYWdlKSB7XHJcbiAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSBtb3N0VmlzaWJsZVBhZ2U7XHJcbiAgICAgIHRoaXMucGFnZUNoYW5nZS5lbWl0KHRoaXMuY3VycmVudFBhZ2UpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBmaW5kTW9zdFZpc2libGVQYWdlKGVudHJpZXM6IEludGVyc2VjdGlvbk9ic2VydmVyRW50cnlbXSk6IG51bWJlciB8IG51bGwge1xyXG4gICAgY29uc3QgaW50ZXJzZWN0aW9uUmF0aW9CeVBhZ2UgPSBuZXcgTWFwPG51bWJlciwgbnVtYmVyPigpO1xyXG5cclxuICAgIGZvciAoY29uc3QgZW50cnkgb2YgZW50cmllcykge1xyXG4gICAgICBpZiAoZW50cnkuaW50ZXJzZWN0aW9uUmF0aW8gPCAwLjUpIHtcclxuICAgICAgICBjb250aW51ZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgZWxlbWVudEluZGV4ID0gdGhpcy5lbGVtZW50SW5kZXgoZW50cnkudGFyZ2V0KTtcclxuICAgICAgaWYgKGVsZW1lbnRJbmRleCA9PT0gLTEpIHtcclxuICAgICAgICBjb250aW51ZTtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBwYWdlID0gdGhpcy5zdGFydFBhZ2UgKyBNYXRoLmZsb29yKGVsZW1lbnRJbmRleCAvIHRoaXMucGFnZVNpemUpO1xyXG5cclxuICAgICAgbGV0IHJhdGlvID0gZW50cnkuaW50ZXJzZWN0aW9uUmF0aW87XHJcbiAgICAgIGlmIChpbnRlcnNlY3Rpb25SYXRpb0J5UGFnZS5oYXMocGFnZSkpIHtcclxuICAgICAgICByYXRpbyArPSBpbnRlcnNlY3Rpb25SYXRpb0J5UGFnZS5nZXQocGFnZSk7XHJcbiAgICAgIH1cclxuICAgICAgaW50ZXJzZWN0aW9uUmF0aW9CeVBhZ2Uuc2V0KHBhZ2UsIHJhdGlvKTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgbWF4UmF0aW8gPSAwO1xyXG4gICAgbGV0IG1vc3RWaXNpYmxlUGFnZTtcclxuICAgIGludGVyc2VjdGlvblJhdGlvQnlQYWdlLmZvckVhY2goKHJhdGlvLCBwYWdlKSA9PiB7XHJcbiAgICAgIGlmIChyYXRpbyA+IG1heFJhdGlvKSB7XHJcbiAgICAgICAgbWF4UmF0aW8gPSByYXRpbztcclxuICAgICAgICBtb3N0VmlzaWJsZVBhZ2UgPSBwYWdlO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gbW9zdFZpc2libGVQYWdlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBlbGVtZW50SW5kZXgoZWxlbWVudDogRWxlbWVudCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gZWxlbWVudC5wYXJlbnRFbGVtZW50ICYmIGVsZW1lbnQucGFyZW50RWxlbWVudC5jaGlsZHJlblxyXG4gICAgICA/IEFycmF5LmZyb20oZWxlbWVudC5wYXJlbnRFbGVtZW50LmNoaWxkcmVuKS5pbmRleE9mKGVsZW1lbnQpXHJcbiAgICAgIDogLTE7XHJcbiAgfVxyXG59XHJcbiJdfQ==