@worktile/theia 2.3.2 → 2.4.1

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.
Files changed (49) hide show
  1. package/bundles/worktile-theia.umd.js +275 -198
  2. package/bundles/worktile-theia.umd.js.map +1 -1
  3. package/components/column-resize/column-resize.directive.d.ts +2 -2
  4. package/components/column-resize/column-resize.scss +6 -0
  5. package/components/column-resize/event-dispatcher.d.ts +7 -1
  6. package/components/column-resize/resize-ref.d.ts +3 -0
  7. package/constants/default.d.ts +0 -1
  8. package/custom-types.d.ts +2 -1
  9. package/editor.module.d.ts +45 -43
  10. package/esm2015/components/column-resize/column-resize.directive.js +26 -33
  11. package/esm2015/components/column-resize/event-dispatcher.js +8 -1
  12. package/esm2015/components/column-resize/overlay-handle.component.js +3 -3
  13. package/esm2015/components/column-resize/resize-ref.js +4 -1
  14. package/esm2015/constants/default.js +1 -1
  15. package/esm2015/custom-types.js +1 -1
  16. package/esm2015/editor.module.js +7 -6
  17. package/esm2015/plugins/index.js +2 -2
  18. package/esm2015/plugins/inline-code/inline-code.component.js +7 -7
  19. package/esm2015/plugins/link/link.component.js +11 -24
  20. package/esm2015/plugins/link/link.plugin.js +3 -4
  21. package/esm2015/plugins/quick-insert/components/quick-insert.component.js +7 -8
  22. package/esm2015/plugins/quick-insert/quick-insert.plugin.js +40 -0
  23. package/esm2015/plugins/table/components/insert-mark/insert-mark.component.js +7 -2
  24. package/esm2015/plugins/table/components/table.component.js +10 -4
  25. package/esm2015/plugins/table/components/td/td.component.js +59 -37
  26. package/esm2015/plugins/table/components/toolbar/table-options.component.js +90 -0
  27. package/esm2015/plugins/table/components/toolbar/table-toolbar.component.js +26 -7
  28. package/esm2015/plugins/table/table.service.js +2 -2
  29. package/esm2015/plugins/table/table.store.js +13 -3
  30. package/esm2015/plugins/table/table.types.js +1 -1
  31. package/esm2015/plugins/todo-item/todo-item.component.js +3 -3
  32. package/esm2015/services/table-contextmenu.service.js +1 -1
  33. package/esm2015/utils/dom.js +2 -42
  34. package/fesm2015/worktile-theia.js +281 -185
  35. package/fesm2015/worktile-theia.js.map +1 -1
  36. package/package.json +1 -1
  37. package/plugins/link/link.component.d.ts +2 -8
  38. package/plugins/link/link.component.scss +0 -2
  39. package/plugins/quick-insert/{quick-insert.plugint.d.ts → quick-insert.plugin.d.ts} +0 -0
  40. package/plugins/table/components/table.component.scss +142 -105
  41. package/plugins/table/components/td/td.component.d.ts +3 -2
  42. package/plugins/table/components/toolbar/table-options.component.d.ts +20 -0
  43. package/plugins/table/components/toolbar/table-toolbar.component.d.ts +4 -2
  44. package/plugins/table/table.store.d.ts +3 -1
  45. package/plugins/table/table.types.d.ts +10 -0
  46. package/styles/editor.scss +141 -131
  47. package/styles/typo.scss +0 -6
  48. package/utils/dom.d.ts +1 -5
  49. package/esm2015/plugins/quick-insert/quick-insert.plugint.js +0 -38
@@ -63,137 +63,147 @@ $thy-icon-nav-link-margin-right: 5px;
63
63
  }
64
64
  }
65
65
  .the-editor-typo{
66
- // list style
67
- ul,
68
- ol,
69
- li {
70
- list-style: inherit;
71
- }
72
-
73
- ol {
74
- list-style-type: decimal;
75
-
76
- ol {
77
- list-style-type: lower-alpha;
78
-
79
- ol {
80
- list-style-type: lower-roman;
81
- }
82
- }
83
- }
84
-
85
- ul {
86
- list-style-type: disc;
87
-
88
- ul {
89
- list-style-type: circle;
90
-
91
- ul {
92
- list-style-type: square;
93
- }
94
- }
95
- }
96
-
97
- [the-underlined][the-strike] {
98
- text-decoration: underline line-through;
99
- }
100
-
101
- [the-strike] {
102
- text-decoration: line-through;
103
- }
104
-
105
- [the-underlined] {
106
- text-decoration: underline;
107
- }
108
-
109
- [the-italic] {
110
- font-style: italic;
111
- }
112
-
113
- [the-bold] {
114
- font-weight: bold;
115
- }
116
-
117
- [the-code-line] {
118
- margin: 0 4px;
119
- padding: 2px 3px;
120
- border: 1px solid $gray-300;
121
- border-radius: 2px;
122
- font-family: monospace;
123
- font-size: inherit;
124
- background-color: rgba(243, 243, 243, 0.8);
125
- line-height: inherit;
126
- word-wrap: break-word;
127
- text-indent: 0;
128
- color: $gray-700;
129
- }
130
-
131
- .leaf-with-placeholder {
132
- background-color: $white;
133
- }
134
- [data-slate-placeholder] {
135
- color: initial;
136
- font-weight: initial;
137
- font-style: initial;
138
- text-decoration: initial;
139
- background-color: initial;
140
- overflow: hidden;
141
- text-overflow: ellipsis;
142
- white-space: nowrap;
143
- }
144
-
145
- // list: fontSize, li marginLeft, multiDigit li marginLeft
146
- @each $size, $liMl, $liMultiDigitMl in (12, 13, 14, 15, 16, 18, 20, (24 null 35px), (28 null 42px), (32 33px 50px), (40 40px 62px), (48 50px 78px)) {
147
- [the-font-size="#{$size}"] {
148
- font-size: #{$size}px;
149
- line-height: $font-size-line-height;
150
- }
151
- .slate-element-list-item {
152
- &.font-size-#{$size} {
153
- &::marker {
154
- font-size: #{$size}px;
155
- }
156
- }
157
- }
158
- .slate-element-numbered-list {
159
- .slate-element-list-item {
160
- &.font-size-#{$size} {
161
- margin-left: $liMl;
162
-
163
- &[data-multi-digit] {
164
- margin-left: $liMultiDigitMl;
165
- }
166
- }
167
- }
168
- }
169
- .slate-element-bulleted-list {
170
- .slate-element-list-item {
171
- &.font-size-#{$size} {
172
- @if $size == 40 {
173
- margin-left: 2.2em;
174
- }
175
- @if $size == 48 {
176
- margin-left: 2.5em;
177
- }
178
- }
179
- }
180
- }
181
- }
182
-
183
- // indent
184
- @for $i from 1 through 17 {
185
- [the-indent="#{$i}"] {
186
- padding-left: $i * 2em;
187
- }
188
- // list
189
- ol[the-level="#{$i}"],
190
- ul[the-level="#{$i}"] {
191
- margin-left: $i * 2em;
192
- }
193
- .the-check-item[the-level="#{$i}"] {
194
- padding-left: calc(#{$i * 2em} + 2em);
195
- }
196
- }
66
+ // list style
67
+ ul,
68
+ ol,
69
+ li {
70
+ list-style: inherit;
71
+ }
72
+
73
+ ol {
74
+ list-style-type: decimal;
75
+
76
+ ol {
77
+ list-style-type: lower-alpha;
78
+
79
+ ol {
80
+ list-style-type: lower-roman;
81
+ }
82
+ }
83
+ }
84
+
85
+ ul {
86
+ list-style-type: disc;
87
+
88
+ ul {
89
+ list-style-type: circle;
90
+
91
+ ul {
92
+ list-style-type: square;
93
+ }
94
+ }
95
+ }
96
+
97
+ [the-underlined][the-strike] {
98
+ text-decoration: underline line-through;
99
+ }
100
+
101
+ [the-strike] {
102
+ text-decoration: line-through;
103
+ }
104
+
105
+ [the-underlined] {
106
+ text-decoration: underline;
107
+ }
108
+
109
+ [the-italic] {
110
+ font-style: italic;
111
+ }
112
+
113
+ [the-bold] {
114
+ font-weight: bold;
115
+ }
116
+
117
+ [the-code-line] {
118
+ margin: 0 4px;
119
+ padding: 2px 3px;
120
+ border: 1px solid $gray-300;
121
+ border-radius: 2px;
122
+ font-family: monospace;
123
+ font-size: inherit;
124
+ background-color: rgba(243, 243, 243, 0.8);
125
+ line-height: inherit;
126
+ word-wrap: break-word;
127
+ text-indent: 0;
128
+ color: $gray-700;
129
+ }
130
+
131
+ .leaf-with-placeholder {
132
+ background-color: $white;
133
+
134
+ &[data-slate-leaf=true] {
135
+ width: auto;
136
+ display: flow-root;
137
+ }
138
+ }
139
+ [data-slate-placeholder] {
140
+ color: initial;
141
+ font-weight: initial;
142
+ font-style: initial;
143
+ text-decoration: initial;
144
+ background-color: initial;
145
+ overflow: hidden;
146
+ text-overflow: ellipsis;
147
+ white-space: nowrap;
148
+ }
149
+
150
+ .the-break-char {
151
+ font-size: 0;
152
+ line-height: 0;
153
+ }
154
+
155
+ // list: fontSize, li marginLeft, multiDigit li marginLeft
156
+ @each $size, $liMl, $liMultiDigitMl in (12, 13, 14, 15, 16, 18, 20, (24 null 35px), (28 null 42px), (32 33px 50px), (40 40px 62px), (48 50px 78px)) {
157
+ [the-font-size="#{$size}"] {
158
+ font-size: #{$size}px;
159
+ line-height: $font-size-line-height;
160
+ }
161
+ .slate-element-list-item {
162
+ &.font-size-#{$size} {
163
+ &::marker {
164
+ font-size: #{$size}px;
165
+ }
166
+ }
167
+ }
168
+ .slate-element-numbered-list {
169
+ .slate-element-list-item {
170
+ &.font-size-#{$size} {
171
+ margin-left: $liMl;
172
+
173
+ &[data-multi-digit] {
174
+ margin-left: $liMultiDigitMl;
175
+ }
176
+ }
177
+ }
178
+ }
179
+ .slate-element-bulleted-list {
180
+ .slate-element-list-item {
181
+ &.font-size-#{$size} {
182
+ @if $size == 40 {
183
+ margin-left: 2.2em;
184
+ }
185
+ @if $size == 48 {
186
+ margin-left: 2.5em;
187
+ }
188
+ }
189
+ }
190
+ }
191
+ }
192
+
193
+ // indent
194
+ @for $i from 1 through 17 {
195
+ [the-indent="#{$i}"] {
196
+ padding-left: $i * 2em;
197
+ }
198
+ // list
199
+ ol[the-level="#{$i}"],
200
+ ul[the-level="#{$i}"] {
201
+ padding-left: $i * 2em;
202
+ }
203
+ .the-check-item[the-level="#{$i}"] {
204
+ padding-left: calc(#{$i * 2em} + 2em);
205
+ }
206
+ }
197
207
  }
198
208
 
199
209
  .the-nav-split-line {
package/styles/typo.scss CHANGED
@@ -220,12 +220,6 @@ $font-size-line-height: 1.5;
220
220
  }
221
221
  }
222
222
 
223
- // 处理混排时 placeholder 的样式
224
- .slate-element-paragraph {
225
- white-space: pre-wrap;
226
- overflow: hidden;
227
- }
228
-
229
223
 
230
224
  // 处理相邻图文混排时的布局
231
225
  [layout^="wrap-"] + [layout^="wrap-"] + .slate-block {
package/utils/dom.d.ts CHANGED
@@ -1,7 +1,5 @@
1
- import { Element, NodeEntry } from 'slate';
1
+ import { Element } from 'slate';
2
2
  import { DOMElement } from 'slate-angular';
3
- import { TheEditor } from '../interfaces/editor';
4
- import { NodeLevel } from '../constants';
5
3
  /** Converts CSS pixel values to numbers, eg "123px" to 123. Returns NaN for non pixel values. */
6
4
  export declare function coercePixelsFromCssValue(cssValue: string): number;
7
5
  export declare function getElementWidth(element: HTMLElement): number;
@@ -10,5 +8,3 @@ export declare function getColsTotalWidth(cols: HTMLTableColElement[]): number;
10
8
  export declare function getRowsTotalHeight(rows: HTMLTableRowElement[]): number;
11
9
  export declare function useElementStyle(el: HTMLElement, element: Element): void;
12
10
  export declare function getElementClassByPrefix(el: DOMElement, prefix: string): any;
13
- export declare function findRelativeElementByPoint(editor: TheEditor, x: number, y: number, mode?: NodeLevel): DOMElement;
14
- export declare function findNodeEntryByPoint(editor: TheEditor, x: number, y: number, mode?: NodeLevel): NodeEntry<Element> | null;
@@ -1,38 +0,0 @@
1
- import { Node } from 'slate';
2
- import { AngularEditor } from 'slate-angular';
3
- import { TheEditorComponent } from '../../editor.component';
4
- import { QUICK_TOOLBAR_HOTKEY } from '../../constants';
5
- import { isCleanEmptyParagraph } from '../../utils/is-clean-empty-paragraph';
6
- import { QuickInsertEditor } from './quick-insert.editor';
7
- export const withQuickInsert = (editor) => {
8
- const { onKeydown, deleteBackward, onChange } = editor;
9
- editor.onKeydown = (event) => {
10
- if (event.key === QUICK_TOOLBAR_HOTKEY && isCleanEmptyParagraph(editor)) {
11
- const rootNode = AngularEditor.toDOMNode(editor, Node.ancestor(editor, [editor.selection.anchor.path[0]]));
12
- const theEditorComponent = editor.injector.get(TheEditorComponent);
13
- const quickToolbars = theEditorComponent.quickToolbarItems;
14
- QuickInsertEditor.openQuickToolbar(editor, quickToolbars, rootNode);
15
- }
16
- onKeydown(event);
17
- };
18
- editor.deleteBackward = unit => {
19
- if (!QuickInsertEditor.isOpenToolbar(editor, ['remove_text'])) {
20
- QuickInsertEditor.closeQuickToolbar(editor);
21
- }
22
- deleteBackward(unit);
23
- };
24
- editor.onChange = () => {
25
- var _a;
26
- onChange();
27
- if (editor.selection) {
28
- const editorComponent = editor.injector.get(TheEditorComponent);
29
- (_a = editorComponent.quickInsertInstance) === null || _a === void 0 ? void 0 : _a.checkStatus();
30
- const block = Node.ancestor(editor, [editor.selection.anchor.path[0]]);
31
- if (!isCleanEmptyParagraph(editor) && Node.string(block) !== QUICK_TOOLBAR_HOTKEY) {
32
- QuickInsertEditor.closeQuickToolbar(editor);
33
- }
34
- }
35
- };
36
- return editor;
37
- };
38
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVpY2staW5zZXJ0LnBsdWdpbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9zcmMvcGx1Z2lucy9xdWljay1pbnNlcnQvcXVpY2staW5zZXJ0LnBsdWdpbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFVLElBQUksRUFBVyxNQUFNLE9BQU8sQ0FBQztBQUM5QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzVELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRTFELE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxDQUFDLE1BQWMsRUFBRSxFQUFFO0lBQzlDLE1BQU0sRUFBRSxTQUFTLEVBQUUsY0FBYyxFQUFFLFFBQVEsRUFBRSxHQUFHLE1BQU0sQ0FBQztJQUV2RCxNQUFNLENBQUMsU0FBUyxHQUFHLENBQUMsS0FBb0IsRUFBRSxFQUFFO1FBQ3hDLElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyxvQkFBb0IsSUFBSSxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUNyRSxNQUFNLFFBQVEsR0FBRyxhQUFhLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMzRyxNQUFNLGtCQUFrQixHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDLENBQUM7WUFDbkUsTUFBTSxhQUFhLEdBQUcsa0JBQWtCLENBQUMsaUJBQWlCLENBQUM7WUFDM0QsaUJBQWlCLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLGFBQWEsRUFBRSxRQUFRLENBQUMsQ0FBQztTQUN2RTtRQUVELFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNyQixDQUFDLENBQUM7SUFFRixNQUFNLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxFQUFFO1FBQzNCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLENBQUMsYUFBYSxDQUFDLENBQUMsRUFBRTtZQUMzRCxpQkFBaUIsQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUMvQztRQUNELGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN6QixDQUFDLENBQUM7SUFFRixNQUFNLENBQUMsUUFBUSxHQUFHLEdBQUcsRUFBRTs7UUFDbkIsUUFBUSxFQUFFLENBQUM7UUFFWCxJQUFJLE1BQU0sQ0FBQyxTQUFTLEVBQUU7WUFDbEIsTUFBTSxlQUFlLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQUMsQ0FBQztZQUNoRSxNQUFBLGVBQWUsQ0FBQyxtQkFBbUIsMENBQUUsV0FBVyxFQUFFLENBQUM7WUFFbkQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBWSxDQUFDO1lBQ2xGLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLG9CQUFvQixFQUFFO2dCQUMvRSxpQkFBaUIsQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQzthQUMvQztTQUNKO0lBQ0wsQ0FBQyxDQUFDO0lBRUYsT0FBTyxNQUFNLENBQUM7QUFDbEIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRWRpdG9yLCBOb2RlLCBFbGVtZW50IH0gZnJvbSAnc2xhdGUnO1xuaW1wb3J0IHsgQW5ndWxhckVkaXRvciB9IGZyb20gJ3NsYXRlLWFuZ3VsYXInO1xuaW1wb3J0IHsgVGhlRWRpdG9yQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vZWRpdG9yLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBRVUlDS19UT09MQkFSX0hPVEtFWSB9IGZyb20gJy4uLy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBpc0NsZWFuRW1wdHlQYXJhZ3JhcGggfSBmcm9tICcuLi8uLi91dGlscy9pcy1jbGVhbi1lbXB0eS1wYXJhZ3JhcGgnO1xuaW1wb3J0IHsgUXVpY2tJbnNlcnRFZGl0b3IgfSBmcm9tICcuL3F1aWNrLWluc2VydC5lZGl0b3InO1xuXG5leHBvcnQgY29uc3Qgd2l0aFF1aWNrSW5zZXJ0ID0gKGVkaXRvcjogRWRpdG9yKSA9PiB7XG4gICAgY29uc3QgeyBvbktleWRvd24sIGRlbGV0ZUJhY2t3YXJkLCBvbkNoYW5nZSB9ID0gZWRpdG9yO1xuXG4gICAgZWRpdG9yLm9uS2V5ZG93biA9IChldmVudDogS2V5Ym9hcmRFdmVudCkgPT4ge1xuICAgICAgICBpZiAoZXZlbnQua2V5ID09PSBRVUlDS19UT09MQkFSX0hPVEtFWSAmJiBpc0NsZWFuRW1wdHlQYXJhZ3JhcGgoZWRpdG9yKSkge1xuICAgICAgICAgICAgY29uc3Qgcm9vdE5vZGUgPSBBbmd1bGFyRWRpdG9yLnRvRE9NTm9kZShlZGl0b3IsIE5vZGUuYW5jZXN0b3IoZWRpdG9yLCBbZWRpdG9yLnNlbGVjdGlvbi5hbmNob3IucGF0aFswXV0pKTtcbiAgICAgICAgICAgIGNvbnN0IHRoZUVkaXRvckNvbXBvbmVudCA9IGVkaXRvci5pbmplY3Rvci5nZXQoVGhlRWRpdG9yQ29tcG9uZW50KTtcbiAgICAgICAgICAgIGNvbnN0IHF1aWNrVG9vbGJhcnMgPSB0aGVFZGl0b3JDb21wb25lbnQucXVpY2tUb29sYmFySXRlbXM7XG4gICAgICAgICAgICBRdWlja0luc2VydEVkaXRvci5vcGVuUXVpY2tUb29sYmFyKGVkaXRvciwgcXVpY2tUb29sYmFycywgcm9vdE5vZGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgb25LZXlkb3duKGV2ZW50KTtcbiAgICB9O1xuXG4gICAgZWRpdG9yLmRlbGV0ZUJhY2t3YXJkID0gdW5pdCA9PiB7XG4gICAgICAgIGlmICghUXVpY2tJbnNlcnRFZGl0b3IuaXNPcGVuVG9vbGJhcihlZGl0b3IsIFsncmVtb3ZlX3RleHQnXSkpIHtcbiAgICAgICAgICAgIFF1aWNrSW5zZXJ0RWRpdG9yLmNsb3NlUXVpY2tUb29sYmFyKGVkaXRvcik7XG4gICAgICAgIH1cbiAgICAgICAgZGVsZXRlQmFja3dhcmQodW5pdCk7XG4gICAgfTtcblxuICAgIGVkaXRvci5vbkNoYW5nZSA9ICgpID0+IHtcbiAgICAgICAgb25DaGFuZ2UoKTtcblxuICAgICAgICBpZiAoZWRpdG9yLnNlbGVjdGlvbikge1xuICAgICAgICAgICAgY29uc3QgZWRpdG9yQ29tcG9uZW50ID0gZWRpdG9yLmluamVjdG9yLmdldChUaGVFZGl0b3JDb21wb25lbnQpO1xuICAgICAgICAgICAgZWRpdG9yQ29tcG9uZW50LnF1aWNrSW5zZXJ0SW5zdGFuY2U/LmNoZWNrU3RhdHVzKCk7XG5cbiAgICAgICAgICAgIGNvbnN0IGJsb2NrID0gTm9kZS5hbmNlc3RvcihlZGl0b3IsIFtlZGl0b3Iuc2VsZWN0aW9uLmFuY2hvci5wYXRoWzBdXSkgYXMgRWxlbWVudDtcbiAgICAgICAgICAgIGlmICghaXNDbGVhbkVtcHR5UGFyYWdyYXBoKGVkaXRvcikgJiYgTm9kZS5zdHJpbmcoYmxvY2spICE9PSBRVUlDS19UT09MQkFSX0hPVEtFWSkge1xuICAgICAgICAgICAgICAgIFF1aWNrSW5zZXJ0RWRpdG9yLmNsb3NlUXVpY2tUb29sYmFyKGVkaXRvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgcmV0dXJuIGVkaXRvcjtcbn07XG4iXX0=