ontimize-web-ngx
Version:
Ontimize Web framework using Angular 15
188 lines • 23.1 kB
JavaScript
import { ElementRef, Inject, Injector, Optional, ViewChild, Directive } from '@angular/core';
import { MAT_FORM_FIELD_DEFAULT_OPTIONS } from '@angular/material/form-field';
import { Util } from '../../util/util';
import * as i0 from "@angular/core";
export const DEFAULT_INPUTS_O_CONTAINER = [
'oattr: attr',
'title',
'layoutAlign: layout-align',
'elevation',
'icon',
'appearance',
'layoutGap: layout-gap'
];
export class OContainerComponent {
set containerTitle(elem) {
this._titleEl = elem;
if (this._titleEl) {
this.registerObserver();
this.updateOutlineGap();
}
else {
this.unRegisterObserver();
}
}
constructor(elRef, injector, matFormDefaultOption) {
this.elRef = elRef;
this.injector = injector;
this.matFormDefaultOption = matFormDefaultOption;
this._elevation = 0;
this.defaultLayoutAlign = 'start start';
this._outlineGapCalculationNeededImmediately = false;
this.titleObserver = new MutationObserver(() => this.updateOutlineGap());
}
ngAfterViewInit() {
if (this.elRef) {
this.elRef.nativeElement.removeAttribute('title');
}
this.registerObserver();
}
ngAfterContentChecked() {
if (this._outlineGapCalculationNeededImmediately) {
this.updateOutlineGap();
}
}
ngOnDestroy() {
this.unRegisterObserver();
}
getAttribute() {
if (this.oattr) {
return this.oattr;
}
else if (this.elRef && this.elRef.nativeElement.attributes.attr) {
return this.elRef.nativeElement.attributes.attr.value;
}
}
get appearance() {
return this._appearance;
}
set appearance(value) {
this._appearance = value;
setTimeout(() => { this.updateOutlineGap(); }, 0);
}
get elevation() {
return this._elevation;
}
set elevation(elevation) {
this._elevation = elevation;
this.propagateElevationToDOM();
}
get layoutAlign() {
return this._layoutAlign;
}
set layoutAlign(align) {
if (!align || align.length === 0) {
align = this.defaultLayoutAlign;
}
this._layoutAlign = align;
}
get layoutGap() {
return this._layoutGap;
}
set layoutGap(layoutGap) {
this._layoutGap = layoutGap;
}
hasHeader() {
return !!this.title || !!this.icon;
}
isAppearanceOutlineSetted() {
let isAppearanceSetted = false;
if (Util.isDefined(this.appearance)) {
isAppearanceSetted = this.appearance === OContainerComponent.APPEARANCE_OUTLINE;
}
return isAppearanceSetted;
}
hasHeaderOrAppearanceOutlineSetted() {
return this.isAppearanceOutlineSetted() || this.hasHeader();
}
hasHeaderAndAppearanceOutline() {
return this.isAppearanceOutline() && this.hasHeader();
}
isAppearanceOutline() {
let isAppearanceOutline = (this.matFormDefaultOption && this.matFormDefaultOption.appearance === OContainerComponent.APPEARANCE_OUTLINE);
if (Util.isDefined(this.appearance)) {
isAppearanceOutline = this.appearance === OContainerComponent.APPEARANCE_OUTLINE;
}
return isAppearanceOutline;
}
hasTitleInAppearanceOutline() {
return this.isAppearanceOutline() && this.hasHeader();
}
propagateElevationToDOM() {
this.cleanElevationCSSclasses();
if (this.elevation > 0 && this.elevation <= 12) {
this.elRef.nativeElement.classList.add('mat-elevation-z' + this.elevation);
}
}
cleanElevationCSSclasses() {
const classList = Array.from(this.elRef.nativeElement.classList || []);
if (classList && classList.length) {
classList.forEach((item) => {
if (item.startsWith('mat-elevation')) {
this.elRef.nativeElement.classList.remove(item);
}
});
}
}
updateOutlineGap() {
if (this.isAppearanceOutline()) {
const titleEl = this._titleEl ? this._titleEl.nativeElement : null;
if (!this._containerRef) {
return;
}
if (document.documentElement && !document.documentElement.contains(this.elRef.nativeElement)) {
this._outlineGapCalculationNeededImmediately = true;
return;
}
const container = this._containerRef.nativeElement;
const containerRect = container.getBoundingClientRect();
if (containerRect.width === 0 && containerRect.height === 0) {
return;
}
const containerStart = containerRect.left;
const labelStart = titleEl.getBoundingClientRect().left;
const labelWidth = this.hasHeader() ? titleEl.offsetWidth : 0;
const startWidth = labelStart - containerStart;
const startEls = container.querySelectorAll('.o-container-outline-start');
const gapEls = container.querySelectorAll('.o-container-outline-gap');
gapEls[0].style.width = `${labelWidth}px`;
startEls[0].style.width = `${startWidth}px`;
this._outlineGapCalculationNeededImmediately = false;
}
}
registerObserver() {
if (this._titleEl) {
this.titleObserver.observe(this._titleEl.nativeElement, {
childList: true,
characterData: true,
subtree: true
});
}
}
unRegisterObserver() {
if (this.titleObserver) {
this.titleObserver.disconnect();
}
}
}
OContainerComponent.APPEARANCE_OUTLINE = 'outline';
OContainerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OContainerComponent, deps: [{ token: i0.ElementRef }, { token: i0.Injector }, { token: MAT_FORM_FIELD_DEFAULT_OPTIONS, optional: true }], target: i0.ɵɵFactoryTarget.Directive });
OContainerComponent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.10", type: OContainerComponent, inputs: { oattr: ["attr", "oattr"], title: "title", layoutAlign: ["layout-align", "layoutAlign"], elevation: "elevation", icon: "icon", appearance: "appearance", layoutGap: ["layout-gap", "layoutGap"] }, viewQueries: [{ propertyName: "containerTitle", first: true, predicate: ["containerTitle"], descendants: true }, { propertyName: "_containerRef", first: true, predicate: ["container"], descendants: true, static: true }], ngImport: i0 });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OContainerComponent, decorators: [{
type: Directive,
args: [{
inputs: DEFAULT_INPUTS_O_CONTAINER
}]
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Injector }, { type: undefined, decorators: [{
type: Optional
}, {
type: Inject,
args: [MAT_FORM_FIELD_DEFAULT_OPTIONS]
}] }]; }, propDecorators: { containerTitle: [{
type: ViewChild,
args: ['containerTitle']
}], _containerRef: [{
type: ViewChild,
args: ['container', { static: true }]
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiby1jb250YWluZXItY29tcG9uZW50LmNsYXNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb250aW1pemUtd2ViLW5neC9zcmMvbGliL2NvbXBvbmVudHMvY29udGFpbmVyL28tY29udGFpbmVyLWNvbXBvbmVudC5jbGFzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXNDLFVBQVUsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFhLFFBQVEsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzVJLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRTlFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7QUFFdkMsTUFBTSxDQUFDLE1BQU0sMEJBQTBCLEdBQUc7SUFDeEMsYUFBYTtJQUNiLE9BQU87SUFDUCwyQkFBMkI7SUFDM0IsV0FBVztJQUNYLE1BQU07SUFDTixZQUFZO0lBQ1osdUJBQXVCO0NBQ3hCLENBQUM7QUFLRixNQUFNLE9BQU8sbUJBQW1CO0lBa0I5QixJQUFpQyxjQUFjLENBQUMsSUFBZ0I7UUFDOUQsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7UUFDckIsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2pCLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3hCLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1NBQ3pCO2FBQU07WUFDTCxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztTQUMzQjtJQUNILENBQUM7SUFHRCxZQUNZLEtBQWlCLEVBQ2pCLFFBQWtCLEVBQ2tDLG9CQUFvQjtRQUZ4RSxVQUFLLEdBQUwsS0FBSyxDQUFZO1FBQ2pCLGFBQVEsR0FBUixRQUFRLENBQVU7UUFDa0MseUJBQW9CLEdBQXBCLG9CQUFvQixDQUFBO1FBekIxRSxlQUFVLEdBQVcsQ0FBQyxDQUFD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LElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyQ29udGVudENoZWNrZWQsIEFmdGVyVmlld0luaXQsIEVsZW1lbnRSZWYsIEluamVjdCwgSW5qZWN0b3IsIE9uRGVzdHJveSwgT3B0aW9uYWwsIFZpZXdDaGlsZCwgRGlyZWN0aXZlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNQVRfRk9STV9GSUVMRF9ERUZBVUxUX09QVElPTlMgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcblxuaW1wb3J0IHsgVXRpbCB9IGZyb20gJy4uLy4uL3V0aWwvdXRpbCc7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0lOUFVUU19PX0NPTlRBSU5FUiA9IFtcbiAgJ29hdHRyOiBhdHRyJyxcbiAgJ3RpdGxlJyxcbiAgJ2xheW91dEFsaWduOiBsYXlvdXQtYWxpZ24nLFxuICAnZWxldmF0aW9uJyxcbiAgJ2ljb24nLFxuICAnYXBwZWFyYW5jZScsXG4gICdsYXlvdXRHYXA6IGxheW91dC1nYXAnXG5dO1xuXG5ARGlyZWN0aXZlKHtcbiAgaW5wdXRzOiBERUZBVUxUX0lOUFVUU19PX0NPTlRBSU5FUlxufSlcbmV4cG9ydCBjbGFzcyBPQ29udGFpbmVyQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95LCBBZnRlckNvbnRlbnRDaGVja2VkIHtcblxuICBwdWJsaWMgc3RhdGljIEFQUEVBUkFOQ0VfT1VUTElORSA9ICdvdXRsaW5lJztcblxuICBwdWJsaWMgb2F0dHI6IHN0cmluZztcblxuICBwdWJsaWMgdGl0bGU6IHN0cmluZztcbiAgcHJvdGVjdGVkIF9lbGV2YXRpb246IG51bWJlciA9IDA7XG4gIHByb3RlY3RlZCBkZWZhdWx0TGF5b3V0QWxpZ246IHN0cmluZyA9ICdzdGFydCBzdGFydCc7XG4gIHByb3RlY3RlZCBfbGF5b3V0QWxpZ246IHN0cmluZztcbiAgcHVibGljIGljb246IHN0cmluZztcbiAgcHJvdGVjdGVkIF9hcHBlYXJhbmNlOiBzdHJpbmc7XG4gIHByb3RlY3RlZCBfbGF5b3V0R2FwOiBzdHJpbmc7XG4gIHByaXZhdGUgX291dGxpbmVHYXBDYWxjdWxhdGlvbk5lZWRlZEltbWVkaWF0ZWx5ID0gZmFsc2U7XG5cbiAgcHJvdGVjdGVkIHRpdGxlT2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcigoKSA9PiB0aGlzLnVwZGF0ZU91dGxpbmVHYXAoKSk7XG5cbiAgcHJvdGVjdGVkIF90aXRsZUVsOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdjb250YWluZXJUaXRsZScpIHNldCBjb250YWluZXJUaXRsZShlbGVtOiBFbGVtZW50UmVmKSB7XG4gICAgdGhpcy5fdGl0bGVFbCA9IGVsZW07XG4gICAgaWYgKHRoaXMuX3RpdGxlRWwpIHtcbiAgICAgIHRoaXMucmVnaXN0ZXJPYnNlcnZlcigpO1xuICAgICAgdGhpcy51cGRhdGVPdXRsaW5lR2FwKCk7IC8vIFRoaXMgbXVzdCBiZSB0cmlnZ2VyZWQgd2hlbiB0aXRsZSBjb250YWluZXIgaXMgcmUtcmVnaXN0ZXJlZFxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnVuUmVnaXN0ZXJPYnNlcnZlcigpO1xuICAgIH1cbiAgfVxuICBAVmlld0NoaWxkKCdjb250YWluZXInLCB7IHN0YXRpYzogdHJ1ZSB9KSBwcm90ZWN0ZWQgX2NvbnRhaW5lclJlZjogRWxlbWVudFJlZjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgZWxSZWY6IEVsZW1lbnRSZWYsXG4gICAgcHJvdGVjdGVkIGluamVjdG9yOiBJbmplY3RvcixcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KE1BVF9GT1JNX0ZJRUxEX0RFRkFVTFRfT1BUSU9OUykgcHJvdGVjdGVkIG1hdEZvcm1EZWZhdWx0T3B0aW9uXG4gICkgeyB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmVsUmVmKSB7XG4gICAgICB0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCd0aXRsZScpO1xuICAgIH1cbiAgICB0aGlzLnJlZ2lzdGVyT2JzZXJ2ZXIoKTtcbiAgfVxuXG4gIG5nQWZ0ZXJDb250ZW50Q2hlY2tlZCgpIHtcbiAgICBpZiAodGhpcy5fb3V0bGluZUdhcENhbGN1bGF0aW9uTmVlZGVkSW1tZWRpYXRlbHkpIHtcbiAgICAgIHRoaXMudXBkYXRlT3V0bGluZUdhcCgpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMudW5SZWdpc3Rlck9ic2VydmVyKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0QXR0cmlidXRlKCkge1xuICAgIGlmICh0aGlzLm9hdHRyKSB7XG4gICAgICByZXR1cm4gdGhpcy5vYXR0cjtcbiAgICB9IGVsc2UgaWYgKHRoaXMuZWxSZWYgJiYgdGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LmF0dHJpYnV0ZXMuYXR0cikge1xuICAgICAgcmV0dXJuIHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudC5hdHRyaWJ1dGVzLmF0dHIudmFsdWU7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGFwcGVhcmFuY2UoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2FwcGVhcmFuY2U7XG4gIH1cblxuICBzZXQgYXBwZWFyYW5jZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fYXBwZWFyYW5jZSA9IHZhbHVlO1xuICAgIHNldFRpbWVvdXQoKCkgPT4geyB0aGlzLnVwZGF0ZU91dGxpbmVHYXAoKTsgfSwgMCk7XG4gIH1cblxuICBnZXQgZWxldmF0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLl9lbGV2YXRpb247XG4gIH1cblxuICBzZXQgZWxldmF0aW9uKGVsZXZhdGlvbjogbnVtYmVyKSB7XG4gICAgdGhpcy5fZWxldmF0aW9uID0gZWxldmF0aW9uO1xuICAgIHRoaXMucHJvcGFnYXRlRWxldmF0aW9uVG9ET00oKTtcbiAgfVxuXG4gIGdldCBsYXlvdXRBbGlnbigpIHtcbiAgICByZXR1cm4gdGhpcy5fbGF5b3V0QWxpZ247XG4gIH1cblxuICBzZXQgbGF5b3V0QWxpZ24oYWxpZ246IHN0cmluZykge1xuICAgIGlmICghYWxpZ24gfHwgYWxpZ24ubGVuZ3RoID09PSAwKSB7XG4gICAgICBhbGlnbiA9IHRoaXMuZGVmYXVsdExheW91dEFsaWduO1xuICAgIH1cbiAgICB0aGlzLl9sYXlvdXRBbGlnbiA9IGFsaWduO1xuICB9XG5cbiAgZ2V0IGxheW91dEdhcCgpIHtcbiAgICByZXR1cm4gdGhpcy5fbGF5b3V0R2FwO1xuICB9XG5cbiAgc2V0IGxheW91dEdhcChsYXlvdXRHYXA6IHN0cmluZykge1xuICAgIHRoaXMuX2xheW91dEdhcCA9IGxheW91dEdhcDtcbiAgfVxuXG4gIHB1YmxpYyBoYXNIZWFkZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy50aXRsZSB8fCAhIXRoaXMuaWNvbjtcbiAgfVxuXG4gIGlzQXBwZWFyYW5jZU91dGxpbmVTZXR0ZWQoKTogYm9vbGVhbiB7XG4gICAgbGV0IGlzQXBwZWFyYW5jZVNldHRlZCA9IGZhbHNlO1xuICAgIGlmIChVdGlsLmlzRGVmaW5lZCh0aGlzLmFwcGVhcmFuY2UpKSB7XG4gICAgICBpc0FwcGVhcmFuY2VTZXR0ZWQgPSB0aGlzLmFwcGVhcmFuY2UgPT09IE9Db250YWluZXJDb21wb25lbnQuQVBQRUFSQU5DRV9PVVRMSU5FO1xuICAgIH1cbiAgICByZXR1cm4gaXNBcHBlYXJhbmNlU2V0dGVkO1xuICB9XG5cbiAgcHVibGljIGhhc0hlYWRlck9yQXBwZWFyYW5jZU91dGxpbmVTZXR0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNBcHBlYXJhbmNlT3V0bGluZVNldHRlZCgpIHx8IHRoaXMuaGFzSGVhZGVyKCk7XG4gIH1cblxuICBwdWJsaWMgaGFzSGVhZGVyQW5kQXBwZWFyYW5jZU91dGxpbmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNBcHBlYXJhbmNlT3V0bGluZSgpICYmIHRoaXMuaGFzSGVhZGVyKCk7XG4gIH1cblxuICBwdWJsaWMgaXNBcHBlYXJhbmNlT3V0bGluZSgpOiBib29sZWFuIHtcbiAgICBsZXQgaXNBcHBlYXJhbmNlT3V0bGluZSA9ICh0aGlzLm1hdEZvcm1EZWZhdWx0T3B0aW9uICYmIHRoaXMubWF0Rm9ybURlZmF1bHRPcHRpb24uYXBwZWFyYW5jZSA9PT0gT0NvbnRhaW5lckNvbXBvbmVudC5BUFBFQVJBTkNFX09VVExJTkUpO1xuICAgIGlmIChVdGlsLmlzRGVmaW5lZCh0aGlzLmFwcGVhcmFuY2UpKSB7XG4gICAgICBpc0FwcGVhcmFuY2VPdXRsaW5lID0gdGhpcy5hcHBlYXJhbmNlID09PSBPQ29udGFpbmVyQ29tcG9uZW50LkFQUEVBUkFOQ0VfT1VUTElORTtcbiAgICB9XG4gICAgcmV0dXJuIGlzQXBwZWFyYW5jZU91dGxpbmU7XG4gIH1cblxuICBwdWJsaWMgaGFzVGl0bGVJbkFwcGVhcmFuY2VPdXRsaW5lKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzQXBwZWFyYW5jZU91dGxpbmUoKSAmJiB0aGlzLmhhc0hlYWRlcigpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHByb3BhZ2F0ZUVsZXZhdGlvblRvRE9NKCk6IHZvaWQge1xuICAgIHRoaXMuY2xlYW5FbGV2YXRpb25DU1NjbGFzc2VzKCk7XG4gICAgaWYgKHRoaXMuZWxldmF0aW9uID4gMCAmJiB0aGlzLmVsZXZhdGlvbiA8PSAxMikge1xuICAgICAgdGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoJ21hdC1lbGV2YXRpb24teicgKyB0aGlzLmVsZXZhdGlvbik7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGNsZWFuRWxldmF0aW9uQ1NTY2xhc3NlcygpOiB2b2lkIHtcbiAgICBjb25zdCBjbGFzc0xpc3QgPSBBcnJheS5mcm9tKHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QgfHwgW10pO1xuICAgIGlmIChjbGFzc0xpc3QgJiYgY2xhc3NMaXN0Lmxlbmd0aCkge1xuICAgICAgY2xhc3NMaXN0LmZvckVhY2goKGl0ZW06IHN0cmluZykgPT4ge1xuICAgICAgICBpZiAoaXRlbS5zdGFydHNXaXRoKCdtYXQtZWxldmF0aW9uJykpIHtcbiAgICAgICAgICB0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShpdGVtKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIHVwZGF0ZU91dGxpbmVHYXAoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNBcHBlYXJhbmNlT3V0bGluZSgpKSB7XG4gICAgICBjb25zdCB0aXRsZUVsID0gdGhpcy5fdGl0bGVFbCA/IHRoaXMuX3RpdGxlRWwubmF0aXZlRWxlbWVudCA6IG51bGw7XG5cbiAgICAgIGlmICghdGhpcy5fY29udGFpbmVyUmVmKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgJiYgIWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jb250YWlucyh0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQpKSB7XG4gICAgICAgIHRoaXMuX291dGxpbmVHYXBDYWxjdWxhdGlvbk5lZWRlZEltbWVkaWF0ZWx5ID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLl9jb250YWluZXJSZWYubmF0aXZlRWxlbWVudDtcbiAgICAgIGNvbnN0IGNvbnRhaW5lclJlY3QgPSBjb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICBpZiAoY29udGFpbmVyUmVjdC53aWR0aCA9PT0gMCAmJiBjb250YWluZXJSZWN0LmhlaWdodCA9PT0gMCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNvbnRhaW5lclN0YXJ0ID0gY29udGFpbmVyUmVjdC5sZWZ0O1xuICAgICAgY29uc3QgbGFiZWxTdGFydCA9IHRpdGxlRWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdDtcbiAgICAgIGNvbnN0IGxhYmVsV2lkdGggPSB0aGlzLmhhc0hlYWRlcigpID8gdGl0bGVFbC5vZmZzZXRXaWR0aCA6IDA7XG4gICAgICBjb25zdCBzdGFydFdpZHRoID0gbGFiZWxTdGFydCAtIGNvbnRhaW5lclN0YXJ0O1xuXG4gICAgICBjb25zdCBzdGFydEVscyA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKCcuby1jb250YWluZXItb3V0bGluZS1zdGFydCcpO1xuICAgICAgY29uc3QgZ2FwRWxzID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoJy5vLWNvbnRhaW5lci1vdXRsaW5lLWdhcCcpO1xuICAgICAgZ2FwRWxzWzBdLnN0eWxlLndpZHRoID0gYCR7bGFiZWxXaWR0aH1weGA7XG4gICAgICBzdGFydEVsc1swXS5zdHlsZS53aWR0aCA9IGAke3N0YXJ0V2lkdGh9cHhgO1xuICAgICAgdGhpcy5fb3V0bGluZUdhcENhbGN1bGF0aW9uTmVlZGVkSW1tZWRpYXRlbHkgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVnaXN0ZXJPYnNlcnZlcigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fdGl0bGVFbCkge1xuICAgICAgdGhpcy50aXRsZU9ic2VydmVyLm9ic2VydmUodGhpcy5fdGl0bGVFbC5uYXRpdmVFbGVtZW50LCB7XG4gICAgICAgIGNoaWxkTGlzdDogdHJ1ZSxcbiAgICAgICAgY2hhcmFjdGVyRGF0YTogdHJ1ZSxcbiAgICAgICAgc3VidHJlZTogdHJ1ZVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIHVuUmVnaXN0ZXJPYnNlcnZlcigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy50aXRsZU9ic2VydmVyKSB7XG4gICAgICB0aGlzLnRpdGxlT2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgIH1cbiAgfVxuXG59XG4iXX0=