@tilde-nlp/ngx-translate 2.0.3-deepl-2 → 2.0.3-deepl-4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/modules/tld-text/components/highlight-tree/highlight-tree.component.mjs +4 -3
- package/esm2020/lib/modules/tld-text/services/api/tld-translate-text-api.service.mjs +58 -56
- package/fesm2015/tilde-nlp-ngx-translate.mjs +61 -58
- package/fesm2015/tilde-nlp-ngx-translate.mjs.map +1 -1
- package/fesm2020/tilde-nlp-ngx-translate.mjs +60 -57
- package/fesm2020/tilde-nlp-ngx-translate.mjs.map +1 -1
- package/lib/modules/tld-text/components/highlight-tree/highlight-tree.component.d.ts +2 -0
- package/package.json +1 -1
- package/src/assets/webcomponent/tld-translate.js +1 -1
- package/tilde-nlp-ngx-translate-2.0.3-deepl-4.tgz +0 -0
- package/tilde-nlp-ngx-translate-2.0.3-deepl-2.tgz +0 -0
|
@@ -13,6 +13,7 @@ export class HighlightTreeComponent {
|
|
|
13
13
|
this.highlightService = highlightService;
|
|
14
14
|
this.correctionsEnabled = true;
|
|
15
15
|
this.onReplace = new EventEmitter();
|
|
16
|
+
this.wordType = HighlightTreeType.WORD;
|
|
16
17
|
}
|
|
17
18
|
mouseEnter(event) {
|
|
18
19
|
this.onMouseEvent(event, this.isSource, true);
|
|
@@ -87,10 +88,10 @@ export class HighlightTreeComponent {
|
|
|
87
88
|
}
|
|
88
89
|
}
|
|
89
90
|
HighlightTreeComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: HighlightTreeComponent, deps: [{ token: i1.TldHighlightService }], target: i0.ɵɵFactoryTarget.Component });
|
|
90
|
-
HighlightTreeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: HighlightTreeComponent, selector: "tld-highlight-tree", inputs: { tree: "tree", isSource: "isSource", correctionsEnabled: "correctionsEnabled", highlight: "highlight", gramCheck: "gramCheck", selectSentence: "selectSentence" }, outputs: { onReplace: "onReplace" }, ngImport: i0, template: "<ng-template #highlightTree let-tree=\"tree\">\r\n <ng-container *ngIf=\"!tree.children\">\r\n <ng-container *ngIf=\"tree.text\">\r\n <ng-container *ngIf=\"tree.grammarMeta && gramCheck\">\r\n <mat-menu #menu=\"matMenu\" class=\"grammar-check-menu\">\r\n <div class=\"title\">\r\n {{'GRAMMAR_CHECK_MENU.TITLE' | translate}}\r\n </div>\r\n <div *ngFor=\"let replacement of tree.grammarMeta.replacements\">\r\n <button mat-button color=\"accent\" (click)=\"replace(tree, replacement)\">\r\n {{replacement}}\r\n </button>\r\n </div>\r\n </mat-menu>\r\n <span #menuTrigger=\"matMenuTrigger\" [matMenuTriggerFor]=\"menu\" class=\"{{tree.class}}\"\r\n [innerHTML]=\"tree.text\" (mouseenter)=\"mouseEnter($event)\" (click)=\"gramCheckMenu(tree, menuTrigger)\"\r\n (mouseleave)=\"mouseLeave($event)\"></span>\r\n\r\n </ng-container>\r\n <ng-container *ngIf=\"!(tree.grammarMeta && gramCheck)\">\r\n <span class=\"{{tree.class}}\" [innerHTML]=\"tree.text\" (mouseenter)=\"mouseEnter($event)\"\r\n (mouseleave)=\"mouseLeave($event)\"></span>\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"!tree.text\">\r\n <br>\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"tree.children\">\r\n <span [ngClass]=\"{'selected-sentence': isSelectedSentence(tree)}\" class=\"highlight-tree-child-wrapper {{tree.class}}\"\r\n (mouseenter)=\"mouseEnter($event)\" (mouseleave)=\"mouseLeave($event)\" (click)=\"parentClick(tree)\">\r\n <ng-template ngFor let-child [ngForOf]=\"tree.children\">\r\n <ng-template [ngTemplateOutlet]=\"highlightTree\" [ngTemplateOutletContext]=\"{ tree: child }\">\r\n </ng-template>\r\n </ng-template>\r\n </span>\r\n </ng-container>\r\n</ng-template>\r\n\r\n\r\n\r\n<div *ngIf=\"tree\" class=\"tld-highlight-tree\">\r\n <ng-template [ngTemplateOutlet]=\"highlightTree\" [ngTemplateOutletContext]=\"{ tree: tree }\"></ng-template>\r\n</div
|
|
91
|
+
HighlightTreeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: HighlightTreeComponent, selector: "tld-highlight-tree", inputs: { tree: "tree", isSource: "isSource", correctionsEnabled: "correctionsEnabled", highlight: "highlight", gramCheck: "gramCheck", selectSentence: "selectSentence" }, outputs: { onReplace: "onReplace" }, ngImport: i0, template: "<ng-template #highlightTree let-tree=\"tree\">\r\n <ng-container *ngIf=\"!tree.children\">\r\n <ng-container *ngIf=\"tree.text\">\r\n <ng-container *ngIf=\"tree.grammarMeta && gramCheck\">\r\n <mat-menu #menu=\"matMenu\" class=\"grammar-check-menu\">\r\n <div class=\"title\">\r\n {{'GRAMMAR_CHECK_MENU.TITLE' | translate}}\r\n </div>\r\n <div *ngFor=\"let replacement of tree.grammarMeta.replacements\">\r\n <button mat-button color=\"accent\" (click)=\"replace(tree, replacement)\">\r\n {{replacement}}\r\n </button>\r\n </div>\r\n </mat-menu>\r\n <span #menuTrigger=\"matMenuTrigger\" [matMenuTriggerFor]=\"menu\" class=\"{{tree.class}}\"\r\n [innerHTML]=\"tree.text\" (mouseenter)=\"mouseEnter($event)\" (click)=\"gramCheckMenu(tree, menuTrigger)\"\r\n (mouseleave)=\"mouseLeave($event)\"></span>\r\n\r\n </ng-container>\r\n <ng-container *ngIf=\"!(tree.grammarMeta && gramCheck)\">\r\n <span class=\"{{tree.class}}\" [innerHTML]=\"tree.text\" (mouseenter)=\"mouseEnter($event)\"\r\n (mouseleave)=\"mouseLeave($event)\"></span>\r\n </ng-container>\r\n </ng-container>\r\n <!-- If text is empty and type is 'word', we should not break line. -->\r\n <ng-container *ngIf=\"!tree.text && tree.type !== wordType\">\r\n <br>\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"tree.children\">\r\n <span [ngClass]=\"{'selected-sentence': isSelectedSentence(tree)}\" class=\"highlight-tree-child-wrapper {{tree.class}}\"\r\n (mouseenter)=\"mouseEnter($event)\" (mouseleave)=\"mouseLeave($event)\" (click)=\"parentClick(tree)\">\r\n <ng-template ngFor let-child [ngForOf]=\"tree.children\">\r\n <ng-template [ngTemplateOutlet]=\"highlightTree\" [ngTemplateOutletContext]=\"{ tree: child }\">\r\n </ng-template>\r\n </ng-template>\r\n </span>\r\n </ng-container>\r\n</ng-template>\r\n\r\n\r\n\r\n<div *ngIf=\"tree\" class=\"tld-highlight-tree\">\r\n <ng-template [ngTemplateOutlet]=\"highlightTree\" [ngTemplateOutletContext]=\"{ tree: tree }\"></ng-template>\r\n</div>\r\n", styles: ["span{white-space:pre-wrap}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i3.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i4.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { kind: "directive", type: i4.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { kind: "directive", type: i5.DefaultClassDirective, selector: " [ngClass], [ngClass.xs], [ngClass.sm], [ngClass.md], [ngClass.lg], [ngClass.xl], [ngClass.lt-sm], [ngClass.lt-md], [ngClass.lt-lg], [ngClass.lt-xl], [ngClass.gt-xs], [ngClass.gt-sm], [ngClass.gt-md], [ngClass.gt-lg]", inputs: ["ngClass", "ngClass.xs", "ngClass.sm", "ngClass.md", "ngClass.lg", "ngClass.xl", "ngClass.lt-sm", "ngClass.lt-md", "ngClass.lt-lg", "ngClass.lt-xl", "ngClass.gt-xs", "ngClass.gt-sm", "ngClass.gt-md", "ngClass.gt-lg"] }, { kind: "pipe", type: i6.TranslatePipe, name: "translate" }] });
|
|
91
92
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: HighlightTreeComponent, decorators: [{
|
|
92
93
|
type: Component,
|
|
93
|
-
args: [{ selector: 'tld-highlight-tree', template: "<ng-template #highlightTree let-tree=\"tree\">\r\n <ng-container *ngIf=\"!tree.children\">\r\n <ng-container *ngIf=\"tree.text\">\r\n <ng-container *ngIf=\"tree.grammarMeta && gramCheck\">\r\n <mat-menu #menu=\"matMenu\" class=\"grammar-check-menu\">\r\n <div class=\"title\">\r\n {{'GRAMMAR_CHECK_MENU.TITLE' | translate}}\r\n </div>\r\n <div *ngFor=\"let replacement of tree.grammarMeta.replacements\">\r\n <button mat-button color=\"accent\" (click)=\"replace(tree, replacement)\">\r\n {{replacement}}\r\n </button>\r\n </div>\r\n </mat-menu>\r\n <span #menuTrigger=\"matMenuTrigger\" [matMenuTriggerFor]=\"menu\" class=\"{{tree.class}}\"\r\n [innerHTML]=\"tree.text\" (mouseenter)=\"mouseEnter($event)\" (click)=\"gramCheckMenu(tree, menuTrigger)\"\r\n (mouseleave)=\"mouseLeave($event)\"></span>\r\n\r\n </ng-container>\r\n <ng-container *ngIf=\"!(tree.grammarMeta && gramCheck)\">\r\n <span class=\"{{tree.class}}\" [innerHTML]=\"tree.text\" (mouseenter)=\"mouseEnter($event)\"\r\n (mouseleave)=\"mouseLeave($event)\"></span>\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"!tree.text\">\r\n <br>\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"tree.children\">\r\n <span [ngClass]=\"{'selected-sentence': isSelectedSentence(tree)}\" class=\"highlight-tree-child-wrapper {{tree.class}}\"\r\n (mouseenter)=\"mouseEnter($event)\" (mouseleave)=\"mouseLeave($event)\" (click)=\"parentClick(tree)\">\r\n <ng-template ngFor let-child [ngForOf]=\"tree.children\">\r\n <ng-template [ngTemplateOutlet]=\"highlightTree\" [ngTemplateOutletContext]=\"{ tree: child }\">\r\n </ng-template>\r\n </ng-template>\r\n </span>\r\n </ng-container>\r\n</ng-template>\r\n\r\n\r\n\r\n<div *ngIf=\"tree\" class=\"tld-highlight-tree\">\r\n <ng-template [ngTemplateOutlet]=\"highlightTree\" [ngTemplateOutletContext]=\"{ tree: tree }\"></ng-template>\r\n</div
|
|
94
|
+
args: [{ selector: 'tld-highlight-tree', template: "<ng-template #highlightTree let-tree=\"tree\">\r\n <ng-container *ngIf=\"!tree.children\">\r\n <ng-container *ngIf=\"tree.text\">\r\n <ng-container *ngIf=\"tree.grammarMeta && gramCheck\">\r\n <mat-menu #menu=\"matMenu\" class=\"grammar-check-menu\">\r\n <div class=\"title\">\r\n {{'GRAMMAR_CHECK_MENU.TITLE' | translate}}\r\n </div>\r\n <div *ngFor=\"let replacement of tree.grammarMeta.replacements\">\r\n <button mat-button color=\"accent\" (click)=\"replace(tree, replacement)\">\r\n {{replacement}}\r\n </button>\r\n </div>\r\n </mat-menu>\r\n <span #menuTrigger=\"matMenuTrigger\" [matMenuTriggerFor]=\"menu\" class=\"{{tree.class}}\"\r\n [innerHTML]=\"tree.text\" (mouseenter)=\"mouseEnter($event)\" (click)=\"gramCheckMenu(tree, menuTrigger)\"\r\n (mouseleave)=\"mouseLeave($event)\"></span>\r\n\r\n </ng-container>\r\n <ng-container *ngIf=\"!(tree.grammarMeta && gramCheck)\">\r\n <span class=\"{{tree.class}}\" [innerHTML]=\"tree.text\" (mouseenter)=\"mouseEnter($event)\"\r\n (mouseleave)=\"mouseLeave($event)\"></span>\r\n </ng-container>\r\n </ng-container>\r\n <!-- If text is empty and type is 'word', we should not break line. -->\r\n <ng-container *ngIf=\"!tree.text && tree.type !== wordType\">\r\n <br>\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"tree.children\">\r\n <span [ngClass]=\"{'selected-sentence': isSelectedSentence(tree)}\" class=\"highlight-tree-child-wrapper {{tree.class}}\"\r\n (mouseenter)=\"mouseEnter($event)\" (mouseleave)=\"mouseLeave($event)\" (click)=\"parentClick(tree)\">\r\n <ng-template ngFor let-child [ngForOf]=\"tree.children\">\r\n <ng-template [ngTemplateOutlet]=\"highlightTree\" [ngTemplateOutletContext]=\"{ tree: child }\">\r\n </ng-template>\r\n </ng-template>\r\n </span>\r\n </ng-container>\r\n</ng-template>\r\n\r\n\r\n\r\n<div *ngIf=\"tree\" class=\"tld-highlight-tree\">\r\n <ng-template [ngTemplateOutlet]=\"highlightTree\" [ngTemplateOutletContext]=\"{ tree: tree }\"></ng-template>\r\n</div>\r\n", styles: ["span{white-space:pre-wrap}\n"] }]
|
|
94
95
|
}], ctorParameters: function () { return [{ type: i1.TldHighlightService }]; }, propDecorators: { tree: [{
|
|
95
96
|
type: Input
|
|
96
97
|
}], isSource: [{
|
|
@@ -106,4 +107,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
|
|
|
106
107
|
}], onReplace: [{
|
|
107
108
|
type: Output
|
|
108
109
|
}] } });
|
|
109
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGlnaGxpZ2h0LXRyZWUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGxkLXRyYW5zbGF0ZS9zcmMvbGliL21vZHVsZXMvdGxkLXRleHQvY29tcG9uZW50cy9oaWdobGlnaHQtdHJlZS9oaWdobGlnaHQtdHJlZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90bGQtdHJhbnNsYXRlL3NyYy9saWIvbW9kdWxlcy90bGQtdGV4dC9jb21wb25lbnRzL2hpZ2hsaWdodC10cmVlL2hpZ2hsaWdodC10cmVlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFJdkUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHdDQUF3QyxDQUFDOzs7Ozs7OztBQVEzRSxNQUFNLE9BQU8sc0JBQXNCO0lBVWpDLFlBQTZCLGdCQUFxQztRQUFyQyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQXFCO1FBTnpELHVCQUFrQixHQUFZLElBQUksQ0FBQztRQUlsQyxjQUFTLEdBQTJDLElBQUksWUFBWSxFQUFFLENBQUM7SUFFWCxDQUFDO0lBRXZFLFVBQVUsQ0FBQyxLQUFpQjtRQUMxQixJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFRCxVQUFVLENBQUMsS0FBaUI7UUFDMUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRUQsYUFBYSxDQUFDLElBQW9C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eEQsTUFBTSxFQUFFLFNBQVMsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLGdCQUFnQixDQUFDLENBQUM7YUFDekQ7aUJBQ0k7Z0JBQ0gsT0FBTyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLGdCQUFnQixDQUFDLENBQUM7Z0JBQzNELE1BQU0sRUFBRSxTQUFTLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO2FBQzVEO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sc0JBQXNCLENBQUMsT0FBWTtRQUN6QyxNQUFNLG1CQUFtQixHQUFHLENBQUMsQ0FBQztRQUM5QixJQUFJLE1BQU0sR0FBRyxPQUFPLENBQUMsYUFBYSxDQUFDO1FBQ25DLEtBQUssSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEtBQUssR0FBRyxtQkFBbUIsRUFBRSxLQUFLLEVBQUUsRUFBRTtZQUN4RCxJQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxhQUFhLENBQUMsRUFBQztnQkFDMUQsT0FBTyxNQUFNLENBQUM7YUFDZjtZQUNELE1BQU0sR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDO1NBQy9CO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDOzttSEE1RlUsc0JBQXNCO3VHQUF0QixzQkFBc0IsMlFDYm5DLHN5RUEyQ007MkZEOUJPLHNCQUFzQjtrQkFMbEMsU0FBUzsrQkFDRSxvQkFBb0I7MEdBTXJCLElBQUk7c0JBQVosS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDSSxTQUFTO3NCQUFsQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTWF0TWVudVRyaWdnZXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9tZW51JztcclxuaW1wb3J0IHsgVGxkSGlnaGxpZ2h0U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3RsZC1jb21tb24vc2VydmljZXMnO1xyXG5pbXBvcnQgeyBJR3JhbW1hckNoZWNrUmVwbGFjZW1lbnQgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ3JhbW1hci1jaGVjay1yZXBsYWNlbWVudC5tb2RlbCc7XHJcbmltcG9ydCB7IEhpZ2hsaWdodFBhcmFtcyB9IGZyb20gJy4uLy4uL21vZGVscy9oaWdobGlnaHQtcGFyYW1zLm1vZGVsJztcclxuaW1wb3J0IHsgSGlnaGxpZ2h0VHJlZVR5cGUgfSBmcm9tICcuLi8uLi9tb2RlbHMvaGlnaGxpZ2h0LXRyZWUtdHlwZS5tb2RlbCc7XHJcbmltcG9ydCB7IElIaWdobGlnaHRUcmVlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2hpZ2hsaWdodC10cmVlLm1vZGVsJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAndGxkLWhpZ2hsaWdodC10cmVlJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vaGlnaGxpZ2h0LXRyZWUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2hpZ2hsaWdodC10cmVlLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIEhpZ2hsaWdodFRyZWVDb21wb25lbnQge1xyXG5cclxuICBASW5wdXQoKSB0cmVlOiBJSGlnaGxpZ2h0VHJlZTtcclxuICBASW5wdXQoKSBpc1NvdXJjZTogYm9vbGVhbjtcclxuICBASW5wdXQoKSBjb3JyZWN0aW9uc0VuYWJsZWQ6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIGhpZ2hsaWdodDogYm9vbGVhbjtcclxuICBASW5wdXQoKSBncmFtQ2hlY2s6IGJvb2xlYW47XHJcbiAgQElucHV0KCkgc2VsZWN0U2VudGVuY2U6IGJvb2xlYW47XHJcbiAgQE91dHB1dCgpIG9uUmVwbGFjZTogRXZlbnRFbWl0dGVyPElHcmFtbWFyQ2hlY2tSZXBsYWNlbWVudD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgaGlnaGxpZ2h0U2VydmljZTogVGxkSGlnaGxpZ2h0U2VydmljZSkgeyB9XHJcblxyXG4gIG1vdXNlRW50ZXIoZXZlbnQ6IE1vdXNlRXZlbnQpIHtcclxuICAgIHRoaXMub25Nb3VzZUV2ZW50KGV2ZW50LCB0aGlzLmlzU291cmNlLCB0cnVlKTtcclxuICB9XHJcblxyXG4gIG1vdXNlTGVhdmUoZXZlbnQ6IE1vdXNlRXZlbnQpIHtcclxuICAgIHRoaXMub25Nb3VzZUV2ZW50KGV2ZW50LCB0aGlzLmlzU291cmNlLCBmYWxzZSk7XHJcbiAgfVxyXG5cclxuICBncmFtQ2hlY2tNZW51KHRyZWU6IElIaWdobGlnaHRUcmVlLCBtZW51VHJpZ2dlcj86IE1hdE1lbnVUcmlnZ2VyKSB7XHJcbiAgICBpZiAodHJlZS5ncmFtbWFyTWV0YSAmJiB0aGlzLmdyYW1DaGVjaykge1xyXG4gICAgICBtZW51VHJpZ2dlci5vcGVuTWVudSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVwbGFjZSh0cmVlOiBJSGlnaGxpZ2h0VHJlZSwgcmVwbGFjZW1lbnQ6IHN0cmluZykge1xyXG4gICAgdGhpcy5vblJlcGxhY2UubmV4dCh7XHJcbiAgICAgIGVuZEl4OiB0cmVlLmdyYW1tYXJNZXRhLmVuZEl4LFxyXG4gICAgICBwYXJhZ3JhcGhJeDogdHJlZS5wYXJhZ3JhcGhJeCA/PyB0cmVlLnJvb3Q/LnBhcmFncmFwaEl4LFxyXG4gICAgICByZXBsYWNlbWVudDogcmVwbGFjZW1lbnQsXHJcbiAgICAgIHN0YXJ0SXg6IHRyZWUuZ3JhbW1hck1ldGEuc3RhcnRJeFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwYXJlbnRDbGljayh0cmVlOiBJSGlnaGxpZ2h0VHJlZSkge1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0U2VudGVuY2UgJiYgdHJlZS50eXBlID09PSBIaWdobGlnaHRUcmVlVHlwZS5TRU5URU5DRSkge1xyXG4gICAgICB0aGlzLmhpZ2hsaWdodFNlcnZpY2UuY2hhbmdlU2VsZWN0ZWRUYXJnZXRTZW50ZW5jZSh7IHBhcmFncmFwaEl4OiB0cmVlLnBhcmFncmFwaEl4ID8/IHRyZWUucm9vdD8ucGFyYWdyYXBoSXgsIHNlbnRlbmNlSXg6IE51bWJlcih0cmVlLmVsZW1lbnRJZCkgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpc1NlbGVjdGVkU2VudGVuY2UodHJlZTogSUhpZ2hsaWdodFRyZWUpIHtcclxuICAgIHJldHVybiB0aGlzLnNlbGVjdFNlbnRlbmNlICYmIHRyZWUudHlwZSA9PT0gSGlnaGxpZ2h0VHJlZVR5cGUuU0VOVEVOQ0VcclxuICAgICAgJiYgdGhpcy5oaWdobGlnaHRTZXJ2aWNlLnNlbGVjdGVkVGFyZ2V0U2VudGVuY2U/LnBhcmFncmFwaEl4ID09PSAodHJlZS5wYXJhZ3JhcGhJeCA/PyB0cmVlLnJvb3Q/LnBhcmFncmFwaEl4KVxyXG4gICAgICAmJiB0aGlzLmhpZ2hsaWdodFNlcnZpY2Uuc2VsZWN0ZWRUYXJnZXRTZW50ZW5jZS5zZW50ZW5jZUl4LnRvU3RyaW5nKCkgPT09IHRyZWUuZWxlbWVudElkO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBvbk1vdXNlRXZlbnQoZXZlbnQ6IE1vdXNlRXZlbnQsIGlzU291cmNlOiBib29sZWFuLCBpc01vdXNlRW50ZXI6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIGNvbnN0IGVsZW1lbnQgPSBldmVudC50YXJnZXQgYXMgRWxlbWVudDtcclxuICAgIGxldCBlbGVtZW50V2l0aFNpYmxpbmdzID0gW2VsZW1lbnRdO1xyXG5cclxuICAgIGlmICh0aGlzLmhpZ2hsaWdodCkge1xyXG4gICAgICBsZXQgc2libGluZ1BhcmVudENsYXNzOiBzdHJpbmc7XHJcbiAgICAgIGlmIChpc1NvdXJjZSkge1xyXG4gICAgICAgIHNpYmxpbmdQYXJlbnRDbGFzcyA9IEhpZ2hsaWdodFBhcmFtcy50YXJnZXRIaWdobGlnaHRDbGFzcztcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBzaWJsaW5nUGFyZW50Q2xhc3MgPSBIaWdobGlnaHRQYXJhbXMuc291cmNlSGlnaGxpZ2h0Q2xhc3M7XHJcbiAgICAgIH1cclxuICAgICAgZWxlbWVudC5jbGFzc0xpc3QuZm9yRWFjaCgoY2xhc3NOYW1lOiBzdHJpbmcpID0+IHtcclxuICAgICAgICBpZiAoY2xhc3NOYW1lLmluY2x1ZGVzKEhpZ2hsaWdodFBhcmFtcy5zaWJsaW5nQ2xhc3MpKSB7XHJcbiAgICAgICAgICBjb25zdCBxdWVyeVNlbGVjdG9yID0gYC4ke3NpYmxpbmdQYXJlbnRDbGFzc30gLiR7Y2xhc3NOYW1lLnJlcGxhY2UoSGlnaGxpZ2h0UGFyYW1zLnNpYmxpbmdDbGFzcywgSGlnaGxpZ2h0UGFyYW1zLndvcmRDbGFzcyl9YDtcclxuICAgICAgICAgIGVsZW1lbnRXaXRoU2libGluZ3MgPSBlbGVtZW50V2l0aFNpYmxpbmdzLmNvbmNhdChBcnJheS5mcm9tKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwocXVlcnlTZWxlY3RvcikpKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGVsZW1lbnRXaXRoU2libGluZ3MuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xyXG4gICAgICAvLyBuZWNlc3NhcnkgdG8gaGlnaGxpZ2h0IGFsc28gc2libGluZyBzZW50ZW5jZSwgbm90IG9ubHkgc2libGluZy5cclxuICAgICAgbGV0IHBhcmVudCA9IHRoaXMuZmluZFdvcmRQYXJlbnRTZW50ZW5jZShlbGVtZW50KTtcclxuXHJcbiAgICAgIGlmIChpc01vdXNlRW50ZXIpIHtcclxuICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5hZGQoSGlnaGxpZ2h0UGFyYW1zLmhvdmVyZWRDbGFzc05hbWUpO1xyXG4gICAgICAgIHBhcmVudD8uY2xhc3NMaXN0LmFkZChIaWdobGlnaHRQYXJhbXMuaG92ZXJlZENsYXNzTmFtZSk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKEhpZ2hsaWdodFBhcmFtcy5ob3ZlcmVkQ2xhc3NOYW1lKTtcclxuICAgICAgICBwYXJlbnQ/LmNsYXNzTGlzdC5yZW1vdmUoSGlnaGxpZ2h0UGFyYW1zLmhvdmVyZWRDbGFzc05hbWUpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZmluZFdvcmRQYXJlbnRTZW50ZW5jZShlbGVtZW50OiBhbnkpe1xyXG4gICAgY29uc3QgbWF4RGlzdGFuY2VUb1BhcmVudCA9IDI7XHJcbiAgICBsZXQgcGFyZW50ID0gZWxlbWVudC5wYXJlbnRFbGVtZW50O1xyXG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IG1heERpc3RhbmNlVG9QYXJlbnQ7IGluZGV4KyspIHtcclxuICAgICAgaWYocGFyZW50LmNsYXNzTGlzdC5jb250YWlucyhIaWdobGlnaHRQYXJhbXMuc2VudGVuY2VDbGFzcykpe1xyXG4gICAgICAgIHJldHVybiBwYXJlbnQ7XHJcbiAgICAgIH1cclxuICAgICAgcGFyZW50ID0gcGFyZW50LnBhcmVudEVsZW1lbnQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcbn1cclxuIiwiPG5nLXRlbXBsYXRlICNoaWdobGlnaHRUcmVlIGxldC10cmVlPVwidHJlZVwiPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiF0cmVlLmNoaWxkcmVuXCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRyZWUudGV4dFwiPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidHJlZS5ncmFtbWFyTWV0YSAmJiBncmFtQ2hlY2tcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtbWVudSAjbWVudT1cIm1hdE1lbnVcIiBjbGFzcz1cImdyYW1tYXItY2hlY2stbWVudVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eydHUkFNTUFSX0NIRUNLX01FTlUuVElUTEUnIHwgdHJhbnNsYXRlfX1cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCByZXBsYWNlbWVudCBvZiB0cmVlLmdyYW1tYXJNZXRhLnJlcGxhY2VtZW50c1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gY29sb3I9XCJhY2NlbnRcIiAoY2xpY2spPVwicmVwbGFjZSh0cmVlLCByZXBsYWNlbWVudClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7cmVwbGFjZW1lbnR9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvbWF0LW1lbnU+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiAjbWVudVRyaWdnZXI9XCJtYXRNZW51VHJpZ2dlclwiIFttYXRNZW51VHJpZ2dlckZvcl09XCJtZW51XCIgY2xhc3M9XCJ7e3RyZWUuY2xhc3N9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2lubmVySFRNTF09XCJ0cmVlLnRleHRcIiAobW91c2VlbnRlcik9XCJtb3VzZUVudGVyKCRldmVudClcIiAoY2xpY2spPVwiZ3JhbUNoZWNrTWVudSh0cmVlLCBtZW51VHJpZ2dlcilcIlxyXG4gICAgICAgICAgICAgICAgICAgIChtb3VzZWxlYXZlKT1cIm1vdXNlTGVhdmUoJGV2ZW50KVwiPjwvc3Bhbj5cclxuXHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiISh0cmVlLmdyYW1tYXJNZXRhICYmIGdyYW1DaGVjaylcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwie3t0cmVlLmNsYXNzfX1cIiBbaW5uZXJIVE1MXT1cInRyZWUudGV4dFwiIChtb3VzZWVudGVyKT1cIm1vdXNlRW50ZXIoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKG1vdXNlbGVhdmUpPVwibW91c2VMZWF2ZSgkZXZlbnQpXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXRyZWUudGV4dFwiPlxyXG4gICAgICAgICAgICA8YnI+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0cmVlLmNoaWxkcmVuXCI+XHJcbiAgICAgICAgPHNwYW4gW25nQ2xhc3NdPVwieydzZWxlY3RlZC1zZW50ZW5jZSc6IGlzU2VsZWN0ZWRTZW50ZW5jZSh0cmVlKX1cIiBjbGFzcz1cImhpZ2hsaWdodC10cmVlLWNoaWxkLXdyYXBwZXIge3t0cmVlLmNsYXNzfX1cIlxyXG4gICAgICAgICAgICAobW91c2VlbnRlcik9XCJtb3VzZUVudGVyKCRldmVudClcIiAobW91c2VsZWF2ZSk9XCJtb3VzZUxlYXZlKCRldmVudClcIiAoY2xpY2spPVwicGFyZW50Q2xpY2sodHJlZSlcIj5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG5nRm9yIGxldC1jaGlsZCBbbmdGb3JPZl09XCJ0cmVlLmNoaWxkcmVuXCI+XHJcbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwiaGlnaGxpZ2h0VHJlZVwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IHRyZWU6IGNoaWxkIH1cIj5cclxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgPC9zcGFuPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG5cclxuXHJcbjxkaXYgKm5nSWY9XCJ0cmVlXCIgY2xhc3M9XCJ0bGQtaGlnaGxpZ2h0LXRyZWVcIj5cclxuICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJoaWdobGlnaHRUcmVlXCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgdHJlZTogdHJlZSB9XCI+PC9uZy10ZW1wbGF0ZT5cclxuPC9kaXY+Il19
|
|
110
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGlnaGxpZ2h0LXRyZWUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGxkLXRyYW5zbGF0ZS9zcmMvbGliL21vZHVsZXMvdGxkLXRleHQvY29tcG9uZW50cy9oaWdobGlnaHQtdHJlZS9oaWdobGlnaHQtdHJlZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90bGQtdHJhbnNsYXRlL3NyYy9saWIvbW9kdWxlcy90bGQtdGV4dC9jb21wb25lbnRzL2hpZ2hsaWdodC10cmVlL2hpZ2hsaWdodC10cmVlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFJdkUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHdDQUF3QyxDQUFDOzs7Ozs7OztBQVEzRSxNQUFNLE9BQU8sc0JBQXNCO0lBWWpDLFlBQTZCLGdCQUFxQztRQUFyQyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQXFCO1FBUnpELHVCQUFrQixHQUFZLElBQUksQ0FBQztRQUlsQyxjQUFTLEdBQTJDLElBQUksWUFBWSxFQUFFLENBQUM7UUFFeEUsYUFBUSxHQUFHLGlCQUFpQixDQUFDLElBQUksQ0FBQztJQUUyQixDQUFDO0lBRXZFLFVBQVUsQ0FBQyxLQUFpQjtRQUMxQixJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFRCxVQUFVLENBQUMsS0FBaUI7UUFDMUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxLQUFLLENB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aXR0ZXIsIElucHV0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTWF0TWVudVRyaWdnZXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9tZW51JztcclxuaW1wb3J0IHsgVGxkSGlnaGxpZ2h0U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3RsZC1jb21tb24vc2VydmljZXMnO1xyXG5pbXBvcnQgeyBJR3JhbW1hckNoZWNrUmVwbGFjZW1lbnQgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ3JhbW1hci1jaGVjay1yZXBsYWNlbWVudC5tb2RlbCc7XHJcbmltcG9ydCB7IEhpZ2hsaWdodFBhcmFtcyB9IGZyb20gJy4uLy4uL21vZGVscy9oaWdobGlnaHQtcGFyYW1zLm1vZGVsJztcclxuaW1wb3J0IHsgSGlnaGxpZ2h0VHJlZVR5cGUgfSBmcm9tICcuLi8uLi9tb2RlbHMvaGlnaGxpZ2h0LXRyZWUtdHlwZS5tb2RlbCc7XHJcbmltcG9ydCB7IElIaWdobGlnaHRUcmVlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2hpZ2hsaWdodC10cmVlLm1vZGVsJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAndGxkLWhpZ2hsaWdodC10cmVlJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vaGlnaGxpZ2h0LXRyZWUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2hpZ2hsaWdodC10cmVlLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIEhpZ2hsaWdodFRyZWVDb21wb25lbnQge1xyXG5cclxuICBASW5wdXQoKSB0cmVlOiBJSGlnaGxpZ2h0VHJlZTtcclxuICBASW5wdXQoKSBpc1NvdXJjZTogYm9vbGVhbjtcclxuICBASW5wdXQoKSBjb3JyZWN0aW9uc0VuYWJsZWQ6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIGhpZ2hsaWdodDogYm9vbGVhbjtcclxuICBASW5wdXQoKSBncmFtQ2hlY2s6IGJvb2xlYW47XHJcbiAgQElucHV0KCkgc2VsZWN0U2VudGVuY2U6IGJvb2xlYW47XHJcbiAgQE91dHB1dCgpIG9uUmVwbGFjZTogRXZlbnRFbWl0dGVyPElHcmFtbWFyQ2hlY2tSZXBsYWNlbWVudD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIHJlYWRvbmx5IHdvcmRUeXBlID0gSGlnaGxpZ2h0VHJlZVR5cGUuV09SRDtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBoaWdobGlnaHRTZXJ2aWNlOiBUbGRIaWdobGlnaHRTZXJ2aWNlKSB7IH1cclxuXHJcbiAgbW91c2VFbnRlcihldmVudDogTW91c2VFdmVudCkge1xyXG4gICAgdGhpcy5vbk1vdXNlRXZlbnQoZXZlbnQsIHRoaXMuaXNTb3VyY2UsIHRydWUpO1xyXG4gIH1cclxuXHJcbiAgbW91c2VMZWF2ZShldmVudDogTW91c2VFdmVudCkge1xyXG4gICAgdGhpcy5vbk1vdXNlRXZlbnQoZXZlbnQsIHRoaXMuaXNTb3VyY2UsIGZhbHNlKTtcclxuICB9XHJcblxyXG4gIGdyYW1DaGVja01lbnUodHJlZTogSUhpZ2hsaWdodFRyZWUsIG1lbnVUcmlnZ2VyPzogTWF0TWVudVRyaWdnZXIpIHtcclxuICAgIGlmICh0cmVlLmdyYW1tYXJNZXRhICYmIHRoaXMuZ3JhbUNoZWNrKSB7XHJcbiAgICAgIG1lbnVUcmlnZ2VyLm9wZW5NZW51KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXBsYWNlKHRyZWU6IElIaWdobGlnaHRUcmVlLCByZXBsYWNlbWVudDogc3RyaW5nKSB7XHJcbiAgICB0aGlzLm9uUmVwbGFjZS5uZXh0KHtcclxuICAgICAgZW5kSXg6IHRyZWUuZ3JhbW1hck1ldGEuZW5kSXgsXHJcbiAgICAgIHBhcmFncmFwaEl4OiB0cmVlLnBhcmFncmFwaEl4ID8/IHRyZWUucm9vdD8ucGFyYWdyYXBoSXgsXHJcbiAgICAgIHJlcGxhY2VtZW50OiByZXBsYWNlbWVudCxcclxuICAgICAgc3RhcnRJeDogdHJlZS5ncmFtbWFyTWV0YS5zdGFydEl4XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHBhcmVudENsaWNrKHRyZWU6IElIaWdobGlnaHRUcmVlKSB7XHJcbiAgICBpZiAodGhpcy5zZWxlY3RTZW50ZW5jZSAmJiB0cmVlLnR5cGUgPT09IEhpZ2hsaWdodFRyZWVUeXBlLlNFTlRFTkNFKSB7XHJcbiAgICAgIHRoaXMuaGlnaGxpZ2h0U2VydmljZS5jaGFuZ2VTZWxlY3RlZFRhcmdldFNlbnRlbmNlKHsgcGFyYWdyYXBoSXg6IHRyZWUucGFyYWdyYXBoSXggPz8gdHJlZS5yb290Py5wYXJhZ3JhcGhJeCwgc2VudGVuY2VJeDogTnVtYmVyKHRyZWUuZWxlbWVudElkKSB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGlzU2VsZWN0ZWRTZW50ZW5jZSh0cmVlOiBJSGlnaGxpZ2h0VHJlZSkge1xyXG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0U2VudGVuY2UgJiYgdHJlZS50eXBlID09PSBIaWdobGlnaHRUcmVlVHlwZS5TRU5URU5DRVxyXG4gICAgICAmJiB0aGlzLmhpZ2hsaWdodFNlcnZpY2Uuc2VsZWN0ZWRUYXJnZXRTZW50ZW5jZT8ucGFyYWdyYXBoSXggPT09ICh0cmVlLnBhcmFncmFwaEl4ID8/IHRyZWUucm9vdD8ucGFyYWdyYXBoSXgpXHJcbiAgICAgICYmIHRoaXMuaGlnaGxpZ2h0U2VydmljZS5zZWxlY3RlZFRhcmdldFNlbnRlbmNlLnNlbnRlbmNlSXgudG9TdHJpbmcoKSA9PT0gdHJlZS5lbGVtZW50SWQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG9uTW91c2VFdmVudChldmVudDogTW91c2VFdmVudCwgaXNTb3VyY2U6IGJvb2xlYW4sIGlzTW91c2VFbnRlcjogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgY29uc3QgZWxlbWVudCA9IGV2ZW50LnRhcmdldCBhcyBFbGVtZW50O1xyXG4gICAgbGV0IGVsZW1lbnRXaXRoU2libGluZ3MgPSBbZWxlbWVudF07XHJcblxyXG4gICAgaWYgKHRoaXMuaGlnaGxpZ2h0KSB7XHJcbiAgICAgIGxldCBzaWJsaW5nUGFyZW50Q2xhc3M6IHN0cmluZztcclxuICAgICAgaWYgKGlzU291cmNlKSB7XHJcbiAgICAgICAgc2libGluZ1BhcmVudENsYXNzID0gSGlnaGxpZ2h0UGFyYW1zLnRhcmdldEhpZ2hsaWdodENsYXNzO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHNpYmxpbmdQYXJlbnRDbGFzcyA9IEhpZ2hsaWdodFBhcmFtcy5zb3VyY2VIaWdobGlnaHRDbGFzcztcclxuICAgICAgfVxyXG4gICAgICBlbGVtZW50LmNsYXNzTGlzdC5mb3JFYWNoKChjbGFzc05hbWU6IHN0cmluZykgPT4ge1xyXG4gICAgICAgIGlmIChjbGFzc05hbWUuaW5jbHVkZXMoSGlnaGxpZ2h0UGFyYW1zLnNpYmxpbmdDbGFzcykpIHtcclxuICAgICAgICAgIGNvbnN0IHF1ZXJ5U2VsZWN0b3IgPSBgLiR7c2libGluZ1BhcmVudENsYXNzfSAuJHtjbGFzc05hbWUucmVwbGFjZShIaWdobGlnaHRQYXJhbXMuc2libGluZ0NsYXNzLCBIaWdobGlnaHRQYXJhbXMud29yZENsYXNzKX1gO1xyXG4gICAgICAgICAgZWxlbWVudFdpdGhTaWJsaW5ncyA9IGVsZW1lbnRXaXRoU2libGluZ3MuY29uY2F0KEFycmF5LmZyb20oZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChxdWVyeVNlbGVjdG9yKSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxlbWVudFdpdGhTaWJsaW5ncy5mb3JFYWNoKChlbGVtZW50KSA9PiB7XHJcbiAgICAgIC8vIG5lY2Vzc2FyeSB0byBoaWdobGlnaHQgYWxzbyBzaWJsaW5nIHNlbnRlbmNlLCBub3Qgb25seSBzaWJsaW5nLlxyXG4gICAgICBsZXQgcGFyZW50ID0gdGhpcy5maW5kV29yZFBhcmVudFNlbnRlbmNlKGVsZW1lbnQpO1xyXG5cclxuICAgICAgaWYgKGlzTW91c2VFbnRlcikge1xyXG4gICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZChIaWdobGlnaHRQYXJhbXMuaG92ZXJlZENsYXNzTmFtZSk7XHJcbiAgICAgICAgcGFyZW50Py5jbGFzc0xpc3QuYWRkKEhpZ2hsaWdodFBhcmFtcy5ob3ZlcmVkQ2xhc3NOYW1lKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoSGlnaGxpZ2h0UGFyYW1zLmhvdmVyZWRDbGFzc05hbWUpO1xyXG4gICAgICAgIHBhcmVudD8uY2xhc3NMaXN0LnJlbW92ZShIaWdobGlnaHRQYXJhbXMuaG92ZXJlZENsYXNzTmFtZSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBmaW5kV29yZFBhcmVudFNlbnRlbmNlKGVsZW1lbnQ6IGFueSl7XHJcbiAgICBjb25zdCBtYXhEaXN0YW5jZVRvUGFyZW50ID0gMjtcclxuICAgIGxldCBwYXJlbnQgPSBlbGVtZW50LnBhcmVudEVsZW1lbnQ7XHJcbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgbWF4RGlzdGFuY2VUb1BhcmVudDsgaW5kZXgrKykge1xyXG4gICAgICBpZihwYXJlbnQuY2xhc3NMaXN0LmNvbnRhaW5zKEhpZ2hsaWdodFBhcmFtcy5zZW50ZW5jZUNsYXNzKSl7XHJcbiAgICAgICAgcmV0dXJuIHBhcmVudDtcclxuICAgICAgfVxyXG4gICAgICBwYXJlbnQgPSBwYXJlbnQucGFyZW50RWxlbWVudDtcclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxufVxyXG4iLCI8bmctdGVtcGxhdGUgI2hpZ2hsaWdodFRyZWUgbGV0LXRyZWU9XCJ0cmVlXCI+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXRyZWUuY2hpbGRyZW5cIj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidHJlZS50ZXh0XCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0cmVlLmdyYW1tYXJNZXRhICYmIGdyYW1DaGVja1wiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1tZW51ICNtZW51PVwibWF0TWVudVwiIGNsYXNzPVwiZ3JhbW1hci1jaGVjay1tZW51XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7J0dSQU1NQVJfQ0hFQ0tfTUVOVS5USVRMRScgfCB0cmFuc2xhdGV9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IHJlcGxhY2VtZW50IG9mIHRyZWUuZ3JhbW1hck1ldGEucmVwbGFjZW1lbnRzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiBjb2xvcj1cImFjY2VudFwiIChjbGljayk9XCJyZXBsYWNlKHRyZWUsIHJlcGxhY2VtZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3tyZXBsYWNlbWVudH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9tYXQtbWVudT5cclxuICAgICAgICAgICAgICAgIDxzcGFuICNtZW51VHJpZ2dlcj1cIm1hdE1lbnVUcmlnZ2VyXCIgW21hdE1lbnVUcmlnZ2VyRm9yXT1cIm1lbnVcIiBjbGFzcz1cInt7dHJlZS5jbGFzc319XCJcclxuICAgICAgICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cInRyZWUudGV4dFwiIChtb3VzZWVudGVyKT1cIm1vdXNlRW50ZXIoJGV2ZW50KVwiIChjbGljayk9XCJncmFtQ2hlY2tNZW51KHRyZWUsIG1lbnVUcmlnZ2VyKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKG1vdXNlbGVhdmUpPVwibW91c2VMZWF2ZSgkZXZlbnQpXCI+PC9zcGFuPlxyXG5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhKHRyZWUuZ3JhbW1hck1ldGEgJiYgZ3JhbUNoZWNrKVwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ7e3RyZWUuY2xhc3N9fVwiIFtpbm5lckhUTUxdPVwidHJlZS50ZXh0XCIgKG1vdXNlZW50ZXIpPVwibW91c2VFbnRlcigkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAobW91c2VsZWF2ZSk9XCJtb3VzZUxlYXZlKCRldmVudClcIj48L3NwYW4+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwhLS0gSWYgdGV4dCBpcyBlbXB0eSBhbmQgdHlwZSBpcyAnd29yZCcsIHdlIHNob3VsZCBub3QgYnJlYWsgbGluZS4gLS0+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiF0cmVlLnRleHQgJiYgdHJlZS50eXBlICE9PSB3b3JkVHlwZVwiPlxyXG4gICAgICAgICAgICA8YnI+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0cmVlLmNoaWxkcmVuXCI+XHJcbiAgICAgICAgPHNwYW4gW25nQ2xhc3NdPVwieydzZWxlY3RlZC1zZW50ZW5jZSc6IGlzU2VsZWN0ZWRTZW50ZW5jZSh0cmVlKX1cIiBjbGFzcz1cImhpZ2hsaWdodC10cmVlLWNoaWxkLXdyYXBwZXIge3t0cmVlLmNsYXNzfX1cIlxyXG4gICAgICAgICAgICAobW91c2VlbnRlcik9XCJtb3VzZUVudGVyKCRldmVudClcIiAobW91c2VsZWF2ZSk9XCJtb3VzZUxlYXZlKCRldmVudClcIiAoY2xpY2spPVwicGFyZW50Q2xpY2sodHJlZSlcIj5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG5nRm9yIGxldC1jaGlsZCBbbmdGb3JPZl09XCJ0cmVlLmNoaWxkcmVuXCI+XHJcbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwiaGlnaGxpZ2h0VHJlZVwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IHRyZWU6IGNoaWxkIH1cIj5cclxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgPC9zcGFuPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG5cclxuXHJcbjxkaXYgKm5nSWY9XCJ0cmVlXCIgY2xhc3M9XCJ0bGQtaGlnaGxpZ2h0LXRyZWVcIj5cclxuICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJoaWdobGlnaHRUcmVlXCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgdHJlZTogdHJlZSB9XCI+PC9uZy10ZW1wbGF0ZT5cclxuPC9kaXY+XHJcbiJdfQ==
|
|
@@ -78,8 +78,10 @@ export class TldTranslateTextApiService {
|
|
|
78
78
|
getSentence(text, sentenceRanges, wordRanges, paragraphIx) {
|
|
79
79
|
const tree = { text: text, children: [], paragraphIx, type: HighlightTreeType.PARAGRAPH, root: null, originalText: text };
|
|
80
80
|
const words = [];
|
|
81
|
-
let wordRangeIx = -1;
|
|
82
81
|
let lastProcessedCharIx = 0;
|
|
82
|
+
const wordRangesWithIndex = wordRanges.map((range, ix) => {
|
|
83
|
+
return { range, ix };
|
|
84
|
+
});
|
|
83
85
|
sentenceRanges.forEach((sentenceRange, sentenceIx) => {
|
|
84
86
|
const sentenceString = this.getSentenceFromRange(sentenceRange, text);
|
|
85
87
|
tree.children[sentenceIx] = {
|
|
@@ -92,69 +94,69 @@ export class TldTranslateTextApiService {
|
|
|
92
94
|
};
|
|
93
95
|
const sentenceStartIx = sentenceRange[0];
|
|
94
96
|
const sentenceEndIx = sentenceStartIx + sentenceRange[1];
|
|
97
|
+
const filteredWordRangesWithIndex = wordRangesWithIndex.filter((rangeWithIndex) => {
|
|
98
|
+
const wordStartIx = rangeWithIndex.range[0];
|
|
99
|
+
// on purpose, check only start index, because sometimes end index is not correct and aligned with sentences.
|
|
100
|
+
return wordStartIx >= sentenceStartIx && wordStartIx <= sentenceEndIx;
|
|
101
|
+
});
|
|
95
102
|
let multipleWordWrapper;
|
|
96
|
-
|
|
97
|
-
const
|
|
98
|
-
const
|
|
99
|
-
const
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
// not a word.
|
|
107
|
-
const escaped = Common.escapeHtmlString(originalText);
|
|
108
|
-
tree.children[sentenceIx].children.push({
|
|
109
|
-
text: escaped,
|
|
110
|
-
type: HighlightTreeType.OTHER,
|
|
111
|
-
root: tree,
|
|
112
|
-
originalText
|
|
113
|
-
});
|
|
114
|
-
lastProcessedCharIx = wordStartIx;
|
|
115
|
-
}
|
|
116
|
-
const originalText = text.slice(wordStartIx, wordEndIx);
|
|
103
|
+
filteredWordRangesWithIndex.forEach((rangeWithIndex) => {
|
|
104
|
+
const wordRange = rangeWithIndex.range;
|
|
105
|
+
const wordStartIx = wordRange[0];
|
|
106
|
+
const wordEndIx = wordRange[1];
|
|
107
|
+
const nextWordStartIx = wordRanges[rangeWithIndex.ix + 1]?.[0];
|
|
108
|
+
if (lastProcessedCharIx < wordStartIx) {
|
|
109
|
+
// words are not together anymore.
|
|
110
|
+
multipleWordWrapper = null;
|
|
111
|
+
const originalText = text.slice(lastProcessedCharIx, wordStartIx);
|
|
112
|
+
// not a word.
|
|
117
113
|
const escaped = Common.escapeHtmlString(originalText);
|
|
118
|
-
|
|
119
|
-
const word = {
|
|
114
|
+
tree.children[sentenceIx].children.push({
|
|
120
115
|
text: escaped,
|
|
121
|
-
|
|
122
|
-
elementId: elementId,
|
|
123
|
-
type: originalText === "-" ? HighlightTreeType.HYPEN : HighlightTreeType.WORD,
|
|
116
|
+
type: HighlightTreeType.OTHER,
|
|
124
117
|
root: tree,
|
|
125
118
|
originalText
|
|
126
|
-
};
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
multipleWordWrapper
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
119
|
+
});
|
|
120
|
+
lastProcessedCharIx = wordStartIx;
|
|
121
|
+
}
|
|
122
|
+
const originalText = text.slice(wordStartIx, wordEndIx);
|
|
123
|
+
const escaped = Common.escapeHtmlString(originalText);
|
|
124
|
+
const elementId = `${paragraphIx}-${sentenceIx}-${rangeWithIndex.ix}`;
|
|
125
|
+
const word = {
|
|
126
|
+
text: escaped,
|
|
127
|
+
class: `${HighlightParams.wordClass} ${HighlightParams.wordClass}-${elementId}`,
|
|
128
|
+
elementId: elementId,
|
|
129
|
+
type: originalText === "-" ? HighlightTreeType.HYPEN : HighlightTreeType.WORD,
|
|
130
|
+
root: tree,
|
|
131
|
+
originalText
|
|
132
|
+
};
|
|
133
|
+
if (word.type === HighlightTreeType.HYPEN) {
|
|
134
|
+
multipleWordWrapper = null;
|
|
135
|
+
}
|
|
136
|
+
else if (wordEndIx === nextWordStartIx) {
|
|
137
|
+
if (!multipleWordWrapper) {
|
|
138
|
+
multipleWordWrapper = {
|
|
139
|
+
originalText: "",
|
|
140
|
+
root: tree,
|
|
141
|
+
text: "",
|
|
142
|
+
type: HighlightTreeType.WORD_WRAPPER,
|
|
143
|
+
children: [],
|
|
144
|
+
class: HighlightParams.multipleWordWrapper
|
|
145
|
+
};
|
|
146
|
+
tree.children[sentenceIx].children.push(multipleWordWrapper);
|
|
150
147
|
}
|
|
151
|
-
|
|
152
|
-
|
|
148
|
+
}
|
|
149
|
+
if (multipleWordWrapper) {
|
|
150
|
+
multipleWordWrapper.originalText += originalText;
|
|
151
|
+
multipleWordWrapper.text += escaped;
|
|
152
|
+
multipleWordWrapper.children.push(word);
|
|
153
153
|
}
|
|
154
154
|
else {
|
|
155
|
-
|
|
155
|
+
tree.children[sentenceIx].children.push(word);
|
|
156
156
|
}
|
|
157
|
-
|
|
157
|
+
words.push(word);
|
|
158
|
+
lastProcessedCharIx = wordEndIx;
|
|
159
|
+
});
|
|
158
160
|
});
|
|
159
161
|
return { tree, words };
|
|
160
162
|
}
|
|
@@ -184,4 +186,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
|
|
|
184
186
|
providedIn: 'root'
|
|
185
187
|
}]
|
|
186
188
|
}], ctorParameters: function () { return [{ type: i1.TldTermCollectionsService }, { type: i2.HttpClient }, { type: i3.TldTranslateConfigService }, { type: i3.TldAlertService }]; } });
|
|
187
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGxkLXRyYW5zbGF0ZS10ZXh0LWFwaS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGxkLXRyYW5zbGF0ZS9zcmMvbGliL21vZHVsZXMvdGxkLXRleHQvc2VydmljZXMvYXBpL3RsZC10cmFuc2xhdGUtdGV4dC1hcGkuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyQyxPQUFPLEVBQUUsTUFBTSxFQUFpRSxNQUFNLDRCQUE0QixDQUFDO0FBSW5ILE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUN0RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQzs7Ozs7QUFRM0UsTUFBTSxPQUFPLDBCQUEwQjtJQUVyQyxZQUE2QixpQkFBNEMsRUFDdEQsSUFBZ0IsRUFDaEIsTUFBaUMsRUFDakMsTUFBdUI7UUFIYixzQkFBaUIsR0FBakIsaUJBQWlCLENBQTJCO1FBQ3RELFNBQUksR0FBSixJQUFJLENBQVk7UUFDaEIsV0FBTSxHQUFOLE1BQU0sQ0FBMkI7UUFDakMsV0FBTSxHQUFOLE1BQU0sQ0FBaUI7SUFBSSxDQUFDO0lBRS9DLGlCQUFpQixDQUFDLE9BQWUsRUFBRSxRQUFnQixFQUFFLElBQVksRUFBRSxXQUFtQjtRQUNwRixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxvQkFBb0IsQ0FBQztRQUN4RCxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNuRCxNQUFNLE1BQU0sR0FBRztZQUNiLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxLQUFL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Q0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3RELE1BQU0sR0FBRyxHQUFHLEtBQUssR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDN0IsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRU8sWUFBWSxDQUFDLGFBQXlCLEVBQUUsV0FBNkIsRUFBRSxXQUE2QjtRQUMxRyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDOUIsTUFBTSxZQUFZLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzlCLE1BQU0sWUFBWSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM5QixNQUFNLFVBQVUsR0FBRyxXQUFXLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDN0MsTUFBTSxVQUFVLEdBQUcsV0FBVyxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBRTdDLElBQUksVUFBVSxJQUFJLFVBQVUsRUFBRTtnQkFDNUIsVUFBVSxDQUFDLEtBQUssSUFBSSxJQUFJLGVBQWUsQ0FBQyxZQUFZLElBQUksVUFBVSxDQUFDLFNBQVMsRUFBRSxDQUFDO2dCQUMvRSxVQUFVLENBQUMsS0FBSyxJQUFJLElBQUksZUFBZSxDQUFDLFlBQVksSUFBSSxVQUFVLENBQUMsU0FBUyxFQUFFLENBQUM7YUFDaEY7UUFDSCxDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7O3VIQTFMVSwwQkFBMEI7MkhBQTFCLDBCQUEwQixjQUZ6QixNQUFNOzJGQUVQLDBCQUEwQjtrQkFIdEMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBDb21tb24sIElUbGRUcmFuc2xhdGVUZXh0QXBpU2VydmljZSwgSVRyYW5zbGF0ZVBhcmFncmFwaFJlcXVlc3RQYXJhbXMgfSBmcm9tICcuLi8uLi8uLi90bGQtY29tbW9uL21vZGVscyc7XHJcbmltcG9ydCB7IFRsZEFsZXJ0U2VydmljZSwgVGxkVHJhbnNsYXRlQ29uZmlnU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3RsZC1jb21tb24vc2VydmljZXMnO1xyXG5pbXBvcnQgeyBUbGRUZXJtQ29sbGVjdGlvbnNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vdGxkLXRlcm0vc2VydmljZXMnO1xyXG5pbXBvcnQgeyBJR2V0U2VudGVuY2VWMVJlc3BvbnNlTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ2V0LXNlbnRlbmNlLXYxLXJlc3BvbnNlLm1vZGVsJztcclxuaW1wb3J0IHsgSGlnaGxpZ2h0UGFyYW1zIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2hpZ2hsaWdodC1wYXJhbXMubW9kZWwnO1xyXG5pbXBvcnQgeyBIaWdobGlnaHRUcmVlVHlwZSB9IGZyb20gJy4uLy4uL21vZGVscy9oaWdobGlnaHQtdHJlZS10eXBlLm1vZGVsJztcclxuaW1wb3J0IHsgSUhpZ2hsaWdodFRyZWUgfSBmcm9tICcuLi8uLi9tb2RlbHMvaGlnaGxpZ2h0LXRyZWUubW9kZWwnO1xyXG5pbXBvcnQgeyBJVHJhbnNsYXRlUGFyYWdyYXBoUmVzcG9uc2VWMSB9IGZyb20gJy4uLy4uL21vZGVscy90cmFuc2xhdGUtcGFyYWdyYXBoLXJlc3BvbnNlLXYxLm1vZGVsJztcclxuaW1wb3J0IHsgSVRyYW5zbGF0ZVBhcmFncmFwaFJlc3BvbnNlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3RyYW5zbGF0ZS1wYXJhZ3JhcGgtcmVzcG9uc2UubW9kZWwnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgVGxkVHJhbnNsYXRlVGV4dEFwaVNlcnZpY2UgaW1wbGVtZW50cyBJVGxkVHJhbnNsYXRlVGV4dEFwaVNlcnZpY2Uge1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGNvbGxlY3Rpb25TZXJ2aWNlOiBUbGRUZXJtQ29sbGVjdGlvbnNTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBodHRwOiBIdHRwQ2xpZW50LFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBjb25maWc6IFRsZFRyYW5zbGF0ZUNvbmZpZ1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGFsZXJ0czogVGxkQWxlcnRTZXJ2aWNlKSB7IH1cclxuXHJcbiAgdXBkYXRlVHJhbnNsYXRpb24ob3B0aW9uczogc3RyaW5nLCBzeXN0ZW1JRDogc3RyaW5nLCB0ZXh0OiBzdHJpbmcsIHRyYW5zbGF0aW9uOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IHVybCA9IHRoaXMuY29uZmlnLnRleHRDb25maWcudXBkYXRlVHJhbnNsYXRpb25Vcmw7XHJcbiAgICBjb25zdCBoZWFkZXJzID0gQ29tbW9uLmdldEF1dGhIZWFkZXJzKHRoaXMuY29uZmlnKTtcclxuICAgIGNvbnN0IHBhcmFtcyA9IHtcclxuICAgICAgYXBwSUQ6IHRoaXMuY29uZmlnLmNvcmVDb25maWcuYXBwSWQsXHJcbiAgICAgIG9wdGlvbnMsXHJcbiAgICAgIHN5c3RlbUlELFxyXG4gICAgICB0ZXh0LFxyXG4gICAgICB0cmFuc2xhdGlvblxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KHVybCwgcGFyYW1zLCB7IGhlYWRlcnMgfSk7XHJcbiAgfVxyXG5cclxuICBkaWN0aW9uYXJ5VHJhbnNsYXRpb24odGV4dDogc3RyaW5nLCBzcmNDb2RlOiBzdHJpbmcsIHRyZ0NvZGU6IHN0cmluZykge1xyXG4gICAgY29uc3QgYXV0aEhlYWRlcnMgPSBDb21tb24uZ2V0QXV0aEhlYWRlcnModGhpcy5jb25maWcpO1xyXG4gICAgLy8gVE9ETy4gQ3JlYXRlIHR5cGUgZm9yIHBhcmFtcy5cclxuICAgIGNvbnN0IHBhcmFtczogYW55ID0ge1xyXG4gICAgICB3b3JkOiB0ZXh0LFxyXG4gICAgICBzb3VyY2VMYW5ndWFnZTogc3JjQ29kZSxcclxuICAgICAgdGFyZ2V0TGFuZ3VhZ2U6IHRyZ0NvZGVcclxuICAgIH07XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQodGhpcy5jb25maWcudGV4dENvbmZpZy5kaWN0aW9uYXJ5VXJsLCB7IGhlYWRlcnM6IGF1dGhIZWFkZXJzLCBwYXJhbXM6IHBhcmFtcyB9KVxyXG4gIH1cclxuXHJcbiAgdHJhbnNsYXRlUGFyYWdyYXBoKHJlcXVlc3RQYXJhbXM6IElUcmFuc2xhdGVQYXJhZ3JhcGhSZXF1ZXN0UGFyYW1zKTogT2JzZXJ2YWJsZTxJVHJhbnNsYXRlUGFyYWdyYXBoUmVzcG9uc2U+IHtcclxuICAgIGNvbnN0IGhlYWRlcnMgPSBDb21tb24uZ2V0QXV0aEhlYWRlcnModGhpcy5jb25maWcpO1xyXG4gICAgLy8gVE9ETy4gQ3JlYXRlIHR5cGUgZm9yIHBhcmFtcy5cclxuICAgIGNvbnN0IHBhcmFtczogYW55ID0ge1xyXG4gICAgICBhcHBJRDogdGhpcy5jb25maWcuY29yZUNvbmZpZy5hcHBJZCxcclxuICAgICAgb3B0aW9uczogXCJ3aWRnZXQ9dGV4dCxhbGlnbm1lbnQsbWFya1NlbnRlbmNlc1wiLFxyXG4gICAgICBzeXN0ZW1JRDogcmVxdWVzdFBhcmFtcy5zeXN0ZW0uaWQsXHJcbiAgICAgIHRleHQ6IHJlcXVlc3RQYXJhbXMudGV4dCxcclxuICAgIH07XHJcblxyXG4gICAgY29uc3Qgc2VsZWN0ZWRDb2xsZWN0aW9uSWQgPSB0aGlzLmNvbGxlY3Rpb25TZXJ2aWNlLnNlbGVjdGVkSWRGb3JUcmFuc2xhdGlvbigpO1xyXG4gICAgaWYgKHNlbGVjdGVkQ29sbGVjdGlvbklkKSB7XHJcbiAgICAgIHBhcmFtcy5vcHRpb25zICs9IGAsdGVybUNvcnB1c0lkPSR7c2VsZWN0ZWRDb2xsZWN0aW9uSWR9YDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJVHJhbnNsYXRlUGFyYWdyYXBoUmVzcG9uc2VWMT4odGhpcy5jb25maWc/LnRleHRDb25maWc/LnRyYW5zbGF0aW9uVXJsLCB7IGhlYWRlcnM6IGhlYWRlcnMsIHBhcmFtczogcGFyYW1zIH0pLnBpcGUoXHJcbiAgICAgIG1hcCgocmVzcG9uc2U6IElUcmFuc2xhdGVQYXJhZ3JhcGhSZXNwb25zZVYxKSA9PiB7XHJcbiAgICAgICAgaWYgKHJlc3BvbnNlLkVycm9yTWVzc2FnZSkge1xyXG4gICAgICAgICAgdGhpcy5hbGVydHMudW5oYW5kZWxlZEVycm9yKHJlc3BvbnNlLkVycm9yTWVzc2FnZSk7XHJcbiAgICAgICAgICB0aHJvdyByZXNwb25zZS5FcnJvck1lc3NhZ2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGNvbnZlcnRlZCA9IHRoaXMuY29udmVydFBhcmFncmFwaFJlc3BvbnNlKHJlcXVlc3RQYXJhbXMsIHJlc3BvbnNlKTtcclxuICAgICAgICByZXR1cm4gY29udmVydGVkO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG5cclxuICBwcml2YXRlIGNvbnZlcnRQYXJhZ3JhcGhSZXNwb25zZShyZXF1ZXN0OiBJVHJhbnNsYXRlUGFyYWdyYXBoUmVxdWVzdFBhcmFtcywgcmVzcG9uc2U6IElUcmFuc2xhdGVQYXJhZ3JhcGhSZXNwb25zZVYxKTogSVRyYW5zbGF0ZVBhcmFncmFwaFJlc3BvbnNlIHtcclxuICAgIGlmICh0aGlzLmNvbmZpZy50ZXh0Q29uZmlnLmhpZ2hsaWdodCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5jcmVhdGVIaWdobGlnaHRUcmVlcyhyZXF1ZXN0LnRleHQsIHJlc3BvbnNlLCByZXF1ZXN0LnBhcmFncmFwaEl4KTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIHNvdXJjZVRyZWU6IHsgdGV4dDogcmVxdWVzdC50ZXh0LCBwYXJhZ3JhcGhJeDogcmVxdWVzdC5wYXJhZ3JhcGhJeCwgdHlwZTogSGlnaGxpZ2h0VHJlZVR5cGUuUEFSQUdSQVBILCByb290OiBudWxsLCBvcmlnaW5hbFRleHQ6IHJlcXVlc3QudGV4dCB9LFxyXG4gICAgICAgIHRhcmdldFRyZWU6IHsgdGV4dDogcmVzcG9uc2UudHJhbnNsYXRpb24sIHBhcmFncmFwaEl4OiByZXF1ZXN0LnBhcmFncmFwaEl4LCB0eXBlOiBIaWdobGlnaHRUcmVlVHlwZS5QQVJBR1JBUEgsIHJvb3Q6IG51bGwsIG9yaWdpbmFsVGV4dDogcmVzcG9uc2UudHJhbnNsYXRpb24gfVxyXG4gICAgICB9O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVIaWdobGlnaHRUcmVlcyhzb3VyY2VUZXh0OiBzdHJpbmcsIHJlc3BvbnNlOiBJVHJhbnNsYXRlUGFyYWdyYXBoUmVzcG9uc2VWMSwgcGFyYWdyYXBoSXg6IG51bWJlcik6IElUcmFuc2xhdGVQYXJhZ3JhcGhSZXNwb25zZSB7XHJcbiAgICBjb25zdCB0YXJnZXRUcmVlID0gdGhpcy5nZXRTZW50ZW5jZShyZXNwb25zZS50cmFuc2xhdGlvbiwgcmVzcG9uc2UudHJhbnNsYXRpb25TZW50ZW5jZVJhbmdlcywgcmVzcG9uc2UudGFyZ2V0V29yZFJhbmdlcywgcGFyYWdyYXBoSXgpO1xyXG4gICAgY29uc3Qgc291cmNlVHJlZSA9IHRoaXMuZ2V0U2VudGVuY2Uoc291cmNlVGV4dCwgcmVzcG9uc2Uub3JpZ2luYWxTZW50ZW5jZVJhbmdlcywgcmVzcG9uc2Uuc291cmNlV29yZFJhbmdlcywgcGFyYWdyYXBoSXgpO1xyXG4gICAgdGhpcy5maW5kU2libGluZ3MocmVzcG9uc2Uud29yZEFsaWdubWVudCwgc291cmNlVHJlZS53b3JkcywgdGFyZ2V0VHJlZS53b3Jkcyk7XHJcbiAgICByZXR1cm4geyBzb3VyY2VUcmVlOiBzb3VyY2VUcmVlLnRyZWUsIHRhcmdldFRyZWU6IHRhcmdldFRyZWUudHJlZSB9O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRTZW50ZW5jZSh0ZXh0OiBzdHJpbmcsIHNlbnRlbmNlUmFuZ2VzOiBudW1iZXJbXVtdLCB3b3JkUmFuZ2VzOiBudW1iZXJbXVtdLCBwYXJhZ3JhcGhJeDogbnVtYmVyKTogSUdldFNlbnRlbmNlVjFSZXNwb25zZU1vZGVsIHtcclxuICAgIGNvbnN0IHRyZWU6IElIaWdobGlnaHRUcmVlID0geyB0ZXh0OiB0ZXh0LCBjaGlsZHJlbjogW10sIHBhcmFncmFwaEl4LCB0eXBlOiBIaWdobGlnaHRUcmVlVHlwZS5QQVJBR1JBUEgsIHJvb3Q6IG51bGwsIG9yaWdpbmFsVGV4dDogdGV4dCB9O1xyXG4gICAgY29uc3Qgd29yZHM6IElIaWdobGlnaHRUcmVlW10gPSBbXTtcclxuICAgIGxldCB3b3JkUmFuZ2VJeCA9IC0xO1xyXG4gICAgbGV0IGxhc3RQcm9jZXNzZWRDaGFySXggPSAwO1xyXG5cclxuICAgIHNlbnRlbmNlUmFuZ2VzLmZvckVhY2goKHNlbnRlbmNlUmFuZ2UsIHNlbnRlbmNlSXgpID0+IHtcclxuICAgICAgY29uc3Qgc2VudGVuY2VTdHJpbmcgPSB0aGlzLmdldFNlbnRlbmNlRnJvbVJhbmdlKHNlbnRlbmNlUmFuZ2UsIHRleHQpO1xyXG4gICAgICB0cmVlLmNoaWxkcmVuW3NlbnRlbmNlSXhdID0ge1xyXG4gICAgICAgIHRleHQ6IHNlbnRlbmNlU3RyaW5nLCBjaGlsZHJlbjogW10sXHJcbiAgICAgICAgY2xhc3M6IGAke0hpZ2hsaWdodFBhcmFtcy5zZW50ZW5jZUNsYXNzfSAke0hpZ2hsaWdodFBhcmFtcy5zZW50ZW5jZUNsYXNzfS0ke3BhcmFncmFwaEl4fS0ke3NlbnRlbmNlSXh9YCxcclxuICAgICAgICBlbGVtZW50SWQ6IHNlbnRlbmNlSXgudG9TdHJpbmcoKSxcclxuICAgICAgICB0eXBlOiBIaWdobGlnaHRUcmVlVHlwZS5TRU5URU5DRSxcclxuICAgICAgICByb290OiB0cmVlLFxyXG4gICAgICAgIG9yaWdpbmFsVGV4dDogc2VudGVuY2VTdHJpbmdcclxuICAgICAgfTtcclxuXHJcbiAgICAgIGNvbnN0IHNlbnRlbmNlU3RhcnRJeCA9IHNlbnRlbmNlUmFuZ2VbMF07XHJcbiAgICAgIGNvbnN0IHNlbnRlbmNlRW5kSXggPSBzZW50ZW5jZVN0YXJ0SXggKyBzZW50ZW5jZVJhbmdlWzFdO1xyXG5cclxuICAgICAgbGV0IG11bHRpcGxlV29yZFdyYXBwZXI6IElIaWdobGlnaHRUcmVlO1xyXG4gICAgICBmb3IgKGxldCB3b3JkSXggPSB3b3JkUmFuZ2VJeCArIDE7IHdvcmRJeCA8IHdvcmRSYW5nZXMubGVuZ3RoOyB3b3JkSXgrKykge1xyXG4gICAgICAgIGNvbnN0IHdvcmRTdGFydEl4ID0gd29yZFJhbmdlc1t3b3JkSXhdWzBdO1xyXG4gICAgICAgIGNvbnN0IHdvcmRFbmRJeCA9IHdvcmRSYW5nZXNbd29yZEl4XVsxXTtcclxuICAgICAgICBjb25zdCBuZXh0V29yZFN0YXJ0SXggPSB3b3JkUmFuZ2VzW3dvcmRJeCArIDFdPy5bMF07XHJcblxyXG4gICAgICAgIGlmICh3b3JkU3RhcnRJeCA+PSBzZW50ZW5jZVN0YXJ0SXggJiYgd29yZEVuZEl4IDw9IHNlbnRlbmNlRW5kSXgpIHtcclxuICAgICAgICAgIHdvcmRSYW5nZUl4ID0gd29yZEl4O1xyXG4gICAgICAgICAgaWYgKGxhc3RQcm9jZXNzZWRDaGFySXggPCB3b3JkU3RhcnRJeCkge1xyXG4gICAgICAgICAgICAvLyB3b3JkcyBhcmUgbm90IHRvZ2V0aGVyIGFueW1vcmUuXHJcbiAgICAgICAgICAgIG11bHRpcGxlV29yZFdyYXBwZXIgPSBudWxsO1xyXG4gICAgICAgICAgICBjb25zdCBvcmlnaW5hbFRleHQgPSB0ZXh0LnNsaWNlKGxhc3RQcm9jZXNzZWRDaGFySXgsIHdvcmRTdGFydEl4KTtcclxuICAgICAgICAgICAgLy8gbm90IGEgd29yZC5cclxuICAgICAgICAgICAgY29uc3QgZXNjYXBlZCA9IENvbW1vbi5lc2NhcGVIdG1sU3RyaW5nKG9yaWdpbmFsVGV4dCk7XHJcbiAgICAgICAgICAgIHRyZWUuY2hpbGRyZW5bc2VudGVuY2VJeF0uY2hpbGRyZW4ucHVzaCh7XHJcbiAgICAgICAgICAgICAgdGV4dDogZXNjYXBlZCxcclxuICAgICAgICAgICAgICB0eXBlOiBIaWdobGlnaHRUcmVlVHlwZS5PVEhFUixcclxuICAgICAgICAgICAgICByb290OiB0cmVlLFxyXG4gICAgICAgICAgICAgIG9yaWdpbmFsVGV4dFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgbGFzdFByb2Nlc3NlZENoYXJJeCA9IHdvcmRTdGFydEl4O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgY29uc3Qgb3JpZ2luYWxUZXh0ID0gdGV4dC5zbGljZSh3b3JkU3RhcnRJeCwgd29yZEVuZEl4KTtcclxuICAgICAgICAgIGNvbnN0IGVzY2FwZWQgPSBDb21tb24uZXNjYXBlSHRtbFN0cmluZyhvcmlnaW5hbFRleHQpO1xyXG4gICAgICAgICAgY29uc3QgZWxlbWVudElkID0gYCR7cGFyYWdyYXBoSXh9LSR7c2VudGVuY2VJeH0tJHt3b3JkSXh9YDtcclxuICAgICAgICAgIGNvbnN0IHdvcmQ6IElIaWdobGlnaHRUcmVlID0ge1xyXG4gICAgICAgICAgICB0ZXh0OiBlc2NhcGVkLFxyXG4gICAgICAgICAgICBjbGFzczogYCR7SGlnaGxpZ2h0UGFyYW1zLndvcmRDbGFzc30gJHtIaWdobGlnaHRQYXJhbXMud29yZENsYXNzfS0ke2VsZW1lbnRJZH1gLFxyXG4gICAgICAgICAgICBlbGVtZW50SWQ6IGVsZW1lbnRJZCxcclxuICAgICAgICAgICAgdHlwZTogb3JpZ2luYWxUZXh0ID09PSBcIi1cIiA/IEhpZ2hsaWdodFRyZWVUeXBlLkhZUEVOIDogSGlnaGxpZ2h0VHJlZVR5cGUuV09SRCxcclxuICAgICAgICAgICAgcm9vdDogdHJlZSxcclxuICAgICAgICAgICAgb3JpZ2luYWxUZXh0XHJcbiAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgIGlmICh3b3JkLnR5cGUgPT09IEhpZ2hsaWdodFRyZWVUeXBlLkhZUEVOKSB7XHJcbiAgICAgICAgICAgIG11bHRpcGxlV29yZFdyYXBwZXIgPSBudWxsO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSBpZiAod29yZEVuZEl4ID09PSBuZXh0V29yZFN0YXJ0SXgpIHtcclxuICAgICAgICAgICAgaWYgKCFtdWx0aXBsZVdvcmRXcmFwcGVyKSB7XHJcbiAgICAgICAgICAgICAgbXVsdGlwbGVXb3JkV3JhcHBlciA9IHtcclxuICAgICAgICAgICAgICAgIG9yaWdpbmFsVGV4dDogXCJcIixcclxuICAgICAgICAgICAgICAgIHJvb3Q6IHRyZWUsXHJcbiAgICAgICAgICAgICAgICB0ZXh0OiBcIlwiLFxyXG4gICAgICAgICAgICAgICAgdHlwZTogSGlnaGxpZ2h0VHJlZVR5cGUuV09SRF9XUkFQUEVSLFxyXG4gICAgICAgICAgICAgICAgY2hpbGRyZW46IFtdLFxyXG4gICAgICAgICAgICAgICAgY2xhc3M6IEhpZ2hsaWdodFBhcmFtcy5tdWx0aXBsZVdvcmRXcmFwcGVyXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHRyZWUuY2hpbGRyZW5bc2VudGVuY2VJeF0uY2hpbGRyZW4ucHVzaChtdWx0aXBsZVdvcmRXcmFwcGVyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKG11bHRpcGxlV29yZFdyYXBwZXIpIHtcclxuICAgICAgICAgICAgbXVsdGlwbGVXb3JkV3JhcHBlci5vcmlnaW5hbFRleHQgKz0gb3JpZ2luYWxUZXh0O1xyXG4gICAgICAgICAgICBtdWx0aXBsZVdvcmRXcmFwcGVyLnRleHQgKz0gZXNjYXBlZDtcclxuICAgICAgICAgICAgbXVsdGlwbGVXb3JkV3JhcHBlci5jaGlsZHJlbi5wdXNoKHdvcmQpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRyZWUuY2hpbGRyZW5bc2VudGVuY2VJeF0uY2hpbGRyZW4ucHVzaCh3b3JkKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHdvcmRzLnB1c2god29yZCk7XHJcbiAgICAgICAgICBsYXN0UHJvY2Vzc2VkQ2hhckl4ID0gd29yZEVuZEl4O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSlcclxuICAgIHJldHVybiB7IHRyZWUsIHdvcmRzIH07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFNlbnRlbmNlRnJvbVJhbmdlKHJhbmdlOiBudW1iZXJbXSwgdGV4dDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IHN0YXJ0ID0gcmFuZ2VbMF0gPT0gMCA/IHJhbmdlWzBdIDogcmFuZ2VbMF0gKyAxO1xyXG4gICAgY29uc3QgZW5kID0gc3RhcnQgKyByYW5nZVsxXTtcclxuICAgIHJldHVybiB0ZXh0LnNsaWNlKHN0YXJ0LCBlbmQpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBmaW5kU2libGluZ3Mod29yZEFsaWdubWVudDogbnVtYmVyW11bXSwgc291cmNlV29yZHM6IElIaWdobGlnaHRUcmVlW10sIHRhcmdldFdvcmRzOiBJSGlnaGxpZ2h0VHJlZVtdKSB7XHJcbiAgICB3b3JkQWxpZ25tZW50LmZvckVhY2goKHJhbmdlKSA9PiB7XHJcbiAgICAgIGNvbnN0IHNvdXJjZVdvcmRJeCA9IHJhbmdlWzBdO1xyXG4gICAgICBjb25zdCB0YXJnZXRXb3JkSXggPSByYW5nZVsxXTtcclxuICAgICAgY29uc3Qgc291cmNlV29yZCA9IHNvdXJjZVdvcmRzW3NvdXJjZVdvcmRJeF07XHJcbiAgICAgIGNvbnN0IHRhcmdldFdvcmQgPSB0YXJnZXRXb3Jkc1t0YXJnZXRXb3JkSXhdO1xyXG5cclxuICAgICAgaWYgKHNvdXJjZVdvcmQgJiYgdGFyZ2V0V29yZCkge1xyXG4gICAgICAgIHNvdXJjZVdvcmQuY2xhc3MgKz0gYCAke0hpZ2hsaWdodFBhcmFtcy5zaWJsaW5nQ2xhc3N9LSR7dGFyZ2V0V29yZC5lbGVtZW50SWR9YDtcclxuICAgICAgICB0YXJnZXRXb3JkLmNsYXNzICs9IGAgJHtIaWdobGlnaHRQYXJhbXMuc2libGluZ0NsYXNzfS0ke3NvdXJjZVdvcmQuZWxlbWVudElkfWA7XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
189
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGxkLXRyYW5zbGF0ZS10ZXh0LWFwaS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGxkLXRyYW5zbGF0ZS9zcmMvbGliL21vZHVsZXMvdGxkLXRleHQvc2VydmljZXMvYXBpL3RsZC10cmFuc2xhdGUtdGV4dC1hcGkuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyQyxPQUFPLEVBQUUsTUFBTSxFQUFpRSxNQUFNLDRCQUE0QixDQUFDO0FBSW5ILE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUN0RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQzs7Ozs7QUFRM0UsTUFBTSxPQUFPLDBCQUEwQjtJQUVyQyxZQUE2QixpQkFBNEMsRUFDdEQsSUFBZ0IsRUFDaEIsTUFBaUMsRUFDakMsTUFBdUI7UUFIYixzQkFBaUIsR0FBakIsaUJBQWlCLENBQTJCO1FBQ3RELFNBQUksR0FBSixJQUFJLENBQVk7UUFDaEIsV0FBTSxHQUFOLE1BQU0sQ0FBMkI7UUFDakMsV0FBTSxHQUFOLE1BQU0sQ0FBaUI7SUFBSSxDQUFDO0lBRS9DLGlCQUFpQixDQUFDLE9BQWUsRUFBRSxRQUFnQixFQUFFLElBQVksRUFBRSxXQUFtQjtRQUNwRixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxvQkFBb0IsQ0FBQztRQUN4RCxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNuRCxNQUFNLE1BQU0sR0FBRztZQUNiLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxLQUFL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QUFDOzt1SEE5TFUsMEJBQTBCOzJIQUExQiwwQkFBMEIsY0FGekIsTUFBTTsyRkFFUCwwQkFBMEI7a0JBSHRDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgQ29tbW9uLCBJVGxkVHJhbnNsYXRlVGV4dEFwaVNlcnZpY2UsIElUcmFuc2xhdGVQYXJhZ3JhcGhSZXF1ZXN0UGFyYW1zIH0gZnJvbSAnLi4vLi4vLi4vdGxkLWNvbW1vbi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBUbGRBbGVydFNlcnZpY2UsIFRsZFRyYW5zbGF0ZUNvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi90bGQtY29tbW9uL3NlcnZpY2VzJztcclxuaW1wb3J0IHsgVGxkVGVybUNvbGxlY3Rpb25zU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3RsZC10ZXJtL3NlcnZpY2VzJztcclxuaW1wb3J0IHsgSUdldFNlbnRlbmNlVjFSZXNwb25zZU1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dldC1zZW50ZW5jZS12MS1yZXNwb25zZS5tb2RlbCc7XHJcbmltcG9ydCB7IEhpZ2hsaWdodFBhcmFtcyB9IGZyb20gJy4uLy4uL21vZGVscy9oaWdobGlnaHQtcGFyYW1zLm1vZGVsJztcclxuaW1wb3J0IHsgSGlnaGxpZ2h0VHJlZVR5cGUgfSBmcm9tICcuLi8uLi9tb2RlbHMvaGlnaGxpZ2h0LXRyZWUtdHlwZS5tb2RlbCc7XHJcbmltcG9ydCB7IElIaWdobGlnaHRUcmVlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2hpZ2hsaWdodC10cmVlLm1vZGVsJztcclxuaW1wb3J0IHsgSVRyYW5zbGF0ZVBhcmFncmFwaFJlc3BvbnNlVjEgfSBmcm9tICcuLi8uLi9tb2RlbHMvdHJhbnNsYXRlLXBhcmFncmFwaC1yZXNwb25zZS12MS5tb2RlbCc7XHJcbmltcG9ydCB7IElUcmFuc2xhdGVQYXJhZ3JhcGhSZXNwb25zZSB9IGZyb20gJy4uLy4uL21vZGVscy90cmFuc2xhdGUtcGFyYWdyYXBoLXJlc3BvbnNlLm1vZGVsJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIFRsZFRyYW5zbGF0ZVRleHRBcGlTZXJ2aWNlIGltcGxlbWVudHMgSVRsZFRyYW5zbGF0ZVRleHRBcGlTZXJ2aWNlIHtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBjb2xsZWN0aW9uU2VydmljZTogVGxkVGVybUNvbGxlY3Rpb25zU2VydmljZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgaHR0cDogSHR0cENsaWVudCxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgY29uZmlnOiBUbGRUcmFuc2xhdGVDb25maWdTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBhbGVydHM6IFRsZEFsZXJ0U2VydmljZSkgeyB9XHJcblxyXG4gIHVwZGF0ZVRyYW5zbGF0aW9uKG9wdGlvbnM6IHN0cmluZywgc3lzdGVtSUQ6IHN0cmluZywgdGV4dDogc3RyaW5nLCB0cmFuc2xhdGlvbjogc3RyaW5nKSB7XHJcbiAgICBjb25zdCB1cmwgPSB0aGlzLmNvbmZpZy50ZXh0Q29uZmlnLnVwZGF0ZVRyYW5zbGF0aW9uVXJsO1xyXG4gICAgY29uc3QgaGVhZGVycyA9IENvbW1vbi5nZXRBdXRoSGVhZGVycyh0aGlzLmNvbmZpZyk7XHJcbiAgICBjb25zdCBwYXJhbXMgPSB7XHJcbiAgICAgIGFwcElEOiB0aGlzLmNvbmZpZy5jb3JlQ29uZmlnLmFwcElkLFxyXG4gICAgICBvcHRpb25zLFxyXG4gICAgICBzeXN0ZW1JRCxcclxuICAgICAgdGV4dCxcclxuICAgICAgdHJhbnNsYXRpb25cclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdCh1cmwsIHBhcmFtcywgeyBoZWFkZXJzIH0pO1xyXG4gIH1cclxuXHJcbiAgZGljdGlvbmFyeVRyYW5zbGF0aW9uKHRleHQ6IHN0cmluZywgc3JjQ29kZTogc3RyaW5nLCB0cmdDb2RlOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IGF1dGhIZWFkZXJzID0gQ29tbW9uLmdldEF1dGhIZWFkZXJzKHRoaXMuY29uZmlnKTtcclxuICAgIC8vIFRPRE8uIENyZWF0ZSB0eXBlIGZvciBwYXJhbXMuXHJcbiAgICBjb25zdCBwYXJhbXM6IGFueSA9IHtcclxuICAgICAgd29yZDogdGV4dCxcclxuICAgICAgc291cmNlTGFuZ3VhZ2U6IHNyY0NvZGUsXHJcbiAgICAgIHRhcmdldExhbmd1YWdlOiB0cmdDb2RlXHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KHRoaXMuY29uZmlnLnRleHRDb25maWcuZGljdGlvbmFyeVVybCwgeyBoZWFkZXJzOiBhdXRoSGVhZGVycywgcGFyYW1zOiBwYXJhbXMgfSlcclxuICB9XHJcblxyXG4gIHRyYW5zbGF0ZVBhcmFncmFwaChyZXF1ZXN0UGFyYW1zOiBJVHJhbnNsYXRlUGFyYWdyYXBoUmVxdWVzdFBhcmFtcyk6IE9ic2VydmFibGU8SVRyYW5zbGF0ZVBhcmFncmFwaFJlc3BvbnNlPiB7XHJcbiAgICBjb25zdCBoZWFkZXJzID0gQ29tbW9uLmdldEF1dGhIZWFkZXJzKHRoaXMuY29uZmlnKTtcclxuICAgIC8vIFRPRE8uIENyZWF0ZSB0eXBlIGZvciBwYXJhbXMuXHJcbiAgICBjb25zdCBwYXJhbXM6IGFueSA9IHtcclxuICAgICAgYXBwSUQ6IHRoaXMuY29uZmlnLmNvcmVDb25maWcuYXBwSWQsXHJcbiAgICAgIG9wdGlvbnM6IFwid2lkZ2V0PXRleHQsYWxpZ25tZW50LG1hcmtTZW50ZW5jZXNcIixcclxuICAgICAgc3lzdGVtSUQ6IHJlcXVlc3RQYXJhbXMuc3lzdGVtLmlkLFxyXG4gICAgICB0ZXh0OiByZXF1ZXN0UGFyYW1zLnRleHQsXHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IHNlbGVjdGVkQ29sbGVjdGlvbklkID0gdGhpcy5jb2xsZWN0aW9uU2VydmljZS5zZWxlY3RlZElkRm9yVHJhbnNsYXRpb24oKTtcclxuICAgIGlmIChzZWxlY3RlZENvbGxlY3Rpb25JZCkge1xyXG4gICAgICBwYXJhbXMub3B0aW9ucyArPSBgLHRlcm1Db3JwdXNJZD0ke3NlbGVjdGVkQ29sbGVjdGlvbklkfWA7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SVRyYW5zbGF0ZVBhcmFncmFwaFJlc3BvbnNlVjE+KHRoaXMuY29uZmlnPy50ZXh0Q29uZmlnPy50cmFuc2xhdGlvblVybCwgeyBoZWFkZXJzOiBoZWFkZXJzLCBwYXJhbXM6IHBhcmFtcyB9KS5waXBlKFxyXG4gICAgICBtYXAoKHJlc3BvbnNlOiBJVHJhbnNsYXRlUGFyYWdyYXBoUmVzcG9uc2VWMSkgPT4ge1xyXG4gICAgICAgIGlmIChyZXNwb25zZS5FcnJvck1lc3NhZ2UpIHtcclxuICAgICAgICAgIHRoaXMuYWxlcnRzLnVuaGFuZGVsZWRFcnJvcihyZXNwb25zZS5FcnJvck1lc3NhZ2UpO1xyXG4gICAgICAgICAgdGhyb3cgcmVzcG9uc2UuRXJyb3JNZXNzYWdlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBjb252ZXJ0ZWQgPSB0aGlzLmNvbnZlcnRQYXJhZ3JhcGhSZXNwb25zZShyZXF1ZXN0UGFyYW1zLCByZXNwb25zZSk7XHJcbiAgICAgICAgcmV0dXJuIGNvbnZlcnRlZDtcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuXHJcbiAgcHJpdmF0ZSBjb252ZXJ0UGFyYWdyYXBoUmVzcG9uc2UocmVxdWVzdDogSVRyYW5zbGF0ZVBhcmFncmFwaFJlcXVlc3RQYXJhbXMsIHJlc3BvbnNlOiBJVHJhbnNsYXRlUGFyYWdyYXBoUmVzcG9uc2VWMSk6IElUcmFuc2xhdGVQYXJhZ3JhcGhSZXNwb25zZSB7XHJcbiAgICBpZiAodGhpcy5jb25maWcudGV4dENvbmZpZy5oaWdobGlnaHQpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlSGlnaGxpZ2h0VHJlZXMocmVxdWVzdC50ZXh0LCByZXNwb25zZSwgcmVxdWVzdC5wYXJhZ3JhcGhJeCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBzb3VyY2VUcmVlOiB7IHRleHQ6IHJlcXVlc3QudGV4dCwgcGFyYWdyYXBoSXg6IHJlcXVlc3QucGFyYWdyYXBoSXgsIHR5cGU6IEhpZ2hsaWdodFRyZWVUeXBlLlBBUkFHUkFQSCwgcm9vdDogbnVsbCwgb3JpZ2luYWxUZXh0OiByZXF1ZXN0LnRleHQgfSxcclxuICAgICAgICB0YXJnZXRUcmVlOiB7IHRleHQ6IHJlc3BvbnNlLnRyYW5zbGF0aW9uLCBwYXJhZ3JhcGhJeDogcmVxdWVzdC5wYXJhZ3JhcGhJeCwgdHlwZTogSGlnaGxpZ2h0VHJlZVR5cGUuUEFSQUdSQVBILCByb290OiBudWxsLCBvcmlnaW5hbFRleHQ6IHJlc3BvbnNlLnRyYW5zbGF0aW9uIH1cclxuICAgICAgfTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgY3JlYXRlSGlnaGxpZ2h0VHJlZXMoc291cmNlVGV4dDogc3RyaW5nLCByZXNwb25zZTogSVRyYW5zbGF0ZVBhcmFncmFwaFJlc3BvbnNlVjEsIHBhcmFncmFwaEl4OiBudW1iZXIpOiBJVHJhbnNsYXRlUGFyYWdyYXBoUmVzcG9uc2Uge1xyXG4gICAgY29uc3QgdGFyZ2V0VHJlZSA9IHRoaXMuZ2V0U2VudGVuY2UocmVzcG9uc2UudHJhbnNsYXRpb24sIHJlc3BvbnNlLnRyYW5zbGF0aW9uU2VudGVuY2VSYW5nZXMsIHJlc3BvbnNlLnRhcmdldFdvcmRSYW5nZXMsIHBhcmFncmFwaEl4KTtcclxuICAgIGNvbnN0IHNvdXJjZVRyZWUgPSB0aGlzLmdldFNlbnRlbmNlKHNvdXJjZVRleHQsIHJlc3BvbnNlLm9yaWdpbmFsU2VudGVuY2VSYW5nZXMsIHJlc3BvbnNlLnNvdXJjZVdvcmRSYW5nZXMsIHBhcmFncmFwaEl4KTtcclxuICAgIHRoaXMuZmluZFNpYmxpbmdzKHJlc3BvbnNlLndvcmRBbGlnbm1lbnQsIHNvdXJjZVRyZWUud29yZHMsIHRhcmdldFRyZWUud29yZHMpO1xyXG4gICAgcmV0dXJuIHsgc291cmNlVHJlZTogc291cmNlVHJlZS50cmVlLCB0YXJnZXRUcmVlOiB0YXJnZXRUcmVlLnRyZWUgfTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0U2VudGVuY2UodGV4dDogc3RyaW5nLCBzZW50ZW5jZVJhbmdlczogbnVtYmVyW11bXSwgd29yZFJhbmdlczogbnVtYmVyW11bXSwgcGFyYWdyYXBoSXg6IG51bWJlcik6IElHZXRTZW50ZW5jZVYxUmVzcG9uc2VNb2RlbCB7XHJcbiAgICBjb25zdCB0cmVlOiBJSGlnaGxpZ2h0VHJlZSA9IHsgdGV4dDogdGV4dCwgY2hpbGRyZW46IFtdLCBwYXJhZ3JhcGhJeCwgdHlwZTogSGlnaGxpZ2h0VHJlZVR5cGUuUEFSQUdSQVBILCByb290OiBudWxsLCBvcmlnaW5hbFRleHQ6IHRleHQgfTtcclxuICAgIGNvbnN0IHdvcmRzOiBJSGlnaGxpZ2h0VHJlZVtdID0gW107XHJcbiAgICBsZXQgbGFzdFByb2Nlc3NlZENoYXJJeCA9IDA7XHJcblxyXG4gICAgY29uc3Qgd29yZFJhbmdlc1dpdGhJbmRleCA9IHdvcmRSYW5nZXMubWFwKChyYW5nZSwgaXgpID0+IHtcclxuICAgICAgcmV0dXJuIHtyYW5nZSwgaXh9O1xyXG4gICAgfSk7XHJcblxyXG4gICAgc2VudGVuY2VSYW5nZXMuZm9yRWFjaCgoc2VudGVuY2VSYW5nZSwgc2VudGVuY2VJeCkgPT4ge1xyXG4gICAgICBjb25zdCBzZW50ZW5jZVN0cmluZyA9IHRoaXMuZ2V0U2VudGVuY2VGcm9tUmFuZ2Uoc2VudGVuY2VSYW5nZSwgdGV4dCk7XHJcbiAgICAgIHRyZWUuY2hpbGRyZW5bc2VudGVuY2VJeF0gPSB7XHJcbiAgICAgICAgdGV4dDogc2VudGVuY2VTdHJpbmcsIGNoaWxkcmVuOiBbXSxcclxuICAgICAgICBjbGFzczogYCR7SGlnaGxpZ2h0UGFyYW1zLnNlbnRlbmNlQ2xhc3N9ICR7SGlnaGxpZ2h0UGFyYW1zLnNlbnRlbmNlQ2xhc3N9LSR7cGFyYWdyYXBoSXh9LSR7c2VudGVuY2VJeH1gLFxyXG4gICAgICAgIGVsZW1lbnRJZDogc2VudGVuY2VJeC50b1N0cmluZygpLFxyXG4gICAgICAgIHR5cGU6IEhpZ2hsaWdodFRyZWVUeXBlLlNFTlRFTkNFLFxyXG4gICAgICAgIHJvb3Q6IHRyZWUsXHJcbiAgICAgICAgb3JpZ2luYWxUZXh0OiBzZW50ZW5jZVN0cmluZ1xyXG4gICAgICB9O1xyXG5cclxuICAgICAgY29uc3Qgc2VudGVuY2VTdGFydEl4ID0gc2VudGVuY2VSYW5nZVswXTtcclxuICAgICAgY29uc3Qgc2VudGVuY2VFbmRJeCA9IHNlbnRlbmNlU3RhcnRJeCArIHNlbnRlbmNlUmFuZ2VbMV07XHJcbiAgICAgIGNvbnN0IGZpbHRlcmVkV29yZFJhbmdlc1dpdGhJbmRleCA9IHdvcmRSYW5nZXNXaXRoSW5kZXguZmlsdGVyKChyYW5nZVdpdGhJbmRleCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHdvcmRTdGFydEl4ID0gcmFuZ2VXaXRoSW5kZXgucmFuZ2VbMF07XHJcbiAgICAgICAgLy8gb24gcHVycG9zZSwgY2hlY2sgb25seSBzdGFydCBpbmRleCwgYmVjYXVzZSBzb21ldGltZXMgZW5kIGluZGV4IGlzIG5vdCBjb3JyZWN0IGFuZCBhbGlnbmVkIHdpdGggc2VudGVuY2VzLlxyXG4gICAgICAgIHJldHVybiB3b3JkU3RhcnRJeCA+PSBzZW50ZW5jZVN0YXJ0SXggJiYgd29yZFN0YXJ0SXggPD0gc2VudGVuY2VFbmRJeDtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBsZXQgbXVsdGlwbGVXb3JkV3JhcHBlcjogSUhpZ2hsaWdodFRyZWU7XHJcbiAgICAgIGZpbHRlcmVkV29yZFJhbmdlc1dpdGhJbmRleC5mb3JFYWNoKChyYW5nZVdpdGhJbmRleCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHdvcmRSYW5nZSA9IHJhbmdlV2l0aEluZGV4LnJhbmdlO1xyXG4gICAgICAgIGNvbnN0IHdvcmRTdGFydEl4ID0gd29yZFJhbmdlWzBdO1xyXG4gICAgICAgIGNvbnN0IHdvcmRFbmRJeCA9IHdvcmRSYW5nZVsxXTtcclxuICAgICAgICBjb25zdCBuZXh0V29yZFN0YXJ0SXggPSB3b3JkUmFuZ2VzW3JhbmdlV2l0aEluZGV4Lml4ICsgMV0/LlswXTtcclxuXHJcblxyXG4gICAgICAgIGlmIChsYXN0UHJvY2Vzc2VkQ2hhckl4IDwgd29yZFN0YXJ0SXgpIHtcclxuICAgICAgICAgIC8vIHdvcmRzIGFyZSBub3QgdG9nZXRoZXIgYW55bW9yZS5cclxuICAgICAgICAgIG11bHRpcGxlV29yZFdyYXBwZXIgPSBudWxsO1xyXG4gICAgICAgICAgY29uc3Qgb3JpZ2luYWxUZXh0ID0gdGV4dC5zbGljZShsYXN0UHJvY2Vzc2VkQ2hhckl4LCB3b3JkU3RhcnRJeCk7XHJcbiAgICAgICAgICAvLyBub3QgYSB3b3JkLlxyXG4gICAgICAgICAgY29uc3QgZXNjYXBlZCA9IENvbW1vbi5lc2NhcGVIdG1sU3RyaW5nKG9yaWdpbmFsVGV4dCk7XHJcbiAgICAgICAgICB0cmVlLmNoaWxkcmVuW3NlbnRlbmNlSXhdLmNoaWxkcmVuLnB1c2goe1xyXG4gICAgICAgICAgICB0ZXh0OiBlc2NhcGVkLFxyXG4gICAgICAgICAgICB0eXBlOiBIaWdobGlnaHRUcmVlVHlwZS5PVEhFUixcclxuICAgICAgICAgICAgcm9vdDogdHJlZSxcclxuICAgICAgICAgICAgb3JpZ2luYWxUZXh0XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIGxhc3RQcm9jZXNzZWRDaGFySXggPSB3b3JkU3RhcnRJeDtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qgb3JpZ2luYWxUZXh0ID0gdGV4dC5zbGljZSh3b3JkU3RhcnRJeCwgd29yZEVuZEl4KTtcclxuICAgICAgICBjb25zdCBlc2NhcGVkID0gQ29tbW9uLmVzY2FwZUh0bWxTdHJpbmcob3JpZ2luYWxUZXh0KTtcclxuICAgICAgICBjb25zdCBlbGVtZW50SWQgPSBgJHtwYXJhZ3JhcGhJeH0tJHtzZW50ZW5jZUl4fS0ke3JhbmdlV2l0aEluZGV4Lml4fWA7XHJcbiAgICAgICAgY29uc3Qgd29yZDogSUhpZ2hsaWdodFRyZWUgPSB7XHJcbiAgICAgICAgICB0ZXh0OiBlc2NhcGVkLFxyXG4gICAgICAgICAgY2xhc3M6IGAke0hpZ2hsaWdodFBhcmFtcy53b3JkQ2xhc3N9ICR7SGlnaGxpZ2h0UGFyYW1zLndvcmRDbGFzc30tJHtlbGVtZW50SWR9YCxcclxuICAgICAgICAgIGVsZW1lbnRJZDogZWxlbWVudElkLFxyXG4gICAgICAgICAgdHlwZTogb3JpZ2luYWxUZXh0ID09PSBcIi1cIiA/IEhpZ2hsaWdodFRyZWVUeXBlLkhZUEVOIDogSGlnaGxpZ2h0VHJlZVR5cGUuV09SRCxcclxuICAgICAgICAgIHJvb3Q6IHRyZWUsXHJcbiAgICAgICAgICBvcmlnaW5hbFRleHRcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBpZiAod29yZC50eXBlID09PSBIaWdobGlnaHRUcmVlVHlwZS5IWVBFTikge1xyXG4gICAgICAgICAgbXVsdGlwbGVXb3JkV3JhcHBlciA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHdvcmRFbmRJeCA9PT0gbmV4dFdvcmRTdGFydEl4KSB7XHJcbiAgICAgICAgICBpZiAoIW11bHRpcGxlV29yZFdyYXBwZXIpIHtcclxuICAgICAgICAgICAgbXVsdGlwbGVXb3JkV3JhcHBlciA9IHtcclxuICAgICAgICAgICAgICBvcmlnaW5hbFRleHQ6IFwiXCIsXHJcbiAgICAgICAgICAgICAgcm9vdDogdHJlZSxcclxuICAgICAgICAgICAgICB0ZXh0OiBcIlwiLFxyXG4gICAgICAgICAgICAgIHR5cGU6IEhpZ2hsaWdodFRyZWVUeXBlLldPUkRfV1JBUFBFUixcclxuICAgICAgICAgICAgICBjaGlsZHJlbjogW10sXHJcbiAgICAgICAgICAgICAgY2xhc3M6IEhpZ2hsaWdodFBhcmFtcy5tdWx0aXBsZVdvcmRXcmFwcGVyXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdHJlZS5jaGlsZHJlbltzZW50ZW5jZUl4XS5jaGlsZHJlbi5wdXNoKG11bHRpcGxlV29yZFdyYXBwZXIpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobXVsdGlwbGVXb3JkV3JhcHBlcikge1xyXG4gICAgICAgICAgbXVsdGlwbGVXb3JkV3JhcHBlci5vcmlnaW5hbFRleHQgKz0gb3JpZ2luYWxUZXh0O1xyXG4gICAgICAgICAgbXVsdGlwbGVXb3JkV3JhcHBlci50ZXh0ICs9IGVzY2FwZWQ7XHJcbiAgICAgICAgICBtdWx0aXBsZVdvcmRXcmFwcGVyLmNoaWxkcmVuLnB1c2god29yZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgdHJlZS5jaGlsZHJlbltzZW50ZW5jZUl4XS5jaGlsZHJlbi5wdXNoKHdvcmQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB3b3Jkcy5wdXNoKHdvcmQpO1xyXG4gICAgICAgIGxhc3RQcm9jZXNzZWRDaGFySXggPSB3b3JkRW5kSXg7XHJcbiAgICAgIH0pXHJcbiAgICB9KVxyXG4gICAgcmV0dXJuIHsgdHJlZSwgd29yZHMgfTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0U2VudGVuY2VGcm9tUmFuZ2UocmFuZ2U6IG51bWJlcltdLCB0ZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgY29uc3Qgc3RhcnQgPSByYW5nZVswXSA9PSAwID8gcmFuZ2VbMF0gOiByYW5nZVswXSArIDE7XHJcbiAgICBjb25zdCBlbmQgPSBzdGFydCArIHJhbmdlWzFdO1xyXG4gICAgcmV0dXJuIHRleHQuc2xpY2Uoc3RhcnQsIGVuZCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZpbmRTaWJsaW5ncyh3b3JkQWxpZ25tZW50OiBudW1iZXJbXVtdLCBzb3VyY2VXb3JkczogSUhpZ2hsaWdodFRyZWVbXSwgdGFyZ2V0V29yZHM6IElIaWdobGlnaHRUcmVlW10pIHtcclxuICAgIHdvcmRBbGlnbm1lbnQuZm9yRWFjaCgocmFuZ2UpID0+IHtcclxuICAgICAgY29uc3Qgc291cmNlV29yZEl4ID0gcmFuZ2VbMF07XHJcbiAgICAgIGNvbnN0IHRhcmdldFdvcmRJeCA9IHJhbmdlWzFdO1xyXG4gICAgICBjb25zdCBzb3VyY2VXb3JkID0gc291cmNlV29yZHNbc291cmNlV29yZEl4XTtcclxuICAgICAgY29uc3QgdGFyZ2V0V29yZCA9IHRhcmdldFdvcmRzW3RhcmdldFdvcmRJeF07XHJcblxyXG4gICAgICBpZiAoc291cmNlV29yZCAmJiB0YXJnZXRXb3JkKSB7XHJcbiAgICAgICAgc291cmNlV29yZC5jbGFzcyArPSBgICR7SGlnaGxpZ2h0UGFyYW1zLnNpYmxpbmdDbGFzc30tJHt0YXJnZXRXb3JkLmVsZW1lbnRJZH1gO1xyXG4gICAgICAgIHRhcmdldFdvcmQuY2xhc3MgKz0gYCAke0hpZ2hsaWdodFBhcmFtcy5zaWJsaW5nQ2xhc3N9LSR7c291cmNlV29yZC5lbGVtZW50SWR9YDtcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcbn1cclxuIl19
|
|
@@ -7308,6 +7308,7 @@ class HighlightTreeComponent {
|
|
|
7308
7308
|
this.highlightService = highlightService;
|
|
7309
7309
|
this.correctionsEnabled = true;
|
|
7310
7310
|
this.onReplace = new EventEmitter();
|
|
7311
|
+
this.wordType = HighlightTreeType.WORD;
|
|
7311
7312
|
}
|
|
7312
7313
|
mouseEnter(event) {
|
|
7313
7314
|
this.onMouseEvent(event, this.isSource, true);
|
|
@@ -7385,10 +7386,10 @@ class HighlightTreeComponent {
|
|
|
7385
7386
|
}
|
|
7386
7387
|
}
|
|
7387
7388
|
HighlightTreeComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: HighlightTreeComponent, deps: [{ token: TldHighlightService }], target: i0.ɵɵFactoryTarget.Component });
|
|
7388
|
-
HighlightTreeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: HighlightTreeComponent, selector: "tld-highlight-tree", inputs: { tree: "tree", isSource: "isSource", correctionsEnabled: "correctionsEnabled", highlight: "highlight", gramCheck: "gramCheck", selectSentence: "selectSentence" }, outputs: { onReplace: "onReplace" }, ngImport: i0, template: "<ng-template #highlightTree let-tree=\"tree\">\r\n <ng-container *ngIf=\"!tree.children\">\r\n <ng-container *ngIf=\"tree.text\">\r\n <ng-container *ngIf=\"tree.grammarMeta && gramCheck\">\r\n <mat-menu #menu=\"matMenu\" class=\"grammar-check-menu\">\r\n <div class=\"title\">\r\n {{'GRAMMAR_CHECK_MENU.TITLE' | translate}}\r\n </div>\r\n <div *ngFor=\"let replacement of tree.grammarMeta.replacements\">\r\n <button mat-button color=\"accent\" (click)=\"replace(tree, replacement)\">\r\n {{replacement}}\r\n </button>\r\n </div>\r\n </mat-menu>\r\n <span #menuTrigger=\"matMenuTrigger\" [matMenuTriggerFor]=\"menu\" class=\"{{tree.class}}\"\r\n [innerHTML]=\"tree.text\" (mouseenter)=\"mouseEnter($event)\" (click)=\"gramCheckMenu(tree, menuTrigger)\"\r\n (mouseleave)=\"mouseLeave($event)\"></span>\r\n\r\n </ng-container>\r\n <ng-container *ngIf=\"!(tree.grammarMeta && gramCheck)\">\r\n <span class=\"{{tree.class}}\" [innerHTML]=\"tree.text\" (mouseenter)=\"mouseEnter($event)\"\r\n (mouseleave)=\"mouseLeave($event)\"></span>\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"!tree.text\">\r\n <br>\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"tree.children\">\r\n <span [ngClass]=\"{'selected-sentence': isSelectedSentence(tree)}\" class=\"highlight-tree-child-wrapper {{tree.class}}\"\r\n (mouseenter)=\"mouseEnter($event)\" (mouseleave)=\"mouseLeave($event)\" (click)=\"parentClick(tree)\">\r\n <ng-template ngFor let-child [ngForOf]=\"tree.children\">\r\n <ng-template [ngTemplateOutlet]=\"highlightTree\" [ngTemplateOutletContext]=\"{ tree: child }\">\r\n </ng-template>\r\n </ng-template>\r\n </span>\r\n </ng-container>\r\n</ng-template>\r\n\r\n\r\n\r\n<div *ngIf=\"tree\" class=\"tld-highlight-tree\">\r\n <ng-template [ngTemplateOutlet]=\"highlightTree\" [ngTemplateOutletContext]=\"{ tree: tree }\"></ng-template>\r\n</div
|
|
7389
|
+
HighlightTreeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: HighlightTreeComponent, selector: "tld-highlight-tree", inputs: { tree: "tree", isSource: "isSource", correctionsEnabled: "correctionsEnabled", highlight: "highlight", gramCheck: "gramCheck", selectSentence: "selectSentence" }, outputs: { onReplace: "onReplace" }, ngImport: i0, template: "<ng-template #highlightTree let-tree=\"tree\">\r\n <ng-container *ngIf=\"!tree.children\">\r\n <ng-container *ngIf=\"tree.text\">\r\n <ng-container *ngIf=\"tree.grammarMeta && gramCheck\">\r\n <mat-menu #menu=\"matMenu\" class=\"grammar-check-menu\">\r\n <div class=\"title\">\r\n {{'GRAMMAR_CHECK_MENU.TITLE' | translate}}\r\n </div>\r\n <div *ngFor=\"let replacement of tree.grammarMeta.replacements\">\r\n <button mat-button color=\"accent\" (click)=\"replace(tree, replacement)\">\r\n {{replacement}}\r\n </button>\r\n </div>\r\n </mat-menu>\r\n <span #menuTrigger=\"matMenuTrigger\" [matMenuTriggerFor]=\"menu\" class=\"{{tree.class}}\"\r\n [innerHTML]=\"tree.text\" (mouseenter)=\"mouseEnter($event)\" (click)=\"gramCheckMenu(tree, menuTrigger)\"\r\n (mouseleave)=\"mouseLeave($event)\"></span>\r\n\r\n </ng-container>\r\n <ng-container *ngIf=\"!(tree.grammarMeta && gramCheck)\">\r\n <span class=\"{{tree.class}}\" [innerHTML]=\"tree.text\" (mouseenter)=\"mouseEnter($event)\"\r\n (mouseleave)=\"mouseLeave($event)\"></span>\r\n </ng-container>\r\n </ng-container>\r\n <!-- If text is empty and type is 'word', we should not break line. -->\r\n <ng-container *ngIf=\"!tree.text && tree.type !== wordType\">\r\n <br>\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"tree.children\">\r\n <span [ngClass]=\"{'selected-sentence': isSelectedSentence(tree)}\" class=\"highlight-tree-child-wrapper {{tree.class}}\"\r\n (mouseenter)=\"mouseEnter($event)\" (mouseleave)=\"mouseLeave($event)\" (click)=\"parentClick(tree)\">\r\n <ng-template ngFor let-child [ngForOf]=\"tree.children\">\r\n <ng-template [ngTemplateOutlet]=\"highlightTree\" [ngTemplateOutletContext]=\"{ tree: child }\">\r\n </ng-template>\r\n </ng-template>\r\n </span>\r\n </ng-container>\r\n</ng-template>\r\n\r\n\r\n\r\n<div *ngIf=\"tree\" class=\"tld-highlight-tree\">\r\n <ng-template [ngTemplateOutlet]=\"highlightTree\" [ngTemplateOutletContext]=\"{ tree: tree }\"></ng-template>\r\n</div>\r\n", styles: ["span{white-space:pre-wrap}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i5.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i3$1.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { kind: "directive", type: i3$1.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { kind: "directive", type: i5$1.DefaultClassDirective, selector: " [ngClass], [ngClass.xs], [ngClass.sm], [ngClass.md], [ngClass.lg], [ngClass.xl], [ngClass.lt-sm], [ngClass.lt-md], [ngClass.lt-lg], [ngClass.lt-xl], [ngClass.gt-xs], [ngClass.gt-sm], [ngClass.gt-md], [ngClass.gt-lg]", inputs: ["ngClass", "ngClass.xs", "ngClass.sm", "ngClass.md", "ngClass.lg", "ngClass.xl", "ngClass.lt-sm", "ngClass.lt-md", "ngClass.lt-lg", "ngClass.lt-xl", "ngClass.gt-xs", "ngClass.gt-sm", "ngClass.gt-md", "ngClass.gt-lg"] }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }] });
|
|
7389
7390
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: HighlightTreeComponent, decorators: [{
|
|
7390
7391
|
type: Component,
|
|
7391
|
-
args: [{ selector: 'tld-highlight-tree', template: "<ng-template #highlightTree let-tree=\"tree\">\r\n <ng-container *ngIf=\"!tree.children\">\r\n <ng-container *ngIf=\"tree.text\">\r\n <ng-container *ngIf=\"tree.grammarMeta && gramCheck\">\r\n <mat-menu #menu=\"matMenu\" class=\"grammar-check-menu\">\r\n <div class=\"title\">\r\n {{'GRAMMAR_CHECK_MENU.TITLE' | translate}}\r\n </div>\r\n <div *ngFor=\"let replacement of tree.grammarMeta.replacements\">\r\n <button mat-button color=\"accent\" (click)=\"replace(tree, replacement)\">\r\n {{replacement}}\r\n </button>\r\n </div>\r\n </mat-menu>\r\n <span #menuTrigger=\"matMenuTrigger\" [matMenuTriggerFor]=\"menu\" class=\"{{tree.class}}\"\r\n [innerHTML]=\"tree.text\" (mouseenter)=\"mouseEnter($event)\" (click)=\"gramCheckMenu(tree, menuTrigger)\"\r\n (mouseleave)=\"mouseLeave($event)\"></span>\r\n\r\n </ng-container>\r\n <ng-container *ngIf=\"!(tree.grammarMeta && gramCheck)\">\r\n <span class=\"{{tree.class}}\" [innerHTML]=\"tree.text\" (mouseenter)=\"mouseEnter($event)\"\r\n (mouseleave)=\"mouseLeave($event)\"></span>\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"!tree.text\">\r\n <br>\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"tree.children\">\r\n <span [ngClass]=\"{'selected-sentence': isSelectedSentence(tree)}\" class=\"highlight-tree-child-wrapper {{tree.class}}\"\r\n (mouseenter)=\"mouseEnter($event)\" (mouseleave)=\"mouseLeave($event)\" (click)=\"parentClick(tree)\">\r\n <ng-template ngFor let-child [ngForOf]=\"tree.children\">\r\n <ng-template [ngTemplateOutlet]=\"highlightTree\" [ngTemplateOutletContext]=\"{ tree: child }\">\r\n </ng-template>\r\n </ng-template>\r\n </span>\r\n </ng-container>\r\n</ng-template>\r\n\r\n\r\n\r\n<div *ngIf=\"tree\" class=\"tld-highlight-tree\">\r\n <ng-template [ngTemplateOutlet]=\"highlightTree\" [ngTemplateOutletContext]=\"{ tree: tree }\"></ng-template>\r\n</div
|
|
7392
|
+
args: [{ selector: 'tld-highlight-tree', template: "<ng-template #highlightTree let-tree=\"tree\">\r\n <ng-container *ngIf=\"!tree.children\">\r\n <ng-container *ngIf=\"tree.text\">\r\n <ng-container *ngIf=\"tree.grammarMeta && gramCheck\">\r\n <mat-menu #menu=\"matMenu\" class=\"grammar-check-menu\">\r\n <div class=\"title\">\r\n {{'GRAMMAR_CHECK_MENU.TITLE' | translate}}\r\n </div>\r\n <div *ngFor=\"let replacement of tree.grammarMeta.replacements\">\r\n <button mat-button color=\"accent\" (click)=\"replace(tree, replacement)\">\r\n {{replacement}}\r\n </button>\r\n </div>\r\n </mat-menu>\r\n <span #menuTrigger=\"matMenuTrigger\" [matMenuTriggerFor]=\"menu\" class=\"{{tree.class}}\"\r\n [innerHTML]=\"tree.text\" (mouseenter)=\"mouseEnter($event)\" (click)=\"gramCheckMenu(tree, menuTrigger)\"\r\n (mouseleave)=\"mouseLeave($event)\"></span>\r\n\r\n </ng-container>\r\n <ng-container *ngIf=\"!(tree.grammarMeta && gramCheck)\">\r\n <span class=\"{{tree.class}}\" [innerHTML]=\"tree.text\" (mouseenter)=\"mouseEnter($event)\"\r\n (mouseleave)=\"mouseLeave($event)\"></span>\r\n </ng-container>\r\n </ng-container>\r\n <!-- If text is empty and type is 'word', we should not break line. -->\r\n <ng-container *ngIf=\"!tree.text && tree.type !== wordType\">\r\n <br>\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"tree.children\">\r\n <span [ngClass]=\"{'selected-sentence': isSelectedSentence(tree)}\" class=\"highlight-tree-child-wrapper {{tree.class}}\"\r\n (mouseenter)=\"mouseEnter($event)\" (mouseleave)=\"mouseLeave($event)\" (click)=\"parentClick(tree)\">\r\n <ng-template ngFor let-child [ngForOf]=\"tree.children\">\r\n <ng-template [ngTemplateOutlet]=\"highlightTree\" [ngTemplateOutletContext]=\"{ tree: child }\">\r\n </ng-template>\r\n </ng-template>\r\n </span>\r\n </ng-container>\r\n</ng-template>\r\n\r\n\r\n\r\n<div *ngIf=\"tree\" class=\"tld-highlight-tree\">\r\n <ng-template [ngTemplateOutlet]=\"highlightTree\" [ngTemplateOutletContext]=\"{ tree: tree }\"></ng-template>\r\n</div>\r\n", styles: ["span{white-space:pre-wrap}\n"] }]
|
|
7392
7393
|
}], ctorParameters: function () { return [{ type: TldHighlightService }]; }, propDecorators: { tree: [{
|
|
7393
7394
|
type: Input
|
|
7394
7395
|
}], isSource: [{
|
|
@@ -10741,10 +10742,11 @@ class TldTranslateTextApiService {
|
|
|
10741
10742
|
getSentence(text, sentenceRanges, wordRanges, paragraphIx) {
|
|
10742
10743
|
const tree = { text: text, children: [], paragraphIx, type: HighlightTreeType.PARAGRAPH, root: null, originalText: text };
|
|
10743
10744
|
const words = [];
|
|
10744
|
-
let wordRangeIx = -1;
|
|
10745
10745
|
let lastProcessedCharIx = 0;
|
|
10746
|
+
const wordRangesWithIndex = wordRanges.map((range, ix) => {
|
|
10747
|
+
return { range, ix };
|
|
10748
|
+
});
|
|
10746
10749
|
sentenceRanges.forEach((sentenceRange, sentenceIx) => {
|
|
10747
|
-
var _a;
|
|
10748
10750
|
const sentenceString = this.getSentenceFromRange(sentenceRange, text);
|
|
10749
10751
|
tree.children[sentenceIx] = {
|
|
10750
10752
|
text: sentenceString, children: [],
|
|
@@ -10756,69 +10758,70 @@ class TldTranslateTextApiService {
|
|
|
10756
10758
|
};
|
|
10757
10759
|
const sentenceStartIx = sentenceRange[0];
|
|
10758
10760
|
const sentenceEndIx = sentenceStartIx + sentenceRange[1];
|
|
10761
|
+
const filteredWordRangesWithIndex = wordRangesWithIndex.filter((rangeWithIndex) => {
|
|
10762
|
+
const wordStartIx = rangeWithIndex.range[0];
|
|
10763
|
+
// on purpose, check only start index, because sometimes end index is not correct and aligned with sentences.
|
|
10764
|
+
return wordStartIx >= sentenceStartIx && wordStartIx <= sentenceEndIx;
|
|
10765
|
+
});
|
|
10759
10766
|
let multipleWordWrapper;
|
|
10760
|
-
|
|
10761
|
-
|
|
10762
|
-
const
|
|
10763
|
-
const
|
|
10764
|
-
|
|
10765
|
-
|
|
10766
|
-
|
|
10767
|
-
|
|
10768
|
-
|
|
10769
|
-
|
|
10770
|
-
|
|
10771
|
-
const escaped = Common.escapeHtmlString(originalText);
|
|
10772
|
-
tree.children[sentenceIx].children.push({
|
|
10773
|
-
text: escaped,
|
|
10774
|
-
type: HighlightTreeType.OTHER,
|
|
10775
|
-
root: tree,
|
|
10776
|
-
originalText
|
|
10777
|
-
});
|
|
10778
|
-
lastProcessedCharIx = wordStartIx;
|
|
10779
|
-
}
|
|
10780
|
-
const originalText = text.slice(wordStartIx, wordEndIx);
|
|
10767
|
+
filteredWordRangesWithIndex.forEach((rangeWithIndex) => {
|
|
10768
|
+
var _a;
|
|
10769
|
+
const wordRange = rangeWithIndex.range;
|
|
10770
|
+
const wordStartIx = wordRange[0];
|
|
10771
|
+
const wordEndIx = wordRange[1];
|
|
10772
|
+
const nextWordStartIx = (_a = wordRanges[rangeWithIndex.ix + 1]) === null || _a === void 0 ? void 0 : _a[0];
|
|
10773
|
+
if (lastProcessedCharIx < wordStartIx) {
|
|
10774
|
+
// words are not together anymore.
|
|
10775
|
+
multipleWordWrapper = null;
|
|
10776
|
+
const originalText = text.slice(lastProcessedCharIx, wordStartIx);
|
|
10777
|
+
// not a word.
|
|
10781
10778
|
const escaped = Common.escapeHtmlString(originalText);
|
|
10782
|
-
|
|
10783
|
-
const word = {
|
|
10779
|
+
tree.children[sentenceIx].children.push({
|
|
10784
10780
|
text: escaped,
|
|
10785
|
-
|
|
10786
|
-
elementId: elementId,
|
|
10787
|
-
type: originalText === "-" ? HighlightTreeType.HYPEN : HighlightTreeType.WORD,
|
|
10781
|
+
type: HighlightTreeType.OTHER,
|
|
10788
10782
|
root: tree,
|
|
10789
10783
|
originalText
|
|
10790
|
-
};
|
|
10791
|
-
|
|
10792
|
-
|
|
10793
|
-
|
|
10794
|
-
|
|
10795
|
-
|
|
10796
|
-
|
|
10797
|
-
|
|
10798
|
-
|
|
10799
|
-
|
|
10800
|
-
|
|
10801
|
-
|
|
10802
|
-
|
|
10803
|
-
|
|
10804
|
-
|
|
10805
|
-
|
|
10806
|
-
|
|
10807
|
-
|
|
10808
|
-
|
|
10809
|
-
multipleWordWrapper
|
|
10810
|
-
|
|
10811
|
-
|
|
10812
|
-
|
|
10813
|
-
|
|
10784
|
+
});
|
|
10785
|
+
lastProcessedCharIx = wordStartIx;
|
|
10786
|
+
}
|
|
10787
|
+
const originalText = text.slice(wordStartIx, wordEndIx);
|
|
10788
|
+
const escaped = Common.escapeHtmlString(originalText);
|
|
10789
|
+
const elementId = `${paragraphIx}-${sentenceIx}-${rangeWithIndex.ix}`;
|
|
10790
|
+
const word = {
|
|
10791
|
+
text: escaped,
|
|
10792
|
+
class: `${HighlightParams.wordClass} ${HighlightParams.wordClass}-${elementId}`,
|
|
10793
|
+
elementId: elementId,
|
|
10794
|
+
type: originalText === "-" ? HighlightTreeType.HYPEN : HighlightTreeType.WORD,
|
|
10795
|
+
root: tree,
|
|
10796
|
+
originalText
|
|
10797
|
+
};
|
|
10798
|
+
if (word.type === HighlightTreeType.HYPEN) {
|
|
10799
|
+
multipleWordWrapper = null;
|
|
10800
|
+
}
|
|
10801
|
+
else if (wordEndIx === nextWordStartIx) {
|
|
10802
|
+
if (!multipleWordWrapper) {
|
|
10803
|
+
multipleWordWrapper = {
|
|
10804
|
+
originalText: "",
|
|
10805
|
+
root: tree,
|
|
10806
|
+
text: "",
|
|
10807
|
+
type: HighlightTreeType.WORD_WRAPPER,
|
|
10808
|
+
children: [],
|
|
10809
|
+
class: HighlightParams.multipleWordWrapper
|
|
10810
|
+
};
|
|
10811
|
+
tree.children[sentenceIx].children.push(multipleWordWrapper);
|
|
10814
10812
|
}
|
|
10815
|
-
|
|
10816
|
-
|
|
10813
|
+
}
|
|
10814
|
+
if (multipleWordWrapper) {
|
|
10815
|
+
multipleWordWrapper.originalText += originalText;
|
|
10816
|
+
multipleWordWrapper.text += escaped;
|
|
10817
|
+
multipleWordWrapper.children.push(word);
|
|
10817
10818
|
}
|
|
10818
10819
|
else {
|
|
10819
|
-
|
|
10820
|
+
tree.children[sentenceIx].children.push(word);
|
|
10820
10821
|
}
|
|
10821
|
-
|
|
10822
|
+
words.push(word);
|
|
10823
|
+
lastProcessedCharIx = wordEndIx;
|
|
10824
|
+
});
|
|
10822
10825
|
});
|
|
10823
10826
|
return { tree, words };
|
|
10824
10827
|
}
|