theme-lib
Version:
This is a simple example Angular Library published to npm.
194 lines • 14.5 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import * as tslib_1 from "tslib";
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.
*
*/
var NbListPageTrackerDirective = /** @class */ (function () {
function NbListPageTrackerDirective() {
var _this = this;
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(function (entries) { return _this.checkForPageChange(entries); }, { threshold: 0.5 });
}
/**
* @return {?}
*/
NbListPageTrackerDirective.prototype.ngAfterViewInit = /**
* @return {?}
*/
function () {
var _this = this;
if (this.listItems && this.listItems.length) {
this.observeItems();
}
this.listItems.changes
.pipe(takeWhile(function () { return _this.alive; }))
.subscribe(function () { return _this.observeItems(); });
};
/**
* @return {?}
*/
NbListPageTrackerDirective.prototype.ngOnDestroy = /**
* @return {?}
*/
function () {
this.observer.disconnect && this.observer.disconnect();
};
/**
* @private
* @return {?}
*/
NbListPageTrackerDirective.prototype.observeItems = /**
* @private
* @return {?}
*/
function () {
var _this = this;
this.listItems.forEach(function (i) { return _this.observer.observe(i.nativeElement); });
};
/**
* @private
* @param {?} entries
* @return {?}
*/
NbListPageTrackerDirective.prototype.checkForPageChange = /**
* @private
* @param {?} entries
* @return {?}
*/
function (entries) {
/** @type {?} */
var mostVisiblePage = this.findMostVisiblePage(entries);
if (mostVisiblePage && this.currentPage !== mostVisiblePage) {
this.currentPage = mostVisiblePage;
this.pageChange.emit(this.currentPage);
}
};
/**
* @private
* @param {?} entries
* @return {?}
*/
NbListPageTrackerDirective.prototype.findMostVisiblePage = /**
* @private
* @param {?} entries
* @return {?}
*/
function (entries) {
var e_1, _a;
/** @type {?} */
var intersectionRatioByPage = new Map();
try {
for (var entries_1 = tslib_1.__values(entries), entries_1_1 = entries_1.next(); !entries_1_1.done; entries_1_1 = entries_1.next()) {
var entry = entries_1_1.value;
if (entry.intersectionRatio < 0.5) {
continue;
}
/** @type {?} */
var elementIndex = this.elementIndex(entry.target);
if (elementIndex === -1) {
continue;
}
/** @type {?} */
var page = this.startPage + Math.floor(elementIndex / this.pageSize);
/** @type {?} */
var ratio = entry.intersectionRatio;
if (intersectionRatioByPage.has(page)) {
ratio += intersectionRatioByPage.get(page);
}
intersectionRatioByPage.set(page, ratio);
}
}
catch (e_1_1) { e_1 = { error: e_1_1 }; }
finally {
try {
if (entries_1_1 && !entries_1_1.done && (_a = entries_1.return)) _a.call(entries_1);
}
finally { if (e_1) throw e_1.error; }
}
/** @type {?} */
var maxRatio = 0;
/** @type {?} */
var mostVisiblePage;
intersectionRatioByPage.forEach(function (ratio, page) {
if (ratio > maxRatio) {
maxRatio = ratio;
mostVisiblePage = page;
}
});
return mostVisiblePage;
};
/**
* @private
* @param {?} element
* @return {?}
*/
NbListPageTrackerDirective.prototype.elementIndex = /**
* @private
* @param {?} element
* @return {?}
*/
function (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 = function () { return []; };
NbListPageTrackerDirective.propDecorators = {
pageSize: [{ type: Input }],
startPage: [{ type: Input }],
pageChange: [{ type: Output }],
listItems: [{ type: ContentChildren, args: [NbListItemComponent, { read: ElementRef },] }]
};
return NbListPageTrackerDirective;
}());
export { NbListPageTrackerDirective };
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC1wYWdlLXRyYWNrZXIuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vdGhlbWUtbGliLyIsInNvdXJjZXMiOlsibGliL2NvbXBvbmVudHMvbGlzdC9saXN0LXBhZ2UtdHJhY2tlci5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULGVBQWUsRUFDZixTQUFTLEVBQ1QsS0FBSyxFQUNMLFVBQVUsRUFHVixNQUFNLEVBQ04sWUFBWSxHQUNiLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLHVCQUF1QixDQUFDO0FBQy9CLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDOzs7Ozs7O0FBUXZEO0lBK0JFO1FBQUEsaUJBS0M7UUEvQk8sVUFBSyxHQUFHLElBQUksQ0FBQzs7OztRQWVyQixjQUFTLEdBQVcsQ0FBQyxDQUFDOzs7O1FBTXRCLGVBQVUsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBTXRDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxvQkFBb0IsQ0FDdEMsVUFBQSxPQUFPLElBQUksT0FBQSxLQUFJLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLEVBQWhDLENBQWdDLEVBQzNDLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxDQUNuQixDQUFDO0lBQ0osQ0FBQzs7OztJQUVELG9EQUFlOzs7SUFBZjtRQUFBLGlCQVFDO1FBUEMsSUFBSSxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFO1lBQzNDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztTQUNyQjtRQUVELElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTzthQUNuQixJQUFJLENBQUMsU0FBUyxDQUFDLGNBQU0sT0FBQSxLQUFJLENBQUMsS0FBSyxFQUFWLENBQVUsQ0FBQyxDQUFD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QUFFLFVBQVUsRUFBRTs7SUEyRTVELGlDQUFDO0NBQUEsQUF2R0QsSUF1R0M7U0FwR1ksMEJBQTBCOzs7Ozs7SUFFckMsMkNBQXFCOzs7OztJQUVyQiw4Q0FBdUM7Ozs7O0lBQ3ZDLGlEQUE0Qjs7SUFLNUIsOENBQ2lCOztJQUtqQiwrQ0FDc0I7O0lBS3RCLGdEQUN3Qzs7SUFFeEMsK0NBQ2lDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBEaXJlY3RpdmUsXHJcbiAgQ29udGVudENoaWxkcmVuLFxyXG4gIFF1ZXJ5TGlzdCxcclxuICBJbnB1dCxcclxuICBFbGVtZW50UmVmLFxyXG4gIEFmdGVyVmlld0luaXQsXHJcbiAgT25EZXN0cm95LFxyXG4gIE91dHB1dCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IHRha2VXaGlsZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0ICdpbnRlcnNlY3Rpb24tb2JzZXJ2ZXInO1xyXG5pbXBvcnQgeyBOYkxpc3RJdGVtQ29tcG9uZW50IH0gZnJvbSAnLi9saXN0LmNvbXBvbmVudCc7XHJcblxyXG4vKlxyXG4gKiBMaXN0IHBhZ2VyIGRpcmVjdGl2ZVxyXG4gKlxyXG4gKiBEaXJlY3RpdmUgYWxsb3dzIHlvdSB0byBkZXRlcm1pbmUgcGFnZSBvZiBjdXJyZW50bHkgdmlld2luZyBpdGVtcy5cclxuICpcclxuICovXHJcbkBEaXJlY3RpdmUoe1xyXG4gIHNlbGVjdG9yOiAnW25iTGlzdFBhZ2VUcmFja2VyXScsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBOYkxpc3RQYWdlVHJhY2tlckRpcmVjdGl2ZSBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XHJcblxyXG4gIHByaXZhdGUgYWxpdmUgPSB0cnVlO1xyXG5cclxuICBwcml2YXRlIG9ic2VydmVyOiBJbnRlcnNlY3Rpb25PYnNlcnZlcjtcclxuICBwcml2YXRlIGN1cnJlbnRQYWdlOiBudW1iZXI7XHJcblxyXG4gIC8qXHJcbiAgICogSXRlbXMgcGVyIHBhZ2UuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBwYWdlU2l6ZTogbnVtYmVyO1xyXG5cclxuICAvKlxyXG4gICAqIFBhZ2UgdG8gc3RhcnQgY291bnRpbmcgd2l0aC5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHN0YXJ0UGFnZTogbnVtYmVyID0gMTtcclxuXHJcbiAgLypcclxuICAgKiBFbWl0cyB3aGVuIGFub3RoZXIgcGFnZSBiZWNvbWUgdmlzaWJsZS5cclxuICAgKi9cclxuICBAT3V0cHV0KClcclxuICBwYWdlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XHJcblxyXG4gIEBDb250ZW50Q2hpbGRyZW4oTmJMaXN0SXRlbUNvbXBvbmVudCwgeyByZWFkOiBFbGVtZW50UmVmIH0pXHJcbiAgbGlzdEl0ZW1zOiBRdWVyeUxpc3Q8RWxlbWVudFJlZj47XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgdGhpcy5vYnNlcnZlciA9IG5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcihcclxuICAgICAgZW50cmllcyA9PiB0aGlzLmNoZWNrRm9yUGFnZUNoYW5nZShlbnRyaWVzKSxcclxuICAgICAgeyB0aHJlc2hvbGQ6IDAuNSB9LFxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgIGlmICh0aGlzLmxpc3RJdGVtcyAmJiB0aGlzLmxpc3RJdGVtcy5sZW5ndGgpIHtcclxuICAgICAgdGhpcy5vYnNlcnZlSXRlbXMoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmxpc3RJdGVtcy5jaGFuZ2VzXHJcbiAgICAgIC5waXBlKHRha2VXaGlsZSgoKSA9PiB0aGlzLmFsaXZlKSlcclxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLm9ic2VydmVJdGVtcygpKTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgdGhpcy5vYnNlcnZlci5kaXNjb25uZWN0ICYmIHRoaXMub2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBvYnNlcnZlSXRlbXMoKSB7XHJcbiAgICB0aGlzLmxpc3RJdGVtcy5mb3JFYWNoKGkgPT4gdGhpcy5vYnNlcnZlci5vYnNlcnZlKGkubmF0aXZlRWxlbWVudCkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjaGVja0ZvclBhZ2VDaGFuZ2UoZW50cmllczogSW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbnRyeVtdKSB7XHJcbiAgICBjb25zdCBtb3N0VmlzaWJsZVBhZ2UgPSB0aGlzLmZpbmRNb3N0VmlzaWJsZVBhZ2UoZW50cmllcyk7XHJcblxyXG4gICAgaWYgKG1vc3RWaXNpYmxlUGFnZSAmJiB0aGlzLmN1cnJlbnRQYWdlICE9PSBtb3N0VmlzaWJsZVBhZ2UpIHtcclxuICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IG1vc3RWaXNpYmxlUGFnZTtcclxuICAgICAgdGhpcy5wYWdlQ2hhbmdlLmVtaXQodGhpcy5jdXJyZW50UGFnZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZpbmRNb3N0VmlzaWJsZVBhZ2UoZW50cmllczogSW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbnRyeVtdKTogbnVtYmVyIHwgbnVsbCB7XHJcbiAgICBjb25zdCBpbnRlcnNlY3Rpb25SYXRpb0J5UGFnZSA9IG5ldyBNYXA8bnVtYmVyLCBudW1iZXI+KCk7XHJcblxyXG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiBlbnRyaWVzKSB7XHJcbiAgICAgIGlmIChlbnRyeS5pbnRlcnNlY3Rpb25SYXRpbyA8IDAuNSkge1xyXG4gICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBlbGVtZW50SW5kZXggPSB0aGlzLmVsZW1lbnRJbmRleChlbnRyeS50YXJnZXQpO1xyXG4gICAgICBpZiAoZWxlbWVudEluZGV4ID09PSAtMSkge1xyXG4gICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IHBhZ2UgPSB0aGlzLnN0YXJ0UGFnZSArIE1hdGguZmxvb3IoZWxlbWVudEluZGV4IC8gdGhpcy5wYWdlU2l6ZSk7XHJcblxyXG4gICAgICBsZXQgcmF0aW8gPSBlbnRyeS5pbnRlcnNlY3Rpb25SYXRpbztcclxuICAgICAgaWYgKGludGVyc2VjdGlvblJhdGlvQnlQYWdlLmhhcyhwYWdlKSkge1xyXG4gICAgICAgIHJhdGlvICs9IGludGVyc2VjdGlvblJhdGlvQnlQYWdlLmdldChwYWdlKTtcclxuICAgICAgfVxyXG4gICAgICBpbnRlcnNlY3Rpb25SYXRpb0J5UGFnZS5zZXQocGFnZSwgcmF0aW8pO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBtYXhSYXRpbyA9IDA7XHJcbiAgICBsZXQgbW9zdFZpc2libGVQYWdlO1xyXG4gICAgaW50ZXJzZWN0aW9uUmF0aW9CeVBhZ2UuZm9yRWFjaCgocmF0aW8sIHBhZ2UpID0+IHtcclxuICAgICAgaWYgKHJhdGlvID4gbWF4UmF0aW8pIHtcclxuICAgICAgICBtYXhSYXRpbyA9IHJhdGlvO1xyXG4gICAgICAgIG1vc3RWaXNpYmxlUGFnZSA9IHBhZ2U7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBtb3N0VmlzaWJsZVBhZ2U7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGVsZW1lbnRJbmRleChlbGVtZW50OiBFbGVtZW50KTogbnVtYmVyIHtcclxuICAgIHJldHVybiBlbGVtZW50LnBhcmVudEVsZW1lbnQgJiYgZWxlbWVudC5wYXJlbnRFbGVtZW50LmNoaWxkcmVuXHJcbiAgICAgID8gQXJyYXkuZnJvbShlbGVtZW50LnBhcmVudEVsZW1lbnQuY2hpbGRyZW4pLmluZGV4T2YoZWxlbWVudClcclxuICAgICAgOiAtMTtcclxuICB9XHJcbn1cclxuIl19