@catull/igniteui-angular
Version:
Ignite UI for Angular is a dependency-free Angular toolkit for building modern web apps
281 lines • 26.5 kB
JavaScript
var IgxExpansionPanelComponent_1;
import { __decorate, __metadata } from "tslib";
import { Component, ChangeDetectorRef, EventEmitter, HostBinding, Input, Output, ContentChild, AfterContentInit } from '@angular/core';
import { AnimationBuilder, AnimationReferenceMetadata, useAnimation } from '@angular/animations';
import { growVerOut, growVerIn } from '../animations/main';
import { IgxExpansionPanelBodyComponent } from './expansion-panel-body.component';
import { IgxExpansionPanelHeaderComponent } from './expansion-panel-header.component';
import { IGX_EXPANSION_PANEL_COMPONENT } from './expansion-panel.common';
let NEXT_ID = 0;
let IgxExpansionPanelComponent = IgxExpansionPanelComponent_1 = class IgxExpansionPanelComponent {
constructor(cdr, builder) {
this.cdr = cdr;
this.builder = builder;
this._collapsed = true;
/**
* Sets/gets the animation settings of the expansion panel component
* Open and Close animation should be passed
*
* Get
* ```typescript
* const currentAnimations = this.panel.animationSettings;
* ```
* Set
* ```typescript
* import { slideInLeft, slideOutRight } from 'igniteui-angular';
* ...
* this.panel.animationsSettings = {
* openAnimation: slideInLeft,
* closeAnimation: slideOutRight
* };
* ```
* or via template
* ```typescript
* import { slideInLeft, slideOutRight } from 'igniteui-angular';
* ...
* myCustomAnimationObject = {
* openAnimation: slideInLeft,
* closeAnimation: slideOutRight
* };
* ```html
* <igx-expansion-panel [animationSettings]='myCustomAnimationObject'>
* ...
* </igx-expansion-panel>
* ```
*/
this.animationSettings = {
openAnimation: growVerIn,
closeAnimation: growVerOut
};
/**
* Sets/gets the `id` of the expansion panel component.
* If not set, `id` will have value `"igx-expansion-panel-0"`;
* ```html
* <igx-expansion-panel id = "my-first-expansion-panel"></igx-expansion-panel>
* ```
* ```typescript
* let panelId = this.panel.id;
* ```
* @memberof IgxExpansionPanelComponent
*/
this.id = `igx-expansion-panel-${NEXT_ID++}`;
/**
* @hidden
*/
this.cssClass = 'igx-expansion-panel';
/**
*@hidden
*/
this.collapsedChange = new EventEmitter();
/**
* Emitted when the expansion panel finishes collapsing
* ```typescript
* handleCollapsed(event: {
* panel: IgxExpansionPanelComponent,
* event: Event
* })
* ```
* ```html
* <igx-expansion-panel (onCollapsed)="handleCollapsed($event)">
* ...
* </igx-expansion-panel>
* ```
*/
this.onCollapsed = new EventEmitter();
/**
* Emitted when the expansion panel finishes expanding
* ```typescript
* handleExpanded(event: {
* panel: IgxExpansionPanelComponent,
* event: Event
* })
* ```
* ```html
* <igx-expansion-panel (onExpanded)="handleExpanded($event)">
* ...
* </igx-expansion-panel>
* ```
*/
this.onExpanded = new EventEmitter();
}
/**
* Gets/sets whether the component is collapsed (its content is hidden)
* Get
* ```typescript
* const myPanelState: boolean = this.panel.collapsed;
* ```
* Set
* ```html
* this.panel.collapsed = true;
* ```
*
* Two-way data binding:
* ```html
* <igx-expansion-panel [(collapsed)]="model.isCollapsed"></igx-expansion-panel>
* ```
*/
get collapsed() {
return this._collapsed;
}
set collapsed(value) {
this._collapsed = value;
this.collapsedChange.emit(this._collapsed);
}
/**
* @hidden
*/
get headerId() {
return this.header ? `${this.id}-header` : '';
}
/** @hidden */
ngAfterContentInit() {
if (this.body && this.header) {
// schedule at end of turn:
Promise.resolve().then(() => {
this.body.labelledBy = this.body.labelledBy || this.headerId;
this.body.label = this.body.label || this.id + '-region';
});
}
}
playOpenAnimation(cb) {
if (!this.body) { // if not body element is passed, there is nothing to animate
return;
}
const animation = useAnimation(this.animationSettings.openAnimation);
const animationBuilder = this.builder.build(animation);
const openAnimationPlayer = animationBuilder.create(this.body.element.nativeElement);
openAnimationPlayer.onDone(() => {
cb();
openAnimationPlayer.reset();
});
openAnimationPlayer.play();
}
playCloseAnimation(cb) {
if (!this.body) { // if not body element is passed, there is nothing to animate
return;
}
const animation = useAnimation(this.animationSettings.closeAnimation);
const animationBuilder = this.builder.build(animation);
const closeAnimationPlayer = animationBuilder.create(this.body.element.nativeElement);
closeAnimationPlayer.onDone(() => {
cb();
closeAnimationPlayer.reset();
});
closeAnimationPlayer.play();
}
/**
* Collapses the panel
*
* ```html
* <igx-expansion-panel #myPanel>
* ...
* </igx-expansion-panel>
* <button (click)="myPanel.collapse($event)">Collpase Panel</button>
* ```
*/
collapse(evt) {
if (this.collapsed) { // If expansion panel is already collapsed, do nothing
return;
}
this.playCloseAnimation(() => {
this.onCollapsed.emit({ event: evt, panel: this });
this.collapsed = true;
});
}
/**
* Expands the panel
*
* ```html
* <igx-expansion-panel #myPanel>
* ...
* </igx-expansion-panel>
* <button (click)="myPanel.expand($event)">Expand Panel</button>
* ```
*/
expand(evt) {
if (!this.collapsed) { // If the panel is already opened, do nothing
return;
}
this.collapsed = false;
this.cdr.detectChanges();
this.playOpenAnimation(() => {
this.onExpanded.emit({ event: evt, panel: this });
});
}
/**
* Toggles the panel
*
* ```html
* <igx-expansion-panel #myPanel>
* ...
* </igx-expansion-panel>
* <button (click)="myPanel.toggle($event)">Expand Panel</button>
* ```
*/
toggle(evt) {
if (this.collapsed) {
this.open(evt);
}
else {
this.close(evt);
}
}
open(evt) {
this.expand(evt);
}
close(evt) {
this.collapse(evt);
}
};
IgxExpansionPanelComponent.ctorParameters = () => [
{ type: ChangeDetectorRef },
{ type: AnimationBuilder }
];
__decorate([
Input(),
__metadata("design:type", Object)
], IgxExpansionPanelComponent.prototype, "animationSettings", void 0);
__decorate([
HostBinding('attr.id'),
Input(),
__metadata("design:type", Object)
], IgxExpansionPanelComponent.prototype, "id", void 0);
__decorate([
HostBinding('class.igx-expansion-panel'),
__metadata("design:type", Object)
], IgxExpansionPanelComponent.prototype, "cssClass", void 0);
__decorate([
Input(),
__metadata("design:type", Boolean),
__metadata("design:paramtypes", [Object])
], IgxExpansionPanelComponent.prototype, "collapsed", null);
__decorate([
Output(),
__metadata("design:type", Object)
], IgxExpansionPanelComponent.prototype, "collapsedChange", void 0);
__decorate([
Output(),
__metadata("design:type", Object)
], IgxExpansionPanelComponent.prototype, "onCollapsed", void 0);
__decorate([
Output(),
__metadata("design:type", Object)
], IgxExpansionPanelComponent.prototype, "onExpanded", void 0);
__decorate([
ContentChild(IgxExpansionPanelBodyComponent, { read: IgxExpansionPanelBodyComponent }),
__metadata("design:type", IgxExpansionPanelBodyComponent)
], IgxExpansionPanelComponent.prototype, "body", void 0);
__decorate([
ContentChild(IgxExpansionPanelHeaderComponent, { read: IgxExpansionPanelHeaderComponent }),
__metadata("design:type", IgxExpansionPanelHeaderComponent)
], IgxExpansionPanelComponent.prototype, "header", void 0);
IgxExpansionPanelComponent = IgxExpansionPanelComponent_1 = __decorate([
Component({
selector: 'igx-expansion-panel',
template: "<ng-content select=\"igx-expansion-panel-header\"></ng-content>\n<ng-content *ngIf=\"!collapsed\" select=\"igx-expansion-panel-body\"></ng-content>\n",
providers: [{ provide: IGX_EXPANSION_PANEL_COMPONENT, useExisting: IgxExpansionPanelComponent_1 }]
}),
__metadata("design:paramtypes", [ChangeDetectorRef, AnimationBuilder])
], IgxExpansionPanelComponent);
export { IgxExpansionPanelComponent };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwYW5zaW9uLXBhbmVsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2lnbml0ZXVpLWFuZ3VsYXIvIiwic291cmNlcyI6WyJsaWIvZXhwYW5zaW9uLXBhbmVsL2V4cGFuc2lvbi1wYW5lbC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUNULGlCQUFpQixFQUNqQixZQUFZLEVBQ1osV0FBVyxFQUNYLEtBQUssRUFDTCxNQUFNLEVBQ04sWUFBWSxFQUNaLGdCQUFnQixFQUNuQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsMEJBQTBCLEVBQUUsWUFBWSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDakcsT0FBTyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUMzRCxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNsRixPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN0RixPQUFPLEVBQUUsNkJBQTZCLEVBQW1ELE1BQU0sMEJBQTBCLENBQUM7QUFFMUgsSUFBSSxPQUFPLEdBQUcsQ0FBQyxDQUFDO0FBV2hCLElBQWEsMEJBQTBCLGtDQUF2QyxNQUFhLDBCQUEwQjtJQWdKbkMsWUFBb0IsR0FBc0IsRUFBVSxPQUF5QjtRQUF6RCxRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUFVLFlBQU8sR0FBUCxPQUFPLENBQWtCO1FBL0lyRSxlQUFVLEdBQUcsSUFBSSxDQUFDO1FBQzFCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7V0E4Qkc7UUFFSSxzQkFBaUIsR0FBc0I7WUFDMUMsYUFBYSxFQUFFLFNBQVM7WUFDeEIsY0FBYyxFQUFFLFVBQVU7U0FDN0IsQ0FBQztRQUVGOzs7Ozs7Ozs7O1dBVUc7UUFHSSxPQUFFLEdBQUcsdUJBQXVCLE9BQU8sRUFBRSxFQUFFLENBQUM7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QyxHQUFHLENBQUMsQ0FBQztJQUNyQixDQUFDO0lBQ0QsS0FBSyxDQUFDLEdBQVc7UUFDYixJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3ZCLENBQUM7Q0FFSixDQUFBOztZQWxINEIsaUJBQWlCO1lBQW1CLGdCQUFnQjs7QUE5RzdFO0lBREMsS0FBSyxFQUFFOztxRUFJTjtBQWVGO0lBRkMsV0FBVyxDQUFDLFNBQVMsQ0FBQztJQUN0QixLQUFLLEVBQUU7O3NEQUN1QztBQU0vQztJQURDLFdBQVcsQ0FBQywyQkFBMkIsQ0FBQzs7NERBQ0Q7QUFtQnhDO0lBREMsS0FBSyxFQUFFOzs7MkRBR1A7QUFVRDtJQURDLE1BQU0sRUFBRTs7bUVBQzRDO0FBaUJyRDtJQURDLE1BQU0sRUFBRTs7K0RBQ3lEO0FBaUJsRTtJQURDLE1BQU0sRUFBRTs7OERBQ3dEO0FBYWpFO0lBREMsWUFBWSxDQUFDLDhCQUE4QixFQUFFLEVBQUUsSUFBSSxFQUFFLDhCQUE4QixFQUFFLENBQUM7OEJBQzFFLDhCQUE4Qjt3REFBQztBQU01QztJQURDLFlBQVksQ0FBQyxnQ0FBZ0MsRUFBRSxFQUFFLElBQUksRUFBRSxnQ0FBZ0MsRUFBRSxDQUFDOzhCQUM1RSxnQ0FBZ0M7MERBQUM7QUE5SXZDLDBCQUEwQjtJQUx0QyxTQUFTLENBQUM7UUFDUCxRQUFRLEVBQUUscUJBQXFCO1FBQy9CLGlLQUE2QztRQUM3QyxTQUFTLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxXQUFXLEVBQUUsNEJBQTBCLEVBQUUsQ0FBQztLQUNuRyxDQUFDO3FDQWlKMkIsaUJBQWlCLEVBQW1CLGdCQUFnQjtHQWhKcEUsMEJBQTBCLENBa1F0QztTQWxRWSwwQkFBMEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENvbXBvbmVudCxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgSW5wdXQsXG4gICAgT3V0cHV0LFxuICAgIENvbnRlbnRDaGlsZCxcbiAgICBBZnRlckNvbnRlbnRJbml0XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQW5pbWF0aW9uQnVpbGRlciwgQW5pbWF0aW9uUmVmZXJlbmNlTWV0YWRhdGEsIHVzZUFuaW1hdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnO1xuaW1wb3J0IHsgZ3Jvd1Zlck91dCwgZ3Jvd1ZlckluIH0gZnJvbSAnLi4vYW5pbWF0aW9ucy9tYWluJztcbmltcG9ydCB7IElneEV4cGFuc2lvblBhbmVsQm9keUNvbXBvbmVudCB9IGZyb20gJy4vZXhwYW5zaW9uLXBhbmVsLWJvZHkuY29tcG9uZW50JztcbmltcG9ydCB7IElneEV4cGFuc2lvblBhbmVsSGVhZGVyQ29tcG9uZW50IH0gZnJvbSAnLi9leHBhbnNpb24tcGFuZWwtaGVhZGVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJR1hfRVhQQU5TSU9OX1BBTkVMX0NPTVBPTkVOVCwgSWd4RXhwYW5zaW9uUGFuZWxCYXNlLCBJRXhwYW5zaW9uUGFuZWxFdmVudEFyZ3MgfSBmcm9tICcuL2V4cGFuc2lvbi1wYW5lbC5jb21tb24nO1xuXG5sZXQgTkVYVF9JRCA9IDA7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQW5pbWF0aW9uU2V0dGluZ3Mge1xuICAgIG9wZW5BbmltYXRpb246IEFuaW1hdGlvblJlZmVyZW5jZU1ldGFkYXRhO1xuICAgIGNsb3NlQW5pbWF0aW9uOiBBbmltYXRpb25SZWZlcmVuY2VNZXRhZGF0YTtcbn1cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnaWd4LWV4cGFuc2lvbi1wYW5lbCcsXG4gICAgdGVtcGxhdGVVcmw6ICdleHBhbnNpb24tcGFuZWwuY29tcG9uZW50Lmh0bWwnLFxuICAgIHByb3ZpZGVyczogW3sgcHJvdmlkZTogSUdYX0VYUEFOU0lPTl9QQU5FTF9DT01QT05FTlQsIHVzZUV4aXN0aW5nOiBJZ3hFeHBhbnNpb25QYW5lbENvbXBvbmVudCB9XVxufSlcbmV4cG9ydCBjbGFzcyBJZ3hFeHBhbnNpb25QYW5lbENvbXBvbmVudCBpbXBsZW1lbnRzIElneEV4cGFuc2lvblBhbmVsQmFzZSwgQWZ0ZXJDb250ZW50SW5pdCB7XG4gICAgcHJpdmF0ZSBfY29sbGFwc2VkID0gdHJ1ZTtcbiAgICAvKipcbiAgICAgKiBTZXRzL2dldHMgdGhlIGFuaW1hdGlvbiBzZXR0aW5ncyBvZiB0aGUgZXhwYW5zaW9uIHBhbmVsIGNvbXBvbmVudFxuICAgICAqIE9wZW4gYW5kIENsb3NlIGFuaW1hdGlvbiBzaG91bGQgYmUgcGFzc2VkXG4gICAgICpcbiAgICAgKiBHZXRcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogIGNvbnN0IGN1cnJlbnRBbmltYXRpb25zID0gdGhpcy5wYW5lbC5hbmltYXRpb25TZXR0aW5ncztcbiAgICAgKiBgYGBcbiAgICAgKiBTZXRcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogIGltcG9ydCB7IHNsaWRlSW5MZWZ0LCBzbGlkZU91dFJpZ2h0IH0gZnJvbSAnaWduaXRldWktYW5ndWxhcic7XG4gICAgICogIC4uLlxuICAgICAqICB0aGlzLnBhbmVsLmFuaW1hdGlvbnNTZXR0aW5ncyA9IHtcbiAgICAgKiAgICAgIG9wZW5BbmltYXRpb246IHNsaWRlSW5MZWZ0LFxuICAgICAqICAgICAgY2xvc2VBbmltYXRpb246IHNsaWRlT3V0UmlnaHRcbiAgICAgKiB9O1xuICAgICAqIGBgYFxuICAgICAqIG9yIHZpYSB0ZW1wbGF0ZVxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiAgaW1wb3J0IHsgc2xpZGVJbkxlZnQsIHNsaWRlT3V0UmlnaHQgfSBmcm9tICdpZ25pdGV1aS1hbmd1bGFyJztcbiAgICAgKiAgLi4uXG4gICAgICogIG15Q3VzdG9tQW5pbWF0aW9uT2JqZWN0ID0ge1xuICAgICAqICAgICAgb3BlbkFuaW1hdGlvbjogc2xpZGVJbkxlZnQsXG4gICAgICogICAgICBjbG9zZUFuaW1hdGlvbjogc2xpZGVPdXRSaWdodFxuICAgICAqIH07XG4gICAgICogYGBgaHRtbFxuICAgICAqICA8aWd4LWV4cGFuc2lvbi1wYW5lbCBbYW5pbWF0aW9uU2V0dGluZ3NdPSdteUN1c3RvbUFuaW1hdGlvbk9iamVjdCc+XG4gICAgICogIC4uLlxuICAgICAqICA8L2lneC1leHBhbnNpb24tcGFuZWw+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgYW5pbWF0aW9uU2V0dGluZ3M6IEFuaW1hdGlvblNldHRpbmdzID0ge1xuICAgICAgICBvcGVuQW5pbWF0aW9uOiBncm93VmVySW4sXG4gICAgICAgIGNsb3NlQW5pbWF0aW9uOiBncm93VmVyT3V0XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFNldHMvZ2V0cyB0aGUgYGlkYCBvZiB0aGUgZXhwYW5zaW9uIHBhbmVsIGNvbXBvbmVudC5cbiAgICAgKiBJZiBub3Qgc2V0LCBgaWRgIHdpbGwgaGF2ZSB2YWx1ZSBgXCJpZ3gtZXhwYW5zaW9uLXBhbmVsLTBcImA7XG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtZXhwYW5zaW9uLXBhbmVsIGlkID0gXCJteS1maXJzdC1leHBhbnNpb24tcGFuZWxcIj48L2lneC1leHBhbnNpb24tcGFuZWw+XG4gICAgICogYGBgXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBwYW5lbElkID0gIHRoaXMucGFuZWwuaWQ7XG4gICAgICogYGBgXG4gICAgICogQG1lbWJlcm9mIElneEV4cGFuc2lvblBhbmVsQ29tcG9uZW50XG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmlkJylcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBpZCA9IGBpZ3gtZXhwYW5zaW9uLXBhbmVsLSR7TkVYVF9JRCsrfWA7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtZXhwYW5zaW9uLXBhbmVsJylcbiAgICBwdWJsaWMgY3NzQ2xhc3MgPSAnaWd4LWV4cGFuc2lvbi1wYW5lbCc7XG5cbiAgICAvKipcbiAgICAgKiBHZXRzL3NldHMgd2hldGhlciB0aGUgY29tcG9uZW50IGlzIGNvbGxhcHNlZCAoaXRzIGNvbnRlbnQgaXMgaGlkZGVuKVxuICAgICAqIEdldFxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiAgY29uc3QgbXlQYW5lbFN0YXRlOiBib29sZWFuID0gdGhpcy5wYW5lbC5jb2xsYXBzZWQ7XG4gICAgICogYGBgXG4gICAgICogU2V0XG4gICAgICogYGBgaHRtbFxuICAgICAqICB0aGlzLnBhbmVsLmNvbGxhcHNlZCA9IHRydWU7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBUd28td2F5IGRhdGEgYmluZGluZzpcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1leHBhbnNpb24tcGFuZWwgWyhjb2xsYXBzZWQpXT1cIm1vZGVsLmlzQ29sbGFwc2VkXCI+PC9pZ3gtZXhwYW5zaW9uLXBhbmVsPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdldCBjb2xsYXBzZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb2xsYXBzZWQ7XG4gICAgfVxuICAgIHB1YmxpYyBzZXQgY29sbGFwc2VkKHZhbHVlKSB7XG4gICAgICAgIHRoaXMuX2NvbGxhcHNlZCA9IHZhbHVlO1xuICAgICAgICB0aGlzLmNvbGxhcHNlZENoYW5nZS5lbWl0KHRoaXMuX2NvbGxhcHNlZCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICpAaGlkZGVuXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIGNvbGxhcHNlZENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgd2hlbiB0aGUgZXhwYW5zaW9uIHBhbmVsIGZpbmlzaGVzIGNvbGxhcHNpbmdcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogIGhhbmRsZUNvbGxhcHNlZChldmVudDoge1xuICAgICAqICBwYW5lbDogSWd4RXhwYW5zaW9uUGFuZWxDb21wb25lbnQsXG4gICAgICogIGV2ZW50OiBFdmVudFxuICAgICAqIH0pXG4gICAgICogYGBgXG4gICAgICogYGBgaHRtbFxuICAgICAqICA8aWd4LWV4cGFuc2lvbi1wYW5lbCAob25Db2xsYXBzZWQpPVwiaGFuZGxlQ29sbGFwc2VkKCRldmVudClcIj5cbiAgICAgKiAgICAgIC4uLlxuICAgICAqICA8L2lneC1leHBhbnNpb24tcGFuZWw+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIG9uQ29sbGFwc2VkID0gbmV3IEV2ZW50RW1pdHRlcjxJRXhwYW5zaW9uUGFuZWxFdmVudEFyZ3M+KCk7XG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIHdoZW4gdGhlIGV4cGFuc2lvbiBwYW5lbCBmaW5pc2hlcyBleHBhbmRpbmdcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogIGhhbmRsZUV4cGFuZGVkKGV2ZW50OiB7XG4gICAgICogIHBhbmVsOiBJZ3hFeHBhbnNpb25QYW5lbENvbXBvbmVudCxcbiAgICAgKiAgZXZlbnQ6IEV2ZW50XG4gICAgICogfSlcbiAgICAgKiBgYGBcbiAgICAgKiBgYGBodG1sXG4gICAgICogIDxpZ3gtZXhwYW5zaW9uLXBhbmVsIChvbkV4cGFuZGVkKT1cImhhbmRsZUV4cGFuZGVkKCRldmVudClcIj5cbiAgICAgKiAgICAgIC4uLlxuICAgICAqICA8L2lneC1leHBhbnNpb24tcGFuZWw+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIG9uRXhwYW5kZWQgPSBuZXcgRXZlbnRFbWl0dGVyPElFeHBhbnNpb25QYW5lbEV2ZW50QXJncz4oKTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGhlYWRlcklkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5oZWFkZXIgPyBgJHt0aGlzLmlkfS1oZWFkZXJgIDogJyc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIEBDb250ZW50Q2hpbGQoSWd4RXhwYW5zaW9uUGFuZWxCb2R5Q29tcG9uZW50LCB7IHJlYWQ6IElneEV4cGFuc2lvblBhbmVsQm9keUNvbXBvbmVudCB9KVxuICAgIHB1YmxpYyBib2R5OiBJZ3hFeHBhbnNpb25QYW5lbEJvZHlDb21wb25lbnQ7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgQENvbnRlbnRDaGlsZChJZ3hFeHBhbnNpb25QYW5lbEhlYWRlckNvbXBvbmVudCwgeyByZWFkOiBJZ3hFeHBhbnNpb25QYW5lbEhlYWRlckNvbXBvbmVudCB9KVxuICAgIHB1YmxpYyBoZWFkZXI6IElneEV4cGFuc2lvblBhbmVsSGVhZGVyQ29tcG9uZW50O1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLCBwcml2YXRlIGJ1aWxkZXI6IEFuaW1hdGlvbkJ1aWxkZXIpIHsgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmJvZHkgJiYgdGhpcy5oZWFkZXIpIHtcbiAgICAgICAgICAgIC8vIHNjaGVkdWxlIGF0IGVuZCBvZiB0dXJuOlxuICAgICAgICAgICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5ib2R5LmxhYmVsbGVkQnkgPSB0aGlzLmJvZHkubGFiZWxsZWRCeSB8fCB0aGlzLmhlYWRlcklkO1xuICAgICAgICAgICAgICAgIHRoaXMuYm9keS5sYWJlbCA9IHRoaXMuYm9keS5sYWJlbCB8fCB0aGlzLmlkICsgJy1yZWdpb24nO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHBsYXlPcGVuQW5pbWF0aW9uKGNiOiAoKSA9PiB2b2lkKSB7XG4gICAgICAgIGlmICghdGhpcy5ib2R5KSB7IC8vIGlmIG5vdCBib2R5IGVsZW1lbnQgaXMgcGFzc2VkLCB0aGVyZSBpcyBub3RoaW5nIHRvIGFuaW1hdGVcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhbmltYXRpb24gPSB1c2VBbmltYXRpb24odGhpcy5hbmltYXRpb25TZXR0aW5ncy5vcGVuQW5pbWF0aW9uKTtcbiAgICAgICAgY29uc3QgYW5pbWF0aW9uQnVpbGRlciA9IHRoaXMuYnVpbGRlci5idWlsZChhbmltYXRpb24pO1xuICAgICAgICBjb25zdCBvcGVuQW5pbWF0aW9uUGxheWVyID0gYW5pbWF0aW9uQnVpbGRlci5jcmVhdGUodGhpcy5ib2R5LmVsZW1lbnQubmF0aXZlRWxlbWVudCk7XG5cbiAgICAgICAgb3BlbkFuaW1hdGlvblBsYXllci5vbkRvbmUoKCkgPT4ge1xuICAgICAgICAgICAgY2IoKTtcbiAgICAgICAgICAgIG9wZW5BbmltYXRpb25QbGF5ZXIucmVzZXQoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgb3BlbkFuaW1hdGlvblBsYXllci5wbGF5KCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwbGF5Q2xvc2VBbmltYXRpb24oY2I6ICgpID0+IHZvaWQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmJvZHkpIHsgLy8gaWYgbm90IGJvZHkgZWxlbWVudCBpcyBwYXNzZWQsIHRoZXJlIGlzIG5vdGhpbmcgdG8gYW5pbWF0ZVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFuaW1hdGlvbiA9IHVzZUFuaW1hdGlvbih0aGlzLmFuaW1hdGlvblNldHRpbmdzLmNsb3NlQW5pbWF0aW9uKTtcbiAgICAgICAgY29uc3QgYW5pbWF0aW9uQnVpbGRlciA9IHRoaXMuYnVpbGRlci5idWlsZChhbmltYXRpb24pO1xuICAgICAgICBjb25zdCBjbG9zZUFuaW1hdGlvblBsYXllciA9IGFuaW1hdGlvbkJ1aWxkZXIuY3JlYXRlKHRoaXMuYm9keS5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICBjbG9zZUFuaW1hdGlvblBsYXllci5vbkRvbmUoKCkgPT4ge1xuICAgICAgICAgICAgY2IoKTtcbiAgICAgICAgICAgIGNsb3NlQW5pbWF0aW9uUGxheWVyLnJlc2V0KCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNsb3NlQW5pbWF0aW9uUGxheWVyLnBsYXkoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb2xsYXBzZXMgdGhlIHBhbmVsXG4gICAgICpcbiAgICAgKiBgYGBodG1sXG4gICAgICogIDxpZ3gtZXhwYW5zaW9uLXBhbmVsICNteVBhbmVsPlxuICAgICAqICAgICAgLi4uXG4gICAgICogIDwvaWd4LWV4cGFuc2lvbi1wYW5lbD5cbiAgICAgKiAgPGJ1dHRvbiAoY2xpY2spPVwibXlQYW5lbC5jb2xsYXBzZSgkZXZlbnQpXCI+Q29sbHBhc2UgUGFuZWw8L2J1dHRvbj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBjb2xsYXBzZShldnQ/OiBFdmVudCkge1xuICAgICAgICBpZiAodGhpcy5jb2xsYXBzZWQpIHsgLy8gSWYgZXhwYW5zaW9uIHBhbmVsIGlzIGFscmVhZHkgY29sbGFwc2VkLCBkbyBub3RoaW5nXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wbGF5Q2xvc2VBbmltYXRpb24oXG4gICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkNvbGxhcHNlZC5lbWl0KHsgZXZlbnQ6IGV2dCwgcGFuZWw6IHRoaXMgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5jb2xsYXBzZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEV4cGFuZHMgdGhlIHBhbmVsXG4gICAgICpcbiAgICAgKiBgYGBodG1sXG4gICAgICogIDxpZ3gtZXhwYW5zaW9uLXBhbmVsICNteVBhbmVsPlxuICAgICAqICAgICAgLi4uXG4gICAgICogIDwvaWd4LWV4cGFuc2lvbi1wYW5lbD5cbiAgICAgKiAgPGJ1dHRvbiAoY2xpY2spPVwibXlQYW5lbC5leHBhbmQoJGV2ZW50KVwiPkV4cGFuZCBQYW5lbDwvYnV0dG9uPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGV4cGFuZChldnQ/OiBFdmVudCkge1xuICAgICAgICBpZiAoIXRoaXMuY29sbGFwc2VkKSB7IC8vIElmIHRoZSBwYW5lbCBpcyBhbHJlYWR5IG9wZW5lZCwgZG8gbm90aGluZ1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY29sbGFwc2VkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgdGhpcy5wbGF5T3BlbkFuaW1hdGlvbihcbiAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uRXhwYW5kZWQuZW1pdCh7IGV2ZW50OiBldnQsIHBhbmVsOiB0aGlzIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRvZ2dsZXMgdGhlIHBhbmVsXG4gICAgICpcbiAgICAgKiBgYGBodG1sXG4gICAgICogIDxpZ3gtZXhwYW5zaW9uLXBhbmVsICNteVBhbmVsPlxuICAgICAqICAgICAgLi4uXG4gICAgICogIDwvaWd4LWV4cGFuc2lvbi1wYW5lbD5cbiAgICAgKiAgPGJ1dHRvbiAoY2xpY2spPVwibXlQYW5lbC50b2dnbGUoJGV2ZW50KVwiPkV4cGFuZCBQYW5lbDwvYnV0dG9uPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHRvZ2dsZShldnQ/OiBFdmVudCkge1xuICAgICAgICBpZiAodGhpcy5jb2xsYXBzZWQpIHtcbiAgICAgICAgICAgIHRoaXMub3BlbihldnQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jbG9zZShldnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb3BlbihldnQ/OiBFdmVudCkge1xuICAgICAgICB0aGlzLmV4cGFuZChldnQpO1xuICAgIH1cbiAgICBjbG9zZShldnQ/OiBFdmVudCkge1xuICAgICAgICB0aGlzLmNvbGxhcHNlKGV2dCk7XG4gICAgfVxuXG59XG4iXX0=