igniteui-angular
Version:
Ignite UI for Angular is a dependency-free Angular toolkit for building modern web apps
282 lines • 23.9 kB
JavaScript
/**
* @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=