design-angular-kit
Version:
Un toolkit Angular conforme alle linee guida di design per i servizi web della PA
194 lines • 27.1 kB
JavaScript
import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';
import { ItAbstractComponent } from '../../../abstracts/abstract.component';
import { Modal } from 'bootstrap-italia';
import { TranslateModule } from '@ngx-translate/core';
import { inputToBoolean } from '../../../utils/coercion';
import * as i0 from "@angular/core";
import * as i1 from "@ngx-translate/core";
/**
* Modal windows
* @description To show featured content, notifications to users, or personalized content.
*/
export class ItModalComponent extends ItAbstractComponent {
constructor() {
super(...arguments);
/**
* Show/Hide close button on header
* @default true
*/
this.closeButton = true;
/**
* To have modals that appear with fades
* @default true
*/
this.fade = true;
/**
* Includes a modal-backdrop element. Alternatively, specify static for a backdrop which doesn’t close the modal when clicked.
* @default true
*/
this.backdrop = true;
/**
* Puts the focus on the modal when initialized.
* @default true
*/
this.focus = true;
/**
* Closes the modal when escape key is pressed.
* @default true
*/
this.keyboard = true;
/**
* This event fires immediately when the instance method show is called.
*/
this.showEvent = new EventEmitter();
/**
* This event fires when the modal has been made visible to the user (it will wait for CSS transitions to complete).
*/
this.shownEvent = new EventEmitter();
/**
* This event is raised immediately when the instance method hide has been called.
*/
this.hideEvent = new EventEmitter();
/**
* This event fires when the modal has finished hiding from the user (it will wait for CSS transitions to complete).
*/
this.hiddenEvent = new EventEmitter();
/**
* This event is fired when the modal is displayed, its background is static and a click outside the modal or a press
* of the esc key occurs and data-bs-keyboard is set to false.
*/
this.hidePreventedEvent = new EventEmitter();
}
ngAfterViewInit() {
super.ngAfterViewInit();
this._renderer.removeAttribute(this._elementRef.nativeElement, 'title');
if (this.modalElement) {
const element = this.modalElement.nativeElement;
this.modal = Modal.getOrCreateInstance(element, {
...this.options,
backdrop: this.backdrop === 'static' ? 'static' : this.backdrop,
focus: this.focus,
keyboard: this.keyboard,
});
element.addEventListener('show.bs.modal', event => this.showEvent.emit(event));
element.addEventListener('shown.bs.modal', event => this.shownEvent.emit(event));
element.addEventListener('hide.bs.modal', event => this.hideEvent.emit(event));
element.addEventListener('hidden.bs.modal', event => this.hiddenEvent.emit(event));
element.addEventListener('hidePrevented.bs.modal', event => this.hidePreventedEvent.emit(event));
}
}
get modalClass() {
let modalClass = 'modal';
if (this.fade) {
modalClass += ` fade`;
}
if (this.alertModal) {
modalClass += ` alert-modal`;
}
if (this.dialogLinkList) {
modalClass += ` it-dialog-link-list`;
}
if (this.popconfirm) {
modalClass += ` popconfirm-modal`;
}
if (this.scrollable) {
modalClass += ` it-dialog-scrollable`;
}
return modalClass;
}
get dialogClass() {
let dialogClass = 'modal-dialog';
if (this.alignment) {
dialogClass += ` modal-dialog-${this.alignment}`;
}
if (this.size) {
dialogClass += ` modal-${this.size}`;
}
return dialogClass;
}
/**
* Manually activate/deactivate a modal. Returns to the caller before the modal has actually been shown or hidden
*/
toggle() {
this.modal?.toggle();
}
/**
* Manually open a modal. Returns to the caller before the modal has actually been displayed
*/
show() {
this.modal?.show();
}
/**
* Manually hide a modal. Returns to the caller before the modal has actually been hidden
*/
hide() {
this.modal?.hide();
}
/**
* Manually reposition the modal if the height of the modal changes when it is opened (in case a scroll bar appears).
*/
handleUpdate() {
this.modal?.handleUpdate();
}
/**
* Destroys the modal of an element.
*/
dispose() {
this.modal?.dispose();
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: ItModalComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.6", type: ItModalComponent, isStandalone: true, selector: "it-modal", inputs: { closeButton: ["closeButton", "closeButton", inputToBoolean], alertModal: ["alertModal", "alertModal", inputToBoolean], dialogLinkList: ["dialogLinkList", "dialogLinkList", inputToBoolean], popconfirm: ["popconfirm", "popconfirm", inputToBoolean], scrollable: ["scrollable", "scrollable", inputToBoolean], fade: ["fade", "fade", inputToBoolean], alignment: "alignment", size: "size", backdrop: "backdrop", focus: ["focus", "focus", inputToBoolean], keyboard: ["keyboard", "keyboard", inputToBoolean], footerShadow: ["footerShadow", "footerShadow", inputToBoolean], options: "options" }, outputs: { showEvent: "showEvent", shownEvent: "shownEvent", hideEvent: "hideEvent", hiddenEvent: "hiddenEvent", hidePreventedEvent: "hidePreventedEvent" }, viewQueries: [{ propertyName: "modalElement", first: true, predicate: ["modalElement"], descendants: true }], exportAs: ["itModal"], usesInheritance: true, ngImport: i0, template: "<div\n #modalElement\n [id]=\"id\"\n [class]=\"modalClass\"\n tabindex=\"-1\"\n role=\"dialog\"\n aria-hidden=\"true\"\n [attr.aria-labelledby]=\"id + '-title'\"\n [attr.aria-describedby]=\"id + '-description'\">\n <div [class]=\"dialogClass\">\n <div class=\"modal-content\" role=\"document\">\n <div class=\"modal-header\">\n <ng-content select=\"[beforeTitle]\"></ng-content>\n\n <h2 class=\"modal-title h5\" id=\"{{ id }}-title\">\n <ng-content select=\"[modalTitle]\"></ng-content>\n </h2>\n\n @if (closeButton) {\n <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\" [attr.aria-label]=\"'it.core.close-modal' | translate\"></button>\n }\n </div>\n\n <div class=\"modal-body\">\n <div id=\"{{ id }}-description\">\n <ng-content select=\"[description]\"></ng-content>\n </div>\n <ng-content></ng-content>\n </div>\n\n <div class=\"modal-footer\" [class.modal-footer-shadow]=\"footerShadow\">\n <ng-content select=\"[footer]\"></ng-content>\n </div>\n </div>\n </div>\n</div>\n", styles: [".modal-footer:empty{display:none}\n"], dependencies: [{ kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: ItModalComponent, decorators: [{
type: Component,
args: [{ standalone: true, selector: 'it-modal', exportAs: 'itModal', changeDetection: ChangeDetectionStrategy.OnPush, imports: [TranslateModule], template: "<div\n #modalElement\n [id]=\"id\"\n [class]=\"modalClass\"\n tabindex=\"-1\"\n role=\"dialog\"\n aria-hidden=\"true\"\n [attr.aria-labelledby]=\"id + '-title'\"\n [attr.aria-describedby]=\"id + '-description'\">\n <div [class]=\"dialogClass\">\n <div class=\"modal-content\" role=\"document\">\n <div class=\"modal-header\">\n <ng-content select=\"[beforeTitle]\"></ng-content>\n\n <h2 class=\"modal-title h5\" id=\"{{ id }}-title\">\n <ng-content select=\"[modalTitle]\"></ng-content>\n </h2>\n\n @if (closeButton) {\n <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\" [attr.aria-label]=\"'it.core.close-modal' | translate\"></button>\n }\n </div>\n\n <div class=\"modal-body\">\n <div id=\"{{ id }}-description\">\n <ng-content select=\"[description]\"></ng-content>\n </div>\n <ng-content></ng-content>\n </div>\n\n <div class=\"modal-footer\" [class.modal-footer-shadow]=\"footerShadow\">\n <ng-content select=\"[footer]\"></ng-content>\n </div>\n </div>\n </div>\n</div>\n", styles: [".modal-footer:empty{display:none}\n"] }]
}], propDecorators: { closeButton: [{
type: Input,
args: [{ transform: inputToBoolean }]
}], alertModal: [{
type: Input,
args: [{ transform: inputToBoolean }]
}], dialogLinkList: [{
type: Input,
args: [{ transform: inputToBoolean }]
}], popconfirm: [{
type: Input,
args: [{ transform: inputToBoolean }]
}], scrollable: [{
type: Input,
args: [{ transform: inputToBoolean }]
}], fade: [{
type: Input,
args: [{ transform: inputToBoolean }]
}], alignment: [{
type: Input
}], size: [{
type: Input
}], backdrop: [{
type: Input
}], focus: [{
type: Input,
args: [{ transform: inputToBoolean }]
}], keyboard: [{
type: Input,
args: [{ transform: inputToBoolean }]
}], footerShadow: [{
type: Input,
args: [{ transform: inputToBoolean }]
}], options: [{
type: Input
}], showEvent: [{
type: Output
}], shownEvent: [{
type: Output
}], hideEvent: [{
type: Output
}], hiddenEvent: [{
type: Output
}], hidePreventedEvent: [{
type: Output
}], modalElement: [{
type: ViewChild,
args: ['modalElement', { static: false }]
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGVzaWduLWFuZ3VsYXIta2l0L3NyYy9saWIvY29tcG9uZW50cy9jb3JlL21vZGFsL21vZGFsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Rlc2lnbi1hbmd1bGFyLWtpdC9zcmMvbGliL2NvbXBvbmVudHMvY29yZS9tb2RhbC9tb2RhbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWlCLHVCQUF1QixFQUFFLFNBQVMsRUFBYyxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdEksT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDNUUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUV0RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7OztBQUV6RDs7O0dBR0c7QUFVSCxNQUFNLE9BQU8sZ0JBQWlCLFNBQVEsbUJBQW1CO0lBVHpEOztRQVVFOzs7V0FHRztRQUNtQyxnQkFBVyxHQUFZLElBQUksQ0FBQztRQTBCbEU7OztXQUdHO1FBQ21DLFNBQUksR0FBYSxJQUFJLENBQUM7UUFpQjVEOzs7V0FHRztRQUNNLGFBQVEsR0FBdUIsSUFBSSxDQUFDO1FBRTdDOzs7V0FHRztRQUNtQyxVQUFLLEdBQVksSUFBSSxDQUFDO1FBRTVEOzs7V0FHRztRQUNtQyxhQUFRLEdBQVksSUFBSSxDQUFDO1FBYS9EOztXQUVHO1FBQ2MsY0FBUyxHQUF3QixJQUFJLFlBQVksRUFBRSxDQUFDO1FBRXJFOztXQUVHO1FBQ2MsZUFBVSxHQUF3QixJQUFJLFlBQVks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L0MsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxjQUFjLEVBQUU7Z0JBTUUsVUFBVTtzQkFBL0MsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxjQUFjLEVBQUU7Z0JBTUUsSUFBSTtzQkFBekMsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxjQUFjLEVBQUU7Z0JBUzNCLFNBQVM7c0JBQWpCLEtBQUs7Z0JBTUcsSUFBSTtzQkFBWixLQUFLO2dCQU1HLFFBQVE7c0JBQWhCLEtBQUs7Z0JBTWdDLEtBQUs7c0JBQTFDLEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsY0FBYyxFQUFFO2dCQU1FLFFBQVE7c0JBQTdDLEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsY0FBYyxFQUFFO2dCQU1FLFlBQVk7c0JBQWpELEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsY0FBYyxFQUFFO2dCQUszQixPQUFPO3NCQUFmLEtBQUs7Z0JBS1csU0FBUztzQkFBekIsTUFBTTtnQkFLVSxVQUFVO3NCQUExQixNQUFNO2dCQUtVLFNBQVM7c0JBQXpCLE1BQU07Z0JBS1UsV0FBVztzQkFBM0IsTUFBTTtnQkFNVSxrQkFBa0I7c0JBQWxDLE1BQU07Z0JBSStDLFlBQVk7c0JBQWpFLFNBQVM7dUJBQUMsY0FBYyxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJdEFic3RyYWN0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vYWJzdHJhY3RzL2Fic3RyYWN0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBNb2RhbCB9IGZyb20gJ2Jvb3RzdHJhcC1pdGFsaWEnO1xuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBNb2RhbCBhcyBCU01vZGFsIH0gZnJvbSAnYm9vdHN0cmFwJztcbmltcG9ydCB7IGlucHV0VG9Cb29sZWFuIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvY29lcmNpb24nO1xuXG4vKipcbiAqIE1vZGFsIHdpbmRvd3NcbiAqIEBkZXNjcmlwdGlvbiBUbyBzaG93IGZlYXR1cmVkIGNvbnRlbnQsIG5vdGlmaWNhdGlvbnMgdG8gdXNlcnMsIG9yIHBlcnNvbmFsaXplZCBjb250ZW50LlxuICovXG5AQ29tcG9uZW50KHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgc2VsZWN0b3I6ICdpdC1tb2RhbCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9tb2RhbC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL21vZGFsLmNvbXBvbmVudC5zY3NzJ10sXG4gIGV4cG9ydEFzOiAnaXRNb2RhbCcsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBpbXBvcnRzOiBbVHJhbnNsYXRlTW9kdWxlXSxcbn0pXG5leHBvcnQgY2xhc3MgSXRNb2RhbENvbXBvbmVudCBleHRlbmRzIEl0QWJzdHJhY3RDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0IHtcbiAgLyoqXG4gICAqIFNob3cvSGlkZSBjbG9zZSBidXR0b24gb24gaGVhZGVyXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogaW5wdXRUb0Jvb2xlYW4gfSkgY2xvc2VCdXR0b246IGJvb2xlYW4gPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBUbyBjb3JyZWN0bHkgZm9ybWF0IHRoZSBjb250ZW50cyBvZiB0aGUgbW9kYWwgd2l0aCBpY29uXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGlucHV0VG9Cb29sZWFuIH0pIGFsZXJ0TW9kYWw/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUbyBjb3JyZWN0bHkgZm9ybWF0IHRoZSBjb250ZW50cyBvZiB0aGUgbW9kYWwgd2l0aCBMaW5rIExpc3RcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogaW5wdXRUb0Jvb2xlYW4gfSkgZGlhbG9nTGlua0xpc3Q/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBNb2RhbCB0eXBlIFBvcGNvbmZpcm0gY2FuIGJlIHVzZWQgZm9yIHNob3J0IGNvbmZpcm1hdGlvbiBtZXNzYWdlcy5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogaW5wdXRUb0Jvb2xlYW4gfSkgcG9wY29uZmlybT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFlvdSBjYW4gY2hvb3NlIHRvIHVzZSBhIHNjcm9sbCBpbnNpZGUgdGhlIG1vZGFsLCBrZWVwaW5nIHRoZSBoZWFkZXIgYW5kIGZvb3RlciBvZiB0aGUgbW9kYWwgYWx3YXlzIHZpc2libGVcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogaW5wdXRUb0Jvb2xlYW4gfSkgc2Nyb2xsYWJsZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRvIGhhdmUgbW9kYWxzIHRoYXQgYXBwZWFyIHdpdGggZmFkZXNcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgQElucHV0KHsgdHJhbnNmb3JtOiBpbnB1dFRvQm9vbGVhbiB9KSBmYWRlPzogYm9vbGVhbiA9IHRydWU7XG5cbiAgLyoqXG4gICAqIE1vZGFsIGFsaWdubWVudFxuICAgKiAtIDxiPmNlbnRlcmVkPC9iPjogdG8gdmVydGljYWxseSBjZW50ZXIgdGhlIG1vZGFsXG4gICAqIC0gPGI+bGVmdDwvYj46IHRvIGxlZnQtYWxpZ24gdGhlIG1vZGFsXG4gICAqIC0gPGI+cmlnaHQ8L2I+OiB0byByaWdodC1hbGlnbiB0aGUgbW9kYWxcbiAgICogQGRlZmF1bHQgdW5kZWZpbmVkXG4gICAqL1xuICBASW5wdXQoKSBhbGlnbm1lbnQ6ICdjZW50ZXJlZCcgfCAnbGVmdCcgfCAncmlnaHQnIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBUaGUgbW9kYWwgc2l6ZVxuICAgKiBAZGVmYXVsdCB1bmRlZmluZWRcbiAgICovXG4gIEBJbnB1dCgpIHNpemU6ICdzbScgfCAnbGcnIHwgJ3hsJyB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogSW5jbHVkZXMgYSBtb2RhbC1iYWNrZHJvcCBlbGVtZW50LiBBbHRlcm5hdGl2ZWx5LCBzcGVjaWZ5IHN0YXRpYyBmb3IgYSBiYWNrZHJvcCB3aGljaCBkb2VzbuKAmXQgY2xvc2UgdGhlIG1vZGFsIHdoZW4gY2xpY2tlZC5cbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgQElucHV0KCkgYmFja2Ryb3A6ICdzdGF0aWMnIHwgYm9vbGVhbiA9IHRydWU7XG5cbiAgLyoqXG4gICAqIFB1dHMgdGhlIGZvY3VzIG9uIHRoZSBtb2RhbCB3aGVuIGluaXRpYWxpemVkLlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGlucHV0VG9Cb29sZWFuIH0pIGZvY3VzOiBib29sZWFuID0gdHJ1ZTtcblxuICAvKipcbiAgICogQ2xvc2VzIHRoZSBtb2RhbCB3aGVuIGVzY2FwZSBrZXkgaXMgcHJlc3NlZC5cbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgQElucHV0KHsgdHJhbnNmb3JtOiBpbnB1dFRvQm9vbGVhbiB9KSBrZXlib2FyZDogYm9vbGVhbiA9IHRydWU7XG5cbiAgLyoqXG4gICAqIFRvIGJldHRlciBkaXN0aW5ndWlzaCB0aGUgZm9vdGVyIGVsZW1lbnQgd2l0aCBhIHNoYWRvd1xuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgQElucHV0KHsgdHJhbnNmb3JtOiBpbnB1dFRvQm9vbGVhbiB9KSBmb290ZXJTaGFkb3c/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBNb2RhbCBvcHRpb25zXG4gICAqL1xuICBASW5wdXQoKSBvcHRpb25zPzogUGFydGlhbDxCU01vZGFsLk9wdGlvbnM+O1xuXG4gIC8qKlxuICAgKiBUaGlzIGV2ZW50IGZpcmVzIGltbWVkaWF0ZWx5IHdoZW4gdGhlIGluc3RhbmNlIG1ldGhvZCBzaG93IGlzIGNhbGxlZC5cbiAgICovXG4gIEBPdXRwdXQoKSBwdWJsaWMgc2hvd0V2ZW50OiBFdmVudEVtaXR0ZXI8RXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIC8qKlxuICAgKiBUaGlzIGV2ZW50IGZpcmVzIHdoZW4gdGhlIG1vZGFsIGhhcyBiZWVuIG1hZGUgdmlzaWJsZSB0byB0aGUgdXNlciAoaXQgd2lsbCB3YWl0IGZvciBDU1MgdHJhbnNpdGlvbnMgdG8gY29tcGxldGUpLlxuICAgKi9cbiAgQE91dHB1dCgpIHB1YmxpYyBzaG93bkV2ZW50OiBFdmVudEVtaXR0ZXI8RXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIC8qKlxuICAgKiBUaGlzIGV2ZW50IGlzIHJhaXNlZCBpbW1lZGlhdGVseSB3aGVuIHRoZSBpbnN0YW5jZSBtZXRob2QgaGlkZSBoYXMgYmVlbiBjYWxsZWQuXG4gICAqL1xuICBAT3V0cHV0KCkgcHVibGljIGhpZGVFdmVudDogRXZlbnRFbWl0dGVyPEV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAvKipcbiAgICogVGhpcyBldmVudCBmaXJlcyB3aGVuIHRoZSBtb2RhbCBoYXMgZmluaXNoZWQgaGlkaW5nIGZyb20gdGhlIHVzZXIgKGl0IHdpbGwgd2FpdCBmb3IgQ1NTIHRyYW5zaXRpb25zIHRvIGNvbXBsZXRlKS5cbiAgICovXG4gIEBPdXRwdXQoKSBwdWJsaWMgaGlkZGVuRXZlbnQ6IEV2ZW50RW1pdHRlcjxFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgLyoqXG4gICAqIFRoaXMgZXZlbnQgaXMgZmlyZWQgd2hlbiB0aGUgbW9kYWwgaXMgZGlzcGxheWVkLCBpdHMgYmFja2dyb3VuZCBpcyBzdGF0aWMgYW5kIGEgY2xpY2sgb3V0c2lkZSB0aGUgbW9kYWwgb3IgYSBwcmVzc1xuICAgKiBvZiB0aGUgZXNjIGtleSBvY2N1cnMgYW5kIGRhdGEtYnMta2V5Ym9hcmQgaXMgc2V0IHRvIGZhbHNlLlxuICAgKi9cbiAgQE91dHB1dCgpIHB1YmxpYyBoaWRlUHJldmVudGVkRXZlbnQ6IEV2ZW50RW1pdHRlcjxFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgcHJpdmF0ZSBtb2RhbD86IE1vZGFsO1xuXG4gIEBWaWV3Q2hpbGQoJ21vZGFsRWxlbWVudCcsIHsgc3RhdGljOiBmYWxzZSB9KSBwcml2YXRlIG1vZGFsRWxlbWVudD86IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xuXG4gIG92ZXJyaWRlIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICBzdXBlci5uZ0FmdGVyVmlld0luaXQoKTtcbiAgICB0aGlzLl9yZW5kZXJlci5yZW1vdmVBdHRyaWJ1dGUodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAndGl0bGUnKTtcblxuICAgIGlmICh0aGlzLm1vZGFsRWxlbWVudCkge1xuICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMubW9kYWxFbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgICB0aGlzLm1vZGFsID0gTW9kYWwuZ2V0T3JDcmVhdGVJbnN0YW5jZShlbGVtZW50LCB7XG4gICAgICAgIC4uLnRoaXMub3B0aW9ucyxcbiAgICAgICAgYmFja2Ryb3A6IHRoaXMuYmFja2Ryb3AgPT09ICdzdGF0aWMnID8gJ3N0YXRpYycgOiB0aGlzLmJhY2tkcm9wLFxuICAgICAgICBmb2N1czogdGhpcy5mb2N1cyxcbiAgICAgICAga2V5Ym9hcmQ6IHRoaXMua2V5Ym9hcmQsXG4gICAgICB9KTtcblxuICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdzaG93LmJzLm1vZGFsJywgZXZlbnQgPT4gdGhpcy5zaG93RXZlbnQuZW1pdChldmVudCkpO1xuICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdzaG93bi5icy5tb2RhbCcsIGV2ZW50ID0+IHRoaXMuc2hvd25FdmVudC5lbWl0KGV2ZW50KSk7XG4gICAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2hpZGUuYnMubW9kYWwnLCBldmVudCA9PiB0aGlzLmhpZGVFdmVudC5lbWl0KGV2ZW50KSk7XG4gICAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2hpZGRlbi5icy5tb2RhbCcsIGV2ZW50ID0+IHRoaXMuaGlkZGVuRXZlbnQuZW1pdChldmVudCkpO1xuICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdoaWRlUHJldmVudGVkLmJzLm1vZGFsJywgZXZlbnQgPT4gdGhpcy5oaWRlUHJldmVudGVkRXZlbnQuZW1pdChldmVudCkpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBnZXQgbW9kYWxDbGFzcygpOiBzdHJpbmcge1xuICAgIGxldCBtb2RhbENsYXNzID0gJ21vZGFsJztcbiAgICBpZiAodGhpcy5mYWRlKSB7XG4gICAgICBtb2RhbENsYXNzICs9IGAgZmFkZWA7XG4gICAgfVxuICAgIGlmICh0aGlzLmFsZXJ0TW9kYWwpIHtcbiAgICAgIG1vZGFsQ2xhc3MgKz0gYCBhbGVydC1tb2RhbGA7XG4gICAgfVxuICAgIGlmICh0aGlzLmRpYWxvZ0xpbmtMaXN0KSB7XG4gICAgICBtb2RhbENsYXNzICs9IGAgaXQtZGlhbG9nLWxpbmstbGlzdGA7XG4gICAgfVxuICAgIGlmICh0aGlzLnBvcGNvbmZpcm0pIHtcbiAgICAgIG1vZGFsQ2xhc3MgKz0gYCBwb3Bjb25maXJtLW1vZGFsYDtcbiAgICB9XG4gICAgaWYgKHRoaXMuc2Nyb2xsYWJsZSkge1xuICAgICAgbW9kYWxDbGFzcyArPSBgIGl0LWRpYWxvZy1zY3JvbGxhYmxlYDtcbiAgICB9XG4gICAgcmV0dXJuIG1vZGFsQ2xhc3M7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0IGRpYWxvZ0NsYXNzKCk6IHN0cmluZyB7XG4gICAgbGV0IGRpYWxvZ0NsYXNzID0gJ21vZGFsLWRpYWxvZyc7XG4gICAgaWYgKHRoaXMuYWxpZ25tZW50KSB7XG4gICAgICBkaWFsb2dDbGFzcyArPSBgIG1vZGFsLWRpYWxvZy0ke3RoaXMuYWxpZ25tZW50fWA7XG4gICAgfVxuICAgIGlmICh0aGlzLnNpemUpIHtcbiAgICAgIGRpYWxvZ0NsYXNzICs9IGAgbW9kYWwtJHt0aGlzLnNpemV9YDtcbiAgICB9XG4gICAgcmV0dXJuIGRpYWxvZ0NsYXNzO1xuICB9XG5cbiAgLyoqXG4gICAqIE1hbnVhbGx5IGFjdGl2YXRlL2RlYWN0aXZhdGUgYSBtb2RhbC4gUmV0dXJucyB0byB0aGUgY2FsbGVyIGJlZm9yZSB0aGUgbW9kYWwgaGFzIGFjdHVhbGx5IGJlZW4gc2hvd24gb3IgaGlkZGVuXG4gICAqL1xuICBwdWJsaWMgdG9nZ2xlKCk6IHZvaWQge1xuICAgIHRoaXMubW9kYWw/LnRvZ2dsZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIE1hbnVhbGx5IG9wZW4gYSBtb2RhbC4gUmV0dXJucyB0byB0aGUgY2FsbGVyIGJlZm9yZSB0aGUgbW9kYWwgaGFzIGFjdHVhbGx5IGJlZW4gZGlzcGxheWVkXG4gICAqL1xuICBwdWJsaWMgc2hvdygpOiB2b2lkIHtcbiAgICB0aGlzLm1vZGFsPy5zaG93KCk7XG4gIH1cblxuICAvKipcbiAgICogTWFudWFsbHkgaGlkZSBhIG1vZGFsLiBSZXR1cm5zIHRvIHRoZSBjYWxsZXIgYmVmb3JlIHRoZSBtb2RhbCBoYXMgYWN0dWFsbHkgYmVlbiBoaWRkZW5cbiAgICovXG4gIHB1YmxpYyBoaWRlKCk6IHZvaWQge1xuICAgIHRoaXMubW9kYWw/LmhpZGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNYW51YWxseSByZXBvc2l0aW9uIHRoZSBtb2RhbCBpZiB0aGUgaGVpZ2h0IG9mIHRoZSBtb2RhbCBjaGFuZ2VzIHdoZW4gaXQgaXMgb3BlbmVkIChpbiBjYXNlIGEgc2Nyb2xsIGJhciBhcHBlYXJzKS5cbiAgICovXG4gIHB1YmxpYyBoYW5kbGVVcGRhdGUoKTogdm9pZCB7XG4gICAgdGhpcy5tb2RhbD8uaGFuZGxlVXBkYXRlKCk7XG4gIH1cblxuICAvKipcbiAgICogRGVzdHJveXMgdGhlIG1vZGFsIG9mIGFuIGVsZW1lbnQuXG4gICAqL1xuICBwdWJsaWMgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLm1vZGFsPy5kaXNwb3NlKCk7XG4gIH1cbn1cbiIsIjxkaXZcbiAgI21vZGFsRWxlbWVudFxuICBbaWRdPVwiaWRcIlxuICBbY2xhc3NdPVwibW9kYWxDbGFzc1wiXG4gIHRhYmluZGV4PVwiLTFcIlxuICByb2xlPVwiZGlhbG9nXCJcbiAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cImlkICsgJy10aXRsZSdcIlxuICBbYXR0ci5hcmlhLWRlc2NyaWJlZGJ5XT1cImlkICsgJy1kZXNjcmlwdGlvbidcIj5cbiAgPGRpdiBbY2xhc3NdPVwiZGlhbG9nQ2xhc3NcIj5cbiAgICA8ZGl2IGNsYXNzPVwibW9kYWwtY29udGVudFwiIHJvbGU9XCJkb2N1bWVudFwiPlxuICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlclwiPlxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbYmVmb3JlVGl0bGVdXCI+PC9uZy1jb250ZW50PlxuXG4gICAgICAgIDxoMiBjbGFzcz1cIm1vZGFsLXRpdGxlIGg1XCIgaWQ9XCJ7eyBpZCB9fS10aXRsZVwiPlxuICAgICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIlttb2RhbFRpdGxlXVwiPjwvbmctY29udGVudD5cbiAgICAgICAgPC9oMj5cblxuICAgICAgICBAaWYgKGNsb3NlQnV0dG9uKSB7XG4gICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4tY2xvc2VcIiBkYXRhLWJzLWRpc21pc3M9XCJtb2RhbFwiIFthdHRyLmFyaWEtbGFiZWxdPVwiJ2l0LmNvcmUuY2xvc2UtbW9kYWwnIHwgdHJhbnNsYXRlXCI+PC9idXR0b24+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxuICAgICAgICA8ZGl2IGlkPVwie3sgaWQgfX0tZGVzY3JpcHRpb25cIj5cbiAgICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbZGVzY3JpcHRpb25dXCI+PC9uZy1jb250ZW50PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXJcIiBbY2xhc3MubW9kYWwtZm9vdGVyLXNoYWRvd109XCJmb290ZXJTaGFkb3dcIj5cbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2Zvb3Rlcl1cIj48L25nLWNvbnRlbnQ+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==