UNPKG

fundamental-ngx

Version:

SAP Fiori Fundamentals, implemented in Angular

237 lines 17.7 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Component, EventEmitter, Input, Output, ViewEncapsulation } from '@angular/core'; import { PaginationService } from './pagination.service'; /** * The component that is used to provide navigation between paged information. * ```html * <fd-pagination * [totalItems]="50" * [itemsPerPage]="10" * [currentPage]="3"> * </fd-pagination> * ``` */ var PaginationComponent = /** @class */ (function () { /** @hidden */ function PaginationComponent(paginationService) { this.paginationService = paginationService; /** * Whether to display the total number of items. */ this.displayTotalItems = true; /** * The text appended to the total number of items. * The default text is set to 'items' */ this.displayText = 'items'; /** * Label for the 'previous' page button. */ this.previousLabel = 'Previous'; /** * Label for the 'next' page button. */ this.nextLabel = 'Next'; /** * Event fired when the page is changed. */ this.pageChangeStart = new EventEmitter(); } /** @hidden */ /** * @hidden * @param {?} changes * @return {?} */ PaginationComponent.prototype.ngOnChanges = /** * @hidden * @param {?} changes * @return {?} */ function (changes) { if (changes && changes.currentPage) { this.currentPage = changes.currentPage.currentValue; } this.pages = this.paginationService.getPages(this.getPaginationObject()); /** @type {?} */ var totalPages = this.paginationService.getTotalPages(this.getPaginationObject()); if (!this.currentPage || this.currentPage < 1) { this.currentPage = 1; } else if (this.currentPage > totalPages) { this.currentPage = totalPages; } }; /** * Checks if the current page is the last page. */ /** * Checks if the current page is the last page. * @return {?} */ PaginationComponent.prototype.isLastPage = /** * Checks if the current page is the last page. * @return {?} */ function () { return this.currentPage === this.paginationService.getTotalPages(this.getPaginationObject()); }; /** * Navigates to a specific page when the user presses 'Space' or 'Enter' key. * @param page The number of the page. * @param $event The keyboard event. */ /** * Navigates to a specific page when the user presses 'Space' or 'Enter' key. * @param {?} page The number of the page. * @param {?} $event The keyboard event. * @return {?} */ PaginationComponent.prototype.onKeypressHandler = /** * Navigates to a specific page when the user presses 'Space' or 'Enter' key. * @param {?} page The number of the page. * @param {?} $event The keyboard event. * @return {?} */ function (page, $event) { if ($event.code === 'Space' || $event.code === 'Enter') { $event.preventDefault(); this.goToPage(page); } }; /** * Navigates to a specific page. * @param page The number of the page to navigate to. * @param $event The mouse event (optional). */ /** * Navigates to a specific page. * @param {?} page The number of the page to navigate to. * @param {?=} $event The mouse event (optional). * @return {?} */ PaginationComponent.prototype.goToPage = /** * Navigates to a specific page. * @param {?} page The number of the page to navigate to. * @param {?=} $event The mouse event (optional). * @return {?} */ function (page, $event) { if ($event) { $event.preventDefault(); } if (page > this.paginationService.getTotalPages(this.getPaginationObject()) || page < 1) { return; } this.pages = this.paginationService.getPages(this.getPaginationObject()); this.pageChangeStart.emit(page); }; /** * Retrieves an object that represents * the total number of items, the current page, and the number of items per page. */ /** * Retrieves an object that represents * the total number of items, the current page, and the number of items per page. * @return {?} */ PaginationComponent.prototype.getPaginationObject = /** * Retrieves an object that represents * the total number of items, the current page, and the number of items per page. * @return {?} */ function () { /** @type {?} */ var retVal = { totalItems: this.totalItems, currentPage: this.currentPage, itemsPerPage: this.itemsPerPage }; return retVal; }; PaginationComponent.decorators = [ { type: Component, args: [{ selector: 'fd-pagination', template: "<span class=\"fd-pagination__total\" *ngIf=\"displayTotalItems && totalItems\">{{ totalItems }} {{displayText}}</span>\n<nav class=\"fd-pagination__nav\" *ngIf=\"totalItems && totalItems >= itemsPerPage\">\n <a class=\"fd-pagination__link fd-pagination__link--previous\"\n tabindex=\"0\"\n role=\"button\"\n [attr.aria-label]=\"previousLabel\"\n [attr.aria-disabled]=\"currentPage === 1 ? true : null\"\n (keypress)=\"onKeypressHandler(currentPage - 1, $event)\"\n (click)=\"goToPage(currentPage - 1)\">\n </a>\n <ng-container *ngFor=\"let page of pages\">\n <a class=\"fd-pagination__link\"\n tabindex=\"0\"\n role=\"button\"\n (keypress)=\"onKeypressHandler(page, $event)\"\n (click)=\"goToPage(page, $event)\"\n *ngIf=\"page !== -1; else more\"\n [attr.aria-selected]=\"currentPage === page\">{{page}}</a>\n <ng-template #more>\n <span class=\"fd-pagination__link fd-pagination__link--more\"\n aria-hidden=\"true\"\n aria-label=\"...\"\n role=\"presentation\"></span>\n </ng-template>\n </ng-container>\n <a class=\"fd-pagination__link fd-pagination__link--next\"\n [attr.aria-label]=\"nextLabel\"\n tabindex=\"0\"\n role=\"button\"\n [attr.aria-disabled]=\"isLastPage()\"\n (keypress)=\"onKeypressHandler(currentPage + 1, $event)\"\n (click)=\"goToPage(currentPage + 1)\">\n </a>\n</nav>\n", providers: [PaginationService], host: { class: 'fd-pagination' }, encapsulation: ViewEncapsulation.None, styles: ["\n .fd-pagination a {\n cursor: pointer;\n }\n "] }] } ]; /** @nocollapse */ PaginationComponent.ctorParameters = function () { return [ { type: PaginationService } ]; }; PaginationComponent.propDecorators = { totalItems: [{ type: Input }], currentPage: [{ type: Input }], itemsPerPage: [{ type: Input }], displayTotalItems: [{ type: Input }], displayText: [{ type: Input }], previousLabel: [{ type: Input }], nextLabel: [{ type: Input }], pageChangeStart: [{ type: Output }] }; return PaginationComponent; }()); export { PaginationComponent }; if (false) { /** * Represents the total number of items. * @type {?} */ PaginationComponent.prototype.totalItems; /** * Represents the current page number. * @type {?} */ PaginationComponent.prototype.currentPage; /** * Represents the number of items per page. * @type {?} */ PaginationComponent.prototype.itemsPerPage; /** * Whether to display the total number of items. * @type {?} */ PaginationComponent.prototype.displayTotalItems; /** * The text appended to the total number of items. * The default text is set to 'items' * @type {?} */ PaginationComponent.prototype.displayText; /** * Label for the 'previous' page button. * @type {?} */ PaginationComponent.prototype.previousLabel; /** * Label for the 'next' page button. * @type {?} */ PaginationComponent.prototype.nextLabel; /** * Event fired when the page is changed. * @type {?} */ PaginationComponent.prototype.pageChangeStart; /** * @hidden * @type {?} */ PaginationComponent.prototype.pages; /** * @type {?} * @private */ PaginationComponent.prototype.paginationService; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnaW5hdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9mdW5kYW1lbnRhbC1uZ3gvIiwic291cmNlcyI6WyJsaWIvcGFnaW5hdGlvbi9wYWdpbmF0aW9uLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFhLE1BQU0sRUFBaUIsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDcEgsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7Ozs7Ozs7Ozs7O0FBWXpEO0lBcURJLGNBQWM7SUFDZCw2QkFBb0IsaUJBQW9DO1FBQXBDLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7Ozs7UUF6QnhELHNCQUFpQixHQUFZLElBQUksQ0FBQzs7Ozs7UUFPbEMsZ0JBQVcsR0FBVyxPQUFPLENBQUM7Ozs7UUFJOUIsa0JBQWEsR0FBVyxVQUFVLENBQUM7Ozs7UUFJbkMsY0FBUyxHQUFXLE1BQU0sQ0FBQzs7OztRQUkzQixvQkFBZSxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7SUFNYyxDQUFDO0lBRTVELGNBQWM7Ozs7OztJQUNkLHlDQUFXOzs7OztJQUFYLFVBQVksT0FBc0I7UUFDOUIsSUFBSSxPQUFPLElBQUksT0FBTyxDQUFDLFdBQVcsRUFBRTtZQUNoQyxJQUFJLENBQUMsV0FBVyxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDO1NBQ3ZEO1FBQ0QsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLENBQUM7O1lBQ25FLFVBQVUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBQ25GLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxFQUFFO1lBQzNDLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDO1NBQ3hCO2FBQU0sSUFBSSxJQUFJLENBQUMsV0FBVyxHQUFHLFVBQVUsRUFBRTtZQUN0QyxJQUFJLENBQUMsV0FBVyxHQUFHLFVBQVUsQ0FBQztTQUNqQztJQUNMLENBQUM7SUFFRDs7T0FFRzs7Ozs7SUFDSCx3Q0FBVTs7OztJQUFWO1FBQ0ksT0FBTyxJQUFJLENBQUMsV0FBVyxLQUFLLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUMsQ0FBQztJQUNqRyxDQUFDO0lBRUQ7Ozs7T0FJRzs7Ozs7OztJQUNILCtDQUFpQjs7Ozs7O0lBQWpCLFVBQWtCLElBQVksRUFBRSxNQUFxQjtRQUNqRCxJQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssT0FBTyxJQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssT0FBTyxFQUFFO1lBQ3BELE1BQU0sQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN4QixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3ZCO0lBQ0wsQ0FBQztJQUVEOzs7O09BSUc7Ozs7Ozs7SUFDSCxzQ0FBUTs7Ozs7O0lBQVIsVUFBUyxJQUFZLEVBQUUsTUFBbUI7UUFDdEMsSUFBSSxNQUFNLEVBQUU7WUFDUixNQUFNLENBQUMsY0FBYyxFQUFFLENBQUM7U0FDM0I7UUFDRCxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLElBQUksSUFBSSxHQUFHLENBQUMsRUFBRTtZQUNyRixPQUFPO1NBQ1Y7UUFDRCxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUMsQ0FBQztRQUN6RSxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQ7OztPQUdHOzs7Ozs7SUFDSCxpREFBbUI7Ozs7O0lBQW5COztZQUNVLE1BQU0sR0FBRztZQUNYLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVTtZQUMzQixXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVc7WUFDN0IsWUFBWSxFQUFFLElBQUksQ0FBQyxZQUFZO1NBQ2xDO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDbEIsQ0FBQzs7Z0JBcEhKLFNBQVMsU0FBQztvQkFDUCxRQUFRLEVBQUUsZUFBZTtvQkFDekIsa2dEQUEwQztvQkFDMUMsU0FBUyxFQUFFLENBQUMsaUJBQWlCLENBQUM7b0JBQzlCLElBQUksRUFBRTt3QkFDRixLQUFLLEVBQUUsZUFBZTtxQkFDekI7b0JBTUQsYUFBYSxFQUFFLGlCQUFpQixDQUFDLElBQUk7NkJBTDVCLDZFQUlSO2lCQUVKOzs7O2dCQXpCUSxpQkFBaUI7Ozs2QkE0QnJCLEtBQUs7OEJBSUwsS0FBSzsrQkFJTCxLQUFLO29DQUlMLEtBQUs7OEJBT0wsS0FBSztnQ0FJTCxLQUFLOzRCQUlMLEtBQUs7a0NBSUwsTUFBTTs7SUFzRVgsMEJBQUM7Q0FBQSxBQXJIRCxJQXFIQztTQXZHWSxtQkFBbUI7Ozs7OztJQUU1Qix5Q0FDbUI7Ozs7O0lBR25CLDBDQUNvQjs7Ozs7SUFHcEIsMkNBQ3FCOzs7OztJQUdyQixnREFDa0M7Ozs7OztJQU1sQywwQ0FDOEI7Ozs7O0lBRzlCLDRDQUNtQzs7Ozs7SUFHbkMsd0NBQzJCOzs7OztJQUczQiw4Q0FDNkM7Ozs7O0lBRzdDLG9DQUFnQjs7Ozs7SUFHSixnREFBNEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uQ2hhbmdlcywgT3V0cHV0LCBTaW1wbGVDaGFuZ2VzLCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUGFnaW5hdGlvblNlcnZpY2UgfSBmcm9tICcuL3BhZ2luYXRpb24uc2VydmljZSc7XG5cbi8qKlxuICogVGhlIGNvbXBvbmVudCB0aGF0IGlzIHVzZWQgdG8gcHJvdmlkZSBuYXZpZ2F0aW9uIGJldHdlZW4gcGFnZWQgaW5mb3JtYXRpb24uXG4gKiBgYGBodG1sXG4gKiA8ZmQtcGFnaW5hdGlvbiBcbiAqICAgICAgICAgIFt0b3RhbEl0ZW1zXT1cIjUwXCIgXG4gKiAgICAgICAgICBbaXRlbXNQZXJQYWdlXT1cIjEwXCIgXG4gKiAgICAgICAgICBbY3VycmVudFBhZ2VdPVwiM1wiPlxuICogPC9mZC1wYWdpbmF0aW9uPlxuICogYGBgXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZmQtcGFnaW5hdGlvbicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3BhZ2luYXRpb24uY29tcG9uZW50Lmh0bWwnLFxuICAgIHByb3ZpZGVyczogW1BhZ2luYXRpb25TZXJ2aWNlXSxcbiAgICBob3N0OiB7XG4gICAgICAgIGNsYXNzOiAnZmQtcGFnaW5hdGlvbidcbiAgICB9LFxuICAgIHN0eWxlczogW2BcbiAgICAgICAgLmZkLXBhZ2luYXRpb24gYSB7XG4gICAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICAgIH1cbiAgICBgXSxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXG59KVxuZXhwb3J0IGNsYXNzIFBhZ2luYXRpb25Db21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMge1xuICAgIC8qKiBSZXByZXNlbnRzIHRoZSB0b3RhbCBudW1iZXIgb2YgaXRlbXMuICovXG4gICAgQElucHV0KClcbiAgICB0b3RhbEl0ZW1zOiBudW1iZXI7XG4gICAgXG4gICAgLyoqIFJlcHJlc2VudHMgdGhlIGN1cnJlbnQgcGFnZSBudW1iZXIuICovXG4gICAgQElucHV0KClcbiAgICBjdXJyZW50UGFnZTogbnVtYmVyO1xuICAgIFxuICAgIC8qKiBSZXByZXNlbnRzIHRoZSBudW1iZXIgb2YgaXRlbXMgcGVyIHBhZ2UuICovXG4gICAgQElucHV0KClcbiAgICBpdGVtc1BlclBhZ2U6IG51bWJlcjtcblxuICAgIC8qKiBXaGV0aGVyIHRvIGRpc3BsYXkgdGhlIHRvdGFsIG51bWJlciBvZiBpdGVtcy4gKi9cbiAgICBASW5wdXQoKVxuICAgIGRpc3BsYXlUb3RhbEl0ZW1zOiBib29sZWFuID0gdHJ1ZTtcbiAgICBcbiAgICAvKiogXG4gICAgICogVGhlIHRleHQgYXBwZW5kZWQgdG8gdGhlIHRvdGFsIG51bWJlciBvZiBpdGVtcy4gXG4gICAgICogVGhlIGRlZmF1bHQgdGV4dCBpcyBzZXQgdG8gJ2l0ZW1zJyBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGRpc3BsYXlUZXh0OiBzdHJpbmcgPSAnaXRlbXMnO1xuXG4gICAgLyoqIExhYmVsIGZvciB0aGUgJ3ByZXZpb3VzJyBwYWdlIGJ1dHRvbi4gKi9cbiAgICBASW5wdXQoKVxuICAgIHByZXZpb3VzTGFiZWw6IHN0cmluZyA9ICdQcmV2aW91cyc7XG5cbiAgICAvKiogTGFiZWwgZm9yIHRoZSAnbmV4dCcgcGFnZSBidXR0b24uICovXG4gICAgQElucHV0KClcbiAgICBuZXh0TGFiZWw6IHN0cmluZyA9ICdOZXh0JztcblxuICAgIC8qKiBFdmVudCBmaXJlZCB3aGVuIHRoZSBwYWdlIGlzIGNoYW5nZWQuICovXG4gICAgQE91dHB1dCgpXG4gICAgcGFnZUNoYW5nZVN0YXJ0ID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHBhZ2VzOiBudW1iZXJbXTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBwYWdpbmF0aW9uU2VydmljZTogUGFnaW5hdGlvblNlcnZpY2UpIHt9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICAgICAgaWYgKGNoYW5nZXMgJiYgY2hhbmdlcy5jdXJyZW50UGFnZSkge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IGNoYW5nZXMuY3VycmVudFBhZ2UuY3VycmVudFZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucGFnZXMgPSB0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLmdldFBhZ2VzKHRoaXMuZ2V0UGFnaW5hdGlvbk9iamVjdCgpKTtcbiAgICAgICAgY29uc3QgdG90YWxQYWdlcyA9IHRoaXMucGFnaW5hdGlvblNlcnZpY2UuZ2V0VG90YWxQYWdlcyh0aGlzLmdldFBhZ2luYXRpb25PYmplY3QoKSk7XG4gICAgICAgIGlmICghdGhpcy5jdXJyZW50UGFnZSB8fCB0aGlzLmN1cnJlbnRQYWdlIDwgMSkge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IDE7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5jdXJyZW50UGFnZSA+IHRvdGFsUGFnZXMpIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSB0b3RhbFBhZ2VzO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIHRoZSBjdXJyZW50IHBhZ2UgaXMgdGhlIGxhc3QgcGFnZS5cbiAgICAgKi9cbiAgICBpc0xhc3RQYWdlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50UGFnZSA9PT0gdGhpcy5wYWdpbmF0aW9uU2VydmljZS5nZXRUb3RhbFBhZ2VzKHRoaXMuZ2V0UGFnaW5hdGlvbk9iamVjdCgpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBOYXZpZ2F0ZXMgdG8gYSBzcGVjaWZpYyBwYWdlIHdoZW4gdGhlIHVzZXIgcHJlc3NlcyAnU3BhY2UnIG9yICdFbnRlcicga2V5LlxuICAgICAqIEBwYXJhbSBwYWdlIFRoZSBudW1iZXIgb2YgdGhlIHBhZ2UuXG4gICAgICogQHBhcmFtICRldmVudCBUaGUga2V5Ym9hcmQgZXZlbnQuXG4gICAgICovXG4gICAgb25LZXlwcmVzc0hhbmRsZXIocGFnZTogbnVtYmVyLCAkZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgaWYgKCRldmVudC5jb2RlID09PSAnU3BhY2UnIHx8ICRldmVudC5jb2RlID09PSAnRW50ZXInKSB7XG4gICAgICAgICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHRoaXMuZ29Ub1BhZ2UocGFnZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBOYXZpZ2F0ZXMgdG8gYSBzcGVjaWZpYyBwYWdlLlxuICAgICAqIEBwYXJhbSBwYWdlIFRoZSBudW1iZXIgb2YgdGhlIHBhZ2UgdG8gbmF2aWdhdGUgdG8uXG4gICAgICogQHBhcmFtICRldmVudCBUaGUgbW91c2UgZXZlbnQgKG9wdGlvbmFsKS5cbiAgICAgKi9cbiAgICBnb1RvUGFnZShwYWdlOiBudW1iZXIsICRldmVudD86IE1vdXNlRXZlbnQpIHtcbiAgICAgICAgaWYgKCRldmVudCkge1xuICAgICAgICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBhZ2UgPiB0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLmdldFRvdGFsUGFnZXModGhpcy5nZXRQYWdpbmF0aW9uT2JqZWN0KCkpIHx8IHBhZ2UgPCAxKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wYWdlcyA9IHRoaXMucGFnaW5hdGlvblNlcnZpY2UuZ2V0UGFnZXModGhpcy5nZXRQYWdpbmF0aW9uT2JqZWN0KCkpO1xuICAgICAgICB0aGlzLnBhZ2VDaGFuZ2VTdGFydC5lbWl0KHBhZ2UpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHJpZXZlcyBhbiBvYmplY3QgdGhhdCByZXByZXNlbnRzIFxuICAgICAqIHRoZSB0b3RhbCBudW1iZXIgb2YgaXRlbXMsIHRoZSBjdXJyZW50IHBhZ2UsIGFuZCB0aGUgbnVtYmVyIG9mIGl0ZW1zIHBlciBwYWdlLlxuICAgICAqL1xuICAgIGdldFBhZ2luYXRpb25PYmplY3QoKSB7XG4gICAgICAgIGNvbnN0IHJldFZhbCA9IHtcbiAgICAgICAgICAgIHRvdGFsSXRlbXM6IHRoaXMudG90YWxJdGVtcyxcbiAgICAgICAgICAgIGN1cnJlbnRQYWdlOiB0aGlzLmN1cnJlbnRQYWdlLFxuICAgICAgICAgICAgaXRlbXNQZXJQYWdlOiB0aGlzLml0ZW1zUGVyUGFnZVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gcmV0VmFsO1xuICAgIH1cbn1cbiJdfQ==