UNPKG

@netgrif/components-core

Version:

Netgrif Application engine frontend core Angular library

157 lines 22.5 kB
import { Component, Inject, Optional } from '@angular/core'; import { DEFAULT_LANGUAGE_CODE, I18nField } from '../models/i18n-field'; import { AbstractI18nErrorsComponent } from '../abstract-i18n-errors.component'; import { DATA_FIELD_PORTAL_DATA } from "../../models/data-field-portal-data-injection-token"; import * as i0 from "@angular/core"; import * as i1 from "../language-icons.service"; import * as i2 from "@ngx-translate/core"; import * as i3 from "@angular/platform-browser"; export class AbstractI18nTextFieldComponent extends AbstractI18nErrorsComponent { languageIconsService; _translateService; _domSanitizer; fieldValueChangesSubscription; fieldUpdateSubscription; languageKeys; initializedLanguage = false; selectedLanguage; filledShown = false; labelWidth; cutProperty; currentValue = {}; filledKeys; constructor(languageIconsService, _translateService, _domSanitizer, dataFieldPortalData) { super(languageIconsService, _translateService, dataFieldPortalData); this.languageIconsService = languageIconsService; this._translateService = _translateService; this._domSanitizer = _domSanitizer; this.selectedLanguage = this._translateService.currentLang; this.languageKeys = Object.keys(this.languageIconsService.languageIcons); } ngOnInit() { this.currentValue = I18nField.toObject(this.dataField.value); this.fieldUpdateSubscription = this.dataField.updated.subscribe(() => { this.refreshCurrentValue(); }); this.fieldValueChangesSubscription = this.dataField.valueChanges().subscribe(newValue => { this.refreshCurrentValue(newValue); }); } ngOnDestroy() { this.fieldUpdateSubscription.unsubscribe(); this.fieldValueChangesSubscription.unsubscribe(); } refreshCurrentValue(newValue = this.dataField.value) { if (this.dataField.disabled) { this.selectedLanguage = this._translateService.currentLang; this.filledShown = false; this.initializedLanguage = false; return; } if (!this.initializedLanguage) { if (!(this.selectedLanguage in newValue.translations)) { this.selectedLanguage = DEFAULT_LANGUAGE_CODE; } this.initializedLanguage = true; } this.currentValue = I18nField.toObject(newValue); this.refreshFilledMap(); } getLanguageIcons() { return this.languageIconsService.languageIcons; } isDefaultValue(chosenLanguage) { return chosenLanguage === DEFAULT_LANGUAGE_CODE; } selectLanguage(newLanguage) { this.selectedLanguage = newLanguage; this.refreshFilledMap(); } setSelectedValue() { if (!this.isDefaultValue(this.selectedLanguage) && this.currentValue[this.selectedLanguage] === '') { delete this.currentValue[this.selectedLanguage]; } this.dataField.value = I18nField.fromObject(this.currentValue, this.dataField.value?.key ?? DEFAULT_LANGUAGE_CODE); this.formControlRef.markAsTouched(); } refreshFilledMap() { this.filledKeys = []; for (const k in this.currentValue) { if (this.selectedLanguage === k) { continue; } this.filledKeys.push(k); } this.filledKeys.sort((a, b) => { return this.languageKeys.indexOf(a) - this.languageKeys.indexOf(b); }); } removeTranslation(key) { delete this.currentValue[key]; this.dataField.value = I18nField.fromObject(this.currentValue, this.dataField.value?.key ?? DEFAULT_LANGUAGE_CODE); this.formControlRef.markAsTouched(); this.refreshFilledMap(); } toggleFilled() { this.filledShown = !this.filledShown; } getCutProperty(i18nLabel) { if (this.labelWidth !== i18nLabel.offsetWidth) { this.labelWidth = i18nLabel.offsetWidth; const calculatedWidth = 'calc(0.5em + ' + i18nLabel.offsetWidth / 4 * 3 + 'px)'; this.cutProperty = `polygon(0 0, 0 100%, 100% 100%, 100% 0%, ${calculatedWidth} 0, ${calculatedWidth} 6%, 0.5em 6%, 0.5em 0)`; } return this.cutProperty; } hasHint() { return this.dataField.description !== undefined && this.dataField.description !== ''; } getTranslation() { const locale = this._translateService.currentLang; return locale in this.dataField.value.translations ? this.dataField.value.translations[locale] : this.dataField.value.defaultValue; } getDefaultLanguageCode() { return DEFAULT_LANGUAGE_CODE; } isPlainText() { if (this.checkPropertyInComponent('plainText')) { return this.dataField.component.properties.plainText === 'true'; } } isBoldText() { if (this.textPropertyEnabled('boldText')) { return this.dataField.component.properties.boldText === 'true'; } } getTextColor() { if (this.checkPropertyInComponent('textColor')) { return this.dataField.component.properties.textColor; } } getTextFontSize() { if (this.checkPropertyInComponent('fontSize')) { return this.dataField.component.properties.fontSize + 'px'; } } textPropertyEnabled(property) { return !!this.dataField?.component?.properties && property in this.dataField.component.properties; } static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AbstractI18nTextFieldComponent, deps: [{ token: i1.LanguageIconsService }, { token: i2.TranslateService }, { token: i3.DomSanitizer }, { token: DATA_FIELD_PORTAL_DATA, optional: true }], target: i0.ɵɵFactoryTarget.Component }); static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: AbstractI18nTextFieldComponent, selector: "ncc-abstract-i18n-text-field", usesInheritance: true, ngImport: i0, template: '', isInline: true }); } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AbstractI18nTextFieldComponent, decorators: [{ type: Component, args: [{ selector: 'ncc-abstract-i18n-text-field', template: '' }] }], ctorParameters: () => [{ type: i1.LanguageIconsService }, { type: i2.TranslateService }, { type: i3.DomSanitizer }, { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [DATA_FIELD_PORTAL_DATA] }] }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3QtaTE4bi10ZXh0LWZpZWxkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25ldGdyaWYtY29tcG9uZW50cy1jb3JlL3NyYy9saWIvZGF0YS1maWVsZHMvaTE4bi1maWVsZC9pMThuLXRleHQtZmllbGQvYWJzdHJhY3QtaTE4bi10ZXh0LWZpZWxkLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLE1BQU0sRUFBcUIsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQzdFLE9BQU8sRUFBQyxxQkFBcUIsRUFBRSxTQUFTLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUt0RSxPQUFPLEVBQUMsMkJBQTJCLEVBQUMsTUFBTSxtQ0FBbUMsQ0FBQztBQUc5RSxPQUFPLEVBQUMsc0JBQXNCLEVBQXNCLE1BQU0scURBQXFELENBQUM7Ozs7O0FBTWhILE1BQU0sT0FBZ0IsOEJBQStCLFNBQVEsMkJBQTJCO0lBa0JwRDtJQUNBO0lBQ0E7SUFsQnhCLDZCQUE2QixDQUFlO0lBQzVDLHVCQUF1QixDQUFlO0lBRXZDLFlBQVksQ0FBZ0I7SUFFekIsbUJBQW1CLEdBQUcsS0FBSyxDQUFDO0lBRS9CLGdCQUFnQixDQUFTO0lBQ3pCLFdBQVcsR0FBRyxLQUFLLENBQUM7SUFFbkIsVUFBVSxDQUFTO0lBQ3BCLFdBQVcsQ0FBUztJQUVwQixZQUFZLEdBQTBCLEVBQUUsQ0FBQztJQUN6QyxVQUFVLENBQWdCO0lBRWpDLFlBQWdDLG9CQUEwQyxFQUMxQyxpQkFBbUMsRUFDbkMsYUFBMkIsRUFDTyxtQkFBbUQ7UUFDakgsS0FBSyxDQUFDLG9CQUFvQixFQUFFLGlCQUFpQixFQUFFLG1CQUFtQixDQUFDLENBQUM7UUFKeEMseUJBQW9CLEdBQXBCLG9CQUFvQixDQUFzQjtRQUMxQyxzQkFBaUIsR0FBakIsaUJBQWlCLENBQWtCO1FBQ25D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ZixJQUFJLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxXQUFXLENBQUMsRUFBRTtZQUM1QyxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUM7U0FDeEQ7SUFDTCxDQUFDO0lBRU0sZUFBZTtRQUNsQixJQUFJLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxVQUFVLENBQUMsRUFBRTtZQUMzQyxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1NBQzlEO0lBQ0wsQ0FBQztJQUVNLG1CQUFtQixDQUFDLFFBQWdCO1FBQ3ZDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsU0FBUyxFQUFFLFVBQVU7ZUFDdkMsUUFBUSxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQztJQUMzRCxDQUFDO3dHQTVKaUIsOEJBQThCLGtIQXFCTixzQkFBc0I7NEZBckI5Qyw4QkFBOEIsMkZBRnRDLEVBQUU7OzRGQUVNLDhCQUE4QjtrQkFKbkQsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsOEJBQThCO29CQUN4QyxRQUFRLEVBQUUsRUFBRTtpQkFDZjs7MEJBc0IwQixRQUFROzswQkFBSSxNQUFNOzJCQUFDLHNCQUFzQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50LCBJbmplY3QsIE9uRGVzdHJveSwgT25Jbml0LCBPcHRpb25hbH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0RFRkFVTFRfTEFOR1VBR0VfQ09ERSwgSTE4bkZpZWxkfSBmcm9tICcuLi9tb2RlbHMvaTE4bi1maWVsZCc7XG5pbXBvcnQge1RyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtEb21TYW5pdGl6ZXJ9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuaW1wb3J0IHtMYW5ndWFnZUljb25zU2VydmljZX0gZnJvbSAnLi4vbGFuZ3VhZ2UtaWNvbnMuc2VydmljZSc7XG5pbXBvcnQge1N1YnNjcmlwdGlvbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge0Fic3RyYWN0STE4bkVycm9yc0NvbXBvbmVudH0gZnJvbSAnLi4vYWJzdHJhY3QtaTE4bi1lcnJvcnMuY29tcG9uZW50JztcbmltcG9ydCB7TGFuZ3VhZ2VJY29uc30gZnJvbSAnLi4vbW9kZWxzL2xhbmd1YWdlLWljb25zJztcbmltcG9ydCB7STE4bkZpZWxkVHJhbnNsYXRpb25zfSBmcm9tICcuLi9tb2RlbHMvaTE4bi1maWVsZC12YWx1ZSc7XG5pbXBvcnQge0RBVEFfRklFTERfUE9SVEFMX0RBVEEsIERhdGFGaWVsZFBvcnRhbERhdGF9IGZyb20gXCIuLi8uLi9tb2RlbHMvZGF0YS1maWVsZC1wb3J0YWwtZGF0YS1pbmplY3Rpb24tdG9rZW5cIjtcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICduY2MtYWJzdHJhY3QtaTE4bi10ZXh0LWZpZWxkJyxcbiAgICB0ZW1wbGF0ZTogJydcbn0pXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RJMThuVGV4dEZpZWxkQ29tcG9uZW50IGV4dGVuZHMgQWJzdHJhY3RJMThuRXJyb3JzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuXG4gICAgcHJpdmF0ZSBmaWVsZFZhbHVlQ2hhbmdlc1N1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICAgIHByaXZhdGUgZmllbGRVcGRhdGVTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcblxuICAgIHB1YmxpYyBsYW5ndWFnZUtleXM6IEFycmF5PHN0cmluZz47XG5cbiAgICBwcm90ZWN0ZWQgaW5pdGlhbGl6ZWRMYW5ndWFnZSA9IGZhbHNlO1xuXG4gICAgcHVibGljIHNlbGVjdGVkTGFuZ3VhZ2U6IHN0cmluZztcbiAgICBwdWJsaWMgZmlsbGVkU2hvd24gPSBmYWxzZTtcblxuICAgIHByaXZhdGUgbGFiZWxXaWR0aDogbnVtYmVyO1xuICAgIHB1YmxpYyBjdXRQcm9wZXJ0eTogc3RyaW5nO1xuXG4gICAgcHVibGljIGN1cnJlbnRWYWx1ZTogSTE4bkZpZWxkVHJhbnNsYXRpb25zID0ge307XG4gICAgcHVibGljIGZpbGxlZEtleXM6IEFycmF5PHN0cmluZz47XG5cbiAgICBwcm90ZWN0ZWQgY29uc3RydWN0b3IocHJvdGVjdGVkIGxhbmd1YWdlSWNvbnNTZXJ2aWNlOiBMYW5ndWFnZUljb25zU2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdGVjdGVkIF90cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgX2RvbVNhbml0aXplcjogRG9tU2FuaXRpemVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBAT3B0aW9uYWwoKSBASW5qZWN0KERBVEFfRklFTERfUE9SVEFMX0RBVEEpIGRhdGFGaWVsZFBvcnRhbERhdGE6IERhdGFGaWVsZFBvcnRhbERhdGE8STE4bkZpZWxkPikge1xuICAgICAgICBzdXBlcihsYW5ndWFnZUljb25zU2VydmljZSwgX3RyYW5zbGF0ZVNlcnZpY2UsIGRhdGFGaWVsZFBvcnRhbERhdGEpO1xuICAgICAgICB0aGlzLnNlbGVjdGVkTGFuZ3VhZ2UgPSB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmN1cnJlbnRMYW5nO1xuICAgICAgICB0aGlzLmxhbmd1YWdlS2V5cyA9IE9iamVjdC5rZXlzKHRoaXMubGFuZ3VhZ2VJY29uc1NlcnZpY2UubGFuZ3VhZ2VJY29ucyk7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY3VycmVudFZhbHVlID0gSTE4bkZpZWxkLnRvT2JqZWN0KHRoaXMuZGF0YUZpZWxkLnZhbHVlKTtcbiAgICAgICAgdGhpcy5maWVsZFVwZGF0ZVN1YnNjcmlwdGlvbiA9IHRoaXMuZGF0YUZpZWxkLnVwZGF0ZWQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaEN1cnJlbnRWYWx1ZSgpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5maWVsZFZhbHVlQ2hhbmdlc1N1YnNjcmlwdGlvbiA9IHRoaXMuZGF0YUZpZWxkLnZhbHVlQ2hhbmdlcygpLnN1YnNjcmliZShuZXdWYWx1ZSA9PiB7XG4gICAgICAgICAgICB0aGlzLnJlZnJlc2hDdXJyZW50VmFsdWUobmV3VmFsdWUpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5maWVsZFVwZGF0ZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLmZpZWxkVmFsdWVDaGFuZ2VzU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHJlZnJlc2hDdXJyZW50VmFsdWUobmV3VmFsdWUgPSB0aGlzLmRhdGFGaWVsZC52YWx1ZSk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5kYXRhRmllbGQuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRMYW5ndWFnZSA9IHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuY3VycmVudExhbmc7XG4gICAgICAgICAgICB0aGlzLmZpbGxlZFNob3duID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmluaXRpYWxpemVkTGFuZ3VhZ2UgPSBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuaW5pdGlhbGl6ZWRMYW5ndWFnZSkge1xuICAgICAgICAgICAgaWYgKCEodGhpcy5zZWxlY3RlZExhbmd1YWdlIGluIG5ld1ZhbHVlLnRyYW5zbGF0aW9ucykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTGFuZ3VhZ2UgPSBERUZBVUxUX0xBTkdVQUdFX0NPREU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmluaXRpYWxpemVkTGFuZ3VhZ2UgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY3VycmVudFZhbHVlID0gSTE4bkZpZWxkLnRvT2JqZWN0KG5ld1ZhbHVlKTtcbiAgICAgICAgdGhpcy5yZWZyZXNoRmlsbGVkTWFwKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldExhbmd1YWdlSWNvbnMoKTogTGFuZ3VhZ2VJY29ucyB7XG4gICAgICAgIHJldHVybiB0aGlzLmxhbmd1YWdlSWNvbnNTZXJ2aWNlLmxhbmd1YWdlSWNvbnM7XG4gICAgfVxuXG4gICAgcHVibGljIGlzRGVmYXVsdFZhbHVlKGNob3Nlbkxhbmd1YWdlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGNob3Nlbkxhbmd1YWdlID09PSBERUZBVUxUX0xBTkdVQUdFX0NPREU7XG4gICAgfVxuXG4gICAgcHVibGljIHNlbGVjdExhbmd1YWdlKG5ld0xhbmd1YWdlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZExhbmd1YWdlID0gbmV3TGFuZ3VhZ2U7XG4gICAgICAgIHRoaXMucmVmcmVzaEZpbGxlZE1hcCgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRTZWxlY3RlZFZhbHVlKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuaXNEZWZhdWx0VmFsdWUodGhpcy5zZWxlY3RlZExhbmd1YWdlKSAmJiB0aGlzLmN1cnJlbnRWYWx1ZVt0aGlzLnNlbGVjdGVkTGFuZ3VhZ2VdID09PSAnJykge1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMuY3VycmVudFZhbHVlW3RoaXMuc2VsZWN0ZWRMYW5ndWFnZV07XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kYXRhRmllbGQudmFsdWUgPSBJMThuRmllbGQuZnJvbU9iamVjdCh0aGlzLmN1cnJlbnRWYWx1ZSwgdGhpcy5kYXRhRmllbGQudmFsdWU/LmtleSA/PyBERUZBVUxUX0xBTkdVQUdFX0NPREUpO1xuICAgICAgICB0aGlzLmZvcm1Db250cm9sUmVmLm1hcmtBc1RvdWNoZWQoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVmcmVzaEZpbGxlZE1hcCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5maWxsZWRLZXlzID0gW107XG4gICAgICAgIGZvciAoY29uc3QgayBpbiB0aGlzLmN1cnJlbnRWYWx1ZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRMYW5ndWFnZSA9PT0gaykge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5maWxsZWRLZXlzLnB1c2goayk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5maWxsZWRLZXlzLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxhbmd1YWdlS2V5cy5pbmRleE9mKGEpIC0gdGhpcy5sYW5ndWFnZUtleXMuaW5kZXhPZihiKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlbW92ZVRyYW5zbGF0aW9uKGtleTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGRlbGV0ZSB0aGlzLmN1cnJlbnRWYWx1ZVtrZXldO1xuICAgICAgICB0aGlzLmRhdGFGaWVsZC52YWx1ZSA9IEkxOG5GaWVsZC5mcm9tT2JqZWN0KHRoaXMuY3VycmVudFZhbHVlLCB0aGlzLmRhdGFGaWVsZC52YWx1ZT8ua2V5ID8/IERFRkFVTFRfTEFOR1VBR0VfQ09ERSk7XG4gICAgICAgIHRoaXMuZm9ybUNvbnRyb2xSZWYubWFya0FzVG91Y2hlZCgpO1xuICAgICAgICB0aGlzLnJlZnJlc2hGaWxsZWRNYXAoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdG9nZ2xlRmlsbGVkKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmZpbGxlZFNob3duID0gIXRoaXMuZmlsbGVkU2hvd247XG4gICAgfVxuXG4gICAgcHVibGljIGdldEN1dFByb3BlcnR5KGkxOG5MYWJlbCk6IHN0cmluZyB7XG4gICAgICAgIGlmICh0aGlzLmxhYmVsV2lkdGggIT09IGkxOG5MYWJlbC5vZmZzZXRXaWR0aCkge1xuICAgICAgICAgICAgdGhpcy5sYWJlbFdpZHRoID0gaTE4bkxhYmVsLm9mZnNldFdpZHRoO1xuICAgICAgICAgICAgY29uc3QgY2FsY3VsYXRlZFdpZHRoID0gJ2NhbGMoMC41ZW0gKyAnICsgaTE4bkxhYmVsLm9mZnNldFdpZHRoIC8gNCAqIDMgKyAncHgpJztcbiAgICAgICAgICAgIHRoaXMuY3V0UHJvcGVydHkgPSBgcG9seWdvbigwIDAsIDAgMTAwJSwgMTAwJSAxMDAlLCAxMDAlIDAlLCAke2NhbGN1bGF0ZWRXaWR0aH0gMCwgJHtjYWxjdWxhdGVkV2lkdGh9IDYlLCAwLjVlbSA2JSwgMC41ZW0gMClgO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmN1dFByb3BlcnR5O1xuICAgIH1cblxuICAgIHB1YmxpYyBoYXNIaW50KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRhRmllbGQuZGVzY3JpcHRpb24gIT09IHVuZGVmaW5lZCAmJiB0aGlzLmRhdGFGaWVsZC5kZXNjcmlwdGlvbiAhPT0gJyc7XG4gICAgfVxuXG5cbiAgICBwdWJsaWMgZ2V0VHJhbnNsYXRpb24oKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgbG9jYWxlID0gdGhpcy5fdHJhbnNsYXRlU2VydmljZS5jdXJyZW50TGFuZztcbiAgICAgICAgcmV0dXJuIGxvY2FsZSBpbiB0aGlzLmRhdGFGaWVsZC52YWx1ZS50cmFuc2xhdGlvbnNcbiAgICAgICAgICAgID8gdGhpcy5kYXRhRmllbGQudmFsdWUudHJhbnNsYXRpb25zW2xvY2FsZV1cbiAgICAgICAgICAgIDogdGhpcy5kYXRhRmllbGQudmFsdWUuZGVmYXVsdFZhbHVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXREZWZhdWx0TGFuZ3VhZ2VDb2RlKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBERUZBVUxUX0xBTkdVQUdFX0NPREU7XG4gICAgfVxuXG4gICAgcHVibGljIGlzUGxhaW5UZXh0KCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAodGhpcy5jaGVja1Byb3BlcnR5SW5Db21wb25lbnQoJ3BsYWluVGV4dCcpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kYXRhRmllbGQuY29tcG9uZW50LnByb3BlcnRpZXMucGxhaW5UZXh0ID09PSAndHJ1ZSc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgaXNCb2xkVGV4dCgpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKHRoaXMudGV4dFByb3BlcnR5RW5hYmxlZCgnYm9sZFRleHQnKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF0YUZpZWxkLmNvbXBvbmVudC5wcm9wZXJ0aWVzLmJvbGRUZXh0ID09PSAndHJ1ZSc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0VGV4dENvbG9yKCk6IHN0cmluZyB7XG4gICAgICAgIGlmICh0aGlzLmNoZWNrUHJvcGVydHlJbkNvbXBvbmVudCgndGV4dENvbG9yJykpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRhdGFGaWVsZC5jb21wb25lbnQucHJvcGVydGllcy50ZXh0Q29sb3I7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0VGV4dEZvbnRTaXplKCk6IHN0cmluZyB7XG4gICAgICAgIGlmICh0aGlzLmNoZWNrUHJvcGVydHlJbkNvbXBvbmVudCgnZm9udFNpemUnKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF0YUZpZWxkLmNvbXBvbmVudC5wcm9wZXJ0aWVzLmZvbnRTaXplICsgJ3B4JztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyB0ZXh0UHJvcGVydHlFbmFibGVkKHByb3BlcnR5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5kYXRhRmllbGQ/LmNvbXBvbmVudD8ucHJvcGVydGllc1xuICAgICAgICAgICAgJiYgcHJvcGVydHkgaW4gdGhpcy5kYXRhRmllbGQuY29tcG9uZW50LnByb3BlcnRpZXM7XG4gICAgfVxufVxuIl19