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.
- package/components/children/children-outlet.component.d.ts +9 -0
- package/components/children/children.component.d.ts +1 -6
- package/components/editable/editable.component.d.ts +15 -5
- package/components/leaf/token.d.ts +4 -0
- package/components/leaves/leaves.component.d.ts +1 -14
- package/components/string/default-string.component.d.ts +1 -1
- package/components/string/string.component.d.ts +8 -0
- package/components/text/token.d.ts +5 -0
- package/components/text/void-text.component.d.ts +0 -1
- package/esm2022/components/block-card/block-card.component.mjs +2 -2
- package/esm2022/components/children/children-outlet.component.mjs +22 -0
- package/esm2022/components/children/children.component.mjs +5 -33
- package/esm2022/components/editable/editable.component.mjs +141 -48
- package/esm2022/components/element/default-element.component.mjs +3 -3
- package/esm2022/components/element/element.component.mjs +3 -3
- package/esm2022/components/leaf/token.mjs +3 -0
- package/esm2022/components/leaves/leaves.component.mjs +5 -50
- package/esm2022/components/string/default-string.component.mjs +1 -1
- package/esm2022/components/string/string.component.mjs +16 -6
- package/esm2022/components/text/default-text.component.mjs +3 -3
- package/esm2022/components/text/token.mjs +4 -0
- package/esm2022/components/text/void-text.component.mjs +3 -7
- package/esm2022/module.mjs +7 -22
- package/esm2022/plugins/angular-editor.mjs +65 -20
- package/esm2022/plugins/with-angular.mjs +5 -4
- package/esm2022/public-api.mjs +3 -2
- package/esm2022/utils/constants.mjs +2 -0
- package/esm2022/utils/index.mjs +2 -1
- package/esm2022/utils/throttle.mjs +18 -0
- package/esm2022/view/base.mjs +71 -17
- package/esm2022/view/container.mjs +2 -82
- package/esm2022/view/context-change.mjs +13 -0
- package/esm2022/view/context.mjs +1 -1
- package/esm2022/view/render/leaves-render.mjs +107 -0
- package/esm2022/view/render/list-render.mjs +292 -0
- package/esm2022/view/render/utils.mjs +115 -0
- package/fesm2022/slate-angular.mjs +1159 -786
- package/fesm2022/slate-angular.mjs.map +1 -1
- package/module.d.ts +7 -8
- package/package.json +7 -7
- package/plugins/angular-editor.d.ts +16 -5
- package/public-api.d.ts +2 -1
- package/utils/constants.d.ts +1 -0
- package/utils/index.d.ts +1 -0
- package/utils/throttle.d.ts +2 -0
- package/view/base.d.ts +17 -4
- package/view/container.d.ts +3 -7
- package/view/{before-context-change.d.ts → context-change.d.ts} +4 -0
- package/view/context.d.ts +7 -2
- package/view/render/leaves-render.d.ts +21 -0
- package/view/render/list-render.d.ts +35 -0
- package/view/render/utils.d.ts +11 -0
- package/components/descendant/descendant.component.d.ts +0 -35
- package/components/leaf/leaf.component.d.ts +0 -16
- package/esm2022/components/descendant/descendant.component.mjs +0 -186
- package/esm2022/components/leaf/leaf.component.mjs +0 -38
- 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==
|