@catull/igniteui-angular
Version:
Ignite UI for Angular is a dependency-free Angular toolkit for building modern web apps
294 lines • 27.7 kB
JavaScript
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';
var NEXT_ID = 0;
var IgxExpansionPanelComponent = /** @class */ (function () {
function IgxExpansionPanelComponent(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();
}
IgxExpansionPanelComponent_1 = IgxExpansionPanelComponent;
Object.defineProperty(IgxExpansionPanelComponent.prototype, "collapsed", {
/**
* 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: function () {
return this._collapsed;
},
set: function (value) {
this._collapsed = value;
this.collapsedChange.emit(this._collapsed);
},
enumerable: true,
configurable: true
});
Object.defineProperty(IgxExpansionPanelComponent.prototype, "headerId", {
/**
* @hidden
*/
get: function () {
return this.header ? this.id + "-header" : '';
},
enumerable: true,
configurable: true
});
/** @hidden */
IgxExpansionPanelComponent.prototype.ngAfterContentInit = function () {
var _this = this;
if (this.body && this.header) {
// schedule at end of turn:
Promise.resolve().then(function () {
_this.body.labelledBy = _this.body.labelledBy || _this.headerId;
_this.body.label = _this.body.label || _this.id + '-region';
});
}
};
IgxExpansionPanelComponent.prototype.playOpenAnimation = function (cb) {
if (!this.body) { // if not body element is passed, there is nothing to animate
return;
}
var animation = useAnimation(this.animationSettings.openAnimation);
var animationBuilder = this.builder.build(animation);
var openAnimationPlayer = animationBuilder.create(this.body.element.nativeElement);
openAnimationPlayer.onDone(function () {
cb();
openAnimationPlayer.reset();
});
openAnimationPlayer.play();
};
IgxExpansionPanelComponent.prototype.playCloseAnimation = function (cb) {
if (!this.body) { // if not body element is passed, there is nothing to animate
return;
}
var animation = useAnimation(this.animationSettings.closeAnimation);
var animationBuilder = this.builder.build(animation);
var closeAnimationPlayer = animationBuilder.create(this.body.element.nativeElement);
closeAnimationPlayer.onDone(function () {
cb();
closeAnimationPlayer.reset();
});
closeAnimationPlayer.play();
};
/**
* Collapses the panel
*
* ```html
* <igx-expansion-panel #myPanel>
* ...
* </igx-expansion-panel>
* <button (click)="myPanel.collapse($event)">Collpase Panel</button>
* ```
*/
IgxExpansionPanelComponent.prototype.collapse = function (evt) {
var _this = this;
if (this.collapsed) { // If expansion panel is already collapsed, do nothing
return;
}
this.playCloseAnimation(function () {
_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>
* ```
*/
IgxExpansionPanelComponent.prototype.expand = function (evt) {
var _this = this;
if (!this.collapsed) { // If the panel is already opened, do nothing
return;
}
this.collapsed = false;
this.cdr.detectChanges();
this.playOpenAnimation(function () {
_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>
* ```
*/
IgxExpansionPanelComponent.prototype.toggle = function (evt) {
if (this.collapsed) {
this.open(evt);
}
else {
this.close(evt);
}
};
IgxExpansionPanelComponent.prototype.open = function (evt) {
this.expand(evt);
};
IgxExpansionPanelComponent.prototype.close = function (evt) {
this.collapse(evt);
};
var IgxExpansionPanelComponent_1;
IgxExpansionPanelComponent.ctorParameters = function () { return [
{ 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);
return IgxExpansionPanelComponent;
}());
export { IgxExpansionPanelComponent };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwYW5zaW9uLXBhbmVsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2lnbml0ZXVpLWFuZ3VsYXIvIiwic291cmNlcyI6WyJsaWIvZXhwYW5zaW9uLXBhbmVsL2V4cGFuc2lvbi1wYW5lbC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFDSCxTQUFTLEVBQ1QsaUJBQWlCLEVBQ2pCLFlBQVksRUFDWixXQUFXLEVBQ1gsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBQ1osZ0JBQWdCLEVBQ25CLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSwwQkFBMEIsRUFBRSxZQUFZLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNqRyxPQUFPLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzNELE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxnQ0FBZ0MsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3RGLE9BQU8sRUFBRSw2QkFBNkIsRUFBbUQsTUFBTSwwQkFBMEIsQ0FBQztBQUUxSCxJQUFJLE9BQU8sR0FBRyxDQUFDLENBQUM7QUFXaEI7SUFnSkksb0NBQW9CLEdBQXNCLEVBQVUsT0FBeUI7UUFBekQsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFBVSxZQUFPLEdBQVAsT0FBTyxDQUFrQjtRQS9JckUsZUFBVSxHQUFHLElBQUksQ0FBQztRQUMxQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O1dBOEJHO1FBRUksc0JBQWlCLEdBQXNCO1lBQzFDLGFBQWEsRUFBRSxTQUFTO1lBQ3hCLGNBQWMsRUFBRSxVQUFVO1NBQzdCLENBQUM7UUFFRjs7Ozs7Ozs7OztXQVVHO1FBR0ksT0FBRSxHQUFHLHlCQUF1QixPQUFPLEVBQUksQ0FBQztRQUUvQzs7V0FFRztRQUVJLGFBQVEsR0FBRyxxQkFBcUIsQ0FB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QUNaLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDckIsQ0FBQztJQUNELDBDQUFLLEdBQUwsVUFBTSxHQUFXO1FBQ2IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN2QixDQUFDOzs7Z0JBaEh3QixpQkFBaUI7Z0JBQW1CLGdCQUFnQjs7SUE5RzdFO1FBREMsS0FBSyxFQUFFOzt5RUFJTjtJQWVGO1FBRkMsV0FBVyxDQUFDLFNBQVMsQ0FBQztRQUN0QixLQUFLLEVBQUU7OzBEQUN1QztJQU0vQztRQURDLFdBQVcsQ0FBQywyQkFBMkIsQ0FBQzs7Z0VBQ0Q7SUFtQnhDO1FBREMsS0FBSyxFQUFFOzs7K0RBR1A7SUFVRDtRQURDLE1BQU0sRUFBRTs7dUVBQzRDO0lBaUJyRDtRQURDLE1BQU0sRUFBRTs7bUVBQ3lEO0lBaUJsRTtRQURDLE1BQU0sRUFBRTs7a0VBQ3dEO0lBYWpFO1FBREMsWUFBWSxDQUFDLDhCQUE4QixFQUFFLEVBQUUsSUFBSSxFQUFFLDhCQUE4QixFQUFFLENBQUM7a0NBQzFFLDhCQUE4Qjs0REFBQztJQU01QztRQURDLFlBQVksQ0FBQyxnQ0FBZ0MsRUFBRSxFQUFFLElBQUksRUFBRSxnQ0FBZ0MsRUFBRSxDQUFDO2tDQUM1RSxnQ0FBZ0M7OERBQUM7SUE5SXZDLDBCQUEwQjtRQUx0QyxTQUFTLENBQUM7WUFDUCxRQUFRLEVBQUUscUJBQXFCO1lBQy9CLGlLQUE2QztZQUM3QyxTQUFTLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxXQUFXLEVBQUUsNEJBQTBCLEVBQUUsQ0FBQztTQUNuRyxDQUFDO3lDQWlKMkIsaUJBQWlCLEVBQW1CLGdCQUFnQjtPQWhKcEUsMEJBQTBCLENBa1F0QztJQUFELGlDQUFDO0NBQUEsQUFsUUQsSUFrUUM7U0FsUVksMEJBQTBCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDb21wb25lbnQsXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIElucHV0LFxuICAgIE91dHB1dCxcbiAgICBDb250ZW50Q2hpbGQsXG4gICAgQWZ0ZXJDb250ZW50SW5pdFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFuaW1hdGlvbkJ1aWxkZXIsIEFuaW1hdGlvblJlZmVyZW5jZU1ldGFkYXRhLCB1c2VBbmltYXRpb24gfSBmcm9tICdAYW5ndWxhci9hbmltYXRpb25zJztcbmltcG9ydCB7IGdyb3dWZXJPdXQsIGdyb3dWZXJJbiB9IGZyb20gJy4uL2FuaW1hdGlvbnMvbWFpbic7XG5pbXBvcnQgeyBJZ3hFeHBhbnNpb25QYW5lbEJvZHlDb21wb25lbnQgfSBmcm9tICcuL2V4cGFuc2lvbi1wYW5lbC1ib2R5LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJZ3hFeHBhbnNpb25QYW5lbEhlYWRlckNvbXBvbmVudCB9IGZyb20gJy4vZXhwYW5zaW9uLXBhbmVsLWhlYWRlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgSUdYX0VYUEFOU0lPTl9QQU5FTF9DT01QT05FTlQsIElneEV4cGFuc2lvblBhbmVsQmFzZSwgSUV4cGFuc2lvblBhbmVsRXZlbnRBcmdzIH0gZnJvbSAnLi9leHBhbnNpb24tcGFuZWwuY29tbW9uJztcblxubGV0IE5FWFRfSUQgPSAwO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFuaW1hdGlvblNldHRpbmdzIHtcbiAgICBvcGVuQW5pbWF0aW9uOiBBbmltYXRpb25SZWZlcmVuY2VNZXRhZGF0YTtcbiAgICBjbG9zZUFuaW1hdGlvbjogQW5pbWF0aW9uUmVmZXJlbmNlTWV0YWRhdGE7XG59XG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2lneC1leHBhbnNpb24tcGFuZWwnLFxuICAgIHRlbXBsYXRlVXJsOiAnZXhwYW5zaW9uLXBhbmVsLmNvbXBvbmVudC5odG1sJyxcbiAgICBwcm92aWRlcnM6IFt7IHByb3ZpZGU6IElHWF9FWFBBTlNJT05fUEFORUxfQ09NUE9ORU5ULCB1c2VFeGlzdGluZzogSWd4RXhwYW5zaW9uUGFuZWxDb21wb25lbnQgfV1cbn0pXG5leHBvcnQgY2xhc3MgSWd4RXhwYW5zaW9uUGFuZWxDb21wb25lbnQgaW1wbGVtZW50cyBJZ3hFeHBhbnNpb25QYW5lbEJhc2UsIEFmdGVyQ29udGVudEluaXQge1xuICAgIHByaXZhdGUgX2NvbGxhcHNlZCA9IHRydWU7XG4gICAgLyoqXG4gICAgICogU2V0cy9nZXRzIHRoZSBhbmltYXRpb24gc2V0dGluZ3Mgb2YgdGhlIGV4cGFuc2lvbiBwYW5lbCBjb21wb25lbnRcbiAgICAgKiBPcGVuIGFuZCBDbG9zZSBhbmltYXRpb24gc2hvdWxkIGJlIHBhc3NlZFxuICAgICAqXG4gICAgICogR2V0XG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqICBjb25zdCBjdXJyZW50QW5pbWF0aW9ucyA9IHRoaXMucGFuZWwuYW5pbWF0aW9uU2V0dGluZ3M7XG4gICAgICogYGBgXG4gICAgICogU2V0XG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqICBpbXBvcnQgeyBzbGlkZUluTGVmdCwgc2xpZGVPdXRSaWdodCB9IGZyb20gJ2lnbml0ZXVpLWFuZ3VsYXInO1xuICAgICAqICAuLi5cbiAgICAgKiAgdGhpcy5wYW5lbC5hbmltYXRpb25zU2V0dGluZ3MgPSB7XG4gICAgICogICAgICBvcGVuQW5pbWF0aW9uOiBzbGlkZUluTGVmdCxcbiAgICAgKiAgICAgIGNsb3NlQW5pbWF0aW9uOiBzbGlkZU91dFJpZ2h0XG4gICAgICogfTtcbiAgICAgKiBgYGBcbiAgICAgKiBvciB2aWEgdGVtcGxhdGVcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogIGltcG9ydCB7IHNsaWRlSW5MZWZ0LCBzbGlkZU91dFJpZ2h0IH0gZnJvbSAnaWduaXRldWktYW5ndWxhcic7XG4gICAgICogIC4uLlxuICAgICAqICBteUN1c3RvbUFuaW1hdGlvbk9iamVjdCA9IHtcbiAgICAgKiAgICAgIG9wZW5BbmltYXRpb246IHNsaWRlSW5MZWZ0LFxuICAgICAqICAgICAgY2xvc2VBbmltYXRpb246IHNsaWRlT3V0UmlnaHRcbiAgICAgKiB9O1xuICAgICAqIGBgYGh0bWxcbiAgICAgKiAgPGlneC1leHBhbnNpb24tcGFuZWwgW2FuaW1hdGlvblNldHRpbmdzXT0nbXlDdXN0b21BbmltYXRpb25PYmplY3QnPlxuICAgICAqICAuLi5cbiAgICAgKiAgPC9pZ3gtZXhwYW5zaW9uLXBhbmVsPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGFuaW1hdGlvblNldHRpbmdzOiBBbmltYXRpb25TZXR0aW5ncyA9IHtcbiAgICAgICAgb3BlbkFuaW1hdGlvbjogZ3Jvd1ZlckluLFxuICAgICAgICBjbG9zZUFuaW1hdGlvbjogZ3Jvd1Zlck91dFxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBTZXRzL2dldHMgdGhlIGBpZGAgb2YgdGhlIGV4cGFuc2lvbiBwYW5lbCBjb21wb25lbnQuXG4gICAgICogSWYgbm90IHNldCwgYGlkYCB3aWxsIGhhdmUgdmFsdWUgYFwiaWd4LWV4cGFuc2lvbi1wYW5lbC0wXCJgO1xuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWV4cGFuc2lvbi1wYW5lbCBpZCA9IFwibXktZmlyc3QtZXhwYW5zaW9uLXBhbmVsXCI+PC9pZ3gtZXhwYW5zaW9uLXBhbmVsPlxuICAgICAqIGBgYFxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgcGFuZWxJZCA9ICB0aGlzLnBhbmVsLmlkO1xuICAgICAqIGBgYFxuICAgICAqIEBtZW1iZXJvZiBJZ3hFeHBhbnNpb25QYW5lbENvbXBvbmVudFxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnYXR0ci5pZCcpXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgaWQgPSBgaWd4LWV4cGFuc2lvbi1wYW5lbC0ke05FWFRfSUQrK31gO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWV4cGFuc2lvbi1wYW5lbCcpXG4gICAgcHVibGljIGNzc0NsYXNzID0gJ2lneC1leHBhbnNpb24tcGFuZWwnO1xuXG4gICAgLyoqXG4gICAgICogR2V0cy9zZXRzIHdoZXRoZXIgdGhlIGNvbXBvbmVudCBpcyBjb2xsYXBzZWQgKGl0cyBjb250ZW50IGlzIGhpZGRlbilcbiAgICAgKiBHZXRcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogIGNvbnN0IG15UGFuZWxTdGF0ZTogYm9vbGVhbiA9IHRoaXMucGFuZWwuY29sbGFwc2VkO1xuICAgICAqIGBgYFxuICAgICAqIFNldFxuICAgICAqIGBgYGh0bWxcbiAgICAgKiAgdGhpcy5wYW5lbC5jb2xsYXBzZWQgPSB0cnVlO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogVHdvLXdheSBkYXRhIGJpbmRpbmc6XG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtZXhwYW5zaW9uLXBhbmVsIFsoY29sbGFwc2VkKV09XCJtb2RlbC5pc0NvbGxhcHNlZFwiPjwvaWd4LWV4cGFuc2lvbi1wYW5lbD5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBnZXQgY29sbGFwc2VkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29sbGFwc2VkO1xuICAgIH1cbiAgICBwdWJsaWMgc2V0IGNvbGxhcHNlZCh2YWx1ZSkge1xuICAgICAgICB0aGlzLl9jb2xsYXBzZWQgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5jb2xsYXBzZWRDaGFuZ2UuZW1pdCh0aGlzLl9jb2xsYXBzZWQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqQGhpZGRlblxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBjb2xsYXBzZWRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIHdoZW4gdGhlIGV4cGFuc2lvbiBwYW5lbCBmaW5pc2hlcyBjb2xsYXBzaW5nXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqICBoYW5kbGVDb2xsYXBzZWQoZXZlbnQ6IHtcbiAgICAgKiAgcGFuZWw6IElneEV4cGFuc2lvblBhbmVsQ29tcG9uZW50LFxuICAgICAqICBldmVudDogRXZlbnRcbiAgICAgKiB9KVxuICAgICAqIGBgYFxuICAgICAqIGBgYGh0bWxcbiAgICAgKiAgPGlneC1leHBhbnNpb24tcGFuZWwgKG9uQ29sbGFwc2VkKT1cImhhbmRsZUNvbGxhcHNlZCgkZXZlbnQpXCI+XG4gICAgICogICAgICAuLi5cbiAgICAgKiAgPC9pZ3gtZXhwYW5zaW9uLXBhbmVsPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBvbkNvbGxhcHNlZCA9IG5ldyBFdmVudEVtaXR0ZXI8SUV4cGFuc2lvblBhbmVsRXZlbnRBcmdzPigpO1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCB3aGVuIHRoZSBleHBhbnNpb24gcGFuZWwgZmluaXNoZXMgZXhwYW5kaW5nXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqICBoYW5kbGVFeHBhbmRlZChldmVudDoge1xuICAgICAqICBwYW5lbDogSWd4RXhwYW5zaW9uUGFuZWxDb21wb25lbnQsXG4gICAgICogIGV2ZW50OiBFdmVudFxuICAgICAqIH0pXG4gICAgICogYGBgXG4gICAgICogYGBgaHRtbFxuICAgICAqICA8aWd4LWV4cGFuc2lvbi1wYW5lbCAob25FeHBhbmRlZCk9XCJoYW5kbGVFeHBhbmRlZCgkZXZlbnQpXCI+XG4gICAgICogICAgICAuLi5cbiAgICAgKiAgPC9pZ3gtZXhwYW5zaW9uLXBhbmVsPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBvbkV4cGFuZGVkID0gbmV3IEV2ZW50RW1pdHRlcjxJRXhwYW5zaW9uUGFuZWxFdmVudEFyZ3M+KCk7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIGdldCBoZWFkZXJJZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaGVhZGVyID8gYCR7dGhpcy5pZH0taGVhZGVyYCA6ICcnO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBAQ29udGVudENoaWxkKElneEV4cGFuc2lvblBhbmVsQm9keUNvbXBvbmVudCwgeyByZWFkOiBJZ3hFeHBhbnNpb25QYW5lbEJvZHlDb21wb25lbnQgfSlcbiAgICBwdWJsaWMgYm9keTogSWd4RXhwYW5zaW9uUGFuZWxCb2R5Q29tcG9uZW50O1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIEBDb250ZW50Q2hpbGQoSWd4RXhwYW5zaW9uUGFuZWxIZWFkZXJDb21wb25lbnQsIHsgcmVhZDogSWd4RXhwYW5zaW9uUGFuZWxIZWFkZXJDb21wb25lbnQgfSlcbiAgICBwdWJsaWMgaGVhZGVyOiBJZ3hFeHBhbnNpb25QYW5lbEhlYWRlckNvbXBvbmVudDtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZiwgcHJpdmF0ZSBidWlsZGVyOiBBbmltYXRpb25CdWlsZGVyKSB7IH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5ib2R5ICYmIHRoaXMuaGVhZGVyKSB7XG4gICAgICAgICAgICAvLyBzY2hlZHVsZSBhdCBlbmQgb2YgdHVybjpcbiAgICAgICAgICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuYm9keS5sYWJlbGxlZEJ5ID0gdGhpcy5ib2R5LmxhYmVsbGVkQnkgfHwgdGhpcy5oZWFkZXJJZDtcbiAgICAgICAgICAgICAgICB0aGlzLmJvZHkubGFiZWwgPSB0aGlzLmJvZHkubGFiZWwgfHwgdGhpcy5pZCArICctcmVnaW9uJztcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwbGF5T3BlbkFuaW1hdGlvbihjYjogKCkgPT4gdm9pZCkge1xuICAgICAgICBpZiAoIXRoaXMuYm9keSkgeyAvLyBpZiBub3QgYm9keSBlbGVtZW50IGlzIHBhc3NlZCwgdGhlcmUgaXMgbm90aGluZyB0byBhbmltYXRlXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYW5pbWF0aW9uID0gdXNlQW5pbWF0aW9uKHRoaXMuYW5pbWF0aW9uU2V0dGluZ3Mub3BlbkFuaW1hdGlvbik7XG4gICAgICAgIGNvbnN0IGFuaW1hdGlvbkJ1aWxkZXIgPSB0aGlzLmJ1aWxkZXIuYnVpbGQoYW5pbWF0aW9uKTtcbiAgICAgICAgY29uc3Qgb3BlbkFuaW1hdGlvblBsYXllciA9IGFuaW1hdGlvbkJ1aWxkZXIuY3JlYXRlKHRoaXMuYm9keS5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQpO1xuXG4gICAgICAgIG9wZW5BbmltYXRpb25QbGF5ZXIub25Eb25lKCgpID0+IHtcbiAgICAgICAgICAgIGNiKCk7XG4gICAgICAgICAgICBvcGVuQW5pbWF0aW9uUGxheWVyLnJlc2V0KCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIG9wZW5BbmltYXRpb25QbGF5ZXIucGxheSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgcGxheUNsb3NlQW5pbWF0aW9uKGNiOiAoKSA9PiB2b2lkKSB7XG4gICAgICAgIGlmICghdGhpcy5ib2R5KSB7IC8vIGlmIG5vdCBib2R5IGVsZW1lbnQgaXMgcGFzc2VkLCB0aGVyZSBpcyBub3RoaW5nIHRvIGFuaW1hdGVcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhbmltYXRpb24gPSB1c2VBbmltYXRpb24odGhpcy5hbmltYXRpb25TZXR0aW5ncy5jbG9zZUFuaW1hdGlvbik7XG4gICAgICAgIGNvbnN0IGFuaW1hdGlvbkJ1aWxkZXIgPSB0aGlzLmJ1aWxkZXIuYnVpbGQoYW5pbWF0aW9uKTtcbiAgICAgICAgY29uc3QgY2xvc2VBbmltYXRpb25QbGF5ZXIgPSBhbmltYXRpb25CdWlsZGVyLmNyZWF0ZSh0aGlzLmJvZHkuZWxlbWVudC5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgY2xvc2VBbmltYXRpb25QbGF5ZXIub25Eb25lKCgpID0+IHtcbiAgICAgICAgICAgIGNiKCk7XG4gICAgICAgICAgICBjbG9zZUFuaW1hdGlvblBsYXllci5yZXNldCgpO1xuICAgICAgICB9KTtcblxuICAgICAgICBjbG9zZUFuaW1hdGlvblBsYXllci5wbGF5KCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29sbGFwc2VzIHRoZSBwYW5lbFxuICAgICAqXG4gICAgICogYGBgaHRtbFxuICAgICAqICA8aWd4LWV4cGFuc2lvbi1wYW5lbCAjbXlQYW5lbD5cbiAgICAgKiAgICAgIC4uLlxuICAgICAqICA8L2lneC1leHBhbnNpb24tcGFuZWw+XG4gICAgICogIDxidXR0b24gKGNsaWNrKT1cIm15UGFuZWwuY29sbGFwc2UoJGV2ZW50KVwiPkNvbGxwYXNlIFBhbmVsPC9idXR0b24+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgY29sbGFwc2UoZXZ0PzogRXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuY29sbGFwc2VkKSB7IC8vIElmIGV4cGFuc2lvbiBwYW5lbCBpcyBhbHJlYWR5IGNvbGxhcHNlZCwgZG8gbm90aGluZ1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucGxheUNsb3NlQW5pbWF0aW9uKFxuICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMub25Db2xsYXBzZWQuZW1pdCh7IGV2ZW50OiBldnQsIHBhbmVsOiB0aGlzIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMuY29sbGFwc2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFeHBhbmRzIHRoZSBwYW5lbFxuICAgICAqXG4gICAgICogYGBgaHRtbFxuICAgICAqICA8aWd4LWV4cGFuc2lvbi1wYW5lbCAjbXlQYW5lbD5cbiAgICAgKiAgICAgIC4uLlxuICAgICAqICA8L2lneC1leHBhbnNpb24tcGFuZWw+XG4gICAgICogIDxidXR0b24gKGNsaWNrKT1cIm15UGFuZWwuZXhwYW5kKCRldmVudClcIj5FeHBhbmQgUGFuZWw8L2J1dHRvbj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBleHBhbmQoZXZ0PzogRXZlbnQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNvbGxhcHNlZCkgeyAvLyBJZiB0aGUgcGFuZWwgaXMgYWxyZWFkeSBvcGVuZWQsIGRvIG5vdGhpbmdcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNvbGxhcHNlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIHRoaXMucGxheU9wZW5BbmltYXRpb24oXG4gICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkV4cGFuZGVkLmVtaXQoeyBldmVudDogZXZ0LCBwYW5lbDogdGhpcyB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUb2dnbGVzIHRoZSBwYW5lbFxuICAgICAqXG4gICAgICogYGBgaHRtbFxuICAgICAqICA8aWd4LWV4cGFuc2lvbi1wYW5lbCAjbXlQYW5lbD5cbiAgICAgKiAgICAgIC4uLlxuICAgICAqICA8L2lneC1leHBhbnNpb24tcGFuZWw+XG4gICAgICogIDxidXR0b24gKGNsaWNrKT1cIm15UGFuZWwudG9nZ2xlKCRldmVudClcIj5FeHBhbmQgUGFuZWw8L2J1dHRvbj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICB0b2dnbGUoZXZ0PzogRXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuY29sbGFwc2VkKSB7XG4gICAgICAgICAgICB0aGlzLm9wZW4oZXZ0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY2xvc2UoZXZ0KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9wZW4oZXZ0PzogRXZlbnQpIHtcbiAgICAgICAgdGhpcy5leHBhbmQoZXZ0KTtcbiAgICB9XG4gICAgY2xvc2UoZXZ0PzogRXZlbnQpIHtcbiAgICAgICAgdGhpcy5jb2xsYXBzZShldnQpO1xuICAgIH1cblxufVxuIl19