slate-angular 1.9.1 → 13.0.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/descendant/descendant.component.d.ts +2 -3
- package/{esm2015/components/block-card/block-card.component.js → esm2020/components/block-card/block-card.component.mjs} +5 -8
- package/{esm2015/components/children/children.component.js → esm2020/components/children/children.component.mjs} +3 -3
- package/esm2020/components/descendant/descendant.component.mjs +183 -0
- package/esm2020/components/editable/editable.component.mjs +1057 -0
- package/{esm2015/components/element/default-element.component.js → esm2020/components/element/default-element.component.mjs} +3 -3
- package/{esm2015/components/element/default-element.component.token.js → esm2020/components/element/default-element.component.token.mjs} +0 -0
- package/{esm2015/components/element/element.component.js → esm2020/components/element/element.component.mjs} +3 -3
- package/{esm2015/components/leaf/default-leaf.component.js → esm2020/components/leaf/default-leaf.component.mjs} +3 -3
- package/{esm2015/components/leaf/leaf.component.js → esm2020/components/leaf/leaf.component.mjs} +3 -3
- package/{esm2015/components/leaves/leaves.component.js → esm2020/components/leaves/leaves.component.mjs} +3 -3
- package/esm2020/components/string/string.component.mjs +73 -0
- package/esm2020/components/string/template.component.mjs +26 -0
- package/{esm2015/components/text/default-text.component.js → esm2020/components/text/default-text.component.mjs} +3 -3
- package/{esm2015/components/text/void-text.component.js → esm2020/components/text/void-text.component.mjs} +3 -3
- package/{esm2015/custom-event/BeforeInputEventPlugin.js → esm2020/custom-event/BeforeInputEventPlugin.mjs} +0 -0
- package/{esm2015/custom-event/DOMTopLevelEventTypes.js → esm2020/custom-event/DOMTopLevelEventTypes.mjs} +0 -0
- package/{esm2015/custom-event/FallbackCompositionState.js → esm2020/custom-event/FallbackCompositionState.mjs} +0 -0
- package/{esm2015/custom-event/before-input-polyfill.js → esm2020/custom-event/before-input-polyfill.mjs} +0 -0
- package/{esm2015/module.js → esm2020/module.mjs} +5 -6
- package/esm2020/plugins/angular-editor.mjs +565 -0
- package/esm2020/plugins/with-angular.mjs +214 -0
- package/{esm2015/public-api.js → esm2020/public-api.mjs} +0 -0
- package/{esm2015/slate-angular.js → esm2020/slate-angular.mjs} +0 -0
- package/{esm2015/types/error.js → esm2020/types/error.mjs} +0 -0
- package/{esm2015/types/feature.js → esm2020/types/feature.mjs} +0 -0
- package/{esm2015/types/index.js → esm2020/types/index.mjs} +1 -1
- package/{esm2015/types/view.js → esm2020/types/view.mjs} +0 -0
- package/esm2020/utils/block-card.mjs +25 -0
- package/{esm2015/utils/dom.js → esm2020/utils/dom.mjs} +0 -0
- package/esm2020/utils/environment.mjs +38 -0
- package/{esm2015/utils/global-normalize.js → esm2020/utils/global-normalize.mjs} +0 -0
- package/{esm2015/utils/hotkeys.js → esm2020/utils/hotkeys.mjs} +0 -0
- package/{esm2015/utils/index.js → esm2020/utils/index.mjs} +0 -0
- package/{esm2015/utils/key.js → esm2020/utils/key.mjs} +0 -0
- package/{esm2015/utils/lines.js → esm2020/utils/lines.mjs} +0 -0
- package/esm2020/utils/range-list.mjs +29 -0
- package/{esm2015/utils/view.js → esm2020/utils/view.mjs} +0 -0
- package/{esm2015/utils/weak-maps.js → esm2020/utils/weak-maps.mjs} +0 -0
- package/{esm2015/view/base.js → esm2020/view/base.mjs} +12 -12
- package/{esm2015/view/before-context-change.js → esm2020/view/before-context-change.mjs} +0 -0
- package/esm2020/view/container-item.mjs +102 -0
- package/{esm2015/view/container.js → esm2020/view/container.mjs} +3 -3
- package/{esm2015/view/context.js → esm2020/view/context.mjs} +0 -0
- package/fesm2015/{slate-angular.js → slate-angular.mjs} +88 -103
- package/fesm2015/slate-angular.mjs.map +1 -0
- package/fesm2020/slate-angular.mjs +3643 -0
- package/fesm2020/slate-angular.mjs.map +1 -0
- package/package.json +26 -6
- package/styles/index.scss +1 -1
- package/types/index.d.ts +1 -0
- package/view/container-item.d.ts +2 -3
- package/bundles/slate-angular.umd.js +0 -4296
- package/bundles/slate-angular.umd.js.map +0 -1
- package/esm2015/components/descendant/descendant.component.js +0 -179
- package/esm2015/components/editable/editable.component.js +0 -1063
- package/esm2015/components/string/string.component.js +0 -73
- package/esm2015/components/string/template.component.js +0 -30
- package/esm2015/plugins/angular-editor.js +0 -565
- package/esm2015/plugins/with-angular.js +0 -214
- package/esm2015/utils/block-card.js +0 -25
- package/esm2015/utils/environment.js +0 -36
- package/esm2015/utils/range-list.js +0 -30
- package/esm2015/view/container-item.js +0 -105
- package/fesm2015/slate-angular.js.map +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { OnChanges, OnInit, ViewContainerRef } from "@angular/core";
|
|
2
2
|
import { ViewContainerItem } from '../../view/container-item';
|
|
3
3
|
import { Descendant, Range } from "slate";
|
|
4
4
|
import { SlateChildrenContext, SlateElementContext, SlateTextContext, SlateViewContext } from "../../view/context";
|
|
@@ -7,7 +7,6 @@ import { ComponentType, ViewType } from "../../types/view";
|
|
|
7
7
|
import * as i0 from "@angular/core";
|
|
8
8
|
export declare class SlateDescendantComponent extends ViewContainerItem<SlateElementContext | SlateTextContext, BaseElementComponent | BaseTextComponent> implements OnInit, OnChanges {
|
|
9
9
|
protected viewContainerRef: ViewContainerRef;
|
|
10
|
-
protected componentFactoryResolver: ComponentFactoryResolver;
|
|
11
10
|
defaultElementComponentType: ComponentType<BaseElementComponent>;
|
|
12
11
|
descendant: Descendant;
|
|
13
12
|
context: SlateChildrenContext;
|
|
@@ -15,7 +14,7 @@ export declare class SlateDescendantComponent extends ViewContainerItem<SlateEle
|
|
|
15
14
|
index: number;
|
|
16
15
|
get rootNodes(): HTMLElement[];
|
|
17
16
|
get isBlockCard(): boolean;
|
|
18
|
-
constructor(viewContainerRef: ViewContainerRef,
|
|
17
|
+
constructor(viewContainerRef: ViewContainerRef, defaultElementComponentType: ComponentType<BaseElementComponent>);
|
|
19
18
|
ngOnInit(): void;
|
|
20
19
|
destroyView(): void;
|
|
21
20
|
ngOnChanges(): void;
|
|
@@ -21,16 +21,13 @@ export class SlateBlockCardComponent {
|
|
|
21
21
|
this.centerRootNodes = rootNodes;
|
|
22
22
|
}
|
|
23
23
|
}
|
|
24
|
-
SlateBlockCardComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
25
|
-
SlateBlockCardComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "
|
|
26
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
24
|
+
SlateBlockCardComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: SlateBlockCardComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
25
|
+
SlateBlockCardComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.8", type: SlateBlockCardComponent, selector: "slate-block-card, [slateBlockCard]", viewQueries: [{ propertyName: "centerContianer", first: true, predicate: ["centerContianer"], descendants: true, static: true }], ngImport: i0, template: "<span card-target=\"card-left\" class=\"card-left\">{{ '\\uFEFF' }}</span>\n<div card-target=\"card-center\" #centerContianer></div>\n<span card-target=\"card-right\" class=\"card-right\">{{ '\\uFEFF' }}</span>" });
|
|
26
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: SlateBlockCardComponent, decorators: [{
|
|
27
27
|
type: Component,
|
|
28
|
-
args: [{
|
|
29
|
-
selector: 'slate-block-card, [slateBlockCard]',
|
|
30
|
-
templateUrl: 'block-card.component.html'
|
|
31
|
-
}]
|
|
28
|
+
args: [{ selector: 'slate-block-card, [slateBlockCard]', template: "<span card-target=\"card-left\" class=\"card-left\">{{ '\\uFEFF' }}</span>\n<div card-target=\"card-center\" #centerContianer></div>\n<span card-target=\"card-right\" class=\"card-right\">{{ '\\uFEFF' }}</span>" }]
|
|
32
29
|
}], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { centerContianer: [{
|
|
33
30
|
type: ViewChild,
|
|
34
31
|
args: ['centerContianer', { static: true }]
|
|
35
32
|
}] } });
|
|
36
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
33
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvY2stY2FyZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9zcmMvY29tcG9uZW50cy9ibG9jay1jYXJkL2Jsb2NrLWNhcmQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vcGFja2FnZXMvc3JjL2NvbXBvbmVudHMvYmxvY2stY2FyZC9ibG9jay1jYXJkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQXNCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFNekUsTUFBTSxPQUFPLHVCQUF1QjtJQWNoQyxZQUFvQixVQUFzQjtRQUF0QixlQUFVLEdBQVYsVUFBVSxDQUFZO0lBQUcsQ0FBQztJQVI5QyxJQUFJLGFBQWE7UUFDYixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDO0lBQ3pDLENBQUM7SUFFRCxJQUFJLHNCQUFzQjtRQUN0QixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsYUFBNEIsQ0FBQztJQUM3RCxDQUFDO0lBSUQsUUFBUTtRQUNKLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNkLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFFRCxNQUFNO1FBQ0YsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxJQUFJLENBQUMsc0JBQXNCLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFDckosQ0FBQztJQUVELGdCQUFnQixDQUFDLFNBQXdCO1FBQ3JDLElBQUksQ0FBQyxlQUFlLEdBQUcsU0FBUyxDQUFDO0lBQ3JDLENBQUM7O29IQTNCUSx1QkFBdUI7d0dBQXZCLHVCQUF1Qiw0TUNOcEMsc05BRXdFOzJGREkzRCx1QkFBdUI7a0JBSm5DLFNBQVM7K0JBQ0ksb0NBQW9DO2lHQUs5QyxlQUFlO3NCQURkLFNBQVM7dUJBQUMsaUJBQWlCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBPbkluaXQsIFZpZXdDaGlsZCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnc2xhdGUtYmxvY2stY2FyZCwgW3NsYXRlQmxvY2tDYXJkXScsXG4gICAgdGVtcGxhdGVVcmw6ICdibG9jay1jYXJkLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBTbGF0ZUJsb2NrQ2FyZENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gICAgQFZpZXdDaGlsZCgnY2VudGVyQ29udGlhbmVyJywgeyBzdGF0aWM6IHRydWUgfSlcbiAgICBjZW50ZXJDb250aWFuZXI6IEVsZW1lbnRSZWY7XG5cbiAgICBjZW50ZXJSb290Tm9kZXM6IEhUTUxFbGVtZW50W107XG5cbiAgICBnZXQgbmF0aXZlRWxlbWVudCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuICAgIH1cblxuICAgIGdldCBjZW50ZXJDb250YWluZXJFbGVtZW50KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jZW50ZXJDb250aWFuZXIubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudDtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYpIHt9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQoKTtcbiAgICAgICAgdGhpcy5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoYHNsYXRlLWJsb2NrLWNhcmRgKTtcbiAgICB9XG5cbiAgICBhcHBlbmQoKSB7XG4gICAgICAgIHRoaXMuY2VudGVyUm9vdE5vZGVzLmZvckVhY2goKHJvb3ROb2RlKSA9PiAhdGhpcy5jZW50ZXJDb250YWluZXJFbGVtZW50LmNvbnRhaW5zKHJvb3ROb2RlKSAmJiB0aGlzLmNlbnRlckNvbnRhaW5lckVsZW1lbnQuYXBwZW5kQ2hpbGQocm9vdE5vZGUpKTtcbiAgICB9XG5cbiAgICBpbml0aWFsaXplQ2VudGVyKHJvb3ROb2RlczogSFRNTEVsZW1lbnRbXSkge1xuICAgICAgICB0aGlzLmNlbnRlclJvb3ROb2RlcyA9IHJvb3ROb2RlcztcbiAgICB9XG59IiwiPHNwYW4gY2FyZC10YXJnZXQ9XCJjYXJkLWxlZnRcIiBjbGFzcz1cImNhcmQtbGVmdFwiPnt7ICAnXFx1RkVGRicgfX08L3NwYW4+XG48ZGl2IGNhcmQtdGFyZ2V0PVwiY2FyZC1jZW50ZXJcIiAjY2VudGVyQ29udGlhbmVyPjwvZGl2PlxuPHNwYW4gY2FyZC10YXJnZXQ9XCJjYXJkLXJpZ2h0XCIgY2xhc3M9XCJjYXJkLXJpZ2h0XCI+e3sgICdcXHVGRUZGJyB9fTwvc3Bhbj4iXX0=
|
|
@@ -15,14 +15,14 @@ export class SlateChildrenComponent extends ViewContainer {
|
|
|
15
15
|
ngOnInit() {
|
|
16
16
|
}
|
|
17
17
|
}
|
|
18
|
-
SlateChildrenComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
19
|
-
SlateChildrenComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "
|
|
18
|
+
SlateChildrenComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: SlateChildrenComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
19
|
+
SlateChildrenComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.8", type: SlateChildrenComponent, selector: "slate-children", inputs: { children: "children", context: "context", viewContext: "viewContext" }, viewQueries: [{ propertyName: "childrenComponent", predicate: SlateDescendantComponent, descendants: true, read: SlateDescendantComponent }], usesInheritance: true, ngImport: i0, template: `<slate-descendant
|
|
20
20
|
[descendant]="descendant"
|
|
21
21
|
[context]="context" [viewContext]="viewContext"
|
|
22
22
|
[viewContext]="viewContext"
|
|
23
23
|
[index]="index"
|
|
24
24
|
*ngFor="let descendant of children;let index = index; trackBy: trackBy"></slate-descendant>`, isInline: true, components: [{ type: i1.SlateDescendantComponent, selector: "slate-descendant", inputs: ["descendant", "context", "viewContext", "index"] }], directives: [{ type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
25
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
25
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: SlateChildrenComponent, decorators: [{
|
|
26
26
|
type: Component,
|
|
27
27
|
args: [{
|
|
28
28
|
selector: 'slate-children',
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, Inject, Input } from "@angular/core";
|
|
2
|
+
import { SlateBlockCardComponent } from "../block-card/block-card.component";
|
|
3
|
+
import { ViewContainerItem } from '../../view/container-item';
|
|
4
|
+
import { Editor, Range, Element } from "slate";
|
|
5
|
+
import { AngularEditor } from "../../plugins/angular-editor";
|
|
6
|
+
import { NODE_TO_INDEX, NODE_TO_PARENT } from "../../utils/weak-maps";
|
|
7
|
+
import { SlateDefaultTextComponent } from "../text/default-text.component";
|
|
8
|
+
import { SlateVoidTextComponent } from "../text/void-text.component";
|
|
9
|
+
import { isDecoratorRangeListEqual } from "../../utils";
|
|
10
|
+
import { SlateErrorCode } from "../../types";
|
|
11
|
+
import { SLATE_DEFAULT_ELEMENT_COMPONENT_TOKEN } from "../element/default-element.component.token";
|
|
12
|
+
import * as i0 from "@angular/core";
|
|
13
|
+
export class SlateDescendantComponent extends ViewContainerItem {
|
|
14
|
+
constructor(viewContainerRef, defaultElementComponentType) {
|
|
15
|
+
super(viewContainerRef);
|
|
16
|
+
this.viewContainerRef = viewContainerRef;
|
|
17
|
+
this.defaultElementComponentType = defaultElementComponentType;
|
|
18
|
+
}
|
|
19
|
+
get rootNodes() {
|
|
20
|
+
if (this.blockCardComponentRef) {
|
|
21
|
+
return [this.blockCardComponentRef.instance.nativeElement];
|
|
22
|
+
}
|
|
23
|
+
return super.getRootNodes();
|
|
24
|
+
}
|
|
25
|
+
get isBlockCard() {
|
|
26
|
+
return this.viewContext.editor.isBlockCard(this.descendant);
|
|
27
|
+
}
|
|
28
|
+
ngOnInit() {
|
|
29
|
+
NODE_TO_INDEX.set(this.descendant, this.index);
|
|
30
|
+
NODE_TO_PARENT.set(this.descendant, this.context.parent);
|
|
31
|
+
this.createView();
|
|
32
|
+
if (this.isBlockCard) {
|
|
33
|
+
this.createBlockCard();
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
destroyView() {
|
|
37
|
+
super.destroyView();
|
|
38
|
+
this.destroyBlockCard();
|
|
39
|
+
}
|
|
40
|
+
ngOnChanges() {
|
|
41
|
+
if (!this.initialized) {
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
NODE_TO_INDEX.set(this.descendant, this.index);
|
|
45
|
+
NODE_TO_PARENT.set(this.descendant, this.context.parent);
|
|
46
|
+
this.updateView();
|
|
47
|
+
if (this.isBlockCard) {
|
|
48
|
+
this.updateBlockCard();
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
destroyBlockCard() {
|
|
52
|
+
if (this.blockCardComponentRef) {
|
|
53
|
+
this.blockCardComponentRef.destroy();
|
|
54
|
+
this.blockCardComponentRef = null;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
createBlockCard() {
|
|
58
|
+
const rootNodes = this.rootNodes;
|
|
59
|
+
this.blockCardComponentRef = this.viewContainerRef.createComponent(SlateBlockCardComponent);
|
|
60
|
+
this.blockCardComponentRef.instance.initializeCenter(rootNodes);
|
|
61
|
+
}
|
|
62
|
+
updateBlockCard() {
|
|
63
|
+
if (this.blockCardComponentRef) {
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
const rootNodes = this.rootNodes;
|
|
67
|
+
this.createBlockCard();
|
|
68
|
+
const firstRootNode = rootNodes[0];
|
|
69
|
+
firstRootNode.replaceWith(this.blockCardComponentRef.instance.nativeElement);
|
|
70
|
+
}
|
|
71
|
+
getCommonContext() {
|
|
72
|
+
const path = AngularEditor.findPath(this.viewContext.editor, this.context.parent);
|
|
73
|
+
const p = path.concat(this.index);
|
|
74
|
+
try {
|
|
75
|
+
const range = Editor.range(this.viewContext.editor, p);
|
|
76
|
+
const sel = this.context.selection && Range.intersection(range, this.context.selection);
|
|
77
|
+
const ds = this.context.decorate([this.descendant, p]);
|
|
78
|
+
for (const dec of this.context.decorations) {
|
|
79
|
+
const d = Range.intersection(dec, range);
|
|
80
|
+
if (d) {
|
|
81
|
+
ds.push(d);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
return { selection: sel, decorations: ds };
|
|
85
|
+
}
|
|
86
|
+
catch (error) {
|
|
87
|
+
this.viewContext.editor.onError({ code: SlateErrorCode.GetStartPointError, nativeError: error });
|
|
88
|
+
return { selection: null, decorations: [] };
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
getContext() {
|
|
92
|
+
if (Element.isElement(this.descendant)) {
|
|
93
|
+
const computedContext = this.getCommonContext();
|
|
94
|
+
const key = AngularEditor.findKey(this.viewContext.editor, this.descendant);
|
|
95
|
+
const isInline = this.viewContext.editor.isInline(this.descendant);
|
|
96
|
+
const isVoid = this.viewContext.editor.isVoid(this.descendant);
|
|
97
|
+
const elementContext = {
|
|
98
|
+
element: this.descendant,
|
|
99
|
+
...computedContext,
|
|
100
|
+
attributes: {
|
|
101
|
+
'data-slate-node': 'element',
|
|
102
|
+
'data-slate-key': key.id
|
|
103
|
+
},
|
|
104
|
+
decorate: this.context.decorate,
|
|
105
|
+
readonly: this.context.readonly
|
|
106
|
+
};
|
|
107
|
+
if (isInline) {
|
|
108
|
+
elementContext.attributes['data-slate-inline'] = true;
|
|
109
|
+
}
|
|
110
|
+
if (isVoid) {
|
|
111
|
+
elementContext.attributes['data-slate-void'] = true;
|
|
112
|
+
elementContext.attributes.contenteditable = false;
|
|
113
|
+
}
|
|
114
|
+
return elementContext;
|
|
115
|
+
}
|
|
116
|
+
else {
|
|
117
|
+
const computedContext = this.getCommonContext();
|
|
118
|
+
const isLeafBlock = AngularEditor.isLeafBlock(this.viewContext.editor, this.context.parent);
|
|
119
|
+
const textContext = {
|
|
120
|
+
decorations: computedContext.decorations,
|
|
121
|
+
isLast: isLeafBlock && this.index === this.context.parent.children.length - 1,
|
|
122
|
+
parent: this.context.parent,
|
|
123
|
+
text: this.descendant
|
|
124
|
+
};
|
|
125
|
+
return textContext;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
getViewType() {
|
|
129
|
+
if (Element.isElement(this.descendant)) {
|
|
130
|
+
return (this.viewContext.renderElement && this.viewContext.renderElement(this.descendant)) || this.defaultElementComponentType;
|
|
131
|
+
}
|
|
132
|
+
else {
|
|
133
|
+
const isVoid = this.viewContext.editor.isVoid(this.context.parent);
|
|
134
|
+
return isVoid ? SlateVoidTextComponent : (this.viewContext.renderText && this.viewContext.renderText(this.descendant)) || SlateDefaultTextComponent;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
memoizedElementContext(prev, next) {
|
|
138
|
+
return (prev.element === next.element &&
|
|
139
|
+
(!this.viewContext.isStrictDecorate || prev.decorate === next.decorate) &&
|
|
140
|
+
prev.readonly === next.readonly &&
|
|
141
|
+
isDecoratorRangeListEqual(prev.decorations, next.decorations) &&
|
|
142
|
+
(prev.selection === next.selection ||
|
|
143
|
+
(!!prev.selection &&
|
|
144
|
+
!!next.selection &&
|
|
145
|
+
Range.equals(prev.selection, next.selection))));
|
|
146
|
+
}
|
|
147
|
+
memoizedTextContext(prev, next) {
|
|
148
|
+
return (next.parent === prev.parent &&
|
|
149
|
+
next.isLast === prev.isLast &&
|
|
150
|
+
next.text === prev.text &&
|
|
151
|
+
isDecoratorRangeListEqual(next.decorations, prev.decorations));
|
|
152
|
+
}
|
|
153
|
+
memoizedContext(prev, next) {
|
|
154
|
+
if (Element.isElement(this.descendant)) {
|
|
155
|
+
return this.memoizedElementContext(prev, next);
|
|
156
|
+
}
|
|
157
|
+
else {
|
|
158
|
+
return this.memoizedTextContext(prev, next);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
SlateDescendantComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: SlateDescendantComponent, deps: [{ token: i0.ViewContainerRef }, { token: SLATE_DEFAULT_ELEMENT_COMPONENT_TOKEN }], target: i0.ɵɵFactoryTarget.Component });
|
|
163
|
+
SlateDescendantComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.8", type: SlateDescendantComponent, selector: "slate-descendant", inputs: { descendant: "descendant", context: "context", viewContext: "viewContext", index: "index" }, usesInheritance: true, usesOnChanges: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
164
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: SlateDescendantComponent, decorators: [{
|
|
165
|
+
type: Component,
|
|
166
|
+
args: [{
|
|
167
|
+
selector: 'slate-descendant',
|
|
168
|
+
template: '',
|
|
169
|
+
changeDetection: ChangeDetectionStrategy.OnPush
|
|
170
|
+
}]
|
|
171
|
+
}], ctorParameters: function () { return [{ type: i0.ViewContainerRef }, { type: undefined, decorators: [{
|
|
172
|
+
type: Inject,
|
|
173
|
+
args: [SLATE_DEFAULT_ELEMENT_COMPONENT_TOKEN]
|
|
174
|
+
}] }]; }, propDecorators: { descendant: [{
|
|
175
|
+
type: Input
|
|
176
|
+
}], context: [{
|
|
177
|
+
type: Input
|
|
178
|
+
}], viewContext: [{
|
|
179
|
+
type: Input
|
|
180
|
+
}], index: [{
|
|
181
|
+
type: Input
|
|
182
|
+
}] } });
|
|
183
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVzY2VuZGFudC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9zcmMvY29tcG9uZW50cy9kZXNjZW5kYW50L2Rlc2NlbmRhbnQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBdUMsTUFBTSxlQUFlLENBQUM7QUFDdkgsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDN0UsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDOUQsT0FBTyxFQUFjLE1BQU0sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBRTNELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRXRFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3JFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUV4RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxxQ0FBcUMsRUFBRSxNQUFNLDRDQUE0QyxDQUFDOztBQU9uRyxNQUFNLE9BQU8sd0JBQXlCLFNBQVEsaUJBQW1HO0lBb0I3SSxZQUFzQixnQkFBa0MsRUFDRSwyQkFBZ0U7UUFDdEgsS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUE7UUFGTCxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ0UsZ0NBQTJCLEdBQTNCLDJCQUEyQixDQUFxQztJQUUxSCxDQUFDO0lBZEQsSUFBSSxTQUFTO1FB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QlEsTUFBTTsyQkFBQyxxQ0FBcUM7NENBcEJ4QyxVQUFVO3NCQUFsQixLQUFLO2dCQUVHLE9BQU87c0JBQWYsS0FBSztnQkFFRyxXQUFXO3NCQUFuQixLQUFLO2dCQUVHLEtBQUs7c0JBQWIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIEluamVjdCwgSW5wdXQsIE9uQ2hhbmdlcywgT25Jbml0LCBWaWV3Q29udGFpbmVyUmVmIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IFNsYXRlQmxvY2tDYXJkQ29tcG9uZW50IH0gZnJvbSBcIi4uL2Jsb2NrLWNhcmQvYmxvY2stY2FyZC5jb21wb25lbnRcIjtcbmltcG9ydCB7IFZpZXdDb250YWluZXJJdGVtIH0gZnJvbSAnLi4vLi4vdmlldy9jb250YWluZXItaXRlbSc7XG5pbXBvcnQgeyBEZXNjZW5kYW50LCBFZGl0b3IsIFJhbmdlLCBFbGVtZW50IH0gZnJvbSBcInNsYXRlXCI7XG5pbXBvcnQgeyBTbGF0ZUNoaWxkcmVuQ29udGV4dCwgU2xhdGVFbGVtZW50Q29udGV4dCwgU2xhdGVUZXh0Q29udGV4dCwgU2xhdGVWaWV3Q29udGV4dCB9IGZyb20gXCIuLi8uLi92aWV3L2NvbnRleHRcIjtcbmltcG9ydCB7IEFuZ3VsYXJFZGl0b3IgfSBmcm9tIFwiLi4vLi4vcGx1Z2lucy9hbmd1bGFyLWVkaXRvclwiO1xuaW1wb3J0IHsgTk9ERV9UT19JTkRFWCwgTk9ERV9UT19QQVJFTlQgfSBmcm9tIFwiLi4vLi4vdXRpbHMvd2Vhay1tYXBzXCI7XG5pbXBvcnQgeyBCYXNlRWxlbWVudENvbXBvbmVudCwgQmFzZVRleHRDb21wb25lbnQgfSBmcm9tIFwiLi4vLi4vdmlldy9iYXNlXCI7XG5pbXBvcnQgeyBTbGF0ZURlZmF1bHRUZXh0Q29tcG9uZW50IH0gZnJvbSBcIi4uL3RleHQvZGVmYXVsdC10ZXh0LmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgU2xhdGVWb2lkVGV4dENvbXBvbmVudCB9IGZyb20gXCIuLi90ZXh0L3ZvaWQtdGV4dC5jb21wb25lbnRcIjtcbmltcG9ydCB7IGlzRGVjb3JhdG9yUmFuZ2VMaXN0RXF1YWwgfSBmcm9tIFwiLi4vLi4vdXRpbHNcIjtcbmltcG9ydCB7IENvbXBvbmVudFR5cGUsIFZpZXdUeXBlIH0gZnJvbSBcIi4uLy4uL3R5cGVzL3ZpZXdcIjtcbmltcG9ydCB7IFNsYXRlRXJyb3JDb2RlIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5pbXBvcnQgeyBTTEFURV9ERUZBVUxUX0VMRU1FTlRfQ09NUE9ORU5UX1RPS0VOIH0gZnJvbSBcIi4uL2VsZW1lbnQvZGVmYXVsdC1lbGVtZW50LmNvbXBvbmVudC50b2tlblwiO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3NsYXRlLWRlc2NlbmRhbnQnLFxuICAgIHRlbXBsYXRlOiAnJyxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBTbGF0ZURlc2NlbmRhbnRDb21wb25lbnQgZXh0ZW5kcyBWaWV3Q29udGFpbmVySXRlbTxTbGF0ZUVsZW1lbnRDb250ZXh0IHwgU2xhdGVUZXh0Q29udGV4dCwgQmFzZUVsZW1lbnRDb21wb25lbnQgfCBCYXNlVGV4dENvbXBvbmVudD4gaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XG4gICAgQElucHV0KCkgZGVzY2VuZGFudDogRGVzY2VuZGFudDtcblxuICAgIEBJbnB1dCgpIGNvbnRleHQ6IFNsYXRlQ2hpbGRyZW5Db250ZXh0O1xuXG4gICAgQElucHV0KCkgdmlld0NvbnRleHQ6IFNsYXRlVmlld0NvbnRleHQ7XG5cbiAgICBASW5wdXQoKSBpbmRleDogbnVtYmVyO1xuXG4gICAgZ2V0IHJvb3ROb2RlcygpOiBIVE1MRWxlbWVudFtdIHtcbiAgICAgICAgaWYgKHRoaXMuYmxvY2tDYXJkQ29tcG9uZW50UmVmKSB7XG4gICAgICAgICAgICByZXR1cm4gW3RoaXMuYmxvY2tDYXJkQ29tcG9uZW50UmVmLmluc3RhbmNlLm5hdGl2ZUVsZW1lbnRdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdXBlci5nZXRSb290Tm9kZXMoKTtcbiAgICB9XG5cbiAgICBnZXQgaXNCbG9ja0NhcmQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZpZXdDb250ZXh0LmVkaXRvci5pc0Jsb2NrQ2FyZCh0aGlzLmRlc2NlbmRhbnQpO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKHByb3RlY3RlZCB2aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmLFxuICAgICAgICBASW5qZWN0KFNMQVRFX0RFRkFVTFRfRUxFTUVOVF9DT01QT05FTlRfVE9LRU4pIHB1YmxpYyBkZWZhdWx0RWxlbWVudENvbXBvbmVudFR5cGU6IENvbXBvbmVudFR5cGU8QmFzZUVsZW1lbnRDb21wb25lbnQ+KSB7XG4gICAgICAgIHN1cGVyKHZpZXdDb250YWluZXJSZWYpXG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIE5PREVfVE9fSU5ERVguc2V0KHRoaXMuZGVzY2VuZGFudCwgdGhpcy5pbmRleCk7XG4gICAgICAgIE5PREVfVE9fUEFSRU5ULnNldCh0aGlzLmRlc2NlbmRhbnQsIHRoaXMuY29udGV4dC5wYXJlbnQpO1xuICAgICAgICB0aGlzLmNyZWF0ZVZpZXcoKTtcbiAgICAgICAgaWYgKHRoaXMuaXNCbG9ja0NhcmQpIHtcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlQmxvY2tDYXJkKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBkZXN0cm95VmlldygpIHtcbiAgICAgICAgc3VwZXIuZGVzdHJveVZpZXcoKTtcbiAgICAgICAgdGhpcy5kZXN0cm95QmxvY2tDYXJkKCk7XG4gICAgfVxuXG4gICAgbmdPbkNoYW5nZXMoKSB7XG4gICAgICAgIGlmICghdGhpcy5pbml0aWFsaXplZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE5PREVfVE9fSU5ERVguc2V0KHRoaXMuZGVzY2VuZGFudCwgdGhpcy5pbmRleCk7XG4gICAgICAgIE5PREVfVE9fUEFSRU5ULnNldCh0aGlzLmRlc2NlbmRhbnQsIHRoaXMuY29udGV4dC5wYXJlbnQpO1xuICAgICAgICB0aGlzLnVwZGF0ZVZpZXcoKTtcbiAgICAgICAgaWYgKHRoaXMuaXNCbG9ja0NhcmQpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQmxvY2tDYXJkKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBkZXN0cm95QmxvY2tDYXJkKCkge1xuICAgICAgICBpZiAodGhpcy5ibG9ja0NhcmRDb21wb25lbnRSZWYpIHtcbiAgICAgICAgICAgIHRoaXMuYmxvY2tDYXJkQ29tcG9uZW50UmVmLmRlc3Ryb3koKTtcbiAgICAgICAgICAgIHRoaXMuYmxvY2tDYXJkQ29tcG9uZW50UmVmID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNyZWF0ZUJsb2NrQ2FyZCgpIHtcbiAgICAgICAgY29uc3Qgcm9vdE5vZGVzID0gdGhpcy5yb290Tm9kZXM7XG4gICAgICAgIHRoaXMuYmxvY2tDYXJkQ29tcG9uZW50UmVmID0gdGhpcy52aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUNvbXBvbmVudDxTbGF0ZUJsb2NrQ2FyZENvbXBvbmVudD4oU2xhdGVCbG9ja0NhcmRDb21wb25lbnQpO1xuICAgICAgICB0aGlzLmJsb2NrQ2FyZENvbXBvbmVudFJlZi5pbnN0YW5jZS5pbml0aWFsaXplQ2VudGVyKHJvb3ROb2Rlcyk7XG4gICAgfVxuXG4gICAgdXBkYXRlQmxvY2tDYXJkKCkge1xuICAgICAgICBpZiAodGhpcy5ibG9ja0NhcmRDb21wb25lbnRSZWYpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByb290Tm9kZXMgPSB0aGlzLnJvb3ROb2RlcztcbiAgICAgICAgdGhpcy5jcmVhdGVCbG9ja0NhcmQoKTtcbiAgICAgICAgY29uc3QgZmlyc3RSb290Tm9kZSA9IHJvb3ROb2Rlc1swXTtcbiAgICAgICAgZmlyc3RSb290Tm9kZS5yZXBsYWNlV2l0aCh0aGlzLmJsb2NrQ2FyZENvbXBvbmVudFJlZi5pbnN0YW5jZS5uYXRpdmVFbGVtZW50KTtcbiAgICB9XG5cbiAgICBnZXRDb21tb25Db250ZXh0KCk6IHsgc2VsZWN0aW9uOiBSYW5nZTsgZGVjb3JhdGlvbnM6IFJhbmdlW10gfSB7XG4gICAgICAgIGNvbnN0IHBhdGggPSBBbmd1bGFyRWRpdG9yLmZpbmRQYXRoKHRoaXMudmlld0NvbnRleHQuZWRpdG9yLCB0aGlzLmNvbnRleHQucGFyZW50KTtcbiAgICAgICAgY29uc3QgcCA9IHBhdGguY29uY2F0KHRoaXMuaW5kZXgpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcmFuZ2UgPSBFZGl0b3IucmFuZ2UodGhpcy52aWV3Q29udGV4dC5lZGl0b3IsIHApO1xuICAgICAgICAgICAgY29uc3Qgc2VsID0gdGhpcy5jb250ZXh0LnNlbGVjdGlvbiAmJiBSYW5nZS5pbnRlcnNlY3Rpb24ocmFuZ2UsIHRoaXMuY29udGV4dC5zZWxlY3Rpb24pO1xuICAgICAgICAgICAgY29uc3QgZHMgPSB0aGlzLmNvbnRleHQuZGVjb3JhdGUoW3RoaXMuZGVzY2VuZGFudCwgcF0pO1xuICAgICAgICAgICAgZm9yIChjb25zdCBkZWMgb2YgdGhpcy5jb250ZXh0LmRlY29yYXRpb25zKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZCA9IFJhbmdlLmludGVyc2VjdGlvbihkZWMsIHJhbmdlKTtcbiAgICAgICAgICAgICAgICBpZiAoZCkge1xuICAgICAgICAgICAgICAgICAgICBkcy5wdXNoKGQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB7IHNlbGVjdGlvbjogc2VsLCBkZWNvcmF0aW9uczogZHMgfTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIHRoaXMudmlld0NvbnRleHQuZWRpdG9yLm9uRXJyb3IoeyBjb2RlOiBTbGF0ZUVycm9yQ29kZS5HZXRTdGFydFBvaW50RXJyb3IsIG5hdGl2ZUVycm9yOiBlcnJvciB9KTtcbiAgICAgICAgICAgIHJldHVybiB7IHNlbGVjdGlvbjogbnVsbCwgZGVjb3JhdGlvbnM6IFtdIH07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRDb250ZXh0KCk6IFNsYXRlRWxlbWVudENvbnRleHQgfCBTbGF0ZVRleHRDb250ZXh0IHtcbiAgICAgICAgaWYgKEVsZW1lbnQuaXNFbGVtZW50KHRoaXMuZGVzY2VuZGFudCkpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbXB1dGVkQ29udGV4dCA9IHRoaXMuZ2V0Q29tbW9uQ29udGV4dCgpO1xuICAgICAgICAgICAgY29uc3Qga2V5ID0gQW5ndWxhckVkaXRvci5maW5kS2V5KHRoaXMudmlld0NvbnRleHQuZWRpdG9yLCB0aGlzLmRlc2NlbmRhbnQpO1xuICAgICAgICAgICAgY29uc3QgaXNJbmxpbmUgPSB0aGlzLnZpZXdDb250ZXh0LmVkaXRvci5pc0lubGluZSh0aGlzLmRlc2NlbmRhbnQpO1xuICAgICAgICAgICAgY29uc3QgaXNWb2lkID0gdGhpcy52aWV3Q29udGV4dC5lZGl0b3IuaXNWb2lkKHRoaXMuZGVzY2VuZGFudCk7XG4gICAgICAgICAgICBjb25zdCBlbGVtZW50Q29udGV4dDogU2xhdGVFbGVtZW50Q29udGV4dCA9IHtcbiAgICAgICAgICAgICAgICBlbGVtZW50OiB0aGlzLmRlc2NlbmRhbnQsXG4gICAgICAgICAgICAgICAgLi4uY29tcHV0ZWRDb250ZXh0LFxuICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgJ2RhdGEtc2xhdGUtbm9kZSc6ICdlbGVtZW50JyxcbiAgICAgICAgICAgICAgICAgICAgJ2RhdGEtc2xhdGUta2V5Jzoga2V5LmlkXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBkZWNvcmF0ZTogdGhpcy5jb250ZXh0LmRlY29yYXRlLFxuICAgICAgICAgICAgICAgIHJlYWRvbmx5OiB0aGlzLmNvbnRleHQucmVhZG9ubHlcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAoaXNJbmxpbmUpIHtcbiAgICAgICAgICAgICAgICBlbGVtZW50Q29udGV4dC5hdHRyaWJ1dGVzWydkYXRhLXNsYXRlLWlubGluZSddID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc1ZvaWQpIHtcbiAgICAgICAgICAgICAgICBlbGVtZW50Q29udGV4dC5hdHRyaWJ1dGVzWydkYXRhLXNsYXRlLXZvaWQnXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgZWxlbWVudENvbnRleHQuYXR0cmlidXRlcy5jb250ZW50ZWRpdGFibGUgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBlbGVtZW50Q29udGV4dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbXB1dGVkQ29udGV4dCA9IHRoaXMuZ2V0Q29tbW9uQ29udGV4dCgpO1xuICAgICAgICAgICAgY29uc3QgaXNMZWFmQmxvY2sgPSBBbmd1bGFyRWRpdG9yLmlzTGVhZkJsb2NrKHRoaXMudmlld0NvbnRleHQuZWRpdG9yLCB0aGlzLmNvbnRleHQucGFyZW50KTtcbiAgICAgICAgICAgIGNvbnN0IHRleHRDb250ZXh0OiBTbGF0ZVRleHRDb250ZXh0ID0ge1xuICAgICAgICAgICAgICAgIGRlY29yYXRpb25zOiBjb21wdXRlZENvbnRleHQuZGVjb3JhdGlvbnMsXG4gICAgICAgICAgICAgICAgaXNMYXN0OiBpc0xlYWZCbG9jayAmJiB0aGlzLmluZGV4ID09PSB0aGlzLmNvbnRleHQucGFyZW50LmNoaWxkcmVuLmxlbmd0aCAtIDEsXG4gICAgICAgICAgICAgICAgcGFyZW50OiB0aGlzLmNvbnRleHQucGFyZW50IGFzIEVsZW1lbnQsXG4gICAgICAgICAgICAgICAgdGV4dDogdGhpcy5kZXNjZW5kYW50XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIHRleHRDb250ZXh0O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0Vmlld1R5cGUoKTogVmlld1R5cGUge1xuICAgICAgICBpZiAoRWxlbWVudC5pc0VsZW1lbnQodGhpcy5kZXNjZW5kYW50KSkge1xuICAgICAgICAgICAgcmV0dXJuICh0aGlzLnZpZXdDb250ZXh0LnJlbmRlckVsZW1lbnQgJiYgdGhpcy52aWV3Q29udGV4dC5yZW5kZXJFbGVtZW50KHRoaXMuZGVzY2VuZGFudCkpIHx8IHRoaXMuZGVmYXVsdEVsZW1lbnRDb21wb25lbnRUeXBlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgaXNWb2lkID0gdGhpcy52aWV3Q29udGV4dC5lZGl0b3IuaXNWb2lkKHRoaXMuY29udGV4dC5wYXJlbnQgYXMgRWxlbWVudCk7XG4gICAgICAgICAgICByZXR1cm4gaXNWb2lkID8gU2xhdGVWb2lkVGV4dENvbXBvbmVudCA6ICh0aGlzLnZpZXdDb250ZXh0LnJlbmRlclRleHQgJiYgdGhpcy52aWV3Q29udGV4dC5yZW5kZXJUZXh0KHRoaXMuZGVzY2VuZGFudCkpIHx8IFNsYXRlRGVmYXVsdFRleHRDb21wb25lbnQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBtZW1vaXplZEVsZW1lbnRDb250ZXh0KHByZXY6IFNsYXRlRWxlbWVudENvbnRleHQsIG5leHQ6IFNsYXRlRWxlbWVudENvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHByZXYuZWxlbWVudCA9PT0gbmV4dC5lbGVtZW50ICYmXG4gICAgICAgICAgICAoIXRoaXMudmlld0NvbnRleHQuaXNTdHJpY3REZWNvcmF0ZSB8fCBwcmV2LmRlY29yYXRlID09PSBuZXh0LmRlY29yYXRlKSAmJlxuICAgICAgICAgICAgcHJldi5yZWFkb25seSA9PT0gbmV4dC5yZWFkb25seSAmJlxuICAgICAgICAgICAgaXNEZWNvcmF0b3JSYW5nZUxpc3RFcXVhbChwcmV2LmRlY29yYXRpb25zLCBuZXh0LmRlY29yYXRpb25zKSAmJlxuICAgICAgICAgICAgKHByZXYuc2VsZWN0aW9uID09PSBuZXh0LnNlbGVjdGlvbiB8fFxuICAgICAgICAgICAgICAgICghIXByZXYuc2VsZWN0aW9uICYmXG4gICAgICAgICAgICAgICAgICAgICEhbmV4dC5zZWxlY3Rpb24gJiZcbiAgICAgICAgICAgICAgICAgICAgUmFuZ2UuZXF1YWxzKHByZXYuc2VsZWN0aW9uLCBuZXh0LnNlbGVjdGlvbikpKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIG1lbW9pemVkVGV4dENvbnRleHQocHJldjogU2xhdGVUZXh0Q29udGV4dCwgbmV4dDogU2xhdGVUZXh0Q29udGV4dCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgbmV4dC5wYXJlbnQgPT09IHByZXYucGFyZW50ICYmXG4gICAgICAgICAgICBuZXh0LmlzTGFzdCA9PT0gcHJldi5pc0xhc3QgJiZcbiAgICAgICAgICAgIG5leHQudGV4dCA9PT0gcHJldi50ZXh0ICYmXG4gICAgICAgICAgICBpc0RlY29yYXRvclJhbmdlTGlzdEVxdWFsKG5leHQuZGVjb3JhdGlvbnMsIHByZXYuZGVjb3JhdGlvbnMpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgbWVtb2l6ZWRDb250ZXh0KHByZXY6IFNsYXRlRWxlbWVudENvbnRleHQgfCBTbGF0ZVRleHRDb250ZXh0LCBuZXh0OiBTbGF0ZUVsZW1lbnRDb250ZXh0IHwgU2xhdGVUZXh0Q29udGV4dCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoRWxlbWVudC5pc0VsZW1lbnQodGhpcy5kZXNjZW5kYW50KSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubWVtb2l6ZWRFbGVtZW50Q29udGV4dChwcmV2IGFzIFNsYXRlRWxlbWVudENvbnRleHQsIG5leHQgYXMgU2xhdGVFbGVtZW50Q29udGV4dCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tZW1vaXplZFRleHRDb250ZXh0KHByZXYgYXMgU2xhdGVUZXh0Q29udGV4dCwgbmV4dCBhcyBTbGF0ZVRleHRDb250ZXh0KTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==
|