slate-angular 17.0.0 → 17.1.0

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 (57) hide show
  1. package/components/children/children-outlet.component.d.ts +9 -0
  2. package/components/children/children.component.d.ts +1 -6
  3. package/components/editable/editable.component.d.ts +15 -5
  4. package/components/leaf/token.d.ts +4 -0
  5. package/components/leaves/leaves.component.d.ts +1 -14
  6. package/components/string/default-string.component.d.ts +1 -1
  7. package/components/string/string.component.d.ts +8 -0
  8. package/components/text/token.d.ts +5 -0
  9. package/components/text/void-text.component.d.ts +0 -1
  10. package/esm2022/components/block-card/block-card.component.mjs +2 -2
  11. package/esm2022/components/children/children-outlet.component.mjs +22 -0
  12. package/esm2022/components/children/children.component.mjs +5 -33
  13. package/esm2022/components/editable/editable.component.mjs +141 -48
  14. package/esm2022/components/element/default-element.component.mjs +3 -3
  15. package/esm2022/components/element/element.component.mjs +3 -3
  16. package/esm2022/components/leaf/token.mjs +3 -0
  17. package/esm2022/components/leaves/leaves.component.mjs +5 -50
  18. package/esm2022/components/string/default-string.component.mjs +1 -1
  19. package/esm2022/components/string/string.component.mjs +16 -6
  20. package/esm2022/components/text/default-text.component.mjs +3 -3
  21. package/esm2022/components/text/token.mjs +4 -0
  22. package/esm2022/components/text/void-text.component.mjs +3 -7
  23. package/esm2022/module.mjs +7 -22
  24. package/esm2022/plugins/angular-editor.mjs +65 -20
  25. package/esm2022/plugins/with-angular.mjs +5 -4
  26. package/esm2022/public-api.mjs +3 -2
  27. package/esm2022/utils/constants.mjs +2 -0
  28. package/esm2022/utils/index.mjs +2 -1
  29. package/esm2022/utils/throttle.mjs +18 -0
  30. package/esm2022/view/base.mjs +71 -17
  31. package/esm2022/view/container.mjs +2 -82
  32. package/esm2022/view/context-change.mjs +13 -0
  33. package/esm2022/view/context.mjs +1 -1
  34. package/esm2022/view/render/leaves-render.mjs +107 -0
  35. package/esm2022/view/render/list-render.mjs +292 -0
  36. package/esm2022/view/render/utils.mjs +115 -0
  37. package/fesm2022/slate-angular.mjs +1159 -786
  38. package/fesm2022/slate-angular.mjs.map +1 -1
  39. package/module.d.ts +7 -8
  40. package/package.json +7 -7
  41. package/plugins/angular-editor.d.ts +16 -5
  42. package/public-api.d.ts +2 -1
  43. package/utils/constants.d.ts +1 -0
  44. package/utils/index.d.ts +1 -0
  45. package/utils/throttle.d.ts +2 -0
  46. package/view/base.d.ts +17 -4
  47. package/view/container.d.ts +3 -7
  48. package/view/{before-context-change.d.ts → context-change.d.ts} +4 -0
  49. package/view/context.d.ts +7 -2
  50. package/view/render/leaves-render.d.ts +21 -0
  51. package/view/render/list-render.d.ts +35 -0
  52. package/view/render/utils.d.ts +11 -0
  53. package/components/descendant/descendant.component.d.ts +0 -35
  54. package/components/leaf/leaf.component.d.ts +0 -16
  55. package/esm2022/components/descendant/descendant.component.mjs +0 -186
  56. package/esm2022/components/leaf/leaf.component.mjs +0 -38
  57. package/esm2022/view/before-context-change.mjs +0 -7
@@ -0,0 +1,115 @@
1
+ import { ComponentRef } from '@angular/core';
2
+ import { isComponentType, isTemplateRef } from '../../utils/view';
3
+ export function createEmbeddedViewOrComponent(viewType, context, viewContext, viewContainerRef) {
4
+ if (isTemplateRef(viewType)) {
5
+ const embeddedViewContext = {
6
+ context,
7
+ viewContext
8
+ };
9
+ const embeddedViewRef = viewContainerRef.createEmbeddedView(viewType, embeddedViewContext);
10
+ embeddedViewRef.detectChanges();
11
+ return embeddedViewRef;
12
+ }
13
+ if (isComponentType(viewType)) {
14
+ const componentRef = viewContainerRef.createComponent(viewType, {
15
+ injector: viewContainerRef.injector
16
+ });
17
+ componentRef.instance.viewContext = viewContext;
18
+ componentRef.instance.context = context;
19
+ componentRef.changeDetectorRef.detectChanges();
20
+ return componentRef;
21
+ }
22
+ }
23
+ export function executeAfterViewInit(view) {
24
+ if (view instanceof ComponentRef && view.instance.afterViewInit) {
25
+ view.instance.afterViewInit();
26
+ }
27
+ }
28
+ export function updateContext(view, newContext, viewContext) {
29
+ if (view instanceof ComponentRef) {
30
+ view.instance.context = newContext;
31
+ }
32
+ else {
33
+ const embeddedViewContext = {
34
+ context: newContext,
35
+ viewContext
36
+ };
37
+ view.context = embeddedViewContext;
38
+ view.detectChanges();
39
+ }
40
+ }
41
+ export function mount(views, blockCards, outletParent, outletElement) {
42
+ if (views.length > 0) {
43
+ const fragment = document.createDocumentFragment();
44
+ views.forEach((view, index) => {
45
+ const blockCard = blockCards ? blockCards[index] : undefined;
46
+ fragment.append(...getRootNodes(view, blockCard));
47
+ });
48
+ if (outletElement) {
49
+ outletElement.parentElement.insertBefore(fragment, outletElement);
50
+ outletElement.remove();
51
+ }
52
+ else {
53
+ outletParent.prepend(fragment);
54
+ }
55
+ }
56
+ }
57
+ export function getRootNodes(ref, blockCard) {
58
+ if (blockCard) {
59
+ return [blockCard.instance.nativeElement];
60
+ }
61
+ if (ref instanceof ComponentRef) {
62
+ ref.hostView.rootNodes.forEach(ele => {
63
+ if (!(ele instanceof HTMLElement)) {
64
+ ele.remove();
65
+ }
66
+ });
67
+ return [ref.instance.nativeElement];
68
+ }
69
+ else {
70
+ const result = [];
71
+ ref.rootNodes.forEach(rootNode => {
72
+ const isHTMLElement = rootNode instanceof HTMLElement;
73
+ const isSlateNodeOfLeaf = isHTMLElement && (rootNode.hasAttribute('data-slate-node') || rootNode.hasAttribute('data-slate-leaf'));
74
+ if (isSlateNodeOfLeaf && result.every(item => !item.contains(rootNode))) {
75
+ result.push(rootNode);
76
+ }
77
+ if (!isHTMLElement) {
78
+ rootNode.remove();
79
+ }
80
+ });
81
+ return result;
82
+ }
83
+ }
84
+ export function mountOnItemChange(index, item, views, blockCards, outletParent, firstRootNode, viewContext) {
85
+ const view = views[index];
86
+ let rootNodes = getRootNodes(view);
87
+ if (blockCards) {
88
+ const isBlockCard = viewContext.editor.isBlockCard(item);
89
+ if (isBlockCard) {
90
+ const blockCard = blockCards[index];
91
+ rootNodes = [blockCard.instance.nativeElement];
92
+ }
93
+ }
94
+ if (index === 0) {
95
+ if (firstRootNode) {
96
+ rootNodes.forEach(rootNode => {
97
+ firstRootNode.insertAdjacentElement('beforebegin', rootNode);
98
+ });
99
+ }
100
+ else {
101
+ outletParent.prepend(...rootNodes);
102
+ }
103
+ }
104
+ else {
105
+ const previousView = views[index - 1];
106
+ const blockCard = blockCards ? blockCards[index - 1] : null;
107
+ const previousRootNodes = getRootNodes(previousView, blockCard);
108
+ let previousRootNode = previousRootNodes[previousRootNodes.length - 1];
109
+ rootNodes.forEach(rootNode => {
110
+ previousRootNode.insertAdjacentElement('afterend', rootNode);
111
+ previousRootNode = rootNode;
112
+ });
113
+ }
114
+ }
115
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9zcmMvdmlldy9yZW5kZXIvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFlBQVksRUFBcUMsTUFBTSxlQUFlLENBQUM7QUFFaEYsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUlsRSxNQUFNLFVBQVUsNkJBQTZCLENBQ3pDLFFBQWtCLEVBQ2xCLE9BQVksRUFDWixXQUE2QixFQUM3QixnQkFBa0M7SUFFbEMsSUFBSSxhQUFhLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztRQUMxQixNQUFNLG1CQUFtQixHQUFHO1lBQ3hCLE9BQU87WUFDUCxXQUFXO1NBQ2QsQ0FBQztRQUNGLE1BQU0sZUFBZSxHQUFHLGdCQUFnQixDQUFDLGtCQUFrQixDQUFNLFFBQVEsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO1FBQ2hHLGVBQWUsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNoQyxPQUFPLGVBQWUsQ0FBQztJQUMzQixDQUFDO0lBQ0QsSUFBSSxlQUFlLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztRQUM1QixNQUFNLFlBQVksR0FBRyxnQkFBZ0IsQ0FBQyxlQUFlLENBQUMsUUFBUSxFQUFFO1lBQzVELFFBQVEsRUFBRSxnQkFBZ0IsQ0FBQyxRQUFRO1NBQ3RDLENBQXNCLENBQUM7UUFDeEIsWUFBWSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO1FBQ2hELFlBQVksQ0FBQyxRQUFRLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztRQUN4QyxZQUFZLENBQUMsaUJBQWlCLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDL0MsT0FBTyxZQUFZLENBQUM7SUFDeEIsQ0FBQztBQUNMLENBQUM7QUFFRCxNQUFNLFVBQVUsb0JBQW9CLENBQUMsSUFBOEM7SUFDL0UsSUFBSSxJQUFJLFlBQVksWUFB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LEtBQUssQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDdEMsTUFBTSxTQUFTLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDNUQsTUFBTSxpQkFBaUIsR0FBRyxZQUFZLENBQUMsWUFBWSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ2hFLElBQUksZ0JBQWdCLEdBQUcsaUJBQWlCLENBQUMsaUJBQWlCLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3ZFLFNBQVMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDekIsZ0JBQWdCLENBQUMscUJBQXFCLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQzdELGdCQUFnQixHQUFHLFFBQVEsQ0FBQztRQUNoQyxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGVzY2VuZGFudCB9IGZyb20gJ3NsYXRlJztcbmltcG9ydCB7IENvbXBvbmVudFJlZiwgRW1iZWRkZWRWaWV3UmVmLCBWaWV3Q29udGFpbmVyUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBWaWV3VHlwZSB9IGZyb20gJy4uLy4uL3R5cGVzL3ZpZXcnO1xuaW1wb3J0IHsgaXNDb21wb25lbnRUeXBlLCBpc1RlbXBsYXRlUmVmIH0gZnJvbSAnLi4vLi4vdXRpbHMvdmlldyc7XG5pbXBvcnQgeyBTbGF0ZUVsZW1lbnRDb250ZXh0LCBTbGF0ZUxlYWZDb250ZXh0LCBTbGF0ZVRleHRDb250ZXh0LCBTbGF0ZVZpZXdDb250ZXh0IH0gZnJvbSAnLi4vY29udGV4dCc7XG5pbXBvcnQgeyBTbGF0ZUJsb2NrQ2FyZCB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvYmxvY2stY2FyZC9ibG9jay1jYXJkLmNvbXBvbmVudCc7XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVFbWJlZGRlZFZpZXdPckNvbXBvbmVudChcbiAgICB2aWV3VHlwZTogVmlld1R5cGUsXG4gICAgY29udGV4dDogYW55LFxuICAgIHZpZXdDb250ZXh0OiBTbGF0ZVZpZXdDb250ZXh0LFxuICAgIHZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWZcbikge1xuICAgIGlmIChpc1RlbXBsYXRlUmVmKHZpZXdUeXBlKSkge1xuICAgICAgICBjb25zdCBlbWJlZGRlZFZpZXdDb250ZXh0ID0ge1xuICAgICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICAgIHZpZXdDb250ZXh0XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGVtYmVkZGVkVmlld1JlZiA9IHZpZXdDb250YWluZXJSZWYuY3JlYXRlRW1iZWRkZWRWaWV3PGFueT4odmlld1R5cGUsIGVtYmVkZGVkVmlld0NvbnRleHQpO1xuICAgICAgICBlbWJlZGRlZFZpZXdSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICByZXR1cm4gZW1iZWRkZWRWaWV3UmVmO1xuICAgIH1cbiAgICBpZiAoaXNDb21wb25lbnRUeXBlKHZpZXdUeXBlKSkge1xuICAgICAgICBjb25zdCBjb21wb25lbnRSZWYgPSB2aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUNvbXBvbmVudCh2aWV3VHlwZSwge1xuICAgICAgICAgICAgaW5qZWN0b3I6IHZpZXdDb250YWluZXJSZWYuaW5qZWN0b3JcbiAgICAgICAgfSkgYXMgQ29tcG9uZW50UmVmPGFueT47XG4gICAgICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZS52aWV3Q29udGV4dCA9IHZpZXdDb250ZXh0O1xuICAgICAgICBjb21wb25lbnRSZWYuaW5zdGFuY2UuY29udGV4dCA9IGNvbnRleHQ7XG4gICAgICAgIGNvbXBvbmVudFJlZi5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIHJldHVybiBjb21wb25lbnRSZWY7XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZXhlY3V0ZUFmdGVyVmlld0luaXQodmlldzogRW1iZWRkZWRWaWV3UmVmPGFueT4gfCBDb21wb25lbnRSZWY8YW55Pikge1xuICAgIGlmICh2aWV3IGluc3RhbmNlb2YgQ29tcG9uZW50UmVmICYmIHZpZXcuaW5zdGFuY2UuYWZ0ZXJWaWV3SW5pdCkge1xuICAgICAgICB2aWV3Lmluc3RhbmNlLmFmdGVyVmlld0luaXQoKTtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVDb250ZXh0KFxuICAgIHZpZXc6IEVtYmVkZGVkVmlld1JlZjxhbnk+IHwgQ29tcG9uZW50UmVmPGFueT4sXG4gICAgbmV3Q29udGV4dDogU2xhdGVFbGVtZW50Q29udGV4dCB8IFNsYXRlVGV4dENvbnRleHQgfCBTbGF0ZUxlYWZDb250ZXh0LFxuICAgIHZpZXdDb250ZXh0OiBTbGF0ZVZpZXdDb250ZXh0XG4pIHtcbiAgICBpZiAodmlldyBpbnN0YW5jZW9mIENvbXBvbmVudFJlZikge1xuICAgICAgICB2aWV3Lmluc3RhbmNlLmNvbnRleHQgPSBuZXdDb250ZXh0O1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGVtYmVkZGVkVmlld0NvbnRleHQgPSB7XG4gICAgICAgICAgICBjb250ZXh0OiBuZXdDb250ZXh0LFxuICAgICAgICAgICAgdmlld0NvbnRleHRcbiAgICAgICAgfTtcbiAgICAgICAgdmlldy5jb250ZXh0ID0gZW1iZWRkZWRWaWV3Q29udGV4dDtcbiAgICAgICAgdmlldy5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gbW91bnQoXG4gICAgdmlld3M6IChFbWJlZGRlZFZpZXdSZWY8YW55PiB8IENvbXBvbmVudFJlZjxhbnk+KVtdLFxuICAgIGJsb2NrQ2FyZHM6IChDb21wb25lbnRSZWY8U2xhdGVCbG9ja0NhcmQ+IHwgbnVsbClbXSB8IG51bGwsXG4gICAgb3V0bGV0UGFyZW50OiBIVE1MRWxlbWVudCxcbiAgICBvdXRsZXRFbGVtZW50OiBIVE1MRWxlbWVudCB8IG51bGxcbikge1xuICAgIGlmICh2aWV3cy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IGZyYWdtZW50ID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xuICAgICAgICB2aWV3cy5mb3JFYWNoKCh2aWV3LCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgYmxvY2tDYXJkID0gYmxvY2tDYXJkcyA/IGJsb2NrQ2FyZHNbaW5kZXhdIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgZnJhZ21lbnQuYXBwZW5kKC4uLmdldFJvb3ROb2Rlcyh2aWV3LCBibG9ja0NhcmQpKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChvdXRsZXRFbGVtZW50KSB7XG4gICAgICAgICAgICBvdXRsZXRFbGVtZW50LnBhcmVudEVsZW1lbnQuaW5zZXJ0QmVmb3JlKGZyYWdtZW50LCBvdXRsZXRFbGVtZW50KTtcbiAgICAgICAgICAgIG91dGxldEVsZW1lbnQucmVtb3ZlKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvdXRsZXRQYXJlbnQucHJlcGVuZChmcmFnbWVudCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRSb290Tm9kZXMocmVmOiBFbWJlZGRlZFZpZXdSZWY8YW55PiB8IENvbXBvbmVudFJlZjxhbnk+LCBibG9ja0NhcmQ/OiBDb21wb25lbnRSZWY8U2xhdGVCbG9ja0NhcmQ+KTogSFRNTEVsZW1lbnRbXSB7XG4gICAgaWYgKGJsb2NrQ2FyZCkge1xuICAgICAgICByZXR1cm4gW2Jsb2NrQ2FyZC5pbnN0YW5jZS5uYXRpdmVFbGVtZW50XTtcbiAgICB9XG4gICAgaWYgKHJlZiBpbnN0YW5jZW9mIENvbXBvbmVudFJlZikge1xuICAgICAgICAoKHJlZi5ob3N0VmlldyBhcyBhbnkpLnJvb3ROb2RlcyBhcyAoSFRNTEVsZW1lbnQgfCBhbnkpW10pLmZvckVhY2goZWxlID0+IHtcbiAgICAgICAgICAgIGlmICghKGVsZSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSkge1xuICAgICAgICAgICAgICAgIGVsZS5yZW1vdmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBbcmVmLmluc3RhbmNlLm5hdGl2ZUVsZW1lbnRdO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdDogSFRNTEVsZW1lbnRbXSA9IFtdO1xuICAgICAgICByZWYucm9vdE5vZGVzLmZvckVhY2gocm9vdE5vZGUgPT4ge1xuICAgICAgICAgICAgY29uc3QgaXNIVE1MRWxlbWVudCA9IHJvb3ROb2RlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQ7XG4gICAgICAgICAgICBjb25zdCBpc1NsYXRlTm9kZU9mTGVhZiA9XG4gICAgICAgICAgICAgICAgaXNIVE1MRWxlbWVudCAmJiAocm9vdE5vZGUuaGFzQXR0cmlidXRlKCdkYXRhLXNsYXRlLW5vZGUnKSB8fCByb290Tm9kZS5oYXNBdHRyaWJ1dGUoJ2RhdGEtc2xhdGUtbGVhZicpKTtcbiAgICAgICAgICAgIGlmIChpc1NsYXRlTm9kZU9mTGVhZiAmJiByZXN1bHQuZXZlcnkoaXRlbSA9PiAhaXRlbS5jb250YWlucyhyb290Tm9kZSkpKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2gocm9vdE5vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFpc0hUTUxFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgcm9vdE5vZGUucmVtb3ZlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1vdW50T25JdGVtQ2hhbmdlKFxuICAgIGluZGV4OiBudW1iZXIsXG4gICAgaXRlbTogRGVzY2VuZGFudCxcbiAgICB2aWV3czogKEVtYmVkZGVkVmlld1JlZjxhbnk+IHwgQ29tcG9uZW50UmVmPGFueT4pW10sXG4gICAgYmxvY2tDYXJkczogKENvbXBvbmVudFJlZjxTbGF0ZUJsb2NrQ2FyZD4gfCBudWxsKVtdIHwgbnVsbCxcbiAgICBvdXRsZXRQYXJlbnQ6IEhUTUxFbGVtZW50LFxuICAgIGZpcnN0Um9vdE5vZGU6IEhUTUxFbGVtZW50IHwgbnVsbCxcbiAgICB2aWV3Q29udGV4dDogU2xhdGVWaWV3Q29udGV4dFxuKSB7XG4gICAgY29uc3QgdmlldyA9IHZpZXdzW2luZGV4XTtcbiAgICBsZXQgcm9vdE5vZGVzID0gZ2V0Um9vdE5vZGVzKHZpZXcpO1xuICAgIGlmIChibG9ja0NhcmRzKSB7XG4gICAgICAgIGNvbnN0IGlzQmxvY2tDYXJkID0gdmlld0NvbnRleHQuZWRpdG9yLmlzQmxvY2tDYXJkKGl0ZW0pO1xuICAgICAgICBpZiAoaXNCbG9ja0NhcmQpIHtcbiAgICAgICAgICAgIGNvbnN0IGJsb2NrQ2FyZCA9IGJsb2NrQ2FyZHNbaW5kZXhdO1xuICAgICAgICAgICAgcm9vdE5vZGVzID0gW2Jsb2NrQ2FyZC5pbnN0YW5jZS5uYXRpdmVFbGVtZW50XTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoaW5kZXggPT09IDApIHtcbiAgICAgICAgaWYgKGZpcnN0Um9vdE5vZGUpIHtcbiAgICAgICAgICAgIHJvb3ROb2Rlcy5mb3JFYWNoKHJvb3ROb2RlID0+IHtcbiAgICAgICAgICAgICAgICBmaXJzdFJvb3ROb2RlLmluc2VydEFkamFjZW50RWxlbWVudCgnYmVmb3JlYmVnaW4nLCByb290Tm9kZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG91dGxldFBhcmVudC5wcmVwZW5kKC4uLnJvb3ROb2Rlcyk7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBwcmV2aW91c1ZpZXcgPSB2aWV3c1tpbmRleCAtIDFdO1xuICAgICAgICBjb25zdCBibG9ja0NhcmQgPSBibG9ja0NhcmRzID8gYmxvY2tDYXJkc1tpbmRleCAtIDFdIDogbnVsbDtcbiAgICAgICAgY29uc3QgcHJldmlvdXNSb290Tm9kZXMgPSBnZXRSb290Tm9kZXMocHJldmlvdXNWaWV3LCBibG9ja0NhcmQpO1xuICAgICAgICBsZXQgcHJldmlvdXNSb290Tm9kZSA9IHByZXZpb3VzUm9vdE5vZGVzW3ByZXZpb3VzUm9vdE5vZGVzLmxlbmd0aCAtIDFdO1xuICAgICAgICByb290Tm9kZXMuZm9yRWFjaChyb290Tm9kZSA9PiB7XG4gICAgICAgICAgICBwcmV2aW91c1Jvb3ROb2RlLmluc2VydEFkamFjZW50RWxlbWVudCgnYWZ0ZXJlbmQnLCByb290Tm9kZSk7XG4gICAgICAgICAgICBwcmV2aW91c1Jvb3ROb2RlID0gcm9vdE5vZGU7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiJdfQ==