UNPKG

igniteui-angular

Version:

Ignite UI for Angular is a dependency-free Angular toolkit for building modern web apps

282 lines • 23.9 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Component, Input, HostBinding, HostListener, ChangeDetectionStrategy, ElementRef } from '@angular/core'; import { IgxColumnComponent } from '../column.component'; import { IgxGridSelectionService } from '../../core/grid-selection'; import { SUPPORTED_KEYS } from '../../core/utils'; var IgxSummaryCellComponent = /** @class */ (function () { function IgxSummaryCellComponent(element, selectionService) { this.element = element; this.selectionService = selectionService; this.firstCellIndentation = 0; this.hasSummary = false; this.tabindex = 0; } Object.defineProperty(IgxSummaryCellComponent.prototype, "visibleColumnIndex", { get: /** * @return {?} */ function () { return this.column.visibleIndex; }, enumerable: true, configurable: true }); Object.defineProperty(IgxSummaryCellComponent.prototype, "describeby", { get: /** * @return {?} */ function () { return "Summary_" + this.column.field; }, enumerable: true, configurable: true }); /** * @return {?} */ IgxSummaryCellComponent.prototype.onFocus = /** * @return {?} */ function () { this.focused = true; }; /** * @return {?} */ IgxSummaryCellComponent.prototype.onBlur = /** * @return {?} */ function () { this.focused = false; }; /** * @param {?} event * @return {?} */ IgxSummaryCellComponent.prototype.dispatchEvent = /** * @param {?} event * @return {?} */ function (event) { // TODO: Refactor /** @type {?} */ var key = event.key.toLowerCase(); /** @type {?} */ var ctrl = event.ctrlKey; /** @type {?} */ var shift = event.shiftKey; if (!SUPPORTED_KEYS.has(key)) { return; } event.stopPropagation(); /** @type {?} */ var args = { targetType: 'summaryCell', target: this, event: event, cancel: false }; this.grid.onGridKeydown.emit(args); if (args.cancel) { return; } event.preventDefault(); if (!this.isKeySupportedInCell(key, ctrl)) { return; } this.selectionService.keyboardState.shift = shift && !(key === 'tab'); /** @type {?} */ var row = this.getRowElementByIndex(this.rowIndex); switch (key) { case 'tab': if (shift) { this.grid.navigation.performShiftTabKey(row, this.rowIndex, this.visibleColumnIndex, true); break; } this.grid.navigation.performTab(row, this.rowIndex, this.visibleColumnIndex, true); break; case 'arrowleft': case 'home': case 'left': if (ctrl || key === 'home') { this.grid.navigation.onKeydownHome(this.rowIndex, true); break; } this.grid.navigation.onKeydownArrowLeft(this.nativeElement, this.rowIndex, this.visibleColumnIndex, true); break; case 'end': case 'arrowright': case 'right': if (ctrl || key === 'end') { this.grid.navigation.onKeydownEnd(this.rowIndex, true); break; } this.grid.navigation.onKeydownArrowRight(this.nativeElement, this.rowIndex, this.visibleColumnIndex, true); break; case 'arrowup': case 'up': this.grid.navigation.navigateUp(row, this.rowIndex, this.visibleColumnIndex); break; case 'arrowdown': case 'down': this.grid.navigation.navigateDown(row, this.rowIndex, this.visibleColumnIndex); break; } }; Object.defineProperty(IgxSummaryCellComponent.prototype, "width", { get: /** * @return {?} */ function () { return this.column.getCellWidth(); }, enumerable: true, configurable: true }); Object.defineProperty(IgxSummaryCellComponent.prototype, "nativeElement", { get: /** * @return {?} */ function () { return this.element.nativeElement; }, enumerable: true, configurable: true }); Object.defineProperty(IgxSummaryCellComponent.prototype, "columnDatatype", { get: /** * @return {?} */ function () { return this.column.dataType; }, enumerable: true, configurable: true }); Object.defineProperty(IgxSummaryCellComponent.prototype, "itemHeight", { get: /** * @return {?} */ function () { return this.column.grid.defaultSummaryHeight; }, enumerable: true, configurable: true }); Object.defineProperty(IgxSummaryCellComponent.prototype, "grid", { /** * @hidden */ get: /** * @hidden * @return {?} */ function () { return ((/** @type {?} */ (this.column.grid))); }, enumerable: true, configurable: true }); /** * @private * @param {?} rowIndex * @return {?} */ IgxSummaryCellComponent.prototype.getRowElementByIndex = /** * @private * @param {?} rowIndex * @return {?} */ function (rowIndex) { /** @type {?} */ var summaryRows = this.grid.summariesRowList.toArray(); return summaryRows.find(function (sr) { return sr.dataRowIndex === rowIndex; }).nativeElement; }; /** * @private * @param {?} key * @param {?} ctrl * @return {?} */ IgxSummaryCellComponent.prototype.isKeySupportedInCell = /** * @private * @param {?} key * @param {?} ctrl * @return {?} */ function (key, ctrl) { if (ctrl) { return ['arrowup', 'arrowdown', 'up', 'down', 'end', 'home'].indexOf(key) === -1; } return ['down', 'up', 'left', 'right', 'arrowdown', 'arrowup', 'arrowleft', 'arrowright', 'home', 'end', 'tab'].indexOf(key) !== -1; }; /** * @param {?} summary * @return {?} */ IgxSummaryCellComponent.prototype.translateSummary = /** * @param {?} summary * @return {?} */ function (summary) { return this.grid.resourceStrings["igx_grid_summary_" + summary.key] || summary.label; }; IgxSummaryCellComponent.decorators = [ { type: Component, args: [{ changeDetection: ChangeDetectionStrategy.OnPush, preserveWhitespaces: false, selector: 'igx-grid-summary-cell', template: "<ng-container *ngIf=\"hasSummary\">\n <ng-container *ngFor=\"let summary of summaryResults\">\n <div class=\"igx-grid-summary__item\" [style.height.px]=\"itemHeight\">\n\n <ng-container *ngIf=\"visibleColumnIndex === 0 && firstCellIndentation >= 0\">\n <div class=\"igx-grid__tree-cell--padding-level-{{firstCellIndentation}}\"></div>\n\n <div #indicator class=\"igx-grid__tree-grouping-indicator\" style=\"visibility: hidden\">\n <igx-icon fontSet=\"material\">chevron_right</igx-icon>\n </div>\n </ng-container>\n\n <span class=\"igx-grid-summary__label\" title=\"{{ summary.label }}\">{{ translateSummary(summary) }}</span>\n <span class=\"igx-grid-summary__result\" title=\"{{ summary.summaryResult }}\">\n {{ columnDatatype === 'number' ? (summary.summaryResult | igxdecimal: grid.locale) : columnDatatype === 'date' ? (summary.summaryResult | igxdate: grid.locale) : (summary.summaryResult) }}\n </span>\n </div>\n </ng-container>\n</ng-container>\n" }] } ]; /** @nocollapse */ IgxSummaryCellComponent.ctorParameters = function () { return [ { type: ElementRef }, { type: IgxGridSelectionService } ]; }; IgxSummaryCellComponent.propDecorators = { summaryResults: [{ type: Input }], column: [{ type: Input }], firstCellIndentation: [{ type: Input }], hasSummary: [{ type: Input }], density: [{ type: Input }], rowIndex: [{ type: Input }, { type: HostBinding, args: ['attr.data-rowIndex',] }], visibleColumnIndex: [{ type: HostBinding, args: ['attr.data-visibleIndex',] }], tabindex: [{ type: HostBinding, args: ['attr.tabindex',] }], describeby: [{ type: HostBinding, args: ['attr.aria-describedby',] }], focused: [{ type: HostBinding, args: ['class.igx-grid-summary--active',] }], onFocus: [{ type: HostListener, args: ['focus',] }], onBlur: [{ type: HostListener, args: ['blur',] }], dispatchEvent: [{ type: HostListener, args: ['keydown', ['$event'],] }], width: [{ type: HostBinding, args: ['style.min-width',] }, { type: HostBinding, args: ['style.max-width',] }, { type: HostBinding, args: ['style.flex-basis',] }] }; return IgxSummaryCellComponent; }()); export { IgxSummaryCellComponent }; if (false) { /** @type {?} */ IgxSummaryCellComponent.prototype.summaryResults; /** @type {?} */ IgxSummaryCellComponent.prototype.column; /** @type {?} */ IgxSummaryCellComponent.prototype.firstCellIndentation; /** @type {?} */ IgxSummaryCellComponent.prototype.hasSummary; /** @type {?} */ IgxSummaryCellComponent.prototype.density; /** @type {?} */ IgxSummaryCellComponent.prototype.rowIndex; /** @type {?} */ IgxSummaryCellComponent.prototype.tabindex; /** @type {?} */ IgxSummaryCellComponent.prototype.focused; /** * @type {?} * @private */ IgxSummaryCellComponent.prototype.element; /** * @type {?} * @private */ IgxSummaryCellComponent.prototype.selectionService; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VtbWFyeS1jZWxsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2lnbml0ZXVpLWFuZ3VsYXIvIiwic291cmNlcyI6WyJsaWIvZ3JpZHMvc3VtbWFyaWVzL3N1bW1hcnktY2VsbC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsdUJBQXVCLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRWpILE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRXpELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUVsRDtJQXVCSSxpQ0FBb0IsT0FBbUIsRUFBVSxnQkFBeUM7UUFBdEUsWUFBTyxHQUFQLE9BQU8sQ0FBWTtRQUFVLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBeUI7UUFSbkYseUJBQW9CLEdBQUcsQ0FBQyxDQUFDO1FBR3pCLGVBQVUsR0FBRyxLQUFLLENBQUM7UUFrQm5CLGFBQVEsR0FBRyxDQUFDLENBQUM7SUFacEIsQ0FBQztJQU1ELHNCQUNJLHVEQUFrQjs7OztRQUR0QjtZQUVJLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUM7UUFDcEMsQ0FBQzs7O09BQUE7SUFLRCxzQkFDVywrQ0FBVTs7OztRQURyQjtZQUVJLE9BQU8sYUFBVyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQU8sQ0FBQztRQUMxQyxDQUFDOzs7T0FBQTs7OztJQU1NLHlDQUFPOzs7SUFEZDtRQUVJLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO0lBQ3hCLENBQUM7Ozs7SUFHTSx3Q0FBTTs7O0lBRGI7UUFFSSxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztJQUN6QixDQUFDOzs7OztJQUdE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LFNBQVMsRUFBRSxDQUFDLFFBQVEsQ0FBQzt3QkEyRGxDLFdBQVcsU0FBQyxpQkFBaUIsY0FDN0IsV0FBVyxTQUFDLGlCQUFpQixjQUM3QixXQUFXLFNBQUMsa0JBQWtCOztJQXVDbkMsOEJBQUM7Q0FBQSxBQTVKRCxJQTRKQztTQXRKWSx1QkFBdUI7OztJQUVoQyxpREFDMEM7O0lBRTFDLHlDQUNrQzs7SUFFbEMsdURBQ2dDOztJQUVoQyw2Q0FDMEI7O0lBRTFCLDBDQUNlOztJQUtmLDJDQUV3Qjs7SUFPeEIsMkNBQ29COztJQU9wQiwwQ0FDd0I7Ozs7O0lBckJaLDBDQUEyQjs7Ozs7SUFBRSxtREFBaUQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBIb3N0QmluZGluZywgSG9zdExpc3RlbmVyLCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgRWxlbWVudFJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSWd4U3VtbWFyeVJlc3VsdCB9IGZyb20gJy4vZ3JpZC1zdW1tYXJ5JztcbmltcG9ydCB7IElneENvbHVtbkNvbXBvbmVudCB9IGZyb20gJy4uL2NvbHVtbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGF0YVR5cGUgfSBmcm9tICcuLi8uLi9kYXRhLW9wZXJhdGlvbnMvZGF0YS11dGlsJztcbmltcG9ydCB7IElneEdyaWRTZWxlY3Rpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS9ncmlkLXNlbGVjdGlvbic7XG5pbXBvcnQgeyBTVVBQT1JURURfS0VZUyB9IGZyb20gJy4uLy4uL2NvcmUvdXRpbHMnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBwcmVzZXJ2ZVdoaXRlc3BhY2VzOiBmYWxzZSxcbiAgICBzZWxlY3RvcjogJ2lneC1ncmlkLXN1bW1hcnktY2VsbCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3N1bW1hcnktY2VsbC5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgSWd4U3VtbWFyeUNlbGxDb21wb25lbnQge1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc3VtbWFyeVJlc3VsdHM6IElneFN1bW1hcnlSZXN1bHRbXTtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGNvbHVtbjogSWd4Q29sdW1uQ29tcG9uZW50O1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZmlyc3RDZWxsSW5kZW50YXRpb24gPSAwO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgaGFzU3VtbWFyeSA9IGZhbHNlO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZGVuc2l0eTtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgZWxlbWVudDogRWxlbWVudFJlZiwgcHJpdmF0ZSBzZWxlY3Rpb25TZXJ2aWNlOiBJZ3hHcmlkU2VsZWN0aW9uU2VydmljZSkge1xuICAgIH1cblxuICAgIEBJbnB1dCgpXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmRhdGEtcm93SW5kZXgnKVxuICAgIHB1YmxpYyByb3dJbmRleDogbnVtYmVyO1xuXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmRhdGEtdmlzaWJsZUluZGV4JylcbiAgICBnZXQgdmlzaWJsZUNvbHVtbkluZGV4KCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbHVtbi52aXNpYmxlSW5kZXg7XG4gICAgfVxuXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLnRhYmluZGV4JylcbiAgICBwdWJsaWMgdGFiaW5kZXggPSAwO1xuXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtZGVzY3JpYmVkYnknKVxuICAgIHB1YmxpYyBnZXQgZGVzY3JpYmVieSgpIHtcbiAgICAgICAgcmV0dXJuIGBTdW1tYXJ5XyR7dGhpcy5jb2x1bW4uZmllbGR9YDtcbiAgICB9XG5cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1ncmlkLXN1bW1hcnktLWFjdGl2ZScpXG4gICAgcHVibGljIGZvY3VzZWQ6IGJvb2xlYW47XG5cbiAgICBASG9zdExpc3RlbmVyKCdmb2N1cycpXG4gICAgcHVibGljIG9uRm9jdXMoKSB7XG4gICAgICAgIHRoaXMuZm9jdXNlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcignYmx1cicpXG4gICAgcHVibGljIG9uQmx1cigpIHtcbiAgICAgICAgdGhpcy5mb2N1c2VkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bicsIFsnJGV2ZW50J10pXG4gICAgZGlzcGF0Y2hFdmVudChldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICAvLyBUT0RPOiBSZWZhY3RvclxuICAgICAgICBjb25zdCBrZXkgPSBldmVudC5rZXkudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgY29uc3QgY3RybCA9IGV2ZW50LmN0cmxLZXk7XG4gICAgICAgIGNvbnN0IHNoaWZ0ID0gZXZlbnQuc2hpZnRLZXk7XG5cbiAgICAgICAgaWYgKCFTVVBQT1JURURfS0VZUy5oYXMoa2V5KSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBjb25zdCBhcmdzID0geyB0YXJnZXRUeXBlOiAnc3VtbWFyeUNlbGwnLCB0YXJnZXQ6IHRoaXMsIGV2ZW50OiBldmVudCwgY2FuY2VsOiBmYWxzZSB9O1xuICAgICAgICB0aGlzLmdyaWQub25HcmlkS2V5ZG93bi5lbWl0KGFyZ3MpO1xuICAgICAgICBpZiAoYXJncy5jYW5jZWwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgIGlmICghdGhpcy5pc0tleVN1cHBvcnRlZEluQ2VsbChrZXksIGN0cmwpKSB7IHJldHVybjsgfVxuXG4gICAgICAgIHRoaXMuc2VsZWN0aW9uU2VydmljZS5rZXlib2FyZFN0YXRlLnNoaWZ0ID0gc2hpZnQgJiYgIShrZXkgPT09ICd0YWInKTtcbiAgICAgICAgY29uc3Qgcm93ID0gdGhpcy5nZXRSb3dFbGVtZW50QnlJbmRleCh0aGlzLnJvd0luZGV4KTtcbiAgICAgICAgc3dpdGNoIChrZXkpIHtcbiAgICAgICAgICAgIGNhc2UgJ3RhYic6XG4gICAgICAgICAgICAgICAgaWYgKHNoaWZ0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5uYXZpZ2F0aW9uLnBlcmZvcm1TaGlmdFRhYktleShyb3csIHRoaXMucm93SW5kZXgsIHRoaXMudmlzaWJsZUNvbHVtbkluZGV4LCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5uYXZpZ2F0aW9uLnBlcmZvcm1UYWIocm93LCB0aGlzLnJvd0luZGV4LCB0aGlzLnZpc2libGVDb2x1bW5JbmRleCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdhcnJvd2xlZnQnOlxuICAgICAgICAgICAgY2FzZSAnaG9tZSc6XG4gICAgICAgICAgICBjYXNlICdsZWZ0JzpcbiAgICAgICAgICAgICAgICBpZiAoY3RybCB8fCBrZXkgPT09ICdob21lJykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmdyaWQubmF2aWdhdGlvbi5vbktleWRvd25Ib21lKHRoaXMucm93SW5kZXgsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkLm5hdmlnYXRpb24ub25LZXlkb3duQXJyb3dMZWZ0KHRoaXMubmF0aXZlRWxlbWVudCwgdGhpcy5yb3dJbmRleCwgdGhpcy52aXNpYmxlQ29sdW1uSW5kZXgsIHRydWUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnZW5kJzpcbiAgICAgICAgICAgIGNhc2UgJ2Fycm93cmlnaHQnOlxuICAgICAgICAgICAgY2FzZSAncmlnaHQnOlxuICAgICAgICAgICAgICAgIGlmIChjdHJsIHx8IGtleSA9PT0gJ2VuZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ncmlkLm5hdmlnYXRpb24ub25LZXlkb3duRW5kKHRoaXMucm93SW5kZXgsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkLm5hdmlnYXRpb24ub25LZXlkb3duQXJyb3dSaWdodCh0aGlzLm5hdGl2ZUVsZW1lbnQsIHRoaXMucm93SW5kZXgsIHRoaXMudmlzaWJsZUNvbHVtbkluZGV4LCB0cnVlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2Fycm93dXAnOlxuICAgICAgICAgICAgY2FzZSAndXAnOlxuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5uYXZpZ2F0aW9uLm5hdmlnYXRlVXAocm93LCB0aGlzLnJvd0luZGV4LCB0aGlzLnZpc2libGVDb2x1bW5JbmRleCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdhcnJvd2Rvd24nOlxuICAgICAgICAgICAgY2FzZSAnZG93bic6XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkLm5hdmlnYXRpb24ubmF2aWdhdGVEb3duKHJvdywgdGhpcy5yb3dJbmRleCwgdGhpcy52aXNpYmxlQ29sdW1uSW5kZXgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgQEhvc3RCaW5kaW5nKCdzdHlsZS5taW4td2lkdGgnKVxuICAgIEBIb3N0QmluZGluZygnc3R5bGUubWF4LXdpZHRoJylcbiAgICBASG9zdEJpbmRpbmcoJ3N0eWxlLmZsZXgtYmFzaXMnKVxuICAgIGdldCB3aWR0aCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29sdW1uLmdldENlbGxXaWR0aCgpO1xuICAgIH1cblxuICAgIGdldCBuYXRpdmVFbGVtZW50KCk6IGFueSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudDtcbiAgICB9XG5cbiAgICBnZXQgY29sdW1uRGF0YXR5cGUoKTogRGF0YVR5cGUge1xuICAgICAgICByZXR1cm4gdGhpcy5jb2x1bW4uZGF0YVR5cGU7XG4gICAgfVxuXG4gICAgZ2V0IGl0ZW1IZWlnaHQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbHVtbi5ncmlkLmRlZmF1bHRTdW1tYXJ5SGVpZ2h0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICogQGhpZGRlblxuICAgICovXG4gICAgcHVibGljIGdldCBncmlkKCkge1xuICAgICAgICByZXR1cm4gKHRoaXMuY29sdW1uLmdyaWQgYXMgYW55KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFJvd0VsZW1lbnRCeUluZGV4KHJvd0luZGV4KSB7XG4gICAgICAgIGNvbnN0IHN1bW1hcnlSb3dzID0gdGhpcy5ncmlkLnN1bW1hcmllc1Jvd0xpc3QudG9BcnJheSgpO1xuICAgICAgICByZXR1cm4gc3VtbWFyeVJvd3MuZmluZCgoc3IpID0+IHNyLmRhdGFSb3dJbmRleCA9PT0gcm93SW5kZXgpLm5hdGl2ZUVsZW1lbnQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc0tleVN1cHBvcnRlZEluQ2VsbChrZXksIGN0cmwpIHtcbiAgICAgICAgaWYgKGN0cmwpIHtcbiAgICAgICAgICAgcmV0dXJuIFsnYXJyb3d1cCcsICdhcnJvd2Rvd24nLCAndXAnLCAnZG93bicsICdlbmQnLCAnaG9tZSddLmluZGV4T2Yoa2V5KSA9PT0gLTE7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFsnZG93bicsICd1cCcsICdsZWZ0JywgJ3JpZ2h0JywgJ2Fycm93ZG93bicsICdhcnJvd3VwJywgJ2Fycm93bGVmdCcsICdhcnJvd3JpZ2h0JywgJ2hvbWUnLCAnZW5kJywgJ3RhYiddLmluZGV4T2Yoa2V5KSAhPT0gLTE7XG4gICAgfVxuXG4gICAgcHVibGljIHRyYW5zbGF0ZVN1bW1hcnkoc3VtbWFyeTogSWd4U3VtbWFyeVJlc3VsdCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmdyaWQucmVzb3VyY2VTdHJpbmdzW2BpZ3hfZ3JpZF9zdW1tYXJ5XyR7c3VtbWFyeS5rZXl9YF0gfHwgc3VtbWFyeS5sYWJlbDtcbiAgICB9XG59XG4iXX0=