ontimize-web-ngx
Version:
Ontimize Web framework using Angular 15
130 lines • 20.8 kB
JavaScript
import { __decorate, __metadata } from "tslib";
import { Directive, ElementRef, EventEmitter, Inject, Injector, Optional, ViewChild } from '@angular/core';
import { MatExpansionPanel } from '@angular/material/expansion';
import { MAT_FORM_FIELD_DEFAULT_OPTIONS } from '@angular/material/form-field';
import { Subscription } from 'rxjs';
import { BooleanInputConverter } from '../../decorators/input-converter';
import { OContainerComponent } from './o-container-component.class';
import * as i0 from "@angular/core";
export const DEFAULT_INPUTS_O_CONTAINER_COLLAPSIBLE = [
'expanded',
'description',
'collapsedHeight: collapsed-height',
'expandedHeight: expanded-height'
];
export const DEFAULT_OUTPUTS_O_CONTAINER_COLLAPSIBLE = [
'onClosed',
'onOpened',
'onAfterCollapse',
'onAfterExpand'
];
export class OContainerCollapsibleComponent extends OContainerComponent {
constructor(elRef, injector, matFormDefaultOption) {
super(elRef, injector, matFormDefaultOption);
this.elRef = elRef;
this.injector = injector;
this.matFormDefaultOption = matFormDefaultOption;
this.expanded = true;
this.collapsedHeight = '37px';
this.expandedHeight = '37px';
this.onClosed = new EventEmitter();
this.onOpened = new EventEmitter();
this.onAfterCollapse = new EventEmitter();
this.onAfterExpand = new EventEmitter();
this.expPanelSubscriptions = new Subscription();
}
ngAfterViewInit() {
super.ngAfterViewInit();
this.updateOutlineGap();
this.subscribeEventsExpPanel();
}
subscribeEventsExpPanel() {
this.expPanelSubscriptions.add(this.expPanel.afterCollapse.subscribe(() => this.onAfterCollapse.emit()));
this.expPanelSubscriptions.add(this.expPanel.afterExpand.subscribe(() => this.onAfterExpand.emit()));
this.expPanelSubscriptions.add(this.expPanel.closed.subscribe(() => this.onClosed.emit()));
this.expPanelSubscriptions.add(this.expPanel.opened.subscribe(() => this.onOpened.emit()));
}
updateOutlineGap() {
if (this.isAppearanceOutline()) {
const exPanelHeader = this._titleEl ? this._titleEl._element.nativeElement : null;
if (!this.oContainerOutline) {
return;
}
const containerOutline = this.oContainerOutline.nativeElement;
const containerOutlineRect = containerOutline.getBoundingClientRect();
if (containerOutlineRect.width === 0 && containerOutlineRect.height === 0) {
return;
}
const titleEl = exPanelHeader.querySelector('.o-container-title.mat-expansion-panel-header-title');
const descrEl = exPanelHeader.querySelector('.mat-expansion-panel-header-description');
const containerStart = containerOutlineRect.left;
const descrStart = descrEl.getBoundingClientRect().left;
let titleWidth = 0;
if (this.hasHeader()) {
titleWidth += this.icon ? titleEl.querySelector('mat-icon').offsetWidth : 0;
titleWidth += this.title ? titleEl.querySelector('span').offsetWidth : 0;
titleWidth = titleWidth === 0 ? 0 : titleWidth + 4;
}
const labelStart = titleEl.getBoundingClientRect().left;
const startWidth = labelStart - containerStart - 2;
const empty1Width = descrStart - containerStart - titleWidth - 24;
const descrWidth = this.description ? descrEl.querySelector('span').offsetWidth + 8 : 0;
const startEls = containerOutline.querySelectorAll('.o-container-outline-start');
const gapTitleEls = containerOutline.querySelectorAll('.o-container-outline-gap-title');
const gapEmpty1Els = containerOutline.querySelectorAll('.o-container-outline-gap-empty1');
const gapDescrEls = containerOutline.querySelectorAll('.o-container-outline-gap-description');
startEls[0].style.width = `${startWidth}px`;
gapTitleEls[0].style.width = `${titleWidth}px`;
gapEmpty1Els[0].style.width = `${empty1Width}px`;
gapDescrEls[0].style.width = `${descrWidth}px`;
}
}
registerObserver() {
if (this._titleEl) {
this.titleObserver.observe(this._titleEl._element.nativeElement, {
childList: true,
characterData: true,
subtree: true
});
}
}
updateInnerHeight(height) {
if (this.containerContent) {
this.containerContent.nativeElement.style.height = height;
}
if (this.oContainerOutline) {
this.oContainerOutline.nativeElement.style.height = height;
}
}
ngOnDestroy() {
this.expPanelSubscriptions.unsubscribe();
}
}
OContainerCollapsibleComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OContainerCollapsibleComponent, deps: [{ token: i0.ElementRef }, { token: i0.Injector }, { token: MAT_FORM_FIELD_DEFAULT_OPTIONS, optional: true }], target: i0.ɵɵFactoryTarget.Directive });
OContainerCollapsibleComponent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.10", type: OContainerCollapsibleComponent, inputs: { expanded: "expanded", description: "description", collapsedHeight: ["collapsed-height", "collapsedHeight"], expandedHeight: ["expanded-height", "expandedHeight"] }, outputs: { onClosed: "onClosed", onOpened: "onOpened", onAfterCollapse: "onAfterCollapse", onAfterExpand: "onAfterExpand" }, viewQueries: [{ propertyName: "expPanel", first: true, predicate: ["expPanel"], descendants: true }, { propertyName: "containerContent", first: true, predicate: ["containerContent"], descendants: true, static: true }, { propertyName: "oContainerOutline", first: true, predicate: ["oContainerOutline"], descendants: true }], usesInheritance: true, ngImport: i0 });
__decorate([
BooleanInputConverter(),
__metadata("design:type", Boolean)
], OContainerCollapsibleComponent.prototype, "expanded", void 0);
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OContainerCollapsibleComponent, decorators: [{
type: Directive,
args: [{
inputs: DEFAULT_INPUTS_O_CONTAINER_COLLAPSIBLE,
outputs: DEFAULT_OUTPUTS_O_CONTAINER_COLLAPSIBLE
}]
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Injector }, { type: undefined, decorators: [{
type: Optional
}, {
type: Inject,
args: [MAT_FORM_FIELD_DEFAULT_OPTIONS]
}] }]; }, propDecorators: { expanded: [], expPanel: [{
type: ViewChild,
args: ['expPanel']
}], containerContent: [{
type: ViewChild,
args: ['containerContent', { static: true }]
}], oContainerOutline: [{
type: ViewChild,
args: ['oContainerOutline']
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiby1jb250YWluZXItY29sbGFwc2libGUtY29tcG9uZW50LmNsYXNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb250aW1pemUtd2ViLW5neC9zcmMvbGliL2NvbXBvbmVudHMvY29udGFpbmVyL28tY29udGFpbmVyLWNvbGxhcHNpYmxlLWNvbXBvbmVudC5jbGFzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFpQixTQUFTLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFhLFFBQVEsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDckksT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDaEUsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDOUUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVwQyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUN6RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQzs7QUFFcEUsTUFBTSxDQUFDLE1BQU0sc0NBQXNDLEdBQUc7SUFDcEQsVUFBVTtJQUNWLGFBQWE7SUFDYixtQ0FBbUM7SUFDbkMsaUNBQWlDO0NBQ2xDLENBQUM7QUFDRixNQUFNLENBQUMsTUFBTSx1Q0FBdUMsR0FBRztJQUVyRCxVQUFVO0lBRVYsVUFBVTtJQUVWLGlCQUFpQjtJQUVqQixlQUFlO0NBQ2hCLENBQUE7QUFNRCxNQUFNLE9BQU8sOEJBQStCLFNBQVEsbUJBQW1CO0lBb0JyRSxZQUNZLEtBQWlCLEVBQ2pCLFFBQWtCLEVBQ2tDLG9CQUFvQjtRQUVsRixLQUFLLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDO1FBSm5DLFVBQUssR0FBTCxLQUFLLENBQVk7UUFDakIsYUFBUSxH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QyxRQUFRLE1BVVEsUUFBUTtzQkFBOUIsU0FBUzt1QkFBQyxVQUFVO2dCQUNzQyxnQkFBZ0I7c0JBQTFFLFNBQVM7dUJBQUMsa0JBQWtCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUNMLGlCQUFpQjtzQkFBMUQsU0FBUzt1QkFBQyxtQkFBbUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSW5qZWN0LCBJbmplY3RvciwgT25EZXN0cm95LCBPcHRpb25hbCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNYXRFeHBhbnNpb25QYW5lbCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2V4cGFuc2lvbic7XG5pbXBvcnQgeyBNQVRfRk9STV9GSUVMRF9ERUZBVUxUX09QVElPTlMgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBCb29sZWFuSW5wdXRDb252ZXJ0ZXIgfSBmcm9tICcuLi8uLi9kZWNvcmF0b3JzL2lucHV0LWNvbnZlcnRlcic7XG5pbXBvcnQgeyBPQ29udGFpbmVyQ29tcG9uZW50IH0gZnJvbSAnLi9vLWNvbnRhaW5lci1jb21wb25lbnQuY2xhc3MnO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9JTlBVVFNfT19DT05UQUlORVJfQ09MTEFQU0lCTEUgPSBbXG4gICdleHBhbmRlZCcsXG4gICdkZXNjcmlwdGlvbicsXG4gICdjb2xsYXBzZWRIZWlnaHQ6IGNvbGxhcHNlZC1oZWlnaHQnLFxuICAnZXhwYW5kZWRIZWlnaHQ6IGV4cGFuZGVkLWhlaWdodCdcbl07XG5leHBvcnQgY29uc3QgREVGQVVMVF9PVVRQVVRTX09fQ09OVEFJTkVSX0NPTExBUFNJQkxFID0gW1xuICAvL29uQ2xvc2VkOiBFdmVudCBlbWl0dGVkIGV2ZXJ5IHRpbWUgdGhlIGNvbXBvbmVudCBjb2xsYXBzaWJsZSBpcyBjbG9zZWQuXG4gICdvbkNsb3NlZCcsXG4gIC8vb25PcGVuZWQ6IEV2ZW50IGVtaXR0ZWQgZXZlcnkgdGltZSB0aGUgY29tcG9uZW50IGNvbGxhcHNpYmxlIGlzIG9wZW5lZC5cbiAgJ29uT3BlbmVkJyxcbiAgLy9vbkFmdGVyQ29sbGFwc2U6IEFuIGV2ZW50IGVtaXR0ZWQgYWZ0ZXIgdGhlIGJvZHkncyBjb2xsYXBzZSBhbmltYXRpb24gaGFwcGVucy5cbiAgJ29uQWZ0ZXJDb2xsYXBzZScsXG4gIC8vb25BZnRlckV4cGFuZDogQW4gZXZlbnQgZW1pdHRlZCBhZnRlciB0aGUgYm9keSdzIGV4cGFuc2lvbiBhbmltYXRpb24gaGFwcGVucy5cbiAgJ29uQWZ0ZXJFeHBhbmQnXG5dXG5cbkBEaXJlY3RpdmUoe1xuICBpbnB1dHM6IERFRkFVTFRfSU5QVVRTX09fQ09OVEFJTkVSX0NPTExBUFNJQkxFLFxuICBvdXRwdXRzOiBERUZBVUxUX09VVFBVVFNfT19DT05UQUlORVJfQ09MTEFQU0lCTEVcbn0pXG5leHBvcnQgY2xhc3MgT0NvbnRhaW5lckNvbGxhcHNpYmxlQ29tcG9uZW50IGV4dGVuZHMgT0NvbnRhaW5lckNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG5cbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIHB1YmxpYyBleHBhbmRlZDogYm9vbGVhbiA9IHRydWU7XG4gIHB1YmxpYyBjb2xsYXBzZWRIZWlnaHQgPSAnMzdweCc7XG4gIHB1YmxpYyBleHBhbmRlZEhlaWdodCA9ICczN3B4JztcbiAgcHVibGljIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG5cbiAgb25DbG9zZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIG9uT3BlbmVkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBvbkFmdGVyQ29sbGFwc2UgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIG9uQWZ0ZXJFeHBhbmQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgQFZpZXdDaGlsZCgnZXhwUGFuZWwnKSBleHBQYW5lbDogTWF0RXhwYW5zaW9uUGFuZWw7IC8vIFVzZWQgaW4gc3ViY29tcG9uZW50c1xuICBAVmlld0NoaWxkKCdjb250YWluZXJDb250ZW50JywgeyBzdGF0aWM6IHRydWUgfSkgcHJvdGVjdGVkIGNvbnRhaW5lckNvbnRlbnQ6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ29Db250YWluZXJPdXRsaW5lJykgcHJvdGVjdGVkIG9Db250YWluZXJPdXRsaW5lOiBFbGVtZW50UmVmO1xuXG5cbiAgcHJvdGVjdGVkIGV4cFBhbmVsU3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBlbFJlZjogRWxlbWVudFJlZixcbiAgICBwcm90ZWN0ZWQgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoTUFUX0ZPUk1fRklFTERfREVGQVVMVF9PUFRJT05TKSBwcm90ZWN0ZWQgbWF0Rm9ybURlZmF1bHRPcHRpb25cbiAgKSB7XG4gICAgc3VwZXIoZWxSZWYsIGluamVjdG9yLCBtYXRGb3JtRGVmYXVsdE9wdGlvbik7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgc3VwZXIubmdBZnRlclZpZXdJbml0KCk7XG4gICAgdGhpcy51cGRhdGVPdXRsaW5lR2FwKCk7XG4gICAgdGhpcy5zdWJzY3JpYmVFdmVudHNFeHBQYW5lbCgpO1xuICB9XG5cbiAgc3Vic2NyaWJlRXZlbnRzRXhwUGFuZWwoKSB7XG4gICAgdGhpcy5leHBQYW5lbFN1YnNjcmlwdGlvbnMuYWRkKHRoaXMuZXhwUGFuZWwuYWZ0ZXJDb2xsYXBzZS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5vbkFmdGVyQ29sbGFwc2UuZW1pdCgpKSk7XG4gICAgdGhpcy5leHBQYW5lbFN1YnNjcmlwdGlvbnMuYWRkKHRoaXMuZXhwUGFuZWwuYWZ0ZXJFeHBhbmQuc3Vic2NyaWJlKCgpID0+IHRoaXMub25BZnRlckV4cGFuZC5lbWl0KCkpKTtcbiAgICB0aGlzLmV4cFBhbmVsU3Vic2NyaXB0aW9ucy5hZGQodGhpcy5leHBQYW5lbC5jbG9zZWQuc3Vic2NyaWJlKCgpID0+IHRoaXMub25DbG9zZWQuZW1pdCgpKSk7XG4gICAgdGhpcy5leHBQYW5lbFN1YnNjcmlwdGlvbnMuYWRkKHRoaXMuZXhwUGFuZWwub3BlbmVkLnN1YnNjcmliZSgoKSA9PiB0aGlzLm9uT3BlbmVkLmVtaXQoKSkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHVwZGF0ZU91dGxpbmVHYXAoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNBcHBlYXJhbmNlT3V0bGluZSgpKSB7XG4gICAgICBjb25zdCBleFBhbmVsSGVhZGVyID0gdGhpcy5fdGl0bGVFbCA/ICh0aGlzLl90aXRsZUVsIGFzIGFueSkuX2VsZW1lbnQubmF0aXZlRWxlbWVudCA6IG51bGw7XG5cbiAgICAgIGlmICghdGhpcy5vQ29udGFpbmVyT3V0bGluZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBjb250YWluZXJPdXRsaW5lID0gdGhpcy5vQ29udGFpbmVyT3V0bGluZS5uYXRpdmVFbGVtZW50O1xuICAgICAgY29uc3QgY29udGFpbmVyT3V0bGluZVJlY3QgPSBjb250YWluZXJPdXRsaW5lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgaWYgKGNvbnRhaW5lck91dGxpbmVSZWN0LndpZHRoID09PSAwICYmIGNvbnRhaW5lck91dGxpbmVSZWN0LmhlaWdodCA9PT0gMCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHRpdGxlRWwgPSBleFBhbmVsSGVhZGVyLnF1ZXJ5U2VsZWN0b3IoJy5vLWNvbnRhaW5lci10aXRsZS5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci10aXRsZScpO1xuICAgICAgY29uc3QgZGVzY3JFbCA9IGV4UGFuZWxIZWFkZXIucXVlcnlTZWxlY3RvcignLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLWRlc2NyaXB0aW9uJyk7XG5cbiAgICAgIGNvbnN0IGNvbnRhaW5lclN0YXJ0ID0gY29udGFpbmVyT3V0bGluZVJlY3QubGVmdDtcbiAgICAgIGNvbnN0IGRlc2NyU3RhcnQgPSBkZXNjckVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQ7XG5cbiAgICAgIGxldCB0aXRsZVdpZHRoID0gMDtcbiAgICAgIGlmICh0aGlzLmhhc0hlYWRlcigpKSB7XG4gICAgICAgIHRpdGxlV2lkdGggKz0gdGhpcy5pY29uID8gdGl0bGVFbC5xdWVyeVNlbGVjdG9yKCdtYXQtaWNvbicpLm9mZnNldFdpZHRoIDogMDsgLy8gaWNvblxuICAgICAgICB0aXRsZVdpZHRoICs9IHRoaXMudGl0bGUgPyB0aXRsZUVsLnF1ZXJ5U2VsZWN0b3IoJ3NwYW4nKS5vZmZzZXRXaWR0aCA6IDA7IC8vIHRpdGxlXG4gICAgICAgIHRpdGxlV2lkdGggPSB0aXRsZVdpZHRoID09PSAwID8gMCA6IHRpdGxlV2lkdGggKyA0O1xuICAgICAgfVxuXG4gICAgICBjb25zdCBsYWJlbFN0YXJ0ID0gdGl0bGVFbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0O1xuICAgICAgY29uc3Qgc3RhcnRXaWR0aCA9IGxhYmVsU3RhcnQgLSBjb250YWluZXJTdGFydCAtIDI7XG4gICAgICBjb25zdCBlbXB0eTFXaWR0aCA9IGRlc2NyU3RhcnQgLSBjb250YWluZXJTdGFydCAtIHRpdGxlV2lkdGggLSAyNDtcbiAgICAgIGNvbnN0IGRlc2NyV2lkdGggPSB0aGlzLmRlc2NyaXB0aW9uID8gZGVzY3JFbC5xdWVyeVNlbGVjdG9yKCdzcGFuJykub2Zmc2V0V2lkdGggKyA4IDogMDtcblxuICAgICAgY29uc3Qgc3RhcnRFbHMgPSBjb250YWluZXJPdXRsaW5lLnF1ZXJ5U2VsZWN0b3JBbGwoJy5vLWNvbnRhaW5lci1vdXRsaW5lLXN0YXJ0Jyk7XG4gICAgICBjb25zdCBnYXBUaXRsZUVscyA9IGNvbnRhaW5lck91dGxpbmUucXVlcnlTZWxlY3RvckFsbCgnLm8tY29udGFpbmVyLW91dGxpbmUtZ2FwLXRpdGxlJyk7XG4gICAgICBjb25zdCBnYXBFbXB0eTFFbHMgPSBjb250YWluZXJPdXRsaW5lLnF1ZXJ5U2VsZWN0b3JBbGwoJy5vLWNvbnRhaW5lci1vdXRsaW5lLWdhcC1lbXB0eTEnKTtcbiAgICAgIGNvbnN0IGdhcERlc2NyRWxzID0gY29udGFpbmVyT3V0bGluZS5xdWVyeVNlbGVjdG9yQWxsKCcuby1jb250YWluZXItb3V0bGluZS1nYXAtZGVzY3JpcHRpb24nKTtcblxuICAgICAgc3RhcnRFbHNbMF0uc3R5bGUud2lkdGggPSBgJHtzdGFydFdpZHRofXB4YDtcbiAgICAgIGdhcFRpdGxlRWxzWzBdLnN0eWxlLndpZHRoID0gYCR7dGl0bGVXaWR0aH1weGA7XG4gICAgICBnYXBFbXB0eTFFbHNbMF0uc3R5bGUud2lkdGggPSBgJHtlbXB0eTFXaWR0aH1weGA7XG4gICAgICBnYXBEZXNjckVsc1swXS5zdHlsZS53aWR0aCA9IGAke2Rlc2NyV2lkdGh9cHhgO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCByZWdpc3Rlck9ic2VydmVyKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl90aXRsZUVsKSB7XG4gICAgICB0aGlzLnRpdGxlT2JzZXJ2ZXIub2JzZXJ2ZSgodGhpcy5fdGl0bGVFbCBhcyBhbnkpLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsIHtcbiAgICAgICAgY2hpbGRMaXN0OiB0cnVlLFxuICAgICAgICBjaGFyYWN0ZXJEYXRhOiB0cnVlLFxuICAgICAgICBzdWJ0cmVlOiB0cnVlXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICB1cGRhdGVJbm5lckhlaWdodChoZWlnaHQ6IG51bWJlcik6IHZvaWQge1xuICAgIGlmICh0aGlzLmNvbnRhaW5lckNvbnRlbnQpIHtcbiAgICAgIHRoaXMuY29udGFpbmVyQ29udGVudC5uYXRpdmVFbGVtZW50LnN0eWxlLmhlaWdodCA9IGhlaWdodDtcbiAgICB9XG4gICAgaWYgKHRoaXMub0NvbnRhaW5lck91dGxpbmUpIHtcbiAgICAgIHRoaXMub0NvbnRhaW5lck91dGxpbmUubmF0aXZlRWxlbWVudC5zdHlsZS5oZWlnaHQgPSBoZWlnaHQ7XG4gICAgfVxuICB9XG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZXhwUGFuZWxTdWJzY3JpcHRpb25zLnVuc3Vic2NyaWJlKCk7XG4gIH1cblxufVxuIl19