@skyux/text-editor 4.0.0-beta.2 → 5.0.0-beta.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/LICENSE +21 -0
- package/bundles/skyux-text-editor.umd.js +730 -562
- package/bundles/skyux-text-editor.umd.js.map +1 -1
- package/documentation.json +1961 -0
- package/esm2015/modules/rich-text-display/rich-text-display.component.js +17 -20
- package/esm2015/modules/rich-text-display/rich-text-display.module.js +22 -17
- package/esm2015/modules/shared/forms-utility.js +1 -1
- package/esm2015/modules/shared/sky-text-editor-resources.module.js +41 -0
- package/esm2015/modules/text-editor/defaults/font-list-defaults.js +1 -1
- package/esm2015/modules/text-editor/defaults/font-size-list-defaults.js +1 -1
- package/esm2015/modules/text-editor/defaults/menu-defaults.js +1 -1
- package/esm2015/modules/text-editor/defaults/style-state-defaults.js +1 -1
- package/esm2015/modules/text-editor/defaults/toolbar-action-defaults.js +1 -1
- package/esm2015/modules/text-editor/menubar/text-editor-menubar.component.js +32 -36
- package/esm2015/modules/text-editor/services/text-editor-adapter.service.js +17 -22
- package/esm2015/modules/text-editor/services/text-editor-selection.service.js +12 -13
- package/esm2015/modules/text-editor/services/text-editor.service.js +11 -11
- package/esm2015/modules/text-editor/services/text-sanitization.service.js +12 -14
- package/esm2015/modules/text-editor/text-editor.component.js +63 -68
- package/esm2015/modules/text-editor/text-editor.module.js +68 -27
- package/esm2015/modules/text-editor/toolbar/text-editor-toolbar.component.js +40 -42
- package/esm2015/modules/text-editor/types/editor-command.js +2 -1
- package/esm2015/modules/text-editor/types/editor-setting.js +2 -1
- package/esm2015/modules/text-editor/types/font-state.js +2 -1
- package/esm2015/modules/text-editor/types/menu-type.js +2 -1
- package/esm2015/modules/text-editor/types/style-state.js +2 -1
- package/esm2015/modules/text-editor/types/text-editor-merge-field.js +2 -1
- package/esm2015/modules/text-editor/types/toolbar-action-type.js +2 -1
- package/esm2015/modules/text-editor/url-modal/text-editor-url-modal-context.js +1 -1
- package/esm2015/modules/text-editor/url-modal/text-editor-url-modal-result.js +2 -1
- package/esm2015/modules/text-editor/url-modal/text-editor-url-modal.component.js +21 -18
- package/esm2015/modules/text-editor/url-modal/text-editor-url-target.js +1 -1
- package/esm2015/public-api.js +15 -0
- package/esm2015/skyux-text-editor.js +2 -14
- package/fesm2015/skyux-text-editor.js +359 -312
- package/fesm2015/skyux-text-editor.js.map +1 -1
- package/modules/rich-text-display/rich-text-display.component.d.ts +3 -0
- package/modules/rich-text-display/rich-text-display.module.d.ts +6 -0
- package/modules/shared/sky-text-editor-resources.module.d.ts +14 -0
- package/modules/text-editor/menubar/text-editor-menubar.component.d.ts +3 -0
- package/modules/text-editor/services/text-editor-adapter.service.d.ts +3 -0
- package/modules/text-editor/services/text-editor-selection.service.d.ts +3 -0
- package/modules/text-editor/services/text-editor.service.d.ts +3 -0
- package/modules/text-editor/services/text-sanitization.service.d.ts +3 -0
- package/modules/text-editor/text-editor.component.d.ts +3 -0
- package/modules/text-editor/text-editor.module.d.ts +21 -0
- package/modules/text-editor/toolbar/text-editor-toolbar.component.d.ts +3 -0
- package/modules/text-editor/url-modal/text-editor-url-modal.component.d.ts +3 -0
- package/package.json +20 -36
- package/public-api.d.ts +12 -0
- package/skyux-text-editor.d.ts +2 -13
- package/CHANGELOG.md +0 -13
- package/bundles/skyux-text-editor.umd.min.js +0 -2
- package/bundles/skyux-text-editor.umd.min.js.map +0 -1
- package/esm2015/plugin-resources/text-editor-resources-provider.js +0 -16
- package/esm2015/plugin-resources/text-editor-resources.module.js +0 -19
- package/esm2015/public_api.js +0 -3
- package/esm5/modules/rich-text-display/rich-text-display.component.js +0 -44
- package/esm5/modules/rich-text-display/rich-text-display.module.js +0 -24
- package/esm5/modules/shared/forms-utility.js +0 -14
- package/esm5/modules/text-editor/defaults/font-list-defaults.js +0 -42
- package/esm5/modules/text-editor/defaults/font-size-list-defaults.js +0 -5
- package/esm5/modules/text-editor/defaults/menu-defaults.js +0 -8
- package/esm5/modules/text-editor/defaults/style-state-defaults.js +0 -15
- package/esm5/modules/text-editor/defaults/toolbar-action-defaults.js +0 -12
- package/esm5/modules/text-editor/menubar/text-editor-menubar.component.js +0 -199
- package/esm5/modules/text-editor/services/text-editor-adapter.service.js +0 -470
- package/esm5/modules/text-editor/services/text-editor-selection.service.js +0 -77
- package/esm5/modules/text-editor/services/text-editor.service.js +0 -49
- package/esm5/modules/text-editor/services/text-sanitization.service.js +0 -41
- package/esm5/modules/text-editor/text-editor.component.js +0 -287
- package/esm5/modules/text-editor/text-editor.module.js +0 -63
- package/esm5/modules/text-editor/toolbar/text-editor-toolbar.component.js +0 -178
- package/esm5/modules/text-editor/types/editor-command.js +0 -1
- package/esm5/modules/text-editor/types/editor-setting.js +0 -1
- package/esm5/modules/text-editor/types/font-state.js +0 -1
- package/esm5/modules/text-editor/types/menu-type.js +0 -1
- package/esm5/modules/text-editor/types/style-state.js +0 -1
- package/esm5/modules/text-editor/types/text-editor-merge-field.js +0 -1
- package/esm5/modules/text-editor/types/toolbar-action-type.js +0 -1
- package/esm5/modules/text-editor/url-modal/text-editor-url-modal-context.js +0 -10
- package/esm5/modules/text-editor/url-modal/text-editor-url-modal-result.js +0 -1
- package/esm5/modules/text-editor/url-modal/text-editor-url-modal.component.js +0 -120
- package/esm5/modules/text-editor/url-modal/text-editor-url-target.js +0 -9
- package/esm5/plugin-resources/text-editor-resources-provider.js +0 -17
- package/esm5/plugin-resources/text-editor-resources.module.js +0 -22
- package/esm5/public_api.js +0 -3
- package/esm5/skyux-text-editor.js +0 -17
- package/fesm5/skyux-text-editor.js +0 -1620
- package/fesm5/skyux-text-editor.js.map +0 -1
- package/plugin-resources/text-editor-resources-provider.d.ts +0 -5
- package/plugin-resources/text-editor-resources.module.d.ts +0 -2
- package/public_api.d.ts +0 -7
- package/skyux-text-editor.metadata.json +0 -1
- package/src/assets/img/default-anatomy.png +0 -0
- package/src/assets/img/default-option-menu-toolbar-items.png +0 -0
- package/src/assets/img/default-use-when.png +0 -0
- package/src/assets/img/modern-anatomy.png +0 -0
- package/src/assets/img/modern-option-menu-toolbar-items.png +0 -0
- package/src/assets/img/modern-use-when.png +0 -0
- package/src/assets/locales/resources_en_US.json +0 -130
|
@@ -1,11 +1,7 @@
|
|
|
1
|
-
import { __decorate } from "tslib";
|
|
2
1
|
import { Injectable } from '@angular/core';
|
|
3
|
-
import { SkyAppWindowRef } from '@skyux/core';
|
|
4
2
|
import { Subject } from 'rxjs';
|
|
5
3
|
import { STYLE_STATE_DEFAULTS } from '../defaults/style-state-defaults';
|
|
6
4
|
import { UrlTarget } from '../url-modal/text-editor-url-target';
|
|
7
|
-
import { SkyTextEditorService } from './text-editor.service';
|
|
8
|
-
import { SkyTextEditorSelectionService } from './text-editor-selection.service';
|
|
9
5
|
import * as i0 from "@angular/core";
|
|
10
6
|
import * as i1 from "./text-editor-selection.service";
|
|
11
7
|
import * as i2 from "./text-editor.service";
|
|
@@ -13,7 +9,7 @@ import * as i3 from "@skyux/core";
|
|
|
13
9
|
/**
|
|
14
10
|
* @internal
|
|
15
11
|
*/
|
|
16
|
-
|
|
12
|
+
export class SkyTextEditorAdapterService {
|
|
17
13
|
constructor(selectionService, textEditorService, windowService) {
|
|
18
14
|
this.selectionService = selectionService;
|
|
19
15
|
this.textEditorService = textEditorService;
|
|
@@ -421,22 +417,21 @@ let SkyTextEditorAdapterService = class SkyTextEditorAdapterService {
|
|
|
421
417
|
setEditorDisabled(id, focusableChildren, textEditorNativeElement, disabled) {
|
|
422
418
|
textEditorNativeElement.style.pointerEvents = disabled ? 'none' : 'auto';
|
|
423
419
|
textEditorNativeElement.setAttribute('aria-disabled', disabled ? 'true' : 'false');
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
420
|
+
/* istanbul ignore else */
|
|
421
|
+
if (focusableChildren.length > 0) {
|
|
422
|
+
focusableChildren.forEach(aFocusableChild => {
|
|
423
|
+
aFocusableChild.tabIndex = disabled ? -1 : 0;
|
|
424
|
+
});
|
|
425
|
+
}
|
|
427
426
|
this.getIframeDocumentEl(id).body.setAttribute('contenteditable', disabled ? 'false' : 'true');
|
|
428
427
|
}
|
|
429
|
-
}
|
|
430
|
-
SkyTextEditorAdapterService
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
providedIn: 'root'
|
|
439
|
-
})
|
|
440
|
-
], SkyTextEditorAdapterService);
|
|
441
|
-
export { SkyTextEditorAdapterService };
|
|
442
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC1lZGl0b3ItYWRhcHRlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHNreXV4L3RleHQtZWRpdG9yLyIsInNvdXJjZXMiOlsibW9kdWxlcy90ZXh0LWVkaXRvci9zZXJ2aWNlcy90ZXh0LWVkaXRvci1hZGFwdGVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFDTCxVQUFVLEVBQ1gsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUNMLGVBQWUsRUFDaEIsTUFBTSxhQUFhLENBQUM7QUFFckIsT0FBTyxFQUNMLE9BQU8sRUFDUixNQUFNLE1BQU0sQ0FBQztBQUVkLE9BQU8sRUFDTCxvQkFBb0IsRUFDckIsTUFBTSxrQ0FBa0MsQ0FBQztBQWtCMUMsT0FBTyxFQUNMLFNBQVMsRUFDVixNQUFNLHFDQUFxQyxDQUFDO0FBRTdDLE9BQU8sRUFDTCxvQkFBb0IsRUFDckIsTUFBTSx1QkFBdUIsQ0FBQztBQUUvQixPQUFPLEVBQ0wsNkJBQTZCLEVBQzlCLE1BQU0saUNBQWlDLENBQUM7Ozs7O0FBRXpDOztHQUVHO0FBSUgsSUFBYSwyQkFBMkIsR0FBeEMsTUFBYSwyQkFBMkI7SUFNdEMsWUFDVSxnQkFBK0MsRUFDL0MsaUJBQXVDLEVBQ3ZDLGFBQThCO1FBRjlCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBK0I7UUFDL0Msc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFzQjtRQUN2QyxrQkFBYSxHQUFiLGFBQWEsQ0FBaUI7SUFDcEMsQ0FBQztJQVJMLElBQVksT0FBTztRQUNqQixPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUM7SUFDeEMsQ0FBQztJQVFEOztPQUVHO0lBQ0ksU0FBUyxDQUNkLEVBQVUsRUFDVixhQUFnQyxFQUNoQyxVQUFtQyxFQUNuQyxXQUFvQjtRQUVwQixJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ3pCLElBQUksQ0FBQyxP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QyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbkYsaUJBQWlCLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxFQUFFO1lBQzFDLGVBQWUsQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQy9DLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsaUJBQWlCLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2pHLENBQUM7Q0FFRixDQUFBOztZQS9kNkIsNkJBQTZCO1lBQzVCLG9CQUFvQjtZQUN4QixlQUFlOzs7QUFUN0IsMkJBQTJCO0lBSHZDLFVBQVUsQ0FBQztRQUNWLFVBQVUsRUFBRSxNQUFNO0tBQ25CLENBQUM7R0FDVywyQkFBMkIsQ0FzZXZDO1NBdGVZLDJCQUEyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEluamVjdGFibGVcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7XG4gIFNreUFwcFdpbmRvd1JlZlxufSBmcm9tICdAc2t5dXgvY29yZSc7XG5cbmltcG9ydCB7XG4gIFN1YmplY3Rcbn0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7XG4gIFNUWUxFX1NUQVRFX0RFRkFVTFRTXG59IGZyb20gJy4uL2RlZmF1bHRzL3N0eWxlLXN0YXRlLWRlZmF1bHRzJztcblxuaW1wb3J0IHtcbiAgRWRpdG9yQ29tbWFuZFxufSBmcm9tICcuLi90eXBlcy9lZGl0b3ItY29tbWFuZCc7XG5cbmltcG9ydCB7XG4gIEVkaXRvclNldHRpbmdcbn0gZnJvbSAnLi4vdHlwZXMvZWRpdG9yLXNldHRpbmcnO1xuXG5pbXBvcnQge1xuICBTa3lUZXh0RWRpdG9yU3R5bGVTdGF0ZVxufSBmcm9tICcuLi90eXBlcy9zdHlsZS1zdGF0ZSc7XG5cbmltcG9ydCB7XG4gIFVybE1vZGFsUmVzdWx0XG59IGZyb20gJy4uL3VybC1tb2RhbC90ZXh0LWVkaXRvci11cmwtbW9kYWwtcmVzdWx0JztcblxuaW1wb3J0IHtcbiAgVXJsVGFyZ2V0XG59IGZyb20gJy4uL3VybC1tb2RhbC90ZXh0LWVkaXRvci11cmwtdGFyZ2V0JztcblxuaW1wb3J0IHtcbiAgU2t5VGV4dEVkaXRvclNlcnZpY2Vcbn0gZnJvbSAnLi90ZXh0LWVkaXRvci5zZXJ2aWNlJztcblxuaW1wb3J0IHtcbiAgU2t5VGV4dEVkaXRvclNlbGVjdGlvblNlcnZpY2Vcbn0gZnJvbSAnLi90ZXh0LWVkaXRvci1zZWxlY3Rpb24uc2VydmljZSc7XG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIFNreVRleHRFZGl0b3JBZGFwdGVyU2VydmljZSB7XG5cbiAgcHJpdmF0ZSBnZXQgZWRpdG9ycygpOiB7IFtrZXk6IHN0cmluZ106IEVkaXRvclNldHRpbmcgfSB7XG4gICAgcmV0dXJuIHRoaXMudGV4dEVkaXRvclNlcnZpY2UuZWRpdG9ycztcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgc2VsZWN0aW9uU2VydmljZTogU2t5VGV4dEVkaXRvclNlbGVjdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0ZXh0RWRpdG9yU2VydmljZTogU2t5VGV4dEVkaXRvclNlcnZpY2UsXG4gICAgcHJpdmF0ZSB3aW5kb3dTZXJ2aWNlOiBTa3lBcHBXaW5kb3dSZWZcbiAgKSB7IH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIHRleHQgZWRpdG9yIGluc2lkZSB0aGUgc3VwcGxpZWQgaWZyYW1lIGVsZW1lbnQuXG4gICAqL1xuICBwdWJsaWMgYWRkRWRpdG9yKFxuICAgIGlkOiBzdHJpbmcsXG4gICAgaWZyYW1lRWxlbWVudDogSFRNTElGcmFtZUVsZW1lbnQsXG4gICAgc3R5bGVTdGF0ZTogU2t5VGV4dEVkaXRvclN0eWxlU3RhdGUsXG4gICAgcGxhY2Vob2xkZXI/OiBzdHJpbmdcbiAgKTogdm9pZCB7XG4gICAgaWYgKCEoaWQgaW4gdGhpcy5lZGl0b3JzKSkge1xuICAgICAgdGhpcy5lZGl0b3JzW2lkXSA9IHRoaXMuY3JlYXRlT2JzZXJ2ZXJzKGlkLCBpZnJhbWVFbGVtZW50KTtcblxuICAgICAgY29uc3QgZG9jdW1lbnRFbCA9IHRoaXMuZ2V0SWZyYW1lRG9jdW1lbnRFbChpZCk7XG5cbiAgICAgIGNvbnN0IHN0eWxlRWwgPSBkb2N1bWVudEVsLmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG4gICAgICBzdHlsZUVsLmlubmVySFRNTCA9IGAuZWRpdG9yOmVtcHR5OmJlZm9yZSB7XG4gICAgICAgIGNvbnRlbnQ6IGF0dHIoZGF0YS1wbGFjZWhvbGRlcik7XG4gICAgICAgIGZvbnQtZmFtaWx5OiBcIkJsYWNrYmF1ZCBTYW5zXCIsIEFyaWFsLCBzYW5zLXNlcmlmO1xuICAgICAgICBjb2xvcjogIzY4NmM3MztcbiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICAgICAgZm9udC1zaXplOiAxNXB4O1xuICAgICAgICBmb250LXN0eWxlOiBpdGFsaWM7XG4gICAgICB9YDtcbiAgICAgIGRvY3VtZW50RWwuaGVhZC5hcHBlbmRDaGlsZChzdHlsZUVsKTtcblxuICAgICAgY29uc3Qgc3R5bGU6IFNreVRleHRFZGl0b3JTdHlsZVN0YXRlID0geyAuLi5TVFlMRV9TVEFURV9ERUZBVUxUUywgLi4uc3R5bGVTdGF0ZSB9O1xuICAgICAgY29uc3QgYm9keVN0eWxlID0gYGJhY2tncm91bmQtY29sb3I6ICR7c3R5bGUuYmFja0NvbG9yfTtcbiAgICAgICAgY29sb3I6ICR7c3R5bGUuZm9udENvbG9yfTtcbiAgICAgICAgZm9udC1mYW1pbHk6ICR7c3R5bGUuZm9udH07XG4gICAgICAgIGZvbnQtc2l6ZTogJHtzdHlsZS5mb250U2l6ZX1weGA7XG4gICAgICBkb2N1bWVudEVsLnF1ZXJ5U2VsZWN0b3IoJ2h0bWwnKS5zZXRBdHRyaWJ1dGUoJ2xhbmcnLCAnZW4nKTtcbiAgICAgIGRvY3VtZW50RWwuYm9keS5zZXRBdHRyaWJ1dGUoJ2NvbnRlbnRlZGl0YWJsZScsICd0cnVlJyk7XG4gICAgICBkb2N1bWVudEVsLmJvZHkuc2V0QXR0cmlidXRlKCdpZCcsIGlkKTtcbiAgICAgIGRvY3VtZW50RWwuYm9keS5zZXRBdHRyaWJ1dGUoJ3JvbGUnLCAnbWFpbicpO1xuICAgICAgZG9jdW1lbnRFbC5ib2R5LnNldEF0dHJpYnV0ZSgnY2xhc3MnLCAnZWRpdG9yJyk7XG4gICAgICBkb2N1bWVudEVsLmJvZHkuc2V0QXR0cmlidXRlKCdzdHlsZScsIGJvZHlTdHlsZSk7XG4gICAgICBkb2N1bWVudEVsLmJvZHkuc2V0QXR0cmlidXRlKCdkYXRhLXBsYWNlaG9sZGVyJywgcGxhY2Vob2xkZXIgfHwgJycpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBkaXNhYmxlRWRpdG9yKGlkOiBzdHJpbmcsIGZvY3VzYWJsZUNoaWxkcmVuOiBIVE1MRWxlbWVudFtdLCB0ZXh0RWRpdG9yTmF0aXZlRWxlbWVudDogYW55KTogdm9pZCB7XG4gICAgdGhpcy5zZXRFZGl0b3JEaXNhYmxlZChpZCwgZm9jdXNhYmxlQ2hpbGRyZW4sIHRleHRFZGl0b3JOYXRpdmVFbGVtZW50LCB0cnVlKTtcbiAgfVxuXG4gIHB1YmxpYyBlbmFibGVFZGl0b3IoaWQ6IHN0cmluZywgZm9jdXNhYmxlQ2hpbGRyZW46IEhUTUxFbGVtZW50W10sIHRleHRFZGl0b3JOYXRpdmVFbGVtZW50OiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLnNldEVkaXRvckRpc2FibGVkKGlkLCBmb2N1c2FibGVDaGlsZHJlbiwgdGV4dEVkaXRvck5hdGl2ZUVsZW1lbnQsIGZhbHNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlcyBhIGNvbW1hbmQgb24gdGhlIHRleHQgZWRpdG9yIHdpdGggdGhlIGNvcnJlc3BvbmRpbmcgaWQuXG4gICAqL1xuICBwdWJsaWMgZXhlY0NvbW1hbmQoaWQ6IHN0cmluZywgZWRpdG9yQ29tbWFuZDogRWRpdG9yQ29tbWFuZCk6IHZvaWQge1xuICAgIGlmIChpZCBpbiB0aGlzLmVkaXRvcnMpIHtcbiAgICAgIGNvbnN0IGRvY3VtZW50RWwgPSB0aGlzLmdldElmcmFtZURvY3VtZW50RWwoaWQpO1xuXG4gICAgICBpZiAodGhpcy5lZGl0b3JTZWxlY3RlZChpZCkpIHtcbiAgICAgICAgY29uc3QgY29tbWFuZElzU3VwcG9ydGVkQW5kRW5hYmxlZCA9IGRvY3VtZW50RWwuZXhlY0NvbW1hbmQoZWRpdG9yQ29tbWFuZC5jb21tYW5kLCBmYWxzZSwgZWRpdG9yQ29tbWFuZC52YWx1ZSk7XG5cbiAgICAgICAgLy8gSUUxMSBkb2Vzbid0IHN1cHBvcnQgaW5zZXJ0SFRNTFxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICBpZiAoXG4gICAgICAgICAgZWRpdG9yQ29tbWFuZC5jb21tYW5kLnRvTG93ZXJDYXNlKCkgPT09ICdpbnNlcnRodG1sJyAmJlxuICAgICAgICAgICFjb21tYW5kSXNTdXBwb3J0ZWRBbmRFbmFibGVkXG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMuaW5zZXJ0SHRtbEluSUUxMShpZCwgZWRpdG9yQ29tbWFuZC52YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmZvY3VzRWRpdG9yKGlkKTtcbiAgICAgICAgdGhpcy5lZGl0b3JzW2lkXS5jb21tYW5kQ2hhbmdlT2JzZXJ2YWJsZS5uZXh0KCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldEN1cnJlbnRTZWxlY3Rpb24oaWQ6IHN0cmluZyk6IFNlbGVjdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uU2VydmljZS5nZXRDdXJyZW50U2VsZWN0aW9uKHRoaXMuZ2V0SWZyYW1lRG9jdW1lbnRFbChpZCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBkYXRhIFVSSSB1c2luZyB0aGUgcHJvdmlkZWQgdGV4dCBzdHJpbmcuXG4gICAqIFVzZWQgdG8gZGlzcGxheSBhIG1lcmdlIGZpZWxkIGluc2lkZSBhIHN0cmluZyBvZiB0ZXh0LlxuICAgKi9cbiAgcHVibGljIGdldE1lcmdlRmllbGREYXRhVVJJKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgZG9jdW1lbnRFbCA9IHRoaXMud2luZG93U2VydmljZS5uYXRpdmVXaW5kb3cuZG9jdW1lbnQ7XG4gICAgbGV0IHRleHRUb1VzZSA9IHRleHQ7XG4gICAgaWYgKHRleHQubGVuZ3RoID4gMTgpIHtcbiAgICAgIHRleHRUb1VzZSA9IHRleHQuc3Vic3RyKDAsIDE1KSArICcuLi4nO1xuICAgIH1cblxuICAgIGNvbnN0IGNhbnZhc0VsZW1lbnQgPSBkb2N1bWVudEVsLmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuICAgIGNhbnZhc0VsZW1lbnQuc2V0QXR0cmlidXRlKCdoZWlnaHQnLCAnMjAnKTtcbiAgICBjYW52YXNFbGVtZW50LnNldEF0dHJpYnV0ZSgnd2lkdGgnLCAnMTAwJyk7XG4gICAgY2FudmFzRWxlbWVudC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSAndGFuJztcbiAgICBjYW52YXNFbGVtZW50LnN0eWxlLmJvcmRlciA9ICcxcHggc29saWQgIzAwMDAwMCc7XG4gICAgY2FudmFzRWxlbWVudC5zdHlsZS5ib3JkZXJSYWRpdXMgPSAnNXB4JztcblxuICAgIGNvbnN0IGNvbnRleHQgPSBjYW52YXNFbGVtZW50LmdldENvbnRleHQoJzJkJyk7XG4gICAgY29udGV4dC5mb250ID0gJzEycHggQXJpYWwnO1xuICAgIGNvbnRleHQudGV4dEFsaWduID0gJ2NlbnRlcic7XG4gICAgY29udGV4dC5maWxsVGV4dCh0ZXh0VG9Vc2UsIDUwLCAxNSk7XG5cbiAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdkZXN0aW5hdGlvbi1vdmVyJztcbiAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjMDBGRkZGJztcbiAgICBjb250ZXh0LmZpbGxSZWN0KDAsIDAsIDEwMCwgMjApO1xuXG4gICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnc291cmNlLW92ZXInO1xuICAgIGNvbnRleHQubGluZVdpZHRoID0gMjtcbiAgICBjb250ZXh0LnN0cm9rZVN0eWxlID0gJyNGRjAwMDAnO1xuICAgIGNvbnRleHQuc3Ryb2tlUmVjdCgwLCAwLCAxMDAsIDIwKTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGNhbnZhc0VsZW1lbnQudG9EYXRhVVJMKCdpbWFnZS9wbmcnLCAxLjApO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0U3R5bGVTdGF0ZShpZDogc3RyaW5nKTogUGFydGlhbDxTa3lUZXh0RWRpdG9yU3R5bGVTdGF0ZT4ge1xuICAgIGNvbnN0IGRvY3VtZW50RWwgPSB0aGlzLmdldElmcmFtZURvY3VtZW50RWwoaWQpO1xuXG4gICAgaWYgKHRoaXMuZWRpdG9yU2VsZWN0ZWQoaWQpKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBiYWNrQ29sb3I6IHRoaXMuZ2V0Q29sb3IoZG9jdW1lbnRFbCwgJ0JhY2tDb2xvcicpLFxuICAgICAgICBmb250Q29sb3I6IHRoaXMuZ2V0Q29sb3IoZG9jdW1lbnRFbCwgJ0ZvcmVDb2xvcicpLFxuICAgICAgICBmb250U2l6ZTogcGFyc2VJbnQodGhpcy5nZXRGb250U2l6ZShpZCksIHVuZGVmaW5lZCksXG4gICAgICAgIGZvbnQ6IGRvY3VtZW50RWwucXVlcnlDb21tYW5kVmFsdWUoJ2ZvbnRuYW1lJyksXG4gICAgICAgIGJvbGRTdGF0ZTogZG9jdW1lbnRFbC5xdWVyeUNvbW1hbmRTdGF0ZSgnQm9sZCcpLFxuICAgICAgICBpdGFsaWNTdGF0ZTogZG9jdW1lbnRFbC5xdWVyeUNvbW1hbmRTdGF0ZSgnSXRhbGljJyksXG4gICAgICAgIHVuZGVybGluZVN0YXRlOiBkb2N1bWVudEVsLnF1ZXJ5Q29tbWFuZFN0YXRlKCdVbmRlcmxpbmUnKSxcbiAgICAgICAgbGlua1N0YXRlOiB0aGlzLmhhc0xpbmsoaWQpXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgcHVibGljIGdldEVkaXRvcklubmVySHRtbChpZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBkb2N1bWVudEVsID0gdGhpcy5nZXRJZnJhbWVEb2N1bWVudEVsKGlkKTtcbiAgICBpZiAoZG9jdW1lbnRFbCkge1xuICAgICAgcmV0dXJuIHRoaXMucmVwbGFjZUh0bWxDb2Rlcyhkb2N1bWVudEVsLmJvZHkuaW5uZXJIVE1MKTtcbiAgICB9XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgcHVibGljIHNldEVkaXRvcklubmVySHRtbChpZDogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgZG9jdW1lbnRFbCA9IHRoaXMuZ2V0SWZyYW1lRG9jdW1lbnRFbChpZCk7XG4gICAgY29uc3QgZWRpdG9yQ29udGVudCA9IGRvY3VtZW50RWwuYm9keTtcbiAgICBpZiAoZWRpdG9yQ29udGVudC5pbm5lckhUTUwgIT09IHZhbHVlKSB7XG4gICAgICBlZGl0b3JDb250ZW50LmlubmVySFRNTCA9IHZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBmb2N1c0VkaXRvcihpZDogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKGlkIGluIHRoaXMuZWRpdG9ycykge1xuICAgICAgY29uc3Qgd2luZG93RWwgPSB0aGlzLmdldENvbnRlbnRXaW5kb3dFbChpZCk7XG4gICAgICBjb25zdCBpZnJhbWVEb2N1bWVudEVsID0gdGhpcy5nZXRJZnJhbWVEb2N1bWVudEVsKGlkKTtcbiAgICAgIGNvbnN0IGN1cnJlbnRTZWxlY3Rpb24gPSB0aGlzLnNlbGVjdGlvblNlcnZpY2UuZ2V0Q3VycmVudFNlbGVjdGlvblJhbmdlKGlmcmFtZURvY3VtZW50RWwsIHdpbmRvd0VsKTtcbiAgICAgIGNvbnN0IGN1cnNvcklzTm90QWN0aXZlQW5kSGFzUmVzZXQgPSBjdXJyZW50U2VsZWN0aW9uICYmIChjdXJyZW50U2VsZWN0aW9uLnN0YXJ0T2Zmc2V0ID09PSAwICYmIGN1cnJlbnRTZWxlY3Rpb24uZW5kT2Zmc2V0ID09PSAwKTtcblxuICAgICAgaWYgKCF0aGlzLmVkaXRvclNlbGVjdGVkKGlkKSB8fCBjdXJzb3JJc05vdEFjdGl2ZUFuZEhhc1Jlc2V0KSB7XG4gICAgICAgIC8vIGZvY3VzIHRoZSBlbmQgb2YgdGhlIGVkaXRvclxuICAgICAgICBjb25zdCBkb2N1bWVudEVsID0gdGhpcy53aW5kb3dTZXJ2aWNlLm5hdGl2ZVdpbmRvdy5kb2N1bWVudDtcbiAgICAgICAgY29uc3QgZWRpdG9yOiBhbnkgPSBpZnJhbWVEb2N1bWVudEVsLmJvZHk7XG4gICAgICAgIGNvbnN0IHJhbmdlID0gZG9jdW1lbnRFbC5jcmVhdGVSYW5nZSgpO1xuXG4gICAgICAgIHRoaXMuZWRpdG9yc1tpZF0uaWZyYW1lRWxlbWVudFJlZi5mb2N1cygpO1xuICAgICAgICBlZGl0b3IuZm9jdXMoKTtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgaWYgKHdpbmRvd0VsLmdldFNlbGVjdGlvbiAmJiBkb2N1bWVudEVsLmNyZWF0ZVJhbmdlKSB7XG4gICAgICAgICAgcmFuZ2Uuc2VsZWN0Tm9kZUNvbnRlbnRzKGVkaXRvcik7XG4gICAgICAgICAgcmFuZ2UuY29sbGFwc2UoZmFsc2UpO1xuICAgICAgICAgIGNvbnN0IHNlbCA9IHdpbmRvd0VsLmdldFNlbGVjdGlvbigpO1xuICAgICAgICAgIHNlbC5yZW1vdmVBbGxSYW5nZXMoKTtcbiAgICAgICAgICBzZWwuYWRkUmFuZ2UocmFuZ2UpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIElFIG9ubHlcbiAgICAgICAgICBjb25zdCB0ZXh0UmFuZ2UgPSBlZGl0b3IuY3JlYXRlVGV4dFJhbmdlKCk7XG4gICAgICAgICAgdGV4dFJhbmdlLm1vdmVUb0VsZW1lbnRUZXh0KGVkaXRvcik7XG4gICAgICAgICAgdGV4dFJhbmdlLmNvbGxhcHNlKGZhbHNlKTtcbiAgICAgICAgICB0ZXh0UmFuZ2Uuc2VsZWN0KCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEN1cnNvciBtYXkgbm90IGJlIGFjdGl2ZSwgcmVzdG9yZSBpdFxuICAgICAgICB0aGlzLmVkaXRvcnNbaWRdLmlmcmFtZUVsZW1lbnRSZWYuZm9jdXMoKTtcbiAgICAgICAgaWZyYW1lRG9jdW1lbnRFbC5ib2R5LmZvY3VzKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldExpbmsoZWRpdG9ySWQ6IHN0cmluZyk6IFVybE1vZGFsUmVzdWx0IHtcbiAgICBsZXQgbGluazogVXJsTW9kYWxSZXN1bHQgPSB1bmRlZmluZWQ7XG4gICAgY29uc3QgYW5jaG9yRWwgPSB0aGlzLmdldFNlbGVjdGVkQW5jaG9yVGFnKGVkaXRvcklkKTtcbiAgICBpZiAoYW5jaG9yRWwgJiYgYW5jaG9yRWwuaHJlZikge1xuICAgICAgbGluayA9IHtcbiAgICAgICAgdGFyZ2V0OiBhbmNob3JFbC5nZXRBdHRyaWJ1dGUoJ3RhcmdldCcpID09PSAnX2JsYW5rJyA/IFVybFRhcmdldC5OZXdXaW5kb3cgOiBVcmxUYXJnZXQuTm9uZSxcbiAgICAgICAgdXJsOiBhbmNob3JFbC5ocmVmXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiBsaW5rO1xuICB9XG5cbiAgcHVibGljIGdldFNlbGVjdGVkQW5jaG9yVGFnKGVkaXRvcklkOiBzdHJpbmcpOiBIVE1MQW5jaG9yRWxlbWVudCB7XG4gICAgY29uc3Qgc2VsZWN0ZWRFbCA9IHRoaXMuZ2V0Q3VycmVudFNlbGVjdGlvblBhcmVudEVsZW1lbnQoZWRpdG9ySWQpO1xuXG4gICAgcmV0dXJuIHRoaXMuZ2V0UGFyZW50KHNlbGVjdGVkRWwsICdhJykgYXMgSFRNTEFuY2hvckVsZW1lbnQ7XG4gIH1cblxuICBwdWJsaWMgc2F2ZVNlbGVjdGlvbihpZDogc3RyaW5nKTogUmFuZ2Uge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGlvblNlcnZpY2UuZ2V0Q3VycmVudFNlbGVjdGlvblJhbmdlKHRoaXMuZ2V0SWZyYW1lRG9jdW1lbnRFbChpZCksIHRoaXMuZ2V0Q29udGVudFdpbmRvd0VsKGlkKSk7XG4gIH1cblxuICBwdWJsaWMgc2VsZWN0RWxlbWVudChpZDogc3RyaW5nLCBlbGVtZW50OiBIVE1MRWxlbWVudCk6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0aW9uU2VydmljZS5zZWxlY3RFbGVtZW50KHRoaXMuZ2V0SWZyYW1lRG9jdW1lbnRFbChpZCksIHRoaXMuZ2V0Q29udGVudFdpbmRvd0VsKGlkKSwgZWxlbWVudCk7XG4gIH1cblxuICBwdWJsaWMgc2V0UGxhY2Vob2xkZXIoaWQ6IHN0cmluZywgcGxhY2Vob2xkZXI/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBkb2N1bWVudEVsID0gdGhpcy5nZXRJZnJhbWVEb2N1bWVudEVsKGlkKTtcbiAgICBkb2N1bWVudEVsLmJvZHkuc2V0QXR0cmlidXRlKCdkYXRhLXBsYWNlaG9sZGVyJywgcGxhY2Vob2xkZXIgfHwgJycpO1xuICB9XG5cbiAgcHVibGljIHNldEZvbnRTaXplKGlkOiBzdHJpbmcsIGZvbnRTaXplOiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBkb2MgPSB0aGlzLmdldElmcmFtZURvY3VtZW50RWwoaWQpO1xuICAgIHRoaXMuZXhlY0NvbW1hbmQoaWQsIHtjb21tYW5kOiAnZm9udFNpemUnLCB2YWx1ZTogMX0pO1xuICAgIGNvbnN0IGZvbnRFbGVtZW50czogSFRNTEVsZW1lbnRbXSA9IEFycmF5LmZyb20oZG9jLnF1ZXJ5U2VsZWN0b3JBbGwoJ2ZvbnRbc2l6ZT1cIjFcIl0nKSk7XG4gICAgZm9yIChsZXQgZWxlbWVudCBvZiBmb250RWxlbWVudHMpIHtcbiAgICAgIGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdzaXplJyk7XG4gICAgICBlbGVtZW50LnN0eWxlLmZvbnRTaXplID0gKGZvbnRTaXplICsgJ3B4Jyk7XG4gICAgfVxuICAgIHRoaXMuY2xlYW5VcEJsYW5rU3R5bGVUYWdzKGRvYyk7XG5cbiAgICB0aGlzLmZvY3VzRWRpdG9yKGlkKTtcbiAgICB0aGlzLmVkaXRvcnNbaWRdLmNvbW1hbmRDaGFuZ2VPYnNlcnZhYmxlLm5leHQoKTtcbiAgfVxuXG4gIHB1YmxpYyByZW1vdmVPYnNlcnZlcnMoc2V0dGluZzogRWRpdG9yU2V0dGluZyk6IHZvaWQge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgY29uc3QgZG9jdW1lbnRFbCA9IHNldHRpbmcuaWZyYW1lRWxlbWVudFJlZi5jb250ZW50V2luZG93ID9cbiAgICAgICBzZXR0aW5nLmlmcmFtZUVsZW1lbnRSZWYuY29udGVudFdpbmRvdy5kb2N1bWVudCA6XG4gICAgICAgc2V0dGluZy5pZnJhbWVFbGVtZW50UmVmLmNvbnRlbnREb2N1bWVudDtcbiAgICBzZXR0aW5nLnNlbGVjdGlvbkNoYW5nZU9ic2VydmFibGUuY29tcGxldGUoKTtcbiAgICBzZXR0aW5nLmNsaWNrT2JzZXJ2YWJsZS5jb21wbGV0ZSgpO1xuICAgIHNldHRpbmcuY29tbWFuZENoYW5nZU9ic2VydmFibGUuY29tcGxldGUoKTtcbiAgICBkb2N1bWVudEVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3NlbGVjdGlvbmNoYW5nZScsIHNldHRpbmcuc2VsZWN0aW9uTGlzdGVuZXIpO1xuICAgIGRvY3VtZW50RWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignaW5wdXQnLCBzZXR0aW5nLnNlbGVjdGlvbkxpc3RlbmVyKTtcbiAgICBkb2N1bWVudEVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIHNldHRpbmcuY2xpY2tMaXN0ZW5lcik7XG4gICAgZG9jdW1lbnRFbC5ib2R5LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Bhc3RlJywgc2V0dGluZy5wYXN0ZUxpc3RlbmVyKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q29udGVudFdpbmRvd0VsKGlkOiBzdHJpbmcpOiBXaW5kb3cge1xuICAgIHJldHVybiB0aGlzLmVkaXRvcnNbaWRdLmlmcmFtZUVsZW1lbnRSZWYuY29udGVudFdpbmRvdztcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q2hpbGRTZWxlY3RlZEFuY2hvclRhZ3MoZWRpdG9ySWQ6IHN0cmluZyk6IEVsZW1lbnRbXSB7XG4gICAgY29uc3Qgc2VsZWN0ZWRSYW5nZSA9IHRoaXMuZ2V0Q3VycmVudFNlbGVjdGlvbihlZGl0b3JJZCkuZ2V0UmFuZ2VBdCgwKTtcbiAgICBpZiAoc2VsZWN0ZWRSYW5nZS50b1N0cmluZygpLmxlbmd0aCA8PSAwKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgY29uc3QgcGFyZW50RWxlbWVudCA9IHRoaXMuZ2V0Q3VycmVudFNlbGVjdGlvblBhcmVudEVsZW1lbnQoZWRpdG9ySWQpO1xuICAgIGNvbnN0IGNoaWxkRWxlbWVudHMgPSBwYXJlbnRFbGVtZW50ID8gQXJyYXkuZnJvbShwYXJlbnRFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2EnKSkgOiBbXTtcblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgcmV0dXJuIGNoaWxkRWxlbWVudHMuZmlsdGVyKGVsZW1lbnQgPT4ge1xuXG4gICAgICAvLyBJRSBzcGVjaWZpY1xuICAgICAgaWYgKCFzZWxlY3RlZFJhbmdlLmludGVyc2VjdHNOb2RlKSB7XG4gICAgICAgIGlmICghZWxlbWVudCB8fCAhZWxlbWVudC5ocmVmKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRlbXBSYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7XG4gICAgICAgIHRlbXBSYW5nZS5zZWxlY3ROb2RlQ29udGVudHMoZWxlbWVudCk7XG4gICAgICAgIHJldHVybiAoc2VsZWN0ZWRSYW5nZS5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2UuU1RBUlRfVE9fU1RBUlQsIHRlbXBSYW5nZSkgIT09IC0xXG4gICAgICAgICAgJiYgc2VsZWN0ZWRSYW5nZS5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2UuU1RBUlRfVE9fRU5ELCB0ZW1wUmFuZ2UpICE9PSAxKSB8fFxuICAgICAgICAgIChzZWxlY3RlZFJhbmdlLmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZS5FTkRfVE9fU1RBUlQsIHRlbXBSYW5nZSkgIT09IC0xXG4gICAgICAgICAgJiYgc2VsZWN0ZWRSYW5nZS5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2UuRU5EX1RPX0VORCwgdGVtcFJhbmdlKSAhPT0gMSk7XG4gICAgICB9XG5cbiAgICAgIC8vIE5vcm1hbCBub24tSUVcbiAgICAgIHJldHVybiAhIWVsZW1lbnQgJiYgISFlbGVtZW50LmhyZWYgJiYgc2VsZWN0ZWRSYW5nZS5pbnRlcnNlY3RzTm9kZShlbGVtZW50KTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0SWZyYW1lRG9jdW1lbnRFbChpZDogc3RyaW5nKTogRG9jdW1lbnQge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgaWYgKCEoaWQgaW4gdGhpcy5lZGl0b3JzKSkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBjb25zdCBjb250ZW50V2luZG93RWwgPSB0aGlzLmdldENvbnRlbnRXaW5kb3dFbChpZCk7XG4gICAgaWYgKGNvbnRlbnRXaW5kb3dFbCkge1xuICAgICAgcmV0dXJuIGNvbnRlbnRXaW5kb3dFbC5kb2N1bWVudDtcbiAgICB9XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIHJldHVybiB0aGlzLmVkaXRvcnNbaWRdLmlmcmFtZUVsZW1lbnRSZWYuY29udGVudERvY3VtZW50O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRGb250U2l6ZShpZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBsZXQgZm9udFNpemUgPSBTVFlMRV9TVEFURV9ERUZBVUxUUy5mb250U2l6ZS50b1N0cmluZygpO1xuICAgIGNvbnN0IHNlbGVjdGlvbiA9IHRoaXMuZ2V0Q3VycmVudFNlbGVjdGlvbihpZCk7XG4gICAgaWYgKFxuICAgICAgc2VsZWN0aW9uICYmXG4gICAgICBzZWxlY3Rpb24uYW5jaG9yTm9kZSAmJlxuICAgICAgc2VsZWN0aW9uLmFuY2hvck5vZGUucGFyZW50RWxlbWVudFxuICAgICkge1xuICAgICAgbGV0IGVsZW1lbnQgPSBzZWxlY3Rpb24uYW5jaG9yTm9kZTtcbiAgICAgIGlmIChlbGVtZW50Lm5vZGVUeXBlICE9PSAxKSB7XG4gICAgICAgIGVsZW1lbnQgPSBlbGVtZW50LnBhcmVudEVsZW1lbnQ7XG4gICAgICB9XG4gICAgICBjb25zdCBjb21wdXRlZFN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWxlbWVudCBhcyBFbGVtZW50KTtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICBpZiAoY29tcHV0ZWRTdHlsZSkge1xuICAgICAgICBmb250U2l6ZSA9IGNvbXB1dGVkU3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSgnZm9udC1zaXplJyk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmb250U2l6ZTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlT2JzZXJ2ZXJzKGlkOiBzdHJpbmcsIGVsZW1lbnQ6IEhUTUxJRnJhbWVFbGVtZW50KTogRWRpdG9yU2V0dGluZyB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBjb25zdCBkb2N1bWVudEVsID0gZWxlbWVudC5jb250ZW50V2luZG93ID9cbiAgICAgIGVsZW1lbnQuY29udGVudFdpbmRvdy5kb2N1bWVudCA6XG4gICAgICBlbGVtZW50LmNvbnRlbnREb2N1bWVudDtcblxuICAgIC8vIEZpcmVmb3ggYnVnIHdoZXJlIHdlIG5lZWQgdG8gb3Blbi9jbG9zZSB0byBjYW5jZWwgbG9hZCBzbyBpdCBkb2Vzbid0IG92ZXJ3cml0ZSBhdHRyc1xuICAgIGRvY3VtZW50RWwub3BlbigpO1xuICAgIGRvY3VtZW50RWwuY2xvc2UoKTtcblxuICAgIGNvbnN0IHNlbGVjdGlvbk9ic2VydmFibGUgPSBuZXcgU3ViamVjdCgpO1xuICAgIGNvbnN0IHNlbGVjdGlvbkxpc3RlbmVyID0gKCkgPT4gc2VsZWN0aW9uT2JzZXJ2YWJsZS5uZXh0KCk7XG4gICAgY29uc3QgY2xpY2tPYnNlcnZhYmxlID0gbmV3IFN1YmplY3QoKTtcbiAgICBjb25zdCBjbGlja0xpc3RlbmVyID0gKCkgPT4gY2xpY2tPYnNlcnZhYmxlLm5leHQoKTtcbiAgICBjb25zdCBwYXN0ZUxpc3RlbmVyID0gdGhpcy5nZXRQYXN0ZU92ZXJyaWRlKGlkKTtcblxuICAgIGRvY3VtZW50RWwuYWRkRXZlbnRMaXN0ZW5lcignc2VsZWN0aW9uY2hhbmdlJywgc2VsZWN0aW9uTGlzdGVuZXIpO1xuICAgIGRvY3VtZW50RWwuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCBzZWxlY3Rpb25MaXN0ZW5lcik7XG4gICAgZG9jdW1lbnRFbC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCBjbGlja0xpc3RlbmVyKTtcbiAgICBkb2N1bWVudEVsLmJvZHkuYWRkRXZlbnRMaXN0ZW5lcigncGFzdGUnLCBwYXN0ZUxpc3RlbmVyKTtcbiAgICByZXR1cm4ge1xuICAgICAgaWZyYW1lRWxlbWVudFJlZjogZWxlbWVudCxcbiAgICAgIHNlbGVjdGlvbkxpc3RlbmVyOiBzZWxlY3Rpb25MaXN0ZW5lcixcbiAgICAgIGNsaWNrTGlzdGVuZXI6IGNsaWNrTGlzdGVuZXIsXG4gICAgICBwYXN0ZUxpc3RlbmVyOiBwYXN0ZUxpc3RlbmVyLFxuICAgICAgc2VsZWN0aW9uQ2hhbmdlT2JzZXJ2YWJsZTogc2VsZWN0aW9uT2JzZXJ2YWJsZSxcbiAgICAgIGNsaWNrT2JzZXJ2YWJsZTogY2xpY2tPYnNlcnZhYmxlLFxuICAgICAgY29tbWFuZENoYW5nZU9ic2VydmFibGU6IG5ldyBTdWJqZWN0KClcbiAgICB9O1xuICB9XG5cbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgcHJpdmF0ZSBnZXRQYXN0ZU92ZXJyaWRlKGlkOiBzdHJpbmcpOiAoZTogQ2xpcGJvYXJkRXZlbnQpID0+IHZvaWQge1xuICAgIHJldHVybiAoZTogQ2xpcGJvYXJkRXZlbnQpOiB2b2lkID0+IHtcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGNvbnN0IHRleHQgPSBlLmNsaXBib2FyZERhdGEuZ2V0RGF0YSgndGV4dC9wbGFpbicpO1xuICAgICAgdGhpcy5leGVjQ29tbWFuZChpZCwgeyBjb21tYW5kOiAnaW5zZXJ0SFRNTCcsIHZhbHVlOiB0ZXh0IH0pO1xuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGdldEN1cnJlbnRTZWxlY3Rpb25QYXJlbnRFbGVtZW50KGlkOiBzdHJpbmcpOiBFbGVtZW50IHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3Rpb25TZXJ2aWNlLmdldEN1cnJlbnRTZWxlY3Rpb25QYXJlbnRFbGVtZW50KHRoaXMuZ2V0SWZyYW1lRG9jdW1lbnRFbChpZCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDb2xvcihkb2N1bWVudEVsOiBEb2N1bWVudCwgc2VsZWN0b3I6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgY29tbWFuZFZhbHVlID0gZG9jdW1lbnRFbC5xdWVyeUNvbW1hbmRWYWx1ZShzZWxlY3Rvcik7XG5cbiAgICAvLyBFZGdlIGlzIHdlaXJkIGFuZCByZXR1cm5zIG51bWJlcnNcbiAgICBpZiAodHlwZW9mIGNvbW1hbmRWYWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLWJpdHdpc2VcbiAgICAgIHJldHVybiAncmdiKCcgKyAoY29tbWFuZFZhbHVlICYgMHhGRikgKyAnLCAnICtcbiAgICAgICAgICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby1iaXR3aXNlXG4gICAgICAgICAgICAgICAgICAgICgoY29tbWFuZFZhbHVlICYgMHhGRjAwKSA+PiA4KSArICcsICcgK1xuICAgICAgICAgICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLWJpdHdpc2VcbiAgICAgICAgICAgICAgICAgICAgKChjb21tYW5kVmFsdWUgJiAweEZGMDAwMCkgPj4gMTYgKSArICcpJztcbiAgICB9XG5cbiAgICAvLyBGaXJlZm94IHVzZXMgJ1RyYW5zcGFyZW50JyBpbnN0ZWFkIG9mIGEgY29sb3IgdmFsdWVcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIGlmIChjb21tYW5kVmFsdWUudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpID09PSAndHJhbnNwYXJlbnQnKSB7XG4gICAgICByZXR1cm4gU1RZTEVfU1RBVEVfREVGQVVMVFMuYmFja0NvbG9yO1xuICAgIH1cbiAgICByZXR1cm4gY29tbWFuZFZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSBoYXNMaW5rKGVkaXRvcklkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCBhbmNob3JFbCA9IHRoaXMuZ2V0U2VsZWN0ZWRBbmNob3JUYWcoZWRpdG9ySWQpO1xuICAgIGNvbnN0IGNoaWxkQW5jaG9yRWxzID0gdGhpcy5nZXRDaGlsZFNlbGVjdGVkQW5jaG9yVGFncyhlZGl0b3JJZCk7XG4gICAgcmV0dXJuIGNoaWxkQW5jaG9yRWxzLmxlbmd0aCA+IDAgfHwgKCEhYW5jaG9yRWwgJiYgISFhbmNob3JFbC5ocmVmKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0UGFyZW50KGVsZW1lbnQ6IEVsZW1lbnQsIHRhZzogc3RyaW5nKTogRWxlbWVudCB7XG4gICAgbGV0IGN1cnJlbnROb2RlID0gZWxlbWVudDtcbiAgICB3aGlsZSAoY3VycmVudE5vZGUgJiYgY3VycmVudE5vZGUudGFnTmFtZS50b1VwcGVyQ2FzZSgpICE9PSAnQk9EWScpIHtcbiAgICAgIGlmIChjdXJyZW50Tm9kZS50YWdOYW1lLnRvVXBwZXJDYXNlKCkgPT09IHRhZy50b1VwcGVyQ2FzZSgpKSB7XG4gICAgICAgIHJldHVybiBjdXJyZW50Tm9kZTtcbiAgICAgIH1cbiAgICAgIGN1cnJlbnROb2RlID0gY3VycmVudE5vZGUucGFyZW50RWxlbWVudDtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByaXZhdGUgZWRpdG9yU2VsZWN0ZWQoaWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGRvY3VtZW50RWwgPSB0aGlzLmdldElmcmFtZURvY3VtZW50RWwoaWQpO1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGlvblNlcnZpY2UuaXNFbGVtZW50U2VsZWN0ZWQoZG9jdW1lbnRFbCwgZG9jdW1lbnRFbC5ib2R5KTtcbiAgfVxuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIHByaXZhdGUgaW5zZXJ0SHRtbEluSUUxMShpZDogc3RyaW5nLCBodG1sOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBkb2N1bWVudEVsID0gdGhpcy5nZXRJZnJhbWVEb2N1bWVudEVsKGlkKTtcbiAgICBjb25zdCB3aW5kb3dFbCA9IHRoaXMuZ2V0Q29udGVudFdpbmRvd0VsKGlkKTtcbiAgICBjb25zdCBzZWwgPSB3aW5kb3dFbC5nZXRTZWxlY3Rpb24oKTtcbiAgICBpZiAoc2VsLmdldFJhbmdlQXQgJiYgc2VsLnJhbmdlQ291bnQpIHtcbiAgICAgIGxldCByYW5nZSA9IHNlbC5nZXRSYW5nZUF0KDApO1xuICAgICAgcmFuZ2UuZGVsZXRlQ29udGVudHMoKTtcblxuICAgICAgY29uc3QgZWwgPSBkb2N1bWVudEVsLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgZWwuaW5uZXJIVE1MID0gaHRtbDtcbiAgICAgIGxldCBmcmFnID0gZG9jdW1lbnRFbC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksIG5vZGUsIGxhc3ROb2RlO1xuICAgICAgd2hpbGUgKGVsLmZpcnN0Q2hpbGQpIHtcbiAgICAgICAgbm9kZSA9IGVsLmZpcnN0Q2hpbGQ7XG4gICAgICAgIGxhc3ROb2RlID0gZnJhZy5hcHBlbmRDaGlsZChub2RlKTtcbiAgICAgIH1cbiAgICAgIHJhbmdlLmluc2VydE5vZGUoZnJhZyk7XG5cbiAgICAgIC8vIFByZXNlcnZlIHRoZSBzZWxlY3Rpb25cbiAgICAgIGlmIChsYXN0Tm9kZSkge1xuICAgICAgICByYW5nZSA9IHJhbmdlLmNsb25lUmFuZ2UoKTtcbiAgICAgICAgcmFuZ2Uuc2V0U3RhcnRBZnRlcihsYXN0Tm9kZSk7XG4gICAgICAgIHJhbmdlLmNvbGxhcHNlKHRydWUpO1xuICAgICAgICBzZWwucmVtb3ZlQWxsUmFuZ2VzKCk7XG4gICAgICAgIHNlbC5hZGRSYW5nZShyYW5nZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjbGVhblVwQmxhbmtTdHlsZVRhZ3MoZG9jOiBEb2N1bWVudCk6IHZvaWQge1xuICAgIGNvbnN0IG9ycGhhbkVsZW1lbnRzOiBIVE1MRWxlbWVudFtdID0gQXJyYXkuZnJvbShkb2MucXVlcnlTZWxlY3RvckFsbCgnZm9udCxzcGFuLCpbc3R5bGU9XCJcIl0nKSk7XG4gICAgZm9yIChsZXQgZWxlbWVudCBvZiBvcnBoYW5FbGVtZW50cykge1xuICAgICAgaWYgKCFlbGVtZW50LmdldEF0dHJpYnV0ZSgnc3R5bGUnKSkge1xuICAgICAgICBlbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgnc3R5bGUnKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgcmVtb3ZhYmxlRWxlbWVudHMgPSBvcnBoYW5FbGVtZW50cy5maWx0ZXIoZWxlbWVudCA9PiB7XG4gICAgICBjb25zdCB0YWdOYW1lID0gZWxlbWVudC50YWdOYW1lLnRvVXBwZXJDYXNlKCk7XG4gICAgICByZXR1cm4gKHRhZ05hbWUgPT09ICdGT05UJyB8fCB0YWdOYW1lID09PSAnU1BBTicpICYmXG4gICAgICAgIChlbGVtZW50LmF0dHJpYnV0ZXMubGVuZ3RoID09PSAwIHx8ICFlbGVtZW50Lmhhc0NoaWxkTm9kZXMpO1xuICAgIH0pO1xuICAgIGZvciAobGV0IGVsZW1lbnQgb2YgcmVtb3ZhYmxlRWxlbWVudHMpIHtcbiAgICAgIGNvbnN0IHBhcmVudCA9IGVsZW1lbnQucGFyZW50Tm9kZTtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICBpZiAocGFyZW50KSB7XG4gICAgICAgIHdoaWxlIChlbGVtZW50LmZpcnN0Q2hpbGQpIHtcbiAgICAgICAgICBwYXJlbnQuaW5zZXJ0QmVmb3JlKGVsZW1lbnQuZmlyc3RDaGlsZCwgZWxlbWVudCk7XG4gICAgICAgIH1cbiAgICAgICAgcGFyZW50LnJlbW92ZUNoaWxkKGVsZW1lbnQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIENlcnRhaW4gdmFsdWVzIGFyZSBlbmNvZGVkIGluIGh0bWwgYW5kIG5lZWQgdG8gYmUgZGVjb2RlZFxuICBwcml2YXRlIHJlcGxhY2VIdG1sQ29kZXMoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBzdHIucmVwbGFjZSgvJm5ic3A7LywgU3RyaW5nLmZyb21DaGFyQ29kZSgxNjApKVxuICAgICAgLnJlcGxhY2UoLyZsdDsvZywgJzwnKVxuICAgICAgLnJlcGxhY2UoLyZndDsvZywgJz4nKVxuICAgICAgLnJlcGxhY2UoLyZhbXA7L2csICcmJyk7XG4gIH1cblxuICBwcml2YXRlIHNldEVkaXRvckRpc2FibGVkKGlkOiBzdHJpbmcsIGZvY3VzYWJsZUNoaWxkcmVuOiBIVE1MRWxlbWVudFtdLCB0ZXh0RWRpdG9yTmF0aXZlRWxlbWVudDogYW55LCBkaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRleHRFZGl0b3JOYXRpdmVFbGVtZW50LnN0eWxlLnBvaW50ZXJFdmVudHMgPSBkaXNhYmxlZCA/ICdub25lJyA6ICdhdXRvJztcbiAgICB0ZXh0RWRpdG9yTmF0aXZlRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtZGlzYWJsZWQnLCBkaXNhYmxlZCA/ICd0cnVlJyA6ICdmYWxzZScpO1xuICAgIGZvY3VzYWJsZUNoaWxkcmVuLmZvckVhY2goYUZvY3VzYWJsZUNoaWxkID0+IHtcbiAgICAgIGFGb2N1c2FibGVDaGlsZC50YWJJbmRleCA9IGRpc2FibGVkID8gLTEgOiAwO1xuICAgIH0pO1xuICAgIHRoaXMuZ2V0SWZyYW1lRG9jdW1lbnRFbChpZCkuYm9keS5zZXRBdHRyaWJ1dGUoJ2NvbnRlbnRlZGl0YWJsZScsIGRpc2FibGVkID8gJ2ZhbHNlJyA6ICd0cnVlJyk7XG4gIH1cblxufVxuIl19
|
|
428
|
+
}
|
|
429
|
+
SkyTextEditorAdapterService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.7", ngImport: i0, type: SkyTextEditorAdapterService, deps: [{ token: i1.SkyTextEditorSelectionService }, { token: i2.SkyTextEditorService }, { token: i3.SkyAppWindowRef }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
430
|
+
SkyTextEditorAdapterService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.7", ngImport: i0, type: SkyTextEditorAdapterService, providedIn: 'root' });
|
|
431
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.7", ngImport: i0, type: SkyTextEditorAdapterService, decorators: [{
|
|
432
|
+
type: Injectable,
|
|
433
|
+
args: [{
|
|
434
|
+
providedIn: 'root'
|
|
435
|
+
}]
|
|
436
|
+
}], ctorParameters: function () { return [{ type: i1.SkyTextEditorSelectionService }, { type: i2.SkyTextEditorService }, { type: i3.SkyAppWindowRef }]; } });
|
|
437
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC1lZGl0b3ItYWRhcHRlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGV4dC1lZGl0b3Ivc3JjL21vZHVsZXMvdGV4dC1lZGl0b3Ivc2VydmljZXMvdGV4dC1lZGl0b3ItYWRhcHRlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxVQUFVLEVBQ1gsTUFBTSxlQUFlLENBQUM7QUFNdkIsT0FBTyxFQUNMLE9BQU8sRUFDUixNQUFNLE1BQU0sQ0FBQztBQUVkLE9BQU8sRUFDTCxvQkFBb0IsRUFDckIsTUFBTSxrQ0FBa0MsQ0FBQztBQWtCMUMsT0FBTyxFQUNMLFNBQVMsRUFDVixNQUFNLHFDQUFxQyxDQUFDOzs7OztBQVU3Qzs7R0FFRztBQUlILE1BQU0sT0FBTywyQkFBMkI7SUFNdEMsWUFDVSxnQkFBK0MsRUFDL0MsaUJBQXVDLEVBQ3ZDLGFBQThCO1FBRjlCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBK0I7UUFDL0Msc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFzQjtRQUN2QyxrQkFBYSxHQUFiLGFBQWEsQ0FBaUI7SUFDcEMsQ0FBQztJQVJMLElBQVksT0FBTztRQUNqQixPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUM7SUFDeEMsQ0FBQztJQVFEOztPQUVHO0lBQ0ksU0FBUyxDQUNkLEVBQVUsRUFDVixhQUFnQyxFQUNoQyxVQUFtQyxFQUNuQyxXQUFvQjtRQUVwQixJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ3pCLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxFQUFFLEVBQUUsYUFBYSxDQUFDLENBQUM7WUFFM0QsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEVBQUUsQ0FBQyxDQUFDO1lB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QzFDLGVBQWUsQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQy9DLENBQUMsQ0FBQyxDQUFDO1NBQ0o7UUFDRCxJQUFJLENBQUMsbUJBQW1CLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxpQkFBaUIsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDakcsQ0FBQzs7d0hBdmVVLDJCQUEyQjs0SEFBM0IsMkJBQTJCLGNBRjFCLE1BQU07MkZBRVAsMkJBQTJCO2tCQUh2QyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEluamVjdGFibGVcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7XG4gIFNreUFwcFdpbmRvd1JlZlxufSBmcm9tICdAc2t5dXgvY29yZSc7XG5cbmltcG9ydCB7XG4gIFN1YmplY3Rcbn0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7XG4gIFNUWUxFX1NUQVRFX0RFRkFVTFRTXG59IGZyb20gJy4uL2RlZmF1bHRzL3N0eWxlLXN0YXRlLWRlZmF1bHRzJztcblxuaW1wb3J0IHtcbiAgRWRpdG9yQ29tbWFuZFxufSBmcm9tICcuLi90eXBlcy9lZGl0b3ItY29tbWFuZCc7XG5cbmltcG9ydCB7XG4gIEVkaXRvclNldHRpbmdcbn0gZnJvbSAnLi4vdHlwZXMvZWRpdG9yLXNldHRpbmcnO1xuXG5pbXBvcnQge1xuICBTa3lUZXh0RWRpdG9yU3R5bGVTdGF0ZVxufSBmcm9tICcuLi90eXBlcy9zdHlsZS1zdGF0ZSc7XG5cbmltcG9ydCB7XG4gIFVybE1vZGFsUmVzdWx0XG59IGZyb20gJy4uL3VybC1tb2RhbC90ZXh0LWVkaXRvci11cmwtbW9kYWwtcmVzdWx0JztcblxuaW1wb3J0IHtcbiAgVXJsVGFyZ2V0XG59IGZyb20gJy4uL3VybC1tb2RhbC90ZXh0LWVkaXRvci11cmwtdGFyZ2V0JztcblxuaW1wb3J0IHtcbiAgU2t5VGV4dEVkaXRvclNlcnZpY2Vcbn0gZnJvbSAnLi90ZXh0LWVkaXRvci5zZXJ2aWNlJztcblxuaW1wb3J0IHtcbiAgU2t5VGV4dEVkaXRvclNlbGVjdGlvblNlcnZpY2Vcbn0gZnJvbSAnLi90ZXh0LWVkaXRvci1zZWxlY3Rpb24uc2VydmljZSc7XG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIFNreVRleHRFZGl0b3JBZGFwdGVyU2VydmljZSB7XG5cbiAgcHJpdmF0ZSBnZXQgZWRpdG9ycygpOiB7IFtrZXk6IHN0cmluZ106IEVkaXRvclNldHRpbmcgfSB7XG4gICAgcmV0dXJuIHRoaXMudGV4dEVkaXRvclNlcnZpY2UuZWRpdG9ycztcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgc2VsZWN0aW9uU2VydmljZTogU2t5VGV4dEVkaXRvclNlbGVjdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0ZXh0RWRpdG9yU2VydmljZTogU2t5VGV4dEVkaXRvclNlcnZpY2UsXG4gICAgcHJpdmF0ZSB3aW5kb3dTZXJ2aWNlOiBTa3lBcHBXaW5kb3dSZWZcbiAgKSB7IH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIHRleHQgZWRpdG9yIGluc2lkZSB0aGUgc3VwcGxpZWQgaWZyYW1lIGVsZW1lbnQuXG4gICAqL1xuICBwdWJsaWMgYWRkRWRpdG9yKFxuICAgIGlkOiBzdHJpbmcsXG4gICAgaWZyYW1lRWxlbWVudDogSFRNTElGcmFtZUVsZW1lbnQsXG4gICAgc3R5bGVTdGF0ZTogU2t5VGV4dEVkaXRvclN0eWxlU3RhdGUsXG4gICAgcGxhY2Vob2xkZXI/OiBzdHJpbmdcbiAgKTogdm9pZCB7XG4gICAgaWYgKCEoaWQgaW4gdGhpcy5lZGl0b3JzKSkge1xuICAgICAgdGhpcy5lZGl0b3JzW2lkXSA9IHRoaXMuY3JlYXRlT2JzZXJ2ZXJzKGlkLCBpZnJhbWVFbGVtZW50KTtcblxuICAgICAgY29uc3QgZG9jdW1lbnRFbCA9IHRoaXMuZ2V0SWZyYW1lRG9jdW1lbnRFbChpZCk7XG5cbiAgICAgIGNvbnN0IHN0eWxlRWwgPSBkb2N1bWVudEVsLmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG4gICAgICBzdHlsZUVsLmlubmVySFRNTCA9IGAuZWRpdG9yOmVtcHR5OmJlZm9yZSB7XG4gICAgICAgIGNvbnRlbnQ6IGF0dHIoZGF0YS1wbGFjZWhvbGRlcik7XG4gICAgICAgIGZvbnQtZmFtaWx5OiBcIkJsYWNrYmF1ZCBTYW5zXCIsIEFyaWFsLCBzYW5zLXNlcmlmO1xuICAgICAgICBjb2xvcjogIzY4NmM3MztcbiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICAgICAgZm9udC1zaXplOiAxNXB4O1xuICAgICAgICBmb250LXN0eWxlOiBpdGFsaWM7XG4gICAgICB9YDtcbiAgICAgIGRvY3VtZW50RWwuaGVhZC5hcHBlbmRDaGlsZChzdHlsZUVsKTtcblxuICAgICAgY29uc3Qgc3R5bGU6IFNreVRleHRFZGl0b3JTdHlsZVN0YXRlID0geyAuLi5TVFlMRV9TVEFURV9ERUZBVUxUUywgLi4uc3R5bGVTdGF0ZSB9O1xuICAgICAgY29uc3QgYm9keVN0eWxlID0gYGJhY2tncm91bmQtY29sb3I6ICR7c3R5bGUuYmFja0NvbG9yfTtcbiAgICAgICAgY29sb3I6ICR7c3R5bGUuZm9udENvbG9yfTtcbiAgICAgICAgZm9udC1mYW1pbHk6ICR7c3R5bGUuZm9udH07XG4gICAgICAgIGZvbnQtc2l6ZTogJHtzdHlsZS5mb250U2l6ZX1weGA7XG4gICAgICBkb2N1bWVudEVsLnF1ZXJ5U2VsZWN0b3IoJ2h0bWwnKS5zZXRBdHRyaWJ1dGUoJ2xhbmcnLCAnZW4nKTtcbiAgICAgIGRvY3VtZW50RWwuYm9keS5zZXRBdHRyaWJ1dGUoJ2NvbnRlbnRlZGl0YWJsZScsICd0cnVlJyk7XG4gICAgICBkb2N1bWVudEVsLmJvZHkuc2V0QXR0cmlidXRlKCdpZCcsIGlkKTtcbiAgICAgIGRvY3VtZW50RWwuYm9keS5zZXRBdHRyaWJ1dGUoJ3JvbGUnLCAnbWFpbicpO1xuICAgICAgZG9jdW1lbnRFbC5ib2R5LnNldEF0dHJpYnV0ZSgnY2xhc3MnLCAnZWRpdG9yJyk7XG4gICAgICBkb2N1bWVudEVsLmJvZHkuc2V0QXR0cmlidXRlKCdzdHlsZScsIGJvZHlTdHlsZSk7XG4gICAgICBkb2N1bWVudEVsLmJvZHkuc2V0QXR0cmlidXRlKCdkYXRhLXBsYWNlaG9sZGVyJywgcGxhY2Vob2xkZXIgfHwgJycpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBkaXNhYmxlRWRpdG9yKGlkOiBzdHJpbmcsIGZvY3VzYWJsZUNoaWxkcmVuOiBIVE1MRWxlbWVudFtdLCB0ZXh0RWRpdG9yTmF0aXZlRWxlbWVudDogYW55KTogdm9pZCB7XG4gICAgdGhpcy5zZXRFZGl0b3JEaXNhYmxlZChpZCwgZm9jdXNhYmxlQ2hpbGRyZW4sIHRleHRFZGl0b3JOYXRpdmVFbGVtZW50LCB0cnVlKTtcbiAgfVxuXG4gIHB1YmxpYyBlbmFibGVFZGl0b3IoaWQ6IHN0cmluZywgZm9jdXNhYmxlQ2hpbGRyZW46IEhUTUxFbGVtZW50W10sIHRleHRFZGl0b3JOYXRpdmVFbGVtZW50OiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLnNldEVkaXRvckRpc2FibGVkKGlkLCBmb2N1c2FibGVDaGlsZHJlbiwgdGV4dEVkaXRvck5hdGl2ZUVsZW1lbnQsIGZhbHNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlcyBhIGNvbW1hbmQgb24gdGhlIHRleHQgZWRpdG9yIHdpdGggdGhlIGNvcnJlc3BvbmRpbmcgaWQuXG4gICAqL1xuICBwdWJsaWMgZXhlY0NvbW1hbmQoaWQ6IHN0cmluZywgZWRpdG9yQ29tbWFuZDogRWRpdG9yQ29tbWFuZCk6IHZvaWQge1xuICAgIGlmIChpZCBpbiB0aGlzLmVkaXRvcnMpIHtcbiAgICAgIGNvbnN0IGRvY3VtZW50RWwgPSB0aGlzLmdldElmcmFtZURvY3VtZW50RWwoaWQpO1xuXG4gICAgICBpZiAodGhpcy5lZGl0b3JTZWxlY3RlZChpZCkpIHtcbiAgICAgICAgY29uc3QgY29tbWFuZElzU3VwcG9ydGVkQW5kRW5hYmxlZCA9IGRvY3VtZW50RWwuZXhlY0NvbW1hbmQoZWRpdG9yQ29tbWFuZC5jb21tYW5kLCBmYWxzZSwgZWRpdG9yQ29tbWFuZC52YWx1ZSk7XG5cbiAgICAgICAgLy8gSUUxMSBkb2Vzbid0IHN1cHBvcnQgaW5zZXJ0SFRNTFxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICBpZiAoXG4gICAgICAgICAgZWRpdG9yQ29tbWFuZC5jb21tYW5kLnRvTG93ZXJDYXNlKCkgPT09ICdpbnNlcnRodG1sJyAmJlxuICAgICAgICAgICFjb21tYW5kSXNTdXBwb3J0ZWRBbmRFbmFibGVkXG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMuaW5zZXJ0SHRtbEluSUUxMShpZCwgZWRpdG9yQ29tbWFuZC52YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmZvY3VzRWRpdG9yKGlkKTtcbiAgICAgICAgdGhpcy5lZGl0b3JzW2lkXS5jb21tYW5kQ2hhbmdlT2JzZXJ2YWJsZS5uZXh0KCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldEN1cnJlbnRTZWxlY3Rpb24oaWQ6IHN0cmluZyk6IFNlbGVjdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uU2VydmljZS5nZXRDdXJyZW50U2VsZWN0aW9uKHRoaXMuZ2V0SWZyYW1lRG9jdW1lbnRFbChpZCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBkYXRhIFVSSSB1c2luZyB0aGUgcHJvdmlkZWQgdGV4dCBzdHJpbmcuXG4gICAqIFVzZWQgdG8gZGlzcGxheSBhIG1lcmdlIGZpZWxkIGluc2lkZSBhIHN0cmluZyBvZiB0ZXh0LlxuICAgKi9cbiAgcHVibGljIGdldE1lcmdlRmllbGREYXRhVVJJKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgZG9jdW1lbnRFbCA9IHRoaXMud2luZG93U2VydmljZS5uYXRpdmVXaW5kb3cuZG9jdW1lbnQ7XG4gICAgbGV0IHRleHRUb1VzZSA9IHRleHQ7XG4gICAgaWYgKHRleHQubGVuZ3RoID4gMTgpIHtcbiAgICAgIHRleHRUb1VzZSA9IHRleHQuc3Vic3RyKDAsIDE1KSArICcuLi4nO1xuICAgIH1cblxuICAgIGNvbnN0IGNhbnZhc0VsZW1lbnQgPSBkb2N1bWVudEVsLmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuICAgIGNhbnZhc0VsZW1lbnQuc2V0QXR0cmlidXRlKCdoZWlnaHQnLCAnMjAnKTtcbiAgICBjYW52YXNFbGVtZW50LnNldEF0dHJpYnV0ZSgnd2lkdGgnLCAnMTAwJyk7XG4gICAgY2FudmFzRWxlbWVudC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSAndGFuJztcbiAgICBjYW52YXNFbGVtZW50LnN0eWxlLmJvcmRlciA9ICcxcHggc29saWQgIzAwMDAwMCc7XG4gICAgY2FudmFzRWxlbWVudC5zdHlsZS5ib3JkZXJSYWRpdXMgPSAnNXB4JztcblxuICAgIGNvbnN0IGNvbnRleHQgPSBjYW52YXNFbGVtZW50LmdldENvbnRleHQoJzJkJyk7XG4gICAgY29udGV4dC5mb250ID0gJzEycHggQXJpYWwnO1xuICAgIGNvbnRleHQudGV4dEFsaWduID0gJ2NlbnRlcic7XG4gICAgY29udGV4dC5maWxsVGV4dCh0ZXh0VG9Vc2UsIDUwLCAxNSk7XG5cbiAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdkZXN0aW5hdGlvbi1vdmVyJztcbiAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICcjMDBGRkZGJztcbiAgICBjb250ZXh0LmZpbGxSZWN0KDAsIDAsIDEwMCwgMjApO1xuXG4gICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnc291cmNlLW92ZXInO1xuICAgIGNvbnRleHQubGluZVdpZHRoID0gMjtcbiAgICBjb250ZXh0LnN0cm9rZVN0eWxlID0gJyNGRjAwMDAnO1xuICAgIGNvbnRleHQuc3Ryb2tlUmVjdCgwLCAwLCAxMDAsIDIwKTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGNhbnZhc0VsZW1lbnQudG9EYXRhVVJMKCdpbWFnZS9wbmcnLCAxLjApO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0U3R5bGVTdGF0ZShpZDogc3RyaW5nKTogUGFydGlhbDxTa3lUZXh0RWRpdG9yU3R5bGVTdGF0ZT4ge1xuICAgIGNvbnN0IGRvY3VtZW50RWwgPSB0aGlzLmdldElmcmFtZURvY3VtZW50RWwoaWQpO1xuXG4gICAgaWYgKHRoaXMuZWRpdG9yU2VsZWN0ZWQoaWQpKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBiYWNrQ29sb3I6IHRoaXMuZ2V0Q29sb3IoZG9jdW1lbnRFbCwgJ0JhY2tDb2xvcicpLFxuICAgICAgICBmb250Q29sb3I6IHRoaXMuZ2V0Q29sb3IoZG9jdW1lbnRFbCwgJ0ZvcmVDb2xvcicpLFxuICAgICAgICBmb250U2l6ZTogcGFyc2VJbnQodGhpcy5nZXRGb250U2l6ZShpZCksIHVuZGVmaW5lZCksXG4gICAgICAgIGZvbnQ6IGRvY3VtZW50RWwucXVlcnlDb21tYW5kVmFsdWUoJ2ZvbnRuYW1lJyksXG4gICAgICAgIGJvbGRTdGF0ZTogZG9jdW1lbnRFbC5xdWVyeUNvbW1hbmRTdGF0ZSgnQm9sZCcpLFxuICAgICAgICBpdGFsaWNTdGF0ZTogZG9jdW1lbnRFbC5xdWVyeUNvbW1hbmRTdGF0ZSgnSXRhbGljJyksXG4gICAgICAgIHVuZGVybGluZVN0YXRlOiBkb2N1bWVudEVsLnF1ZXJ5Q29tbWFuZFN0YXRlKCdVbmRlcmxpbmUnKSxcbiAgICAgICAgbGlua1N0YXRlOiB0aGlzLmhhc0xpbmsoaWQpXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgcHVibGljIGdldEVkaXRvcklubmVySHRtbChpZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBkb2N1bWVudEVsID0gdGhpcy5nZXRJZnJhbWVEb2N1bWVudEVsKGlkKTtcbiAgICBpZiAoZG9jdW1lbnRFbCkge1xuICAgICAgcmV0dXJuIHRoaXMucmVwbGFjZUh0bWxDb2Rlcyhkb2N1bWVudEVsLmJvZHkuaW5uZXJIVE1MKTtcbiAgICB9XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgcHVibGljIHNldEVkaXRvcklubmVySHRtbChpZDogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgZG9jdW1lbnRFbCA9IHRoaXMuZ2V0SWZyYW1lRG9jdW1lbnRFbChpZCk7XG4gICAgY29uc3QgZWRpdG9yQ29udGVudCA9IGRvY3VtZW50RWwuYm9keTtcbiAgICBpZiAoZWRpdG9yQ29udGVudC5pbm5lckhUTUwgIT09IHZhbHVlKSB7XG4gICAgICBlZGl0b3JDb250ZW50LmlubmVySFRNTCA9IHZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBmb2N1c0VkaXRvcihpZDogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKGlkIGluIHRoaXMuZWRpdG9ycykge1xuICAgICAgY29uc3Qgd2luZG93RWwgPSB0aGlzLmdldENvbnRlbnRXaW5kb3dFbChpZCk7XG4gICAgICBjb25zdCBpZnJhbWVEb2N1bWVudEVsID0gdGhpcy5nZXRJZnJhbWVEb2N1bWVudEVsKGlkKTtcbiAgICAgIGNvbnN0IGN1cnJlbnRTZWxlY3Rpb24gPSB0aGlzLnNlbGVjdGlvblNlcnZpY2UuZ2V0Q3VycmVudFNlbGVjdGlvblJhbmdlKGlmcmFtZURvY3VtZW50RWwsIHdpbmRvd0VsKTtcbiAgICAgIGNvbnN0IGN1cnNvcklzTm90QWN0aXZlQW5kSGFzUmVzZXQgPSBjdXJyZW50U2VsZWN0aW9uICYmIChjdXJyZW50U2VsZWN0aW9uLnN0YXJ0T2Zmc2V0ID09PSAwICYmIGN1cnJlbnRTZWxlY3Rpb24uZW5kT2Zmc2V0ID09PSAwKTtcblxuICAgICAgaWYgKCF0aGlzLmVkaXRvclNlbGVjdGVkKGlkKSB8fCBjdXJzb3JJc05vdEFjdGl2ZUFuZEhhc1Jlc2V0KSB7XG4gICAgICAgIC8vIGZvY3VzIHRoZSBlbmQgb2YgdGhlIGVkaXRvclxuICAgICAgICBjb25zdCBkb2N1bWVudEVsID0gdGhpcy53aW5kb3dTZXJ2aWNlLm5hdGl2ZVdpbmRvdy5kb2N1bWVudDtcbiAgICAgICAgY29uc3QgZWRpdG9yOiBhbnkgPSBpZnJhbWVEb2N1bWVudEVsLmJvZHk7XG4gICAgICAgIGNvbnN0IHJhbmdlID0gZG9jdW1lbnRFbC5jcmVhdGVSYW5nZSgpO1xuXG4gICAgICAgIHRoaXMuZWRpdG9yc1tpZF0uaWZyYW1lRWxlbWVudFJlZi5mb2N1cygpO1xuICAgICAgICBlZGl0b3IuZm9jdXMoKTtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgaWYgKHdpbmRvd0VsLmdldFNlbGVjdGlvbiAmJiBkb2N1bWVudEVsLmNyZWF0ZVJhbmdlKSB7XG4gICAgICAgICAgcmFuZ2Uuc2VsZWN0Tm9kZUNvbnRlbnRzKGVkaXRvcik7XG4gICAgICAgICAgcmFuZ2UuY29sbGFwc2UoZmFsc2UpO1xuICAgICAgICAgIGNvbnN0IHNlbCA9IHdpbmRvd0VsLmdldFNlbGVjdGlvbigpO1xuICAgICAgICAgIHNlbC5yZW1vdmVBbGxSYW5nZXMoKTtcbiAgICAgICAgICBzZWwuYWRkUmFuZ2UocmFuZ2UpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIElFIG9ubHlcbiAgICAgICAgICBjb25zdCB0ZXh0UmFuZ2UgPSBlZGl0b3IuY3JlYXRlVGV4dFJhbmdlKCk7XG4gICAgICAgICAgdGV4dFJhbmdlLm1vdmVUb0VsZW1lbnRUZXh0KGVkaXRvcik7XG4gICAgICAgICAgdGV4dFJhbmdlLmNvbGxhcHNlKGZhbHNlKTtcbiAgICAgICAgICB0ZXh0UmFuZ2Uuc2VsZWN0KCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEN1cnNvciBtYXkgbm90IGJlIGFjdGl2ZSwgcmVzdG9yZSBpdFxuICAgICAgICB0aGlzLmVkaXRvcnNbaWRdLmlmcmFtZUVsZW1lbnRSZWYuZm9jdXMoKTtcbiAgICAgICAgaWZyYW1lRG9jdW1lbnRFbC5ib2R5LmZvY3VzKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldExpbmsoZWRpdG9ySWQ6IHN0cmluZyk6IFVybE1vZGFsUmVzdWx0IHtcbiAgICBsZXQgbGluazogVXJsTW9kYWxSZXN1bHQgPSB1bmRlZmluZWQ7XG4gICAgY29uc3QgYW5jaG9yRWwgPSB0aGlzLmdldFNlbGVjdGVkQW5jaG9yVGFnKGVkaXRvcklkKTtcbiAgICBpZiAoYW5jaG9yRWwgJiYgYW5jaG9yRWwuaHJlZikge1xuICAgICAgbGluayA9IHtcbiAgICAgICAgdGFyZ2V0OiBhbmNob3JFbC5nZXRBdHRyaWJ1dGUoJ3RhcmdldCcpID09PSAnX2JsYW5rJyA/IFVybFRhcmdldC5OZXdXaW5kb3cgOiBVcmxUYXJnZXQuTm9uZSxcbiAgICAgICAgdXJsOiBhbmNob3JFbC5ocmVmXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiBsaW5rO1xuICB9XG5cbiAgcHVibGljIGdldFNlbGVjdGVkQW5jaG9yVGFnKGVkaXRvcklkOiBzdHJpbmcpOiBIVE1MQW5jaG9yRWxlbWVudCB7XG4gICAgY29uc3Qgc2VsZWN0ZWRFbCA9IHRoaXMuZ2V0Q3VycmVudFNlbGVjdGlvblBhcmVudEVsZW1lbnQoZWRpdG9ySWQpO1xuXG4gICAgcmV0dXJuIHRoaXMuZ2V0UGFyZW50KHNlbGVjdGVkRWwsICdhJykgYXMgSFRNTEFuY2hvckVsZW1lbnQ7XG4gIH1cblxuICBwdWJsaWMgc2F2ZVNlbGVjdGlvbihpZDogc3RyaW5nKTogUmFuZ2Uge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGlvblNlcnZpY2UuZ2V0Q3VycmVudFNlbGVjdGlvblJhbmdlKHRoaXMuZ2V0SWZyYW1lRG9jdW1lbnRFbChpZCksIHRoaXMuZ2V0Q29udGVudFdpbmRvd0VsKGlkKSk7XG4gIH1cblxuICBwdWJsaWMgc2VsZWN0RWxlbWVudChpZDogc3RyaW5nLCBlbGVtZW50OiBIVE1MRWxlbWVudCk6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0aW9uU2VydmljZS5zZWxlY3RFbGVtZW50KHRoaXMuZ2V0SWZyYW1lRG9jdW1lbnRFbChpZCksIHRoaXMuZ2V0Q29udGVudFdpbmRvd0VsKGlkKSwgZWxlbWVudCk7XG4gIH1cblxuICBwdWJsaWMgc2V0UGxhY2Vob2xkZXIoaWQ6IHN0cmluZywgcGxhY2Vob2xkZXI/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBkb2N1bWVudEVsID0gdGhpcy5nZXRJZnJhbWVEb2N1bWVudEVsKGlkKTtcbiAgICBkb2N1bWVudEVsLmJvZHkuc2V0QXR0cmlidXRlKCdkYXRhLXBsYWNlaG9sZGVyJywgcGxhY2Vob2xkZXIgfHwgJycpO1xuICB9XG5cbiAgcHVibGljIHNldEZvbnRTaXplKGlkOiBzdHJpbmcsIGZvbnRTaXplOiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBkb2MgPSB0aGlzLmdldElmcmFtZURvY3VtZW50RWwoaWQpO1xuICAgIHRoaXMuZXhlY0NvbW1hbmQoaWQsIHtjb21tYW5kOiAnZm9udFNpemUnLCB2YWx1ZTogMX0pO1xuICAgIGNvbnN0IGZvbnRFbGVtZW50czogSFRNTEVsZW1lbnRbXSA9IEFycmF5LmZyb20oZG9jLnF1ZXJ5U2VsZWN0b3JBbGwoJ2ZvbnRbc2l6ZT1cIjFcIl0nKSk7XG4gICAgZm9yIChsZXQgZWxlbWVudCBvZiBmb250RWxlbWVudHMpIHtcbiAgICAgIGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdzaXplJyk7XG4gICAgICBlbGVtZW50LnN0eWxlLmZvbnRTaXplID0gKGZvbnRTaXplICsgJ3B4Jyk7XG4gICAgfVxuICAgIHRoaXMuY2xlYW5VcEJsYW5rU3R5bGVUYWdzKGRvYyk7XG5cbiAgICB0aGlzLmZvY3VzRWRpdG9yKGlkKTtcbiAgICB0aGlzLmVkaXRvcnNbaWRdLmNvbW1hbmRDaGFuZ2VPYnNlcnZhYmxlLm5leHQoKTtcbiAgfVxuXG4gIHB1YmxpYyByZW1vdmVPYnNlcnZlcnMoc2V0dGluZzogRWRpdG9yU2V0dGluZyk6IHZvaWQge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgY29uc3QgZG9jdW1lbnRFbCA9IHNldHRpbmcuaWZyYW1lRWxlbWVudFJlZi5jb250ZW50V2luZG93ID9cbiAgICAgICBzZXR0aW5nLmlmcmFtZUVsZW1lbnRSZWYuY29udGVudFdpbmRvdy5kb2N1bWVudCA6XG4gICAgICAgc2V0dGluZy5pZnJhbWVFbGVtZW50UmVmLmNvbnRlbnREb2N1bWVudDtcbiAgICBzZXR0aW5nLnNlbGVjdGlvbkNoYW5nZU9ic2VydmFibGUuY29tcGxldGUoKTtcbiAgICBzZXR0aW5nLmNsaWNrT2JzZXJ2YWJsZS5jb21wbGV0ZSgpO1xuICAgIHNldHRpbmcuY29tbWFuZENoYW5nZU9ic2VydmFibGUuY29tcGxldGUoKTtcbiAgICBkb2N1bWVudEVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3NlbGVjdGlvbmNoYW5nZScsIHNldHRpbmcuc2VsZWN0aW9uTGlzdGVuZXIpO1xuICAgIGRvY3VtZW50RWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignaW5wdXQnLCBzZXR0aW5nLnNlbGVjdGlvbkxpc3RlbmVyKTtcbiAgICBkb2N1bWVudEVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIHNldHRpbmcuY2xpY2tMaXN0ZW5lcik7XG4gICAgZG9jdW1lbnRFbC5ib2R5LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Bhc3RlJywgc2V0dGluZy5wYXN0ZUxpc3RlbmVyKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q29udGVudFdpbmRvd0VsKGlkOiBzdHJpbmcpOiBXaW5kb3cge1xuICAgIHJldHVybiB0aGlzLmVkaXRvcnNbaWRdLmlmcmFtZUVsZW1lbnRSZWYuY29udGVudFdpbmRvdztcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q2hpbGRTZWxlY3RlZEFuY2hvclRhZ3MoZWRpdG9ySWQ6IHN0cmluZyk6IEVsZW1lbnRbXSB7XG4gICAgY29uc3Qgc2VsZWN0ZWRSYW5nZSA9IHRoaXMuZ2V0Q3VycmVudFNlbGVjdGlvbihlZGl0b3JJZCkuZ2V0UmFuZ2VBdCgwKTtcbiAgICBpZiAoc2VsZWN0ZWRSYW5nZS50b1N0cmluZygpLmxlbmd0aCA8PSAwKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgY29uc3QgcGFyZW50RWxlbWVudCA9IHRoaXMuZ2V0Q3VycmVudFNlbGVjdGlvblBhcmVudEVsZW1lbnQoZWRpdG9ySWQpO1xuICAgIGNvbnN0IGNoaWxkRWxlbWVudHMgPSBwYXJlbnRFbGVtZW50ID8gQXJyYXkuZnJvbShwYXJlbnRFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2EnKSkgOiBbXTtcblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgcmV0dXJuIGNoaWxkRWxlbWVudHMuZmlsdGVyKGVsZW1lbnQgPT4ge1xuXG4gICAgICAvLyBJRSBzcGVjaWZpY1xuICAgICAgaWYgKCFzZWxlY3RlZFJhbmdlLmludGVyc2VjdHNOb2RlKSB7XG4gICAgICAgIGlmICghZWxlbWVudCB8fCAhZWxlbWVudC5ocmVmKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRlbXBSYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7XG4gICAgICAgIHRlbXBSYW5nZS5zZWxlY3ROb2RlQ29udGVudHMoZWxlbWVudCk7XG4gICAgICAgIHJldHVybiAoc2VsZWN0ZWRSYW5nZS5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2UuU1RBUlRfVE9fU1RBUlQsIHRlbXBSYW5nZSkgIT09IC0xXG4gICAgICAgICAgJiYgc2VsZWN0ZWRSYW5nZS5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2UuU1RBUlRfVE9fRU5ELCB0ZW1wUmFuZ2UpICE9PSAxKSB8fFxuICAgICAgICAgIChzZWxlY3RlZFJhbmdlLmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZS5FTkRfVE9fU1RBUlQsIHRlbXBSYW5nZSkgIT09IC0xXG4gICAgICAgICAgJiYgc2VsZWN0ZWRSYW5nZS5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2UuRU5EX1RPX0VORCwgdGVtcFJhbmdlKSAhPT0gMSk7XG4gICAgICB9XG5cbiAgICAgIC8vIE5vcm1hbCBub24tSUVcbiAgICAgIHJldHVybiAhIWVsZW1lbnQgJiYgISFlbGVtZW50LmhyZWYgJiYgc2VsZWN0ZWRSYW5nZS5pbnRlcnNlY3RzTm9kZShlbGVtZW50KTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0SWZyYW1lRG9jdW1lbnRFbChpZDogc3RyaW5nKTogRG9jdW1lbnQge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgaWYgKCEoaWQgaW4gdGhpcy5lZGl0b3JzKSkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBjb25zdCBjb250ZW50V2luZG93RWwgPSB0aGlzLmdldENvbnRlbnRXaW5kb3dFbChpZCk7XG4gICAgaWYgKGNvbnRlbnRXaW5kb3dFbCkge1xuICAgICAgcmV0dXJuIGNvbnRlbnRXaW5kb3dFbC5kb2N1bWVudDtcbiAgICB9XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIHJldHVybiB0aGlzLmVkaXRvcnNbaWRdLmlmcmFtZUVsZW1lbnRSZWYuY29udGVudERvY3VtZW50O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRGb250U2l6ZShpZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBsZXQgZm9udFNpemUgPSBTVFlMRV9TVEFURV9ERUZBVUxUUy5mb250U2l6ZS50b1N0cmluZygpO1xuICAgIGNvbnN0IHNlbGVjdGlvbiA9IHRoaXMuZ2V0Q3VycmVudFNlbGVjdGlvbihpZCk7XG4gICAgaWYgKFxuICAgICAgc2VsZWN0aW9uICYmXG4gICAgICBzZWxlY3Rpb24uYW5jaG9yTm9kZSAmJlxuICAgICAgc2VsZWN0aW9uLmFuY2hvck5vZGUucGFyZW50RWxlbWVudFxuICAgICkge1xuICAgICAgbGV0IGVsZW1lbnQgPSBzZWxlY3Rpb24uYW5jaG9yTm9kZTtcbiAgICAgIGlmIChlbGVtZW50Lm5vZGVUeXBlICE9PSAxKSB7XG4gICAgICAgIGVsZW1lbnQgPSBlbGVtZW50LnBhcmVudEVsZW1lbnQ7XG4gICAgICB9XG4gICAgICBjb25zdCBjb21wdXRlZFN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWxlbWVudCBhcyBFbGVtZW50KTtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICBpZiAoY29tcHV0ZWRTdHlsZSkge1xuICAgICAgICBmb250U2l6ZSA9IGNvbXB1dGVkU3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSgnZm9udC1zaXplJyk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmb250U2l6ZTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlT2JzZXJ2ZXJzKGlkOiBzdHJpbmcsIGVsZW1lbnQ6IEhUTUxJRnJhbWVFbGVtZW50KTogRWRpdG9yU2V0dGluZyB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBjb25zdCBkb2N1bWVudEVsID0gZWxlbWVudC5jb250ZW50V2luZG93ID9cbiAgICAgIGVsZW1lbnQuY29udGVudFdpbmRvdy5kb2N1bWVudCA6XG4gICAgICBlbGVtZW50LmNvbnRlbnREb2N1bWVudDtcblxuICAgIC8vIEZpcmVmb3ggYnVnIHdoZXJlIHdlIG5lZWQgdG8gb3Blbi9jbG9zZSB0byBjYW5jZWwgbG9hZCBzbyBpdCBkb2Vzbid0IG92ZXJ3cml0ZSBhdHRyc1xuICAgIGRvY3VtZW50RWwub3BlbigpO1xuICAgIGRvY3VtZW50RWwuY2xvc2UoKTtcblxuICAgIGNvbnN0IHNlbGVjdGlvbk9ic2VydmFibGUgPSBuZXcgU3ViamVjdCgpO1xuICAgIGNvbnN0IHNlbGVjdGlvbkxpc3RlbmVyID0gKCkgPT4gc2VsZWN0aW9uT2JzZXJ2YWJsZS5uZXh0KCk7XG4gICAgY29uc3QgY2xpY2tPYnNlcnZhYmxlID0gbmV3IFN1YmplY3QoKTtcbiAgICBjb25zdCBjbGlja0xpc3RlbmVyID0gKCkgPT4gY2xpY2tPYnNlcnZhYmxlLm5leHQoKTtcbiAgICBjb25zdCBwYXN0ZUxpc3RlbmVyID0gdGhpcy5nZXRQYXN0ZU92ZXJyaWRlKGlkKTtcblxuICAgIGRvY3VtZW50RWwuYWRkRXZlbnRMaXN0ZW5lcignc2VsZWN0aW9uY2hhbmdlJywgc2VsZWN0aW9uTGlzdGVuZXIpO1xuICAgIGRvY3VtZW50RWwuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCBzZWxlY3Rpb25MaXN0ZW5lcik7XG4gICAgZG9jdW1lbnRFbC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCBjbGlja0xpc3RlbmVyKTtcbiAgICBkb2N1bWVudEVsLmJvZHkuYWRkRXZlbnRMaXN0ZW5lcigncGFzdGUnLCBwYXN0ZUxpc3RlbmVyKTtcbiAgICByZXR1cm4ge1xuICAgICAgaWZyYW1lRWxlbWVudFJlZjogZWxlbWVudCxcbiAgICAgIHNlbGVjdGlvbkxpc3RlbmVyOiBzZWxlY3Rpb25MaXN0ZW5lcixcbiAgICAgIGNsaWNrTGlzdGVuZXI6IGNsaWNrTGlzdGVuZXIsXG4gICAgICBwYXN0ZUxpc3RlbmVyOiBwYXN0ZUxpc3RlbmVyLFxuICAgICAgc2VsZWN0aW9uQ2hhbmdlT2JzZXJ2YWJsZTogc2VsZWN0aW9uT2JzZXJ2YWJsZSxcbiAgICAgIGNsaWNrT2JzZXJ2YWJsZTogY2xpY2tPYnNlcnZhYmxlLFxuICAgICAgY29tbWFuZENoYW5nZU9ic2VydmFibGU6IG5ldyBTdWJqZWN0KClcbiAgICB9O1xuICB9XG5cbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgcHJpdmF0ZSBnZXRQYXN0ZU92ZXJyaWRlKGlkOiBzdHJpbmcpOiAoZTogQ2xpcGJvYXJkRXZlbnQpID0+IHZvaWQge1xuICAgIHJldHVybiAoZTogQ2xpcGJvYXJkRXZlbnQpOiB2b2lkID0+IHtcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGNvbnN0IHRleHQgPSBlLmNsaXBib2FyZERhdGEuZ2V0RGF0YSgndGV4dC9wbGFpbicpO1xuICAgICAgdGhpcy5leGVjQ29tbWFuZChpZCwgeyBjb21tYW5kOiAnaW5zZXJ0SFRNTCcsIHZhbHVlOiB0ZXh0IH0pO1xuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGdldEN1cnJlbnRTZWxlY3Rpb25QYXJlbnRFbGVtZW50KGlkOiBzdHJpbmcpOiBFbGVtZW50IHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3Rpb25TZXJ2aWNlLmdldEN1cnJlbnRTZWxlY3Rpb25QYXJlbnRFbGVtZW50KHRoaXMuZ2V0SWZyYW1lRG9jdW1lbnRFbChpZCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDb2xvcihkb2N1bWVudEVsOiBEb2N1bWVudCwgc2VsZWN0b3I6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgY29tbWFuZFZhbHVlID0gZG9jdW1lbnRFbC5xdWVyeUNvbW1hbmRWYWx1ZShzZWxlY3Rvcik7XG5cbiAgICAvLyBFZGdlIGlzIHdlaXJkIGFuZCByZXR1cm5zIG51bWJlcnNcbiAgICBpZiAodHlwZW9mIGNvbW1hbmRWYWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLWJpdHdpc2VcbiAgICAgIHJldHVybiAncmdiKCcgKyAoY29tbWFuZFZhbHVlICYgMHhGRikgKyAnLCAnICtcbiAgICAgICAgICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby1iaXR3aXNlXG4gICAgICAgICAgICAgICAgICAgICgoY29tbWFuZFZhbHVlICYgMHhGRjAwKSA+PiA4KSArICcsICcgK1xuICAgICAgICAgICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLWJpdHdpc2VcbiAgICAgICAgICAgICAgICAgICAgKChjb21tYW5kVmFsdWUgJiAweEZGMDAwMCkgPj4gMTYgKSArICcpJztcbiAgICB9XG5cbiAgICAvLyBGaXJlZm94IHVzZXMgJ1RyYW5zcGFyZW50JyBpbnN0ZWFkIG9mIGEgY29sb3IgdmFsdWVcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIGlmIChjb21tYW5kVmFsdWUudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpID09PSAndHJhbnNwYXJlbnQnKSB7XG4gICAgICByZXR1cm4gU1RZTEVfU1RBVEVfREVGQVVMVFMuYmFja0NvbG9yO1xuICAgIH1cbiAgICByZXR1cm4gY29tbWFuZFZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSBoYXNMaW5rKGVkaXRvcklkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCBhbmNob3JFbCA9IHRoaXMuZ2V0U2VsZWN0ZWRBbmNob3JUYWcoZWRpdG9ySWQpO1xuICAgIGNvbnN0IGNoaWxkQW5jaG9yRWxzID0gdGhpcy5nZXRDaGlsZFNlbGVjdGVkQW5jaG9yVGFncyhlZGl0b3JJZCk7XG4gICAgcmV0dXJuIGNoaWxkQW5jaG9yRWxzLmxlbmd0aCA+IDAgfHwgKCEhYW5jaG9yRWwgJiYgISFhbmNob3JFbC5ocmVmKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0UGFyZW50KGVsZW1lbnQ6IEVsZW1lbnQsIHRhZzogc3RyaW5nKTogRWxlbWVudCB7XG4gICAgbGV0IGN1cnJlbnROb2RlID0gZWxlbWVudDtcbiAgICB3aGlsZSAoY3VycmVudE5vZGUgJiYgY3VycmVudE5vZGUudGFnTmFtZS50b1VwcGVyQ2FzZSgpICE9PSAnQk9EWScpIHtcbiAgICAgIGlmIChjdXJyZW50Tm9kZS50YWdOYW1lLnRvVXBwZXJDYXNlKCkgPT09IHRhZy50b1VwcGVyQ2FzZSgpKSB7XG4gICAgICAgIHJldHVybiBjdXJyZW50Tm9kZTtcbiAgICAgIH1cbiAgICAgIGN1cnJlbnROb2RlID0gY3VycmVudE5vZGUucGFyZW50RWxlbWVudDtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByaXZhdGUgZWRpdG9yU2VsZWN0ZWQoaWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGRvY3VtZW50RWwgPSB0aGlzLmdldElmcmFtZURvY3VtZW50RWwoaWQpO1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGlvblNlcnZpY2UuaXNFbGVtZW50U2VsZWN0ZWQoZG9jdW1lbnRFbCwgZG9jdW1lbnRFbC5ib2R5KTtcbiAgfVxuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIHByaXZhdGUgaW5zZXJ0SHRtbEluSUUxMShpZDogc3RyaW5nLCBodG1sOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBkb2N1bWVudEVsID0gdGhpcy5nZXRJZnJhbWVEb2N1bWVudEVsKGlkKTtcbiAgICBjb25zdCB3aW5kb3dFbCA9IHRoaXMuZ2V0Q29udGVudFdpbmRvd0VsKGlkKTtcbiAgICBjb25zdCBzZWwgPSB3aW5kb3dFbC5nZXRTZWxlY3Rpb24oKTtcbiAgICBpZiAoc2VsLmdldFJhbmdlQXQgJiYgc2VsLnJhbmdlQ291bnQpIHtcbiAgICAgIGxldCByYW5nZSA9IHNlbC5nZXRSYW5nZUF0KDApO1xuICAgICAgcmFuZ2UuZGVsZXRlQ29udGVudHMoKTtcblxuICAgICAgY29uc3QgZWwgPSBkb2N1bWVudEVsLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgZWwuaW5uZXJIVE1MID0gaHRtbDtcbiAgICAgIGxldCBmcmFnID0gZG9jdW1lbnRFbC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksIG5vZGUsIGxhc3ROb2RlO1xuICAgICAgd2hpbGUgKGVsLmZpcnN0Q2hpbGQpIHtcbiAgICAgICAgbm9kZSA9IGVsLmZpcnN0Q2hpbGQ7XG4gICAgICAgIGxhc3ROb2RlID0gZnJhZy5hcHBlbmRDaGlsZChub2RlKTtcbiAgICAgIH1cbiAgICAgIHJhbmdlLmluc2VydE5vZGUoZnJhZyk7XG5cbiAgICAgIC8vIFByZXNlcnZlIHRoZSBzZWxlY3Rpb25cbiAgICAgIGlmIChsYXN0Tm9kZSkge1xuICAgICAgICByYW5nZSA9IHJhbmdlLmNsb25lUmFuZ2UoKTtcbiAgICAgICAgcmFuZ2Uuc2V0U3RhcnRBZnRlcihsYXN0Tm9kZSk7XG4gICAgICAgIHJhbmdlLmNvbGxhcHNlKHRydWUpO1xuICAgICAgICBzZWwucmVtb3ZlQWxsUmFuZ2VzKCk7XG4gICAgICAgIHNlbC5hZGRSYW5nZShyYW5nZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjbGVhblVwQmxhbmtTdHlsZVRhZ3MoZG9jOiBEb2N1bWVudCk6IHZvaWQge1xuICAgIGNvbnN0IG9ycGhhbkVsZW1lbnRzOiBIVE1MRWxlbWVudFtdID0gQXJyYXkuZnJvbShkb2MucXVlcnlTZWxlY3RvckFsbCgnZm9udCxzcGFuLCpbc3R5bGU9XCJcIl0nKSk7XG4gICAgZm9yIChsZXQgZWxlbWVudCBvZiBvcnBoYW5FbGVtZW50cykge1xuICAgICAgaWYgKCFlbGVtZW50LmdldEF0dHJpYnV0ZSgnc3R5bGUnKSkge1xuICAgICAgICBlbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgnc3R5bGUnKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgcmVtb3ZhYmxlRWxlbWVudHMgPSBvcnBoYW5FbGVtZW50cy5maWx0ZXIoZWxlbWVudCA9PiB7XG4gICAgICBjb25zdCB0YWdOYW1lID0gZWxlbWVudC50YWdOYW1lLnRvVXBwZXJDYXNlKCk7XG4gICAgICByZXR1cm4gKHRhZ05hbWUgPT09ICdGT05UJyB8fCB0YWdOYW1lID09PSAnU1BBTicpICYmXG4gICAgICAgIChlbGVtZW50LmF0dHJpYnV0ZXMubGVuZ3RoID09PSAwIHx8ICFlbGVtZW50Lmhhc0NoaWxkTm9kZXMpO1xuICAgIH0pO1xuICAgIGZvciAobGV0IGVsZW1lbnQgb2YgcmVtb3ZhYmxlRWxlbWVudHMpIHtcbiAgICAgIGNvbnN0IHBhcmVudCA9IGVsZW1lbnQucGFyZW50Tm9kZTtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICBpZiAocGFyZW50KSB7XG4gICAgICAgIHdoaWxlIChlbGVtZW50LmZpcnN0Q2hpbGQpIHtcbiAgICAgICAgICBwYXJlbnQuaW5zZXJ0QmVmb3JlKGVsZW1lbnQuZmlyc3RDaGlsZCwgZWxlbWVudCk7XG4gICAgICAgIH1cbiAgICAgICAgcGFyZW50LnJlbW92ZUNoaWxkKGVsZW1lbnQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIENlcnRhaW4gdmFsdWVzIGFyZSBlbmNvZGVkIGluIGh0bWwgYW5kIG5lZWQgdG8gYmUgZGVjb2RlZFxuICBwcml2YXRlIHJlcGxhY2VIdG1sQ29kZXMoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBzdHIucmVwbGFjZSgvJm5ic3A7LywgU3RyaW5nLmZyb21DaGFyQ29kZSgxNjApKVxuICAgICAgLnJlcGxhY2UoLyZsdDsvZywgJzwnKVxuICAgICAgLnJlcGxhY2UoLyZndDsvZywgJz4nKVxuICAgICAgLnJlcGxhY2UoLyZhbXA7L2csICcmJyk7XG4gIH1cblxuICBwcml2YXRlIHNldEVkaXRvckRpc2FibGVkKGlkOiBzdHJpbmcsIGZvY3VzYWJsZUNoaWxkcmVuOiBIVE1MRWxlbWVudFtdLCB0ZXh0RWRpdG9yTmF0aXZlRWxlbWVudDogYW55LCBkaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRleHRFZGl0b3JOYXRpdmVFbGVtZW50LnN0eWxlLnBvaW50ZXJFdmVudHMgPSBkaXNhYmxlZCA/ICdub25lJyA6ICdhdXRvJztcbiAgICB0ZXh0RWRpdG9yTmF0aXZlRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtZGlzYWJsZWQnLCBkaXNhYmxlZCA/ICd0cnVlJyA6ICdmYWxzZScpO1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKGZvY3VzYWJsZUNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgIGZvY3VzYWJsZUNoaWxkcmVuLmZvckVhY2goYUZvY3VzYWJsZUNoaWxkID0+IHtcbiAgICAgICAgYUZvY3VzYWJsZUNoaWxkLnRhYkluZGV4ID0gZGlzYWJsZWQgPyAtMSA6IDA7XG4gICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy5nZXRJZnJhbWVEb2N1bWVudEVsKGlkKS5ib2R5LnNldEF0dHJpYnV0ZSgnY29udGVudGVkaXRhYmxlJywgZGlzYWJsZWQgPyAnZmFsc2UnIDogJ3RydWUnKTtcbiAgfVxuXG59XG4iXX0=
|
|
@@ -1,15 +1,13 @@
|
|
|
1
|
-
import { __decorate } from "tslib";
|
|
2
1
|
import { Injectable } from '@angular/core';
|
|
3
2
|
import * as i0 from "@angular/core";
|
|
4
3
|
/**
|
|
5
4
|
* @internal
|
|
6
5
|
*/
|
|
7
|
-
|
|
6
|
+
export class SkyTextEditorSelectionService {
|
|
8
7
|
isElementSelected(documentEl, element) {
|
|
9
8
|
const selectedNode = this.getCurrentSelection(documentEl).anchorNode;
|
|
10
9
|
return selectedNode &&
|
|
11
|
-
(element.contains(selectedNode) ||
|
|
12
|
-
(selectedNode.parentNode && element.contains(selectedNode.parentNode)));
|
|
10
|
+
(element.contains(selectedNode) || (selectedNode.parentNode && element.contains(selectedNode.parentNode)));
|
|
13
11
|
}
|
|
14
12
|
getCurrentSelection(documentEl) {
|
|
15
13
|
return documentEl.getSelection();
|
|
@@ -63,12 +61,13 @@ let SkyTextEditorSelectionService = class SkyTextEditorSelectionService {
|
|
|
63
61
|
}
|
|
64
62
|
}
|
|
65
63
|
}
|
|
66
|
-
}
|
|
67
|
-
SkyTextEditorSelectionService.ɵ
|
|
68
|
-
SkyTextEditorSelectionService =
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
64
|
+
}
|
|
65
|
+
SkyTextEditorSelectionService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.7", ngImport: i0, type: SkyTextEditorSelectionService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
66
|
+
SkyTextEditorSelectionService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.7", ngImport: i0, type: SkyTextEditorSelectionService, providedIn: 'root' });
|
|
67
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.7", ngImport: i0, type: SkyTextEditorSelectionService, decorators: [{
|
|
68
|
+
type: Injectable,
|
|
69
|
+
args: [{
|
|
70
|
+
providedIn: 'root'
|
|
71
|
+
}]
|
|
72
|
+
}] });
|
|
73
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC1lZGl0b3Itc2VsZWN0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90ZXh0LWVkaXRvci9zcmMvbW9kdWxlcy90ZXh0LWVkaXRvci9zZXJ2aWNlcy90ZXh0LWVkaXRvci1zZWxlY3Rpb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsVUFBVSxFQUNYLE1BQU0sZUFBZSxDQUFDOztBQUV2Qjs7R0FFRztBQUlILE1BQU0sT0FBTyw2QkFBNkI7SUFDakMsaUJBQWlCLENBQUMsVUFBb0IsRUFBRSxPQUFvQjtRQUNqRSxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsVUFBVSxDQUFDLENBQUMsVUFBeUIsQ0FBQztRQUNwRixPQUFPLFlBQVk7WUFDakIsQ0FDRSxPQUFPLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUN6RyxDQUFDO0lBQ04sQ0FBQztJQUVNLG1CQUFtQixDQUFDLFVBQW9CO1FBQzdDLE9BQU8sVUFBVSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ25DLENBQUM7SUFFTSxnQ0FBZ0MsQ0FBQyxVQUFvQjtRQUMxRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDdkQsSUFBSSxVQUFtQixDQUFDO1FBQ3hCLDBCQUEwQjtRQUMxQixJQUFJLFNBQVM7WUFDVCxTQUFTLENBQUMsVUFBVTtZQUNwQixTQUFTLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLHVCQUF1QixFQUNqRDtZQUNBLFVBQVUsR0FBRyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLHVCQUFrQyxDQUFDO1lBQ3hFLFVBQVUsR0FBRyxVQUFVLENBQUMsUUFBUSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDO1NBQ2hGO2FBQU0sSUFBSSxTQUFTLElBQUksU0FBUyxDQUFDLElBQUksS0FBSyxTQUFTLEVBQUU7WUFDbEQsVUFBVSxHQUFJLFNBQWlCLENBQUMsV0FBVyxFQUFFLENBQUMsYUFBYSxFQUFFLENBQUM7U0FDakU7YUFBTTtZQUNMLE9BQU8sU0FBUyxDQUFDO1NBQ2xCO1FBQ0QsT0FBTyxVQUFVLENBQUM7SUFDcEIsQ0FBQztJQUVNLHdCQUF3QixDQUFDLFVBQW9CLEVBQUUsUUFBZ0I7UUFDcEUsMEJBQTBCO1FBQzFCLElBQUksUUFBUSxDQUFDLFlBQVksRUFBRTtZQUN6QixNQUFNLEdBQUcsR0FBRyxRQUFRLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDcEMsSUFBSSxHQUFHLENBQUMsVUFBVSxJQUFJLEdBQUcsQ0FBQyxVQUFVLEVBQUU7Z0JBQ3BDLE9BQU8sR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUMxQjtTQUNGO2FBQU0sSUFBSSxVQUFVLENBQUMsWUFBWSxFQUFFLElBQUksVUFBVSxDQUFDLFlBQVksRUFBRSxDQUFDLFVBQVUsRUFBRTtZQUM1RSxPQUFPLFVBQVUsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDaEQ7SUFDSCxDQUFDO0lBRU0sYUFBYSxDQUFDLFVBQW9CLEVBQUUsUUFBZ0IsRUFBRSxPQUFvQjtRQUMvRSxJQUFJLE9BQU8sRUFBRTtZQUNYLDBCQUEwQjtZQUMxQixJQUFJLFFBQVEsQ0FBQyxZQUFZLEVBQUU7Z0JBQ3pCLE1BQU0sR0FBRyxHQUFHLFFBQVEsQ0FBQyxZQUFZLEVBQUUsQ0FBQztnQkFDcEMsR0FBRyxDQUFDLGVBQWUsRUFBRSxDQUFDO2dCQUN0QixNQUFNLEtBQUssR0FBRyxVQUFVLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQ3ZDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDbEMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUNyQjtpQkFBTSxJQUFJLFVBQVUsQ0FBQyxZQUFZLEVBQUU7Z0JBQ2xDLE1BQU0sR0FBRyxHQUFHLFVBQVUsQ0FBQyxZQUFZLEVBQUUsQ0FBQztnQkFDdEMsR0FBRyxDQUFDLGVBQWUsRUFBRSxDQUFDO2dCQUN0QixNQUFNLEtBQUssR0FBRyxVQUFVLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQ3ZDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDbEMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUNyQjtTQUNGO0lBQ0gsQ0FBQzs7MEhBNURVLDZCQUE2Qjs4SEFBN0IsNkJBQTZCLGNBRjVCLE1BQU07MkZBRVAsNkJBQTZCO2tCQUh6QyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEluamVjdGFibGVcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIFNreVRleHRFZGl0b3JTZWxlY3Rpb25TZXJ2aWNlIHtcbiAgcHVibGljIGlzRWxlbWVudFNlbGVjdGVkKGRvY3VtZW50RWw6IERvY3VtZW50LCBlbGVtZW50OiBIVE1MRWxlbWVudCkge1xuICAgIGNvbnN0IHNlbGVjdGVkTm9kZSA9IHRoaXMuZ2V0Q3VycmVudFNlbGVjdGlvbihkb2N1bWVudEVsKS5hbmNob3JOb2RlIGFzIEhUTUxFbGVtZW50O1xuICAgIHJldHVybiBzZWxlY3RlZE5vZGUgJiZcbiAgICAgIChcbiAgICAgICAgZWxlbWVudC5jb250YWlucyhzZWxlY3RlZE5vZGUpIHx8IChzZWxlY3RlZE5vZGUucGFyZW50Tm9kZSAmJiBlbGVtZW50LmNvbnRhaW5zKHNlbGVjdGVkTm9kZS5wYXJlbnROb2RlKSlcbiAgICAgICk7XG4gIH1cblxuICBwdWJsaWMgZ2V0Q3VycmVudFNlbGVjdGlvbihkb2N1bWVudEVsOiBEb2N1bWVudCk6IFNlbGVjdGlvbiB7XG4gICAgcmV0dXJuIGRvY3VtZW50RWwuZ2V0U2VsZWN0aW9uKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0Q3VycmVudFNlbGVjdGlvblBhcmVudEVsZW1lbnQoZG9jdW1lbnRFbDogRG9jdW1lbnQpOiBFbGVtZW50IHtcbiAgICBjb25zdCBzZWxlY3Rpb24gPSB0aGlzLmdldEN1cnJlbnRTZWxlY3Rpb24oZG9jdW1lbnRFbCk7XG4gICAgbGV0IHNlbGVjdGVkRWw6IEVsZW1lbnQ7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAoc2VsZWN0aW9uICYmXG4gICAgICAgIHNlbGVjdGlvbi5nZXRSYW5nZUF0ICYmXG4gICAgICAgIHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyXG4gICAgKSB7XG4gICAgICBzZWxlY3RlZEVsID0gc2VsZWN0aW9uLmdldFJhbmdlQXQoMCkuY29tbW9uQW5jZXN0b3JDb250YWluZXIgYXMgRWxlbWVudDtcbiAgICAgIHNlbGVjdGVkRWwgPSBzZWxlY3RlZEVsLm5vZGVUeXBlICE9PSAxID8gc2VsZWN0ZWRFbC5wYXJlbnRFbGVtZW50IDogc2VsZWN0ZWRFbDtcbiAgICB9IGVsc2UgaWYgKHNlbGVjdGlvbiAmJiBzZWxlY3Rpb24udHlwZSAhPT0gJ0NvbnRyb2wnKSB7XG4gICAgICAgIHNlbGVjdGVkRWwgPSAoc2VsZWN0aW9uIGFzIGFueSkuY3JlYXRlUmFuZ2UoKS5wYXJlbnRFbGVtZW50KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHJldHVybiBzZWxlY3RlZEVsO1xuICB9XG5cbiAgcHVibGljIGdldEN1cnJlbnRTZWxlY3Rpb25SYW5nZShkb2N1bWVudEVsOiBEb2N1bWVudCwgd2luZG93RWw6IFdpbmRvdyk6IFJhbmdlIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmICh3aW5kb3dFbC5nZXRTZWxlY3Rpb24pIHtcbiAgICAgIGNvbnN0IHNlbCA9IHdpbmRvd0VsLmdldFNlbGVjdGlvbigpO1xuICAgICAgaWYgKHNlbC5nZXRSYW5nZUF0ICYmIHNlbC5yYW5nZUNvdW50KSB7XG4gICAgICAgIHJldHVybiBzZWwuZ2V0UmFuZ2VBdCgwKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGRvY3VtZW50RWwuZ2V0U2VsZWN0aW9uKCkgJiYgZG9jdW1lbnRFbC5nZXRTZWxlY3Rpb24oKS5nZXRSYW5nZUF0KSB7XG4gICAgICByZXR1cm4gZG9jdW1lbnRFbC5nZXRTZWxlY3Rpb24oKS5nZXRSYW5nZUF0KDApO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzZWxlY3RFbGVtZW50KGRvY3VtZW50RWw6IERvY3VtZW50LCB3aW5kb3dFbDogV2luZG93LCBlbGVtZW50OiBIVE1MRWxlbWVudCk6IHZvaWQge1xuICAgIGlmIChlbGVtZW50KSB7XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgaWYgKHdpbmRvd0VsLmdldFNlbGVjdGlvbikge1xuICAgICAgICBjb25zdCBzZWwgPSB3aW5kb3dFbC5nZXRTZWxlY3Rpb24oKTtcbiAgICAgICAgc2VsLnJlbW92ZUFsbFJhbmdlcygpO1xuICAgICAgICBjb25zdCByYW5nZSA9IGRvY3VtZW50RWwuY3JlYXRlUmFuZ2UoKTtcbiAgICAgICAgcmFuZ2Uuc2VsZWN0Tm9kZUNvbnRlbnRzKGVsZW1lbnQpO1xuICAgICAgICBzZWwuYWRkUmFuZ2UocmFuZ2UpO1xuICAgICAgfSBlbHNlIGlmIChkb2N1bWVudEVsLmdldFNlbGVjdGlvbikge1xuICAgICAgICBjb25zdCBzZWwgPSBkb2N1bWVudEVsLmdldFNlbGVjdGlvbigpO1xuICAgICAgICBzZWwucmVtb3ZlQWxsUmFuZ2VzKCk7XG4gICAgICAgIGNvbnN0IHJhbmdlID0gZG9jdW1lbnRFbC5jcmVhdGVSYW5nZSgpO1xuICAgICAgICByYW5nZS5zZWxlY3ROb2RlQ29udGVudHMoZWxlbWVudCk7XG4gICAgICAgIHNlbC5hZGRSYW5nZShyYW5nZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbn1cbiJdfQ==
|
|
@@ -1,10 +1,9 @@
|
|
|
1
|
-
import { __decorate } from "tslib";
|
|
2
1
|
import { Injectable } from '@angular/core';
|
|
3
2
|
import * as i0 from "@angular/core";
|
|
4
3
|
/**
|
|
5
4
|
* @internal
|
|
6
5
|
*/
|
|
7
|
-
|
|
6
|
+
export class SkyTextEditorService {
|
|
8
7
|
constructor() {
|
|
9
8
|
/**
|
|
10
9
|
* A dictionary representing all active text editors and their settings.
|
|
@@ -37,12 +36,13 @@ let SkyTextEditorService = class SkyTextEditorService {
|
|
|
37
36
|
selectionChangeListener(id) {
|
|
38
37
|
return this.editors[id].selectionChangeObservable;
|
|
39
38
|
}
|
|
40
|
-
}
|
|
41
|
-
SkyTextEditorService.ɵ
|
|
42
|
-
SkyTextEditorService =
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
39
|
+
}
|
|
40
|
+
SkyTextEditorService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.7", ngImport: i0, type: SkyTextEditorService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
41
|
+
SkyTextEditorService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.7", ngImport: i0, type: SkyTextEditorService, providedIn: 'root' });
|
|
42
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.7", ngImport: i0, type: SkyTextEditorService, decorators: [{
|
|
43
|
+
type: Injectable,
|
|
44
|
+
args: [{
|
|
45
|
+
providedIn: 'root'
|
|
46
|
+
}]
|
|
47
|
+
}] });
|
|
48
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC1lZGl0b3Iuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RleHQtZWRpdG9yL3NyYy9tb2R1bGVzL3RleHQtZWRpdG9yL3NlcnZpY2VzL3RleHQtZWRpdG9yLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFVBQVUsRUFDWCxNQUFNLGVBQWUsQ0FBQzs7QUFVdkI7O0dBRUc7QUFJSCxNQUFNLE9BQU8sb0JBQW9CO0lBSGpDO1FBS0U7O1dBRUc7UUFDSSxZQUFPLEdBQXFDLEVBQUUsQ0FBQztLQWdDdkQ7SUE5QkM7O09BRUc7SUFDSSxhQUFhLENBQUMsRUFBVTtRQUM3QixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsZUFBZSxDQUFDO0lBQzFDLENBQUM7SUFFRDs7T0FFRztJQUNJLHFCQUFxQixDQUFDLEVBQVU7UUFDckMsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLHVCQUF1QixDQUFDO0lBQ2xELENBQUM7SUFFRDs7T0FFRztJQUNJLFlBQVksQ0FBQyxFQUFVO1FBQzVCLElBQUksRUFBRSxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDdEIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQ3pCO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0ksdUJBQXVCLENBQUMsRUFBVTtRQUN2QyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMseUJBQXlCLENBQUM7SUFDcEQsQ0FBQzs7aUhBbkNVLG9CQUFvQjtxSEFBcEIsb0JBQW9CLGNBRm5CLE1BQU07MkZBRVAsb0JBQW9CO2tCQUhoQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEluamVjdGFibGVcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7XG4gIE9ic2VydmFibGVcbn0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7XG4gIEVkaXRvclNldHRpbmdcbn0gZnJvbSAnLi4vdHlwZXMvZWRpdG9yLXNldHRpbmcnO1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBTa3lUZXh0RWRpdG9yU2VydmljZSB7XG5cbiAgLyoqXG4gICAqIEEgZGljdGlvbmFyeSByZXByZXNlbnRpbmcgYWxsIGFjdGl2ZSB0ZXh0IGVkaXRvcnMgYW5kIHRoZWlyIHNldHRpbmdzLlxuICAgKi9cbiAgcHVibGljIGVkaXRvcnM6IHsgW2tleTogc3RyaW5nXTogRWRpdG9yU2V0dGluZyB9ID0ge307XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGNsaWNrIG9ic2VydmFibGUgZnJvbSB0aGUgZWRpdG9yIHdpdGggdGhlIGNvcnJlc3BvbmRpbmcgaWQuXG4gICAqL1xuICBwdWJsaWMgY2xpY2tMaXN0ZW5lcihpZDogc3RyaW5nKTogT2JzZXJ2YWJsZTx1bmtub3duPiB7XG4gICAgcmV0dXJuIHRoaXMuZWRpdG9yc1tpZF0uY2xpY2tPYnNlcnZhYmxlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGNvbW1hbmQgY2hhbmdlIG9ic2VydmFibGUgZnJvbSB0aGUgZWRpdG9yIHdpdGggdGhlIGNvcnJlc3BvbmRpbmcgaWQuXG4gICAqL1xuICBwdWJsaWMgY29tbWFuZENoYW5nZUxpc3RlbmVyKGlkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPHVua25vd24+IHtcbiAgICByZXR1cm4gdGhpcy5lZGl0b3JzW2lkXS5jb21tYW5kQ2hhbmdlT2JzZXJ2YWJsZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIGVkaXRvciBmcm9tIHRoZSBgZWRpdG9yc2AgaW5kZXggYnkgaWQuXG4gICAqL1xuICBwdWJsaWMgcmVtb3ZlRWRpdG9yKGlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoaWQgaW4gdGhpcy5lZGl0b3JzKSB7XG4gICAgICBkZWxldGUgdGhpcy5lZGl0b3JzW2lkXTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgc2VsZWN0aW9uIGNoYW5nZSBvYnNlcnZhYmxlIGZyb20gdGhlIGVkaXRvciB3aXRoIHRoZSBjb3JyZXNwb25kaW5nIGlkLlxuICAgKi9cbiAgcHVibGljIHNlbGVjdGlvbkNoYW5nZUxpc3RlbmVyKGlkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPHVua25vd24+IHtcbiAgICByZXR1cm4gdGhpcy5lZGl0b3JzW2lkXS5zZWxlY3Rpb25DaGFuZ2VPYnNlcnZhYmxlO1xuICB9XG5cbn1cbiJdfQ==
|
|
@@ -1,9 +1,6 @@
|
|
|
1
|
-
import { __decorate } from "tslib";
|
|
2
1
|
import { Injectable } from '@angular/core';
|
|
2
|
+
import createDOMPurify from "dompurify";
|
|
3
3
|
import * as i0 from "@angular/core";
|
|
4
|
-
// TODO: figure out how to get the following `import` to work with docs-tools library.
|
|
5
|
-
// import DOMPurify from 'dompurify';
|
|
6
|
-
const createDOMPurify = require('dompurify');
|
|
7
4
|
const domPurify = createDOMPurify(window);
|
|
8
5
|
domPurify.addHook('afterSanitizeAttributes', (node) => {
|
|
9
6
|
// Set all elements owning target to target=_blank
|
|
@@ -19,7 +16,7 @@ domPurify.addHook('afterSanitizeAttributes', (node) => {
|
|
|
19
16
|
* can preserve `<style>` tags and allow `target` attributes for new tab links.
|
|
20
17
|
* @internal
|
|
21
18
|
*/
|
|
22
|
-
|
|
19
|
+
export class SkyTextSanitizationService {
|
|
23
20
|
constructor() {
|
|
24
21
|
this.allowedAttributes = ['target'];
|
|
25
22
|
}
|
|
@@ -29,12 +26,13 @@ let SkyTextSanitizationService = class SkyTextSanitizationService {
|
|
|
29
26
|
sanitize(htmlString) {
|
|
30
27
|
return domPurify.sanitize(htmlString, { ADD_ATTR: this.allowedAttributes });
|
|
31
28
|
}
|
|
32
|
-
}
|
|
33
|
-
SkyTextSanitizationService.ɵ
|
|
34
|
-
SkyTextSanitizationService =
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
29
|
+
}
|
|
30
|
+
SkyTextSanitizationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.7", ngImport: i0, type: SkyTextSanitizationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
31
|
+
SkyTextSanitizationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.7", ngImport: i0, type: SkyTextSanitizationService, providedIn: 'root' });
|
|
32
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.7", ngImport: i0, type: SkyTextSanitizationService, decorators: [{
|
|
33
|
+
type: Injectable,
|
|
34
|
+
args: [{
|
|
35
|
+
providedIn: 'root'
|
|
36
|
+
}]
|
|
37
|
+
}] });
|
|
38
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC1zYW5pdGl6YXRpb24uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RleHQtZWRpdG9yL3NyYy9tb2R1bGVzL3RleHQtZWRpdG9yL3NlcnZpY2VzL3RleHQtc2FuaXRpemF0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFVBQVUsRUFDWCxNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLGVBQWUsTUFBTSxXQUFXLENBQUM7O0FBQ3hDLE1BQU0sU0FBUyxHQUFHLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUUxQyxTQUFTLENBQUMsT0FBTyxDQUFDLHlCQUF5QixFQUFFLENBQUMsSUFBYSxFQUFFLEVBQUU7SUFDN0Qsa0RBQWtEO0lBQ2xELHlEQUF5RDtJQUN6RCxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxFQUFFO1FBQ2pDLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLHFCQUFxQixDQUFDLENBQUM7S0FDakQ7QUFDSCxDQUFDLENBQUMsQ0FBQztBQUVIOzs7OztHQUtHO0FBSUgsTUFBTSxPQUFPLDBCQUEwQjtJQUh2QztRQUtVLHNCQUFpQixHQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7S0FTbEQ7SUFQQzs7T0FFRztJQUNJLFFBQVEsQ0FBQyxVQUFrQjtRQUNoQyxPQUFPLFNBQVMsQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLENBQUM7SUFDOUUsQ0FBQzs7dUhBVFUsMEJBQTBCOzJIQUExQiwwQkFBMEIsY0FGekIsTUFBTTsyRkFFUCwwQkFBMEI7a0JBSHRDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgSW5qZWN0YWJsZVxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IGNyZWF0ZURPTVB1cmlmeSBmcm9tIFwiZG9tcHVyaWZ5XCI7XG5jb25zdCBkb21QdXJpZnkgPSBjcmVhdGVET01QdXJpZnkod2luZG93KTtcblxuZG9tUHVyaWZ5LmFkZEhvb2soJ2FmdGVyU2FuaXRpemVBdHRyaWJ1dGVzJywgKG5vZGU6IEVsZW1lbnQpID0+IHtcbiAgLy8gU2V0IGFsbCBlbGVtZW50cyBvd25pbmcgdGFyZ2V0IHRvIHRhcmdldD1fYmxhbmtcbiAgLy8gc28gd2Ugb25seSBhbGxvdyB0aGUgdGFyZ2V0IGF0dHJpYnV0ZSB3aXRoIHRoYXQgdmFsdWUuXG4gIGlmICghIW5vZGUuZ2V0QXR0cmlidXRlKCd0YXJnZXQnKSkge1xuICAgIG5vZGUuc2V0QXR0cmlidXRlKCd0YXJnZXQnLCAnX2JsYW5rJyk7XG4gICAgbm9kZS5zZXRBdHRyaWJ1dGUoJ3JlbCcsICdub29wZW5lciBub3JlZmVycmVyJyk7XG4gIH1cbn0pO1xuXG4vKipcbiAqIFRoZSBgU2t5VGV4dFNhbml0aXphdGlvblNlcnZpY2VgIHVzZXIgdGhlIGBET01QdXJpZnlgIGxpYnJhcnkgdG8gc2FuaXRpemUgc3RyaW5ncyBmb3IgdXNlXG4gKiBpbiB0aGUgRE9NLiBgRE9NUHVyaWZ5YCBhbGxvd3MgbW9yZSBjdXN0b21pemF0aW9uIHRoYW4gQW5ndWxhcidzIGludGVybmFsIGBEb21TYW5pdGl6ZXJgIHNvIHdlXG4gKiBjYW4gcHJlc2VydmUgYDxzdHlsZT5gIHRhZ3MgYW5kIGFsbG93IGB0YXJnZXRgIGF0dHJpYnV0ZXMgZm9yIG5ldyB0YWIgbGlua3MuXG4gKiBAaW50ZXJuYWxcbiAqL1xuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgU2t5VGV4dFNhbml0aXphdGlvblNlcnZpY2Uge1xuXG4gIHByaXZhdGUgYWxsb3dlZEF0dHJpYnV0ZXM6IHN0cmluZ1tdID0gWyd0YXJnZXQnXTtcblxuICAvKipcbiAgICogUmV0dXJucyBhIHNhbml0aXplZCBzdHJpbmcsIGFsbG93aW5nIHRhcmdldCBhdHRyaWJ1dGUgZm9yIG5ldyB0YWIgbGlua3MuXG4gICAqL1xuICBwdWJsaWMgc2FuaXRpemUoaHRtbFN0cmluZzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gZG9tUHVyaWZ5LnNhbml0aXplKGh0bWxTdHJpbmcsIHsgQUREX0FUVFI6IHRoaXMuYWxsb3dlZEF0dHJpYnV0ZXMgfSk7XG4gIH1cblxufVxuIl19
|