@catull/igniteui-angular
Version:
Ignite UI for Angular is a dependency-free Angular toolkit for building modern web apps
251 lines • 21.9 kB
JavaScript
import { __decorate, __metadata, __param } from "tslib";
import { Component, ChangeDetectorRef, ElementRef, HostBinding, HostListener, Input, Host, EventEmitter, Output, ContentChild, Inject } from '@angular/core';
import { IgxExpansionPanelIconDirective } from './expansion-panel.directives';
import { IGX_EXPANSION_PANEL_COMPONENT } from './expansion-panel.common';
/**
* @hidden
*/
export var ICON_POSITION;
(function (ICON_POSITION) {
ICON_POSITION["LEFT"] = "left";
ICON_POSITION["NONE"] = "none";
ICON_POSITION["RIGHT"] = "right";
})(ICON_POSITION || (ICON_POSITION = {}));
let IgxExpansionPanelHeaderComponent = class IgxExpansionPanelHeaderComponent {
constructor(panel, cdr, elementRef) {
this.panel = panel;
this.cdr = cdr;
this.elementRef = elementRef;
// properties section
this._iconTemplate = false;
/**
* Sets/gets the `id` of the expansion panel header.
* ```typescript
* let panelHeaderId = this.panel.header.id;
* ```
* @memberof IgxExpansionPanelComponent
*/
this.id = '';
/**
* Gets/sets the `aria-level` attribute of the header
* Get
* ```typescript
* const currentAriaLevel = this.panel.header.lv;
* ```
* Set
* ```typescript
* this.panel.header.lv = '5';
* ```
* ```html
* <igx-expansion-panel-header [lv]="myCustomLevel"></igx-expansion-panel-header>
* ```
*/
this.lv = '3';
/**
* Gets/sets the `role` attribute of the header
* Get
* ```typescript
* const currentRole = this.panel.header.role;
* ```
* Set
* ```typescript
* this.panel.header.role = '5';
* ```
* ```html
* <igx-expansion-panel-header [role]="'custom'"></igx-expansion-panel-header>
* ```
*/
this.role = 'heading';
/**
* Gets/sets the position of the expansion-panel-header expand/collapse icon
* Accepts `left`, `right` or `none`
* ```typescript
* const currentIconPosition = this.panel.header.iconPosition;
* ```
* Set
* ```typescript
* this.panel.header.iconPosition = 'left';
* ```
* ```html
* <igx-expansion-panel-header [iconPosition]="'right'"></igx-expansion-panel-header>
* ```
*/
this.iconPosition = ICON_POSITION.LEFT;
/**
* Emitted whenever a user interacts with the header host
* ```typescript
* handleInteraction(event: IExpansionPanelEventArgs) {
* ...
* }
* ```
* ```html
* <igx-expansion-panel-header (onInteraction)="handleInteraction($event)">
* ...
* </igx-expansion-panel-header>
* ```
*/
this.onInteraction = new EventEmitter();
/**
* @hidden
*/
this.cssClass = 'igx-expansion-panel__header';
/**
* Gets/sets the whether the header is disabled
* When disabled, the header will not handle user events and will stop their propagation
*
* ```typescript
* const isDisabled = this.panel.header.disabled;
* ```
* Set
* ```typescript
* this.panel.header.disabled = true;
* ```
* ```html
* <igx-expansion-panel-header [disabled]="true">
* ...
* </igx-expansion-panel-header>
* ```
*/
this.disabled = false;
this.id = `${this.panel.id}-header`;
}
/**
* @hidden
*/
set iconTemplate(val) {
this._iconTemplate = val;
}
/**
* @hidden
*/
get iconTemplate() {
return this._iconTemplate;
}
/**
* @hidden
*/
get controls() {
return this.panel.id;
}
/**
* @hidden
*/
get isExpanded() {
return !this.panel.collapsed;
}
/**
* @hidden
*/
onAction(evt) {
if (this.disabled) {
evt.stopPropagation();
return;
}
this.onInteraction.emit({ event: evt, panel: this.panel });
this.panel.toggle(evt);
evt.preventDefault();
}
/** @hidden @internal */
openPanel(event) {
if (event.altKey) {
this.panel.expand(event);
this.onInteraction.emit({ event: event, panel: this.panel });
}
}
/** @hidden @internal */
closePanel(event) {
if (event.altKey) {
this.panel.collapse(event);
this.onInteraction.emit({ event: event, panel: this.panel });
}
}
/**
* @hidden
*/
get iconPositionClass() {
switch (this.iconPosition) {
case (ICON_POSITION.LEFT):
return `igx-expansion-panel__header-icon--start`;
case (ICON_POSITION.RIGHT):
return `igx-expansion-panel__header-icon--end`;
case (ICON_POSITION.NONE):
return `igx-expansion-panel__header-icon--none`;
default:
return '';
}
}
};
IgxExpansionPanelHeaderComponent.ctorParameters = () => [
{ type: undefined, decorators: [{ type: Host }, { type: Inject, args: [IGX_EXPANSION_PANEL_COMPONENT,] }] },
{ type: ChangeDetectorRef },
{ type: ElementRef }
];
__decorate([
ContentChild(IgxExpansionPanelIconDirective),
__metadata("design:type", Object),
__metadata("design:paramtypes", [Object])
], IgxExpansionPanelHeaderComponent.prototype, "iconTemplate", null);
__decorate([
HostBinding('attr.aria-level'),
Input(),
__metadata("design:type", Object)
], IgxExpansionPanelHeaderComponent.prototype, "lv", void 0);
__decorate([
HostBinding('attr.role'),
Input(),
__metadata("design:type", Object)
], IgxExpansionPanelHeaderComponent.prototype, "role", void 0);
__decorate([
Input(),
__metadata("design:type", String)
], IgxExpansionPanelHeaderComponent.prototype, "iconPosition", void 0);
__decorate([
Output(),
__metadata("design:type", Object)
], IgxExpansionPanelHeaderComponent.prototype, "onInteraction", void 0);
__decorate([
HostBinding('class.igx-expansion-panel__header'),
__metadata("design:type", Object)
], IgxExpansionPanelHeaderComponent.prototype, "cssClass", void 0);
__decorate([
HostBinding('class.igx-expansion-panel__header--expanded'),
__metadata("design:type", Object),
__metadata("design:paramtypes", [])
], IgxExpansionPanelHeaderComponent.prototype, "isExpanded", null);
__decorate([
Input(),
HostBinding('class.igx-expansion-panel--disabled'),
__metadata("design:type", Object)
], IgxExpansionPanelHeaderComponent.prototype, "disabled", void 0);
__decorate([
HostListener('keydown.Enter', ['$event']),
HostListener('keydown.Space', ['$event']),
HostListener('keydown.Spacebar', ['$event']),
HostListener('click', ['$event']),
__metadata("design:type", Function),
__metadata("design:paramtypes", [Event]),
__metadata("design:returntype", void 0)
], IgxExpansionPanelHeaderComponent.prototype, "onAction", null);
__decorate([
HostListener('keydown.Alt.ArrowDown', ['$event']),
__metadata("design:type", Function),
__metadata("design:paramtypes", [KeyboardEvent]),
__metadata("design:returntype", void 0)
], IgxExpansionPanelHeaderComponent.prototype, "openPanel", null);
__decorate([
HostListener('keydown.Alt.ArrowUp', ['$event']),
__metadata("design:type", Function),
__metadata("design:paramtypes", [KeyboardEvent]),
__metadata("design:returntype", void 0)
], IgxExpansionPanelHeaderComponent.prototype, "closePanel", null);
IgxExpansionPanelHeaderComponent = __decorate([
Component({
selector: 'igx-expansion-panel-header',
template: "<div class=\"igx-expansion-panel__header-inner\" tabindex=\"0\" role=\"button\" [attr.id]=\"id\"\n[attr.aria-disabled]=\"disabled\" [attr.aria-expanded]=\"isExpanded\" [attr.aria-controls]=\"controls\">\n <div class=\"igx-expansion-panel__title-wrapper\">\n <ng-content select=\"igx-expansion-panel-title\"></ng-content>\n <ng-content select=\"igx-expansion-panel-description\"></ng-content>\n </div>\n <ng-content></ng-content>\n <div [class]=\"iconPositionClass\">\n <ng-content *ngIf=\"iconTemplate\" select=\"igx-expansion-panel-icon\"></ng-content>\n <igx-icon *ngIf=\"!iconTemplate\" fontSet=\"material\">\n {{panel.collapsed? 'expand_more':'expand_less'}}\n </igx-icon>\n </div>\n</div>\n"
}),
__param(0, Host()), __param(0, Inject(IGX_EXPANSION_PANEL_COMPONENT)),
__metadata("design:paramtypes", [Object, ChangeDetectorRef,
ElementRef])
], IgxExpansionPanelHeaderComponent);
export { IgxExpansionPanelHeaderComponent };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwYW5zaW9uLXBhbmVsLWhlYWRlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9pZ25pdGV1aS1hbmd1bGFyLyIsInNvdXJjZXMiOlsibGliL2V4cGFuc2lvbi1wYW5lbC9leHBhbnNpb24tcGFuZWwtaGVhZGVyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUNILFNBQVMsRUFDVCxpQkFBaUIsRUFDakIsVUFBVSxFQUNWLFdBQVcsRUFDWCxZQUFZLEVBQ1osS0FBSyxFQUNMLElBQUksRUFDSixZQUFZLEVBQ1osTUFBTSxFQUNOLFlBQVksRUFDWixNQUFNLEVBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDOUUsT0FBTyxFQUE0Qiw2QkFBNkIsRUFBeUIsTUFBTSwwQkFBMEIsQ0FBQztBQUUxSDs7R0FFRztBQUNILE1BQU0sQ0FBTixJQUFZLGFBSVg7QUFKRCxXQUFZLGFBQWE7SUFDckIsOEJBQWEsQ0FBQTtJQUNiLDhCQUFhLENBQUE7SUFDYixnQ0FBZSxDQUFBO0FBQ25CLENBQUMsRUFKVyxhQUFhLEtBQWIsYUFBYSxRQUl4QjtBQU9ELElBQWEsZ0NBQWdDLEdBQTdDLE1BQWEsZ0NBQWdDO0lBMEl6QyxZQUFrRSxLQUE0QixFQUFTLEdBQXNCLEVBQ3JILFVBQXNCO1FBRG9DLFVBQUssR0FBTCxLQUFLLENBQXVCO1FBQVMsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFDckgsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQTFJN0IscUJBQXFCO1FBQ2Qsa0JBQWEsR0FBRyxLQUFLLENBQUM7UUFDOUI7Ozs7OztXQU1HO1FBQ0ksT0FBRSxHQUFHLEVBQUUsQ0FBQztRQWlCZjs7Ozs7Ozs7Ozs7OztXQWFHO1FBR0ksT0FBRSxHQUFHLEdBQUcsQ0FBQztRQUVoQjs7Ozs7Ozs7Ozs7OztXQWFHO1FBR0ksU0FBSSxHQUFHLFNBQVMsQ0FBQztRQVN4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QUssRUFBRTs7NERBQ1E7QUFrQmhCO0lBRkMsV0FBVyxDQUFDLFdBQVcsQ0FBQztJQUN4QixLQUFLLEVBQUU7OzhEQUNnQjtBQXdCeEI7SUFEQyxLQUFLLEVBQUU7O3NFQUNnRDtBQWdCeEQ7SUFEQyxNQUFNLEVBQUU7O3VFQUMyRDtBQU1uRTtJQURDLFdBQVcsQ0FBQyxtQ0FBbUMsQ0FBQzs7a0VBQ0Q7QUFNaEQ7SUFEQyxXQUFXLENBQUMsNkNBQTZDLENBQUM7OztrRUFHdEQ7QUFxQk47SUFGQyxLQUFLLEVBQUU7SUFDUCxXQUFXLENBQUMscUNBQXFDLENBQUM7O2tFQUMzQjtBQWN2QjtJQUpDLFlBQVksQ0FBQyxlQUFlLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN6QyxZQUFZLENBQUMsZUFBZSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDekMsWUFBWSxDQUFDLGtCQUFrQixFQUFFLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDNUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDOztxQ0FDWixLQUFLOztnRUFRMUI7QUFJRjtJQURDLFlBQVksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDOztxQ0FDMUIsYUFBYTs7aUVBS25DO0FBSUQ7SUFEQyxZQUFZLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQzs7cUNBQ3ZCLGFBQWE7O2tFQUtyQztBQWhMTyxnQ0FBZ0M7SUFKNUMsU0FBUyxDQUFDO1FBQ1AsUUFBUSxFQUFFLDRCQUE0QjtRQUN0Qyxnd0JBQW9EO0tBQ3ZELENBQUM7SUEySWUsV0FBQSxJQUFJLEVBQUUsQ0FBQSxFQUFFLFdBQUEsTUFBTSxDQUFDLDZCQUE2QixDQUFDLENBQUE7NkNBQWtELGlCQUFpQjtRQUN6RyxVQUFVO0dBM0lyQixnQ0FBZ0MsQ0FpTTVDO1NBak1ZLGdDQUFnQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ29tcG9uZW50LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgSG9zdExpc3RlbmVyLFxuICAgIElucHV0LFxuICAgIEhvc3QsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIE91dHB1dCxcbiAgICBDb250ZW50Q2hpbGQsXG4gICAgSW5qZWN0XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSWd4RXhwYW5zaW9uUGFuZWxJY29uRGlyZWN0aXZlIH0gZnJvbSAnLi9leHBhbnNpb24tcGFuZWwuZGlyZWN0aXZlcyc7XG5pbXBvcnQgeyBJRXhwYW5zaW9uUGFuZWxFdmVudEFyZ3MsIElHWF9FWFBBTlNJT05fUEFORUxfQ09NUE9ORU5ULCBJZ3hFeHBhbnNpb25QYW5lbEJhc2UgfSBmcm9tICcuL2V4cGFuc2lvbi1wYW5lbC5jb21tb24nO1xuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuZXhwb3J0IGVudW0gSUNPTl9QT1NJVElPTiB7XG4gICAgTEVGVCA9ICdsZWZ0JyxcbiAgICBOT05FID0gJ25vbmUnLFxuICAgIFJJR0hUID0gJ3JpZ2h0J1xufVxuXG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnaWd4LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXInLFxuICAgIHRlbXBsYXRlVXJsOiAnZXhwYW5zaW9uLXBhbmVsLWhlYWRlci5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgSWd4RXhwYW5zaW9uUGFuZWxIZWFkZXJDb21wb25lbnQge1xuICAgICAvLyBwcm9wZXJ0aWVzIHNlY3Rpb25cbiAgICBwcml2YXRlIF9pY29uVGVtcGxhdGUgPSBmYWxzZTtcbiAgICAvKipcbiAgICAgKiBTZXRzL2dldHMgdGhlIGBpZGAgb2YgdGhlIGV4cGFuc2lvbiBwYW5lbCBoZWFkZXIuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBwYW5lbEhlYWRlcklkID0gIHRoaXMucGFuZWwuaGVhZGVyLmlkO1xuICAgICAqIGBgYFxuICAgICAqIEBtZW1iZXJvZiBJZ3hFeHBhbnNpb25QYW5lbENvbXBvbmVudFxuICAgICAqL1xuICAgIHB1YmxpYyBpZCA9ICcnO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIEBDb250ZW50Q2hpbGQoSWd4RXhwYW5zaW9uUGFuZWxJY29uRGlyZWN0aXZlKVxuICAgIHB1YmxpYyBzZXQgaWNvblRlbXBsYXRlKHZhbDogYW55KSB7XG4gICAgICAgIHRoaXMuX2ljb25UZW1wbGF0ZSA9IDxib29sZWFuPnZhbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIGdldCBpY29uVGVtcGxhdGUoKTogYW55IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ljb25UZW1wbGF0ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzL3NldHMgdGhlIGBhcmlhLWxldmVsYCBhdHRyaWJ1dGUgb2YgdGhlIGhlYWRlclxuICAgICAqIEdldFxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiAgY29uc3QgY3VycmVudEFyaWFMZXZlbCA9IHRoaXMucGFuZWwuaGVhZGVyLmx2O1xuICAgICAqIGBgYFxuICAgICAqIFNldFxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiAgdGhpcy5wYW5lbC5oZWFkZXIubHYgPSAnNSc7XG4gICAgICogYGBgXG4gICAgICogYGBgaHRtbFxuICAgICAqICA8aWd4LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIgW2x2XT1cIm15Q3VzdG9tTGV2ZWxcIj48L2lneC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWxldmVsJylcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBsdiA9ICczJztcblxuICAgIC8qKlxuICAgICAqIEdldHMvc2V0cyB0aGUgYHJvbGVgIGF0dHJpYnV0ZSBvZiB0aGUgaGVhZGVyXG4gICAgICogR2V0XG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqICBjb25zdCBjdXJyZW50Um9sZSA9IHRoaXMucGFuZWwuaGVhZGVyLnJvbGU7XG4gICAgICogYGBgXG4gICAgICogU2V0XG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqICB0aGlzLnBhbmVsLmhlYWRlci5yb2xlID0gJzUnO1xuICAgICAqIGBgYFxuICAgICAqIGBgYGh0bWxcbiAgICAgKiAgPGlneC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIFtyb2xlXT1cIidjdXN0b20nXCI+PC9pZ3gtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIucm9sZScpXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgcm9sZSA9ICdoZWFkaW5nJztcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGNvbnRyb2xzICgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5wYW5lbC5pZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzL3NldHMgdGhlIHBvc2l0aW9uIG9mIHRoZSBleHBhbnNpb24tcGFuZWwtaGVhZGVyIGV4cGFuZC9jb2xsYXBzZSBpY29uXG4gICAgICogQWNjZXB0cyBgbGVmdGAsIGByaWdodGAgb3IgYG5vbmVgXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqICBjb25zdCBjdXJyZW50SWNvblBvc2l0aW9uID0gdGhpcy5wYW5lbC5oZWFkZXIuaWNvblBvc2l0aW9uO1xuICAgICAqIGBgYFxuICAgICAqIFNldFxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiAgdGhpcy5wYW5lbC5oZWFkZXIuaWNvblBvc2l0aW9uID0gJ2xlZnQnO1xuICAgICAqIGBgYFxuICAgICAqIGBgYGh0bWxcbiAgICAgKiAgPGlneC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIFtpY29uUG9zaXRpb25dPVwiJ3JpZ2h0J1wiPjwvaWd4LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgaWNvblBvc2l0aW9uOiBJQ09OX1BPU0lUSU9OID0gSUNPTl9QT1NJVElPTi5MRUZUO1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCB3aGVuZXZlciBhIHVzZXIgaW50ZXJhY3RzIHdpdGggdGhlIGhlYWRlciBob3N0XG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqICBoYW5kbGVJbnRlcmFjdGlvbihldmVudDogSUV4cGFuc2lvblBhbmVsRXZlbnRBcmdzKSB7XG4gICAgICogIC4uLlxuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKiBgYGBodG1sXG4gICAgICogIDxpZ3gtZXhwYW5zaW9uLXBhbmVsLWhlYWRlciAob25JbnRlcmFjdGlvbik9XCJoYW5kbGVJbnRlcmFjdGlvbigkZXZlbnQpXCI+XG4gICAgICogICAgICAuLi5cbiAgICAgKiAgPC9pZ3gtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgb25JbnRlcmFjdGlvbiA9IG5ldyBFdmVudEVtaXR0ZXI8SUV4cGFuc2lvblBhbmVsRXZlbnRBcmdzPigpO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1leHBhbnNpb24tcGFuZWxfX2hlYWRlcicpXG4gICAgIHB1YmxpYyBjc3NDbGFzcyA9ICdpZ3gtZXhwYW5zaW9uLXBhbmVsX19oZWFkZXInO1xuXG4gICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtZXhwYW5zaW9uLXBhbmVsX19oZWFkZXItLWV4cGFuZGVkJylcbiAgICAgcHVibGljIGdldCBpc0V4cGFuZGVkICgpIHtcbiAgICAgICAgICAgIHJldHVybiAhdGhpcy5wYW5lbC5jb2xsYXBzZWQ7XG4gICAgICAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzL3NldHMgdGhlIHdoZXRoZXIgdGhlIGhlYWRlciBpcyBkaXNhYmxlZFxuICAgICAqIFdoZW4gZGlzYWJsZWQsIHRoZSBoZWFkZXIgd2lsbCBub3QgaGFuZGxlIHVzZXIgZXZlbnRzIGFuZCB3aWxsIHN0b3AgdGhlaXIgcHJvcGFnYXRpb25cbiAgICAgKlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiAgY29uc3QgaXNEaXNhYmxlZCA9IHRoaXMucGFuZWwuaGVhZGVyLmRpc2FibGVkO1xuICAgICAqIGBgYFxuICAgICAqIFNldFxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiAgdGhpcy5wYW5lbC5oZWFkZXIuZGlzYWJsZWQgPSB0cnVlO1xuICAgICAqIGBgYFxuICAgICAqIGBgYGh0bWxcbiAgICAgKiAgPGlneC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIFtkaXNhYmxlZF09XCJ0cnVlXCI+XG4gICAgICogICAgIC4uLlxuICAgICAqICA8L2lneC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtZXhwYW5zaW9uLXBhbmVsLS1kaXNhYmxlZCcpXG4gICAgcHVibGljIGRpc2FibGVkID0gZmFsc2U7XG5cbiAgICBjb25zdHJ1Y3RvcihASG9zdCgpIEBJbmplY3QoSUdYX0VYUEFOU0lPTl9QQU5FTF9DT01QT05FTlQpIHB1YmxpYyBwYW5lbDogSWd4RXhwYW5zaW9uUGFuZWxCYXNlLCBwdWJsaWMgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgcHVibGljIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYpIHtcbiAgICAgICAgIHRoaXMuaWQgPSBgJHt0aGlzLnBhbmVsLmlkfS1oZWFkZXJgO1xuICAgICB9XG5cbiAgICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgICBASG9zdExpc3RlbmVyKCdrZXlkb3duLkVudGVyJywgWyckZXZlbnQnXSlcbiAgICAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bi5TcGFjZScsIFsnJGV2ZW50J10pXG4gICAgIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24uU3BhY2ViYXInLCBbJyRldmVudCddKVxuICAgICBASG9zdExpc3RlbmVyKCdjbGljaycsIFsnJGV2ZW50J10pXG4gICAgIHB1YmxpYyBvbkFjdGlvbihldnQ/OiBFdmVudCkge1xuICAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIGV2dC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgIH1cbiAgICAgICAgIHRoaXMub25JbnRlcmFjdGlvbi5lbWl0KHsgZXZlbnQ6IGV2dCwgcGFuZWw6IHRoaXMucGFuZWwgfSk7XG4gICAgICAgICB0aGlzLnBhbmVsLnRvZ2dsZShldnQpO1xuICAgICAgICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7XG4gICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24uQWx0LkFycm93RG93bicsIFsnJGV2ZW50J10pXG4gICAgcHVibGljIG9wZW5QYW5lbChldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICBpZiAoZXZlbnQuYWx0S2V5KSB7XG4gICAgICAgICAgICB0aGlzLnBhbmVsLmV4cGFuZChldmVudCk7XG4gICAgICAgICAgICB0aGlzLm9uSW50ZXJhY3Rpb24uZW1pdCh7IGV2ZW50OiBldmVudCwgcGFuZWw6IHRoaXMucGFuZWwgfSk7XG4gICAgICAgIH1cbiAgICAgfVxuXG4gICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgICBASG9zdExpc3RlbmVyKCdrZXlkb3duLkFsdC5BcnJvd1VwJywgWyckZXZlbnQnXSlcbiAgICAgcHVibGljIGNsb3NlUGFuZWwoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgaWYgKGV2ZW50LmFsdEtleSkge1xuICAgICAgICAgICAgdGhpcy5wYW5lbC5jb2xsYXBzZShldmVudCk7XG4gICAgICAgICAgICB0aGlzLm9uSW50ZXJhY3Rpb24uZW1pdCh7IGV2ZW50OiBldmVudCwgcGFuZWw6IHRoaXMucGFuZWwgfSk7XG4gICAgICAgIH1cbiAgICAgfVxuXG4gICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICAgcHVibGljIGdldCBpY29uUG9zaXRpb25DbGFzcygpOiBzdHJpbmcge1xuICAgICAgICBzd2l0Y2ggKHRoaXMuaWNvblBvc2l0aW9uKSB7XG4gICAgICAgICAgICBjYXNlIChJQ09OX1BPU0lUSU9OLkxFRlQpOlxuICAgICAgICAgICAgICAgIHJldHVybiBgaWd4LWV4cGFuc2lvbi1wYW5lbF9faGVhZGVyLWljb24tLXN0YXJ0YDtcbiAgICAgICAgICAgIGNhc2UgKElDT05fUE9TSVRJT04uUklHSFQpOlxuICAgICAgICAgICAgICAgIHJldHVybiBgaWd4LWV4cGFuc2lvbi1wYW5lbF9faGVhZGVyLWljb24tLWVuZGA7XG4gICAgICAgICAgICBjYXNlIChJQ09OX1BPU0lUSU9OLk5PTkUpOlxuICAgICAgICAgICAgICAgIHJldHVybiBgaWd4LWV4cGFuc2lvbi1wYW5lbF9faGVhZGVyLWljb24tLW5vbmVgO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cbiAgICAgfVxufVxuIl19