@ecodev/natural-editor 41.0.0 → 41.2.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/bundles/ecodev-natural-editor.umd.js +247 -80
- package/bundles/ecodev-natural-editor.umd.js.map +1 -1
- package/esm2015/lib/editor/editor.component.js +200 -0
- package/esm2015/lib/editor.module.js +15 -5
- package/esm2015/lib/link-dialog/link-dialog.component.js +3 -4
- package/esm2015/lib/utils/image.js +81 -0
- package/esm2015/lib/utils/menu.js +207 -0
- package/esm2015/lib/utils/schema.js +46 -0
- package/esm2015/lib/utils/table.js +37 -0
- package/esm2015/public-api.js +2 -2
- package/fesm2015/ecodev-natural-editor.js +233 -69
- package/fesm2015/ecodev-natural-editor.js.map +1 -1
- package/lib/{editor.component.d.ts → editor/editor.component.d.ts} +19 -4
- package/lib/editor.module.d.ts +4 -2
- package/lib/utils/image.d.ts +15 -0
- package/lib/{menu.d.ts → utils/menu.d.ts} +1 -1
- package/lib/utils/schema.d.ts +3 -0
- package/lib/utils/table.d.ts +8 -0
- package/package.json +3 -1
- package/public-api.d.ts +1 -1
- package/src/lib/editor/_editor.theme.scss +44 -0
- package/theming/_natural-editor.theme.scss +1 -1
- package/esm2015/lib/editor.component.js +0 -160
- package/esm2015/lib/menu.js +0 -222
- package/esm2015/lib/schema.js +0 -21
- package/lib/schema.d.ts +0 -2
- package/src/lib/_editor.theme.scss +0 -23
|
@@ -1,160 +0,0 @@
|
|
|
1
|
-
import { Component, ElementRef, EventEmitter, Inject, Optional, Output, Self, ViewChild, } from '@angular/core';
|
|
2
|
-
import { EditorView } from 'prosemirror-view';
|
|
3
|
-
import { EditorState, Plugin } from 'prosemirror-state';
|
|
4
|
-
// @ts-ignore
|
|
5
|
-
import { exampleSetup } from 'prosemirror-example-setup';
|
|
6
|
-
import { DOMParser, DOMSerializer } from 'prosemirror-model';
|
|
7
|
-
import { schema } from './schema';
|
|
8
|
-
import { DOCUMENT } from '@angular/common';
|
|
9
|
-
import { buildMenuItems } from './menu';
|
|
10
|
-
import * as i0 from "@angular/core";
|
|
11
|
-
import * as i1 from "@angular/forms";
|
|
12
|
-
import * as i2 from "@angular/material/dialog";
|
|
13
|
-
import * as i3 from "@angular/material/button-toggle";
|
|
14
|
-
import * as i4 from "@angular/material/icon";
|
|
15
|
-
import * as i5 from "@angular/material/button";
|
|
16
|
-
import * as i6 from "@angular/material/menu";
|
|
17
|
-
import * as i7 from "@angular/common";
|
|
18
|
-
import * as i8 from "@angular/material/tooltip";
|
|
19
|
-
/**
|
|
20
|
-
* Prosemirror component
|
|
21
|
-
*
|
|
22
|
-
* Usage :
|
|
23
|
-
*
|
|
24
|
-
* ```html
|
|
25
|
-
* <natural-editor [(ngModel)]="htmlString"></natural-editor>
|
|
26
|
-
* ```
|
|
27
|
-
*/
|
|
28
|
-
// @dynamic
|
|
29
|
-
export class NaturalEditorComponent {
|
|
30
|
-
constructor(ngControl, document, dialog) {
|
|
31
|
-
this.ngControl = ngControl;
|
|
32
|
-
this.document = document;
|
|
33
|
-
this.dialog = dialog;
|
|
34
|
-
this.view = null;
|
|
35
|
-
this.contentChange = new EventEmitter();
|
|
36
|
-
/**
|
|
37
|
-
* HTML string
|
|
38
|
-
*/
|
|
39
|
-
this.content = '';
|
|
40
|
-
this.menu = null;
|
|
41
|
-
if (this.ngControl !== null) {
|
|
42
|
-
this.ngControl.valueAccessor = this;
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
ngOnInit() {
|
|
46
|
-
this.menu = buildMenuItems(schema, this.dialog);
|
|
47
|
-
const serializer = DOMSerializer.fromSchema(schema);
|
|
48
|
-
const state = this.createState();
|
|
49
|
-
this.view = new EditorView(this.editor.nativeElement, {
|
|
50
|
-
state: state,
|
|
51
|
-
dispatchTransaction: (transaction) => {
|
|
52
|
-
if (!this.view) {
|
|
53
|
-
return;
|
|
54
|
-
}
|
|
55
|
-
const newState = this.view.state.apply(transaction);
|
|
56
|
-
this.view.updateState(newState);
|
|
57
|
-
// Transform doc into HTML string
|
|
58
|
-
const dom = serializer.serializeFragment(this.view.state.doc);
|
|
59
|
-
const el = this.document.createElement('_');
|
|
60
|
-
el.appendChild(dom);
|
|
61
|
-
const newContent = el.innerHTML;
|
|
62
|
-
if (this.content === newContent) {
|
|
63
|
-
return;
|
|
64
|
-
}
|
|
65
|
-
this.content = el.innerHTML;
|
|
66
|
-
if (this.onChange) {
|
|
67
|
-
this.onChange(this.content);
|
|
68
|
-
}
|
|
69
|
-
this.contentChange.emit(this.content);
|
|
70
|
-
},
|
|
71
|
-
});
|
|
72
|
-
this.update();
|
|
73
|
-
}
|
|
74
|
-
writeValue(val) {
|
|
75
|
-
if (typeof val === 'string' && val !== this.content) {
|
|
76
|
-
this.content = val;
|
|
77
|
-
}
|
|
78
|
-
if (this.view !== null) {
|
|
79
|
-
const state = this.createState();
|
|
80
|
-
this.view.updateState(state);
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
createState() {
|
|
84
|
-
const template = this.document.createElement('_');
|
|
85
|
-
template.innerHTML = '<div>' + this.content + '</div>';
|
|
86
|
-
if (!template.firstChild) {
|
|
87
|
-
throw new Error('child of template element could not be created');
|
|
88
|
-
}
|
|
89
|
-
const parser = DOMParser.fromSchema(schema);
|
|
90
|
-
const doc = parser.parse(template.firstChild);
|
|
91
|
-
const self = this;
|
|
92
|
-
return EditorState.create({
|
|
93
|
-
doc: doc,
|
|
94
|
-
plugins: [
|
|
95
|
-
...exampleSetup({ schema, menuBar: false }),
|
|
96
|
-
new Plugin({
|
|
97
|
-
view: () => self,
|
|
98
|
-
}),
|
|
99
|
-
],
|
|
100
|
-
});
|
|
101
|
-
}
|
|
102
|
-
/**
|
|
103
|
-
* Called by Prosemirror whenever the editor state changes. So we update our menu states.
|
|
104
|
-
*/
|
|
105
|
-
update() {
|
|
106
|
-
if (!this.view || !this.menu) {
|
|
107
|
-
return;
|
|
108
|
-
}
|
|
109
|
-
for (const item of Object.values(this.menu)) {
|
|
110
|
-
item.update(this.view, this.view.state);
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
registerOnChange(fn) {
|
|
114
|
-
this.onChange = fn;
|
|
115
|
-
}
|
|
116
|
-
registerOnTouched(fn) { }
|
|
117
|
-
setDisabledState(isDisabled) {
|
|
118
|
-
// TODO disable editor ?
|
|
119
|
-
}
|
|
120
|
-
ngOnDestroy() {
|
|
121
|
-
if (this.view) {
|
|
122
|
-
this.view.destroy();
|
|
123
|
-
this.view = null;
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
run(event, key) {
|
|
127
|
-
if (!this.view || !this.menu) {
|
|
128
|
-
return;
|
|
129
|
-
}
|
|
130
|
-
const item = this.menu[key];
|
|
131
|
-
if (!item || item.disabled || !item.show) {
|
|
132
|
-
return;
|
|
133
|
-
}
|
|
134
|
-
item.spec.run(this.view.state, this.view.dispatch, this.view, event);
|
|
135
|
-
this.view.focus();
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
NaturalEditorComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.9", ngImport: i0, type: NaturalEditorComponent, deps: [{ token: i1.NgControl, optional: true, self: true }, { token: DOCUMENT }, { token: i2.MatDialog }], target: i0.ɵɵFactoryTarget.Component });
|
|
139
|
-
NaturalEditorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.9", type: NaturalEditorComponent, selector: "natural-editor", outputs: { contentChange: "contentChange" }, viewQueries: [{ propertyName: "editor", first: true, predicate: ["editor"], descendants: true, read: ElementRef, static: true }], ngImport: i0, template: "<div class=\"menu\" *ngIf=\"menu\">\n <mat-button-toggle-group multiple>\n <mat-button-toggle\n *ngIf=\"menu.toggleStrong\"\n [disabled]=\"menu.toggleStrong.disabled\"\n [checked]=\"menu.toggleStrong.active\"\n (click)=\"run($event, 'toggleStrong')\"\n i18n-matTooltip\n matTooltip=\"Gras\"\n >\n <mat-icon>format_bold</mat-icon>\n </mat-button-toggle>\n\n <mat-button-toggle\n *ngIf=\"menu.toggleEm\"\n [disabled]=\"menu.toggleEm.disabled\"\n [checked]=\"menu.toggleEm.active\"\n (click)=\"run($event, 'toggleEm')\"\n i18n-matTooltip\n matTooltip=\"Italique\"\n >\n <mat-icon>format_italic</mat-icon>\n </mat-button-toggle>\n\n <mat-button-toggle\n *ngIf=\"menu.toggleCode\"\n [disabled]=\"menu.toggleCode.disabled\"\n [checked]=\"menu.toggleCode.active\"\n (click)=\"run($event, 'toggleCode')\"\n i18n-matTooltip\n matTooltip=\"Code\"\n >\n <mat-icon>code</mat-icon>\n </mat-button-toggle>\n\n <mat-button-toggle\n *ngIf=\"menu.toggleLink\"\n [disabled]=\"menu.toggleLink.disabled\"\n [checked]=\"menu.toggleLink.active\"\n (click)=\"run($event, 'toggleLink')\"\n i18n-matTooltip\n matTooltip=\"Ins\u00E9rer un lien...\"\n >\n <mat-icon>insert_link</mat-icon>\n </mat-button-toggle>\n </mat-button-toggle-group>\n\n <button mat-button [matMenuTriggerFor]=\"blockMenu\">\n <span i18n>Type</span>\n <mat-icon>arrow_drop_down</mat-icon>\n </button>\n\n <mat-menu #blockMenu=\"matMenu\">\n <button\n mat-menu-item\n *ngIf=\"menu.makeParagraph\"\n [disabled]=\"menu.makeParagraph.disabled\"\n (click)=\"run($event, 'makeParagraph')\"\n i18n\n >Paragraphe\n </button>\n <button\n mat-menu-item\n *ngIf=\"menu.makeCodeBlock\"\n [disabled]=\"menu.makeCodeBlock.disabled\"\n (click)=\"run($event, 'makeCodeBlock')\"\n i18n\n >Code\n </button>\n <button\n mat-menu-item\n *ngIf=\"menu.makeHead1\"\n [disabled]=\"menu.makeHead1.disabled\"\n (click)=\"run($event, 'makeHead1')\"\n i18n\n >Titre 1\n </button>\n <button\n mat-menu-item\n *ngIf=\"menu.makeHead2\"\n [disabled]=\"menu.makeHead2.disabled\"\n (click)=\"run($event, 'makeHead2')\"\n i18n\n >Titre 2\n </button>\n <button\n mat-menu-item\n *ngIf=\"menu.makeHead3\"\n [disabled]=\"menu.makeHead3.disabled\"\n (click)=\"run($event, 'makeHead3')\"\n i18n\n >Titre 3\n </button>\n <button\n mat-menu-item\n *ngIf=\"menu.makeHead4\"\n [disabled]=\"menu.makeHead4.disabled\"\n (click)=\"run($event, 'makeHead4')\"\n i18n\n >Titre 4\n </button>\n <button\n mat-menu-item\n *ngIf=\"menu.makeHead5\"\n [disabled]=\"menu.makeHead5.disabled\"\n (click)=\"run($event, 'makeHead5')\"\n i18n\n >Titre 5\n </button>\n <button\n mat-menu-item\n *ngIf=\"menu.makeHead6\"\n [disabled]=\"menu.makeHead6.disabled\"\n (click)=\"run($event, 'makeHead6')\"\n i18n\n >Titre 6\n </button>\n </mat-menu>\n\n <button\n mat-button\n *ngIf=\"menu.undo\"\n [disabled]=\"menu.undo.disabled\"\n (click)=\"run($event, 'undo')\"\n i18n-matTooltip\n matTooltip=\"Annuler\"\n >\n <mat-icon>undo</mat-icon>\n </button>\n\n <button\n mat-button\n *ngIf=\"menu.redo\"\n [disabled]=\"menu.redo.disabled\"\n (click)=\"run($event, 'redo')\"\n i18n-matTooltip\n matTooltip=\"Refaire\"\n >\n <mat-icon>redo</mat-icon>\n </button>\n\n <button\n mat-button\n *ngIf=\"menu.wrapBulletList && menu.wrapBulletList.show\"\n [disabled]=\"menu.wrapBulletList.disabled\"\n (click)=\"run($event, 'wrapBulletList')\"\n i18n-matTooltip\n matTooltip=\"Liste \u00E0 puce\"\n >\n <mat-icon>format_list_bulleted</mat-icon>\n </button>\n\n <button\n mat-button\n *ngIf=\"menu.wrapOrderedList && menu.wrapOrderedList.show\"\n [disabled]=\"menu.wrapOrderedList.disabled\"\n (click)=\"run($event, 'wrapOrderedList')\"\n i18n-matTooltip\n matTooltip=\"Liste \u00E0 num\u00E9ro\"\n >\n <mat-icon>format_list_numbered</mat-icon>\n </button>\n\n <button\n mat-button\n *ngIf=\"menu.wrapBlockQuote && menu.wrapBlockQuote.show\"\n [disabled]=\"menu.wrapBlockQuote.disabled\"\n (click)=\"run($event, 'wrapBlockQuote')\"\n i18n-matTooltip\n matTooltip=\"Citation\"\n >\n <mat-icon>format_quote</mat-icon>\n </button>\n\n <button\n mat-button\n *ngIf=\"menu.joinUp && menu.joinUp.show\"\n [disabled]=\"menu.joinUp.disabled\"\n (click)=\"run($event, 'joinUp')\"\n i18n-matTooltip\n matTooltip=\"Fusionner avec l'\u00E9l\u00E9ment du haut\"\n >\n <mat-icon>move_up</mat-icon>\n </button>\n\n <button\n mat-button\n *ngIf=\"menu.lift && menu.lift.show\"\n [disabled]=\"menu.lift.disabled\"\n (click)=\"run($event, 'lift')\"\n i18n-matTooltip\n matTooltip=\"D\u00E9sindenter\"\n >\n <mat-icon>format_indent_decrease</mat-icon>\n </button>\n\n <button\n mat-button\n *ngIf=\"menu.selectParentNode && menu.selectParentNode.show\"\n [disabled]=\"menu.selectParentNode.disabled\"\n (click)=\"run($event, 'selectParentNode')\"\n i18n-matTooltip\n matTooltip=\"S\u00E9lectionner l'\u00E9l\u00E9ment parent\"\n >\n <mat-icon>select_all</mat-icon>\n </button>\n</div>\n<div #editor></div>\n", styles: [".menu{border-bottom:1px solid;display:flex;flex-wrap:wrap;padding:10px 18px}::ng-deep .ProseMirror{position:relative}::ng-deep .ProseMirror{word-wrap:break-word;white-space:pre-wrap;-webkit-font-variant-ligatures:none;font-feature-settings:none;font-variant-ligatures:none}::ng-deep .ProseMirror pre{white-space:pre-wrap}::ng-deep .ProseMirror li{position:relative}::ng-deep .ProseMirror-hideselection *::selection{background:transparent}::ng-deep .ProseMirror-hideselection *::-moz-selection{background:transparent}::ng-deep .ProseMirror-hideselection{caret-color:transparent}::ng-deep .ProseMirror-selectednode{outline:2px solid #8cf}::ng-deep li.ProseMirror-selectednode{outline:none}::ng-deep li.ProseMirror-selectednode:after{content:\"\";position:absolute;left:-32px;right:-2px;top:-2px;bottom:-2px;border:2px solid #8cf;pointer-events:none}::ng-deep .ProseMirror-gapcursor{display:none;pointer-events:none;position:absolute}::ng-deep .ProseMirror-gapcursor:after{content:\"\";display:block;position:absolute;top:-2px;width:20px;border-top:1px solid black;animation:ProseMirror-cursor-blink 1.1s steps(2,start) infinite}@keyframes ProseMirror-cursor-blink{to{visibility:hidden}}::ng-deep .ProseMirror-focused .ProseMirror-gapcursor{display:block}::ng-deep .ProseMirror-example-setup-style hr{padding:2px 10px;border:none;margin:1em 0}::ng-deep .ProseMirror-example-setup-style hr:after{content:\"\";display:block;height:1px;background-color:silver;line-height:2px}::ng-deep .ProseMirror ul,::ng-deep .ProseMirror ol{padding-left:30px}::ng-deep .ProseMirror blockquote{padding-left:1em;border-left:3px solid #eee;margin-left:0;margin-right:0}::ng-deep .ProseMirror-example-setup-style img{cursor:default}::ng-deep .ProseMirror p:first-child,::ng-deep .ProseMirror h1:first-child,::ng-deep .ProseMirror h2:first-child,::ng-deep .ProseMirror h3:first-child,::ng-deep .ProseMirror h4:first-child,::ng-deep .ProseMirror h5:first-child,::ng-deep .ProseMirror h6:first-child{margin-top:10px}::ng-deep .ProseMirror{padding:4px 8px 4px 14px;line-height:1.2;outline:none}::ng-deep .ProseMirror p{margin-bottom:1em}\n"], components: [{ type: i3.MatButtonToggle, selector: "mat-button-toggle", inputs: ["disableRipple", "aria-labelledby", "tabIndex", "appearance", "checked", "disabled", "id", "name", "aria-label", "value"], outputs: ["change"], exportAs: ["matButtonToggle"] }, { type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i5.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i6.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { type: i6.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }], directives: [{ type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.MatButtonToggleGroup, selector: "mat-button-toggle-group", inputs: ["appearance", "name", "vertical", "value", "multiple", "disabled"], outputs: ["valueChange", "change"], exportAs: ["matButtonToggleGroup"] }, { type: i8.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { type: i6.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }] });
|
|
140
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.9", ngImport: i0, type: NaturalEditorComponent, decorators: [{
|
|
141
|
-
type: Component,
|
|
142
|
-
args: [{
|
|
143
|
-
selector: 'natural-editor',
|
|
144
|
-
templateUrl: './editor.component.html',
|
|
145
|
-
styleUrls: ['./editor.component.scss'],
|
|
146
|
-
}]
|
|
147
|
-
}], ctorParameters: function () { return [{ type: i1.NgControl, decorators: [{
|
|
148
|
-
type: Optional
|
|
149
|
-
}, {
|
|
150
|
-
type: Self
|
|
151
|
-
}] }, { type: Document, decorators: [{
|
|
152
|
-
type: Inject,
|
|
153
|
-
args: [DOCUMENT]
|
|
154
|
-
}] }, { type: i2.MatDialog }]; }, propDecorators: { editor: [{
|
|
155
|
-
type: ViewChild,
|
|
156
|
-
args: ['editor', { read: ElementRef, static: true }]
|
|
157
|
-
}], contentChange: [{
|
|
158
|
-
type: Output
|
|
159
|
-
}] } });
|
|
160
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25hdHVyYWwtZWRpdG9yL3NyYy9saWIvZWRpdG9yLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL3Byb2plY3RzL25hdHVyYWwtZWRpdG9yL3NyYy9saWIvZWRpdG9yLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixNQUFNLEVBR04sUUFBUSxFQUNSLE1BQU0sRUFDTixJQUFJLEVBQ0osU0FBUyxHQUNaLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUM1QyxPQUFPLEVBQUMsV0FBVyxFQUFFLE1BQU0sRUFBYyxNQUFNLG1CQUFtQixDQUFDO0FBQ25FLGFBQWE7QUFDYixPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFDdkQsT0FBTyxFQUFDLFNBQVMsRUFBRSxhQUFhLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUMzRCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQ2hDLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUV6QyxPQUFPLEVBQUMsY0FBYyxFQUFpQixNQUFNLFFBQVEsQ0FBQzs7Ozs7Ozs7OztBQUV0RDs7Ozs7Ozs7R0FRRztBQUNILFdBQVc7QUFNWCxNQUFNLE9BQU8sc0JBQXNCO0lBb0IvQixZQUN3QyxTQUFvQixFQUNyQixRQUFrQixFQUNwQyxNQUFpQjtRQUZFLGNBQVMsR0FBVCxTQUFTLENBQVc7UUFDckIsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUNwQyxXQUFNLEdBQU4sTUFBTSxDQUFXO1FBdEI5QixTQUFJLEdBQXNCLElBQUksQ0FBQztRQUliLGtCQUFhLEdBQUcsSUFBSSxZQUFZLEVB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QUFFLEdBQVE7UUFDN0IsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQzFCLE9BQU87U0FDVjtRQUVELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDNUIsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRTtZQUN0QyxPQUFPO1NBQ1Y7UUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3JFLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDdEIsQ0FBQzs7bUhBN0lRLHNCQUFzQix1RUFzQm5CLFFBQVE7dUdBdEJYLHNCQUFzQixnTEFHSCxVQUFVLDJDQ3pDMUMsZ3ZNQWdOQTsyRkQxS2Esc0JBQXNCO2tCQUxsQyxTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSxnQkFBZ0I7b0JBQzFCLFdBQVcsRUFBRSx5QkFBeUI7b0JBQ3RDLFNBQVMsRUFBRSxDQUFDLHlCQUF5QixDQUFDO2lCQUN6Qzs7MEJBc0JRLFFBQVE7OzBCQUFJLElBQUk7OEJBQzRCLFFBQVE7MEJBQXBELE1BQU07MkJBQUMsUUFBUTtvRUFuQjJDLE1BQU07c0JBQXBFLFNBQVM7dUJBQUMsUUFBUSxFQUFFLEVBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFDO2dCQUUzQixhQUFhO3NCQUF0QyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDb21wb25lbnQsXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSW5qZWN0LFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgT3B0aW9uYWwsXG4gICAgT3V0cHV0LFxuICAgIFNlbGYsXG4gICAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Q29udHJvbFZhbHVlQWNjZXNzb3IsIE5nQ29udHJvbH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtFZGl0b3JWaWV3fSBmcm9tICdwcm9zZW1pcnJvci12aWV3JztcbmltcG9ydCB7RWRpdG9yU3RhdGUsIFBsdWdpbiwgVHJhbnNhY3Rpb259IGZyb20gJ3Byb3NlbWlycm9yLXN0YXRlJztcbi8vIEB0cy1pZ25vcmVcbmltcG9ydCB7ZXhhbXBsZVNldHVwfSBmcm9tICdwcm9zZW1pcnJvci1leGFtcGxlLXNldHVwJztcbmltcG9ydCB7RE9NUGFyc2VyLCBET01TZXJpYWxpemVyfSBmcm9tICdwcm9zZW1pcnJvci1tb2RlbCc7XG5pbXBvcnQge3NjaGVtYX0gZnJvbSAnLi9zY2hlbWEnO1xuaW1wb3J0IHtET0NVTUVOVH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7TWF0RGlhbG9nfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHtidWlsZE1lbnVJdGVtcywgS2V5LCBNZW51SXRlbXN9IGZyb20gJy4vbWVudSc7XG5cbi8qKlxuICogUHJvc2VtaXJyb3IgY29tcG9uZW50XG4gKlxuICogVXNhZ2UgOlxuICpcbiAqIGBgYGh0bWxcbiAqIDxuYXR1cmFsLWVkaXRvciBbKG5nTW9kZWwpXT1cImh0bWxTdHJpbmdcIj48L25hdHVyYWwtZWRpdG9yPlxuICogYGBgXG4gKi9cbi8vIEBkeW5hbWljXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ25hdHVyYWwtZWRpdG9yJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZWRpdG9yLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9lZGl0b3IuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgTmF0dXJhbEVkaXRvckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG4gICAgcHJpdmF0ZSB2aWV3OiBFZGl0b3JWaWV3IHwgbnVsbCA9IG51bGw7XG5cbiAgICBAVmlld0NoaWxkKCdlZGl0b3InLCB7cmVhZDogRWxlbWVudFJlZiwgc3RhdGljOiB0cnVlfSkgcHJpdmF0ZSBlZGl0b3IhOiBFbGVtZW50UmVmO1xuXG4gICAgQE91dHB1dCgpIHB1YmxpYyByZWFkb25seSBjb250ZW50Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cbiAgICAvKipcbiAgICAgKiBJbnRlcmZhY2Ugd2l0aCBDb250cm9sVmFsdWVBY2Nlc3NvclxuICAgICAqIE5vdGlmaWVzIHBhcmVudCBtb2RlbCAvIGZvcm0gY29udHJvbGxlclxuICAgICAqL1xuICAgIHByaXZhdGUgb25DaGFuZ2U/OiAodmFsdWU6IHN0cmluZyB8IG51bGwpID0+IHZvaWQ7XG5cbiAgICAvKipcbiAgICAgKiBIVE1MIHN0cmluZ1xuICAgICAqL1xuICAgIHByaXZhdGUgY29udGVudCA9ICcnO1xuXG4gICAgcHVibGljIG1lbnU6IE1lbnVJdGVtcyB8IG51bGwgPSBudWxsO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIEBPcHRpb25hbCgpIEBTZWxmKCkgcHVibGljIHJlYWRvbmx5IG5nQ29udHJvbDogTmdDb250cm9sLFxuICAgICAgICBASW5qZWN0KERPQ1VNRU5UKSBwcml2YXRlIHJlYWRvbmx5IGRvY3VtZW50OiBEb2N1bWVudCxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBkaWFsb2c6IE1hdERpYWxvZyxcbiAgICApIHtcbiAgICAgICAgaWYgKHRoaXMubmdDb250cm9sICE9PSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLm5nQ29udHJvbC52YWx1ZUFjY2Vzc29yID0gdGhpcztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5tZW51ID0gYnVpbGRNZW51SXRlbXMoc2NoZW1hLCB0aGlzLmRpYWxvZyk7XG4gICAgICAgIGNvbnN0IHNlcmlhbGl6ZXIgPSBET01TZXJpYWxpemVyLmZyb21TY2hlbWEoc2NoZW1hKTtcbiAgICAgICAgY29uc3Qgc3RhdGUgPSB0aGlzLmNyZWF0ZVN0YXRlKCk7XG5cbiAgICAgICAgdGhpcy52aWV3ID0gbmV3IEVkaXRvclZpZXcodGhpcy5lZGl0b3IubmF0aXZlRWxlbWVudCwge1xuICAgICAgICAgICAgc3RhdGU6IHN0YXRlLFxuICAgICAgICAgICAgZGlzcGF0Y2hUcmFuc2FjdGlvbjogKHRyYW5zYWN0aW9uOiBUcmFuc2FjdGlvbikgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy52aWV3KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCBuZXdTdGF0ZSA9IHRoaXMudmlldy5zdGF0ZS5hcHBseSh0cmFuc2FjdGlvbik7XG4gICAgICAgICAgICAgICAgdGhpcy52aWV3LnVwZGF0ZVN0YXRlKG5ld1N0YXRlKTtcblxuICAgICAgICAgICAgICAgIC8vIFRyYW5zZm9ybSBkb2MgaW50byBIVE1MIHN0cmluZ1xuICAgICAgICAgICAgICAgIGNvbnN0IGRvbSA9IHNlcmlhbGl6ZXIuc2VyaWFsaXplRnJhZ21lbnQodGhpcy52aWV3LnN0YXRlLmRvYyBhcyBhbnkpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGVsID0gdGhpcy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdfJyk7XG4gICAgICAgICAgICAgICAgZWwuYXBwZW5kQ2hpbGQoZG9tKTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IG5ld0NvbnRlbnQgPSBlbC5pbm5lckhUTUw7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY29udGVudCA9PT0gbmV3Q29udGVudCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5jb250ZW50ID0gZWwuaW5uZXJIVE1MO1xuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMub25DaGFuZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkNoYW5nZSh0aGlzLmNvbnRlbnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRlbnRDaGFuZ2UuZW1pdCh0aGlzLmNvbnRlbnQpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMudXBkYXRlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHdyaXRlVmFsdWUodmFsOiBzdHJpbmcgfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnICYmIHZhbCAhPT0gdGhpcy5jb250ZW50KSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRlbnQgPSB2YWw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy52aWV3ICE9PSBudWxsKSB7XG4gICAgICAgICAgICBjb25zdCBzdGF0ZSA9IHRoaXMuY3JlYXRlU3RhdGUoKTtcbiAgICAgICAgICAgIHRoaXMudmlldy51cGRhdGVTdGF0ZShzdGF0ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZVN0YXRlKCk6IEVkaXRvclN0YXRlIHtcbiAgICAgICAgY29uc3QgdGVtcGxhdGUgPSB0aGlzLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ18nKTtcbiAgICAgICAgdGVtcGxhdGUuaW5uZXJIVE1MID0gJzxkaXY+JyArIHRoaXMuY29udGVudCArICc8L2Rpdj4nO1xuICAgICAgICBpZiAoIXRlbXBsYXRlLmZpcnN0Q2hpbGQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignY2hpbGQgb2YgdGVtcGxhdGUgZWxlbWVudCBjb3VsZCBub3QgYmUgY3JlYXRlZCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcGFyc2VyID0gRE9NUGFyc2VyLmZyb21TY2hlbWEoc2NoZW1hKTtcbiAgICAgICAgY29uc3QgZG9jID0gcGFyc2VyLnBhcnNlKHRlbXBsYXRlLmZpcnN0Q2hpbGQpO1xuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcblxuICAgICAgICByZXR1cm4gRWRpdG9yU3RhdGUuY3JlYXRlKHtcbiAgICAgICAgICAgIGRvYzogZG9jLFxuICAgICAgICAgICAgcGx1Z2luczogW1xuICAgICAgICAgICAgICAgIC4uLmV4YW1wbGVTZXR1cCh7c2NoZW1hLCBtZW51QmFyOiBmYWxzZX0pLFxuICAgICAgICAgICAgICAgIG5ldyBQbHVnaW4oe1xuICAgICAgICAgICAgICAgICAgICB2aWV3OiAoKSA9PiBzZWxmLFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2FsbGVkIGJ5IFByb3NlbWlycm9yIHdoZW5ldmVyIHRoZSBlZGl0b3Igc3RhdGUgY2hhbmdlcy4gU28gd2UgdXBkYXRlIG91ciBtZW51IHN0YXRlcy5cbiAgICAgKi9cbiAgICBwdWJsaWMgdXBkYXRlKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMudmlldyB8fCAhdGhpcy5tZW51KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgT2JqZWN0LnZhbHVlcyh0aGlzLm1lbnUpKSB7XG4gICAgICAgICAgICBpdGVtLnVwZGF0ZSh0aGlzLnZpZXcsIHRoaXMudmlldy5zdGF0ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge31cblxuICAgIHB1YmxpYyBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgLy8gVE9ETyBkaXNhYmxlIGVkaXRvciA/XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy52aWV3KSB7XG4gICAgICAgICAgICB0aGlzLnZpZXcuZGVzdHJveSgpO1xuICAgICAgICAgICAgdGhpcy52aWV3ID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBydW4oZXZlbnQ6IEV2ZW50LCBrZXk6IEtleSk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMudmlldyB8fCAhdGhpcy5tZW51KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5tZW51W2tleV07XG4gICAgICAgIGlmICghaXRlbSB8fCBpdGVtLmRpc2FibGVkIHx8ICFpdGVtLnNob3cpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGl0ZW0uc3BlYy5ydW4odGhpcy52aWV3LnN0YXRlLCB0aGlzLnZpZXcuZGlzcGF0Y2gsIHRoaXMudmlldywgZXZlbnQpO1xuICAgICAgICB0aGlzLnZpZXcuZm9jdXMoKTtcbiAgICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwibWVudVwiICpuZ0lmPVwibWVudVwiPlxuICAgIDxtYXQtYnV0dG9uLXRvZ2dsZS1ncm91cCBtdWx0aXBsZT5cbiAgICAgICAgPG1hdC1idXR0b24tdG9nZ2xlXG4gICAgICAgICAgICAqbmdJZj1cIm1lbnUudG9nZ2xlU3Ryb25nXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJtZW51LnRvZ2dsZVN0cm9uZy5kaXNhYmxlZFwiXG4gICAgICAgICAgICBbY2hlY2tlZF09XCJtZW51LnRvZ2dsZVN0cm9uZy5hY3RpdmVcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInJ1bigkZXZlbnQsICd0b2dnbGVTdHJvbmcnKVwiXG4gICAgICAgICAgICBpMThuLW1hdFRvb2x0aXBcbiAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJHcmFzXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPG1hdC1pY29uPmZvcm1hdF9ib2xkPC9tYXQtaWNvbj5cbiAgICAgICAgPC9tYXQtYnV0dG9uLXRvZ2dsZT5cblxuICAgICAgICA8bWF0LWJ1dHRvbi10b2dnbGVcbiAgICAgICAgICAgICpuZ0lmPVwibWVudS50b2dnbGVFbVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwibWVudS50b2dnbGVFbS5kaXNhYmxlZFwiXG4gICAgICAgICAgICBbY2hlY2tlZF09XCJtZW51LnRvZ2dsZUVtLmFjdGl2ZVwiXG4gICAgICAgICAgICAoY2xpY2spPVwicnVuKCRldmVudCwgJ3RvZ2dsZUVtJylcIlxuICAgICAgICAgICAgaTE4bi1tYXRUb29sdGlwXG4gICAgICAgICAgICBtYXRUb29sdGlwPVwiSXRhbGlxdWVcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8bWF0LWljb24+Zm9ybWF0X2l0YWxpYzwvbWF0LWljb24+XG4gICAgICAgIDwvbWF0LWJ1dHRvbi10b2dnbGU+XG5cbiAgICAgICAgPG1hdC1idXR0b24tdG9nZ2xlXG4gICAgICAgICAgICAqbmdJZj1cIm1lbnUudG9nZ2xlQ29kZVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwibWVudS50b2dnbGVDb2RlLmRpc2FibGVkXCJcbiAgICAgICAgICAgIFtjaGVja2VkXT1cIm1lbnUudG9nZ2xlQ29kZS5hY3RpdmVcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInJ1bigkZXZlbnQsICd0b2dnbGVDb2RlJylcIlxuICAgICAgICAgICAgaTE4bi1tYXRUb29sdGlwXG4gICAgICAgICAgICBtYXRUb29sdGlwPVwiQ29kZVwiXG4gICAgICAgID5cbiAgICAgICAgICAgIDxtYXQtaWNvbj5jb2RlPC9tYXQtaWNvbj5cbiAgICAgICAgPC9tYXQtYnV0dG9uLXRvZ2dsZT5cblxuICAgICAgICA8bWF0LWJ1dHRvbi10b2dnbGVcbiAgICAgICAgICAgICpuZ0lmPVwibWVudS50b2dnbGVMaW5rXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJtZW51LnRvZ2dsZUxpbmsuZGlzYWJsZWRcIlxuICAgICAgICAgICAgW2NoZWNrZWRdPVwibWVudS50b2dnbGVMaW5rLmFjdGl2ZVwiXG4gICAgICAgICAgICAoY2xpY2spPVwicnVuKCRldmVudCwgJ3RvZ2dsZUxpbmsnKVwiXG4gICAgICAgICAgICBpMThuLW1hdFRvb2x0aXBcbiAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJJbnPDqXJlciB1biBsaWVuLi4uXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPG1hdC1pY29uPmluc2VydF9saW5rPC9tYXQtaWNvbj5cbiAgICAgICAgPC9tYXQtYnV0dG9uLXRvZ2dsZT5cbiAgICA8L21hdC1idXR0b24tdG9nZ2xlLWdyb3VwPlxuXG4gICAgPGJ1dHRvbiBtYXQtYnV0dG9uIFttYXRNZW51VHJpZ2dlckZvcl09XCJibG9ja01lbnVcIj5cbiAgICAgICAgPHNwYW4gaTE4bj5UeXBlPC9zcGFuPlxuICAgICAgICA8bWF0LWljb24+YXJyb3dfZHJvcF9kb3duPC9tYXQtaWNvbj5cbiAgICA8L2J1dHRvbj5cblxuICAgIDxtYXQtbWVudSAjYmxvY2tNZW51PVwibWF0TWVudVwiPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBtYXQtbWVudS1pdGVtXG4gICAgICAgICAgICAqbmdJZj1cIm1lbnUubWFrZVBhcmFncmFwaFwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwibWVudS5tYWtlUGFyYWdyYXBoLmRpc2FibGVkXCJcbiAgICAgICAgICAgIChjbGljayk9XCJydW4oJGV2ZW50LCAnbWFrZVBhcmFncmFwaCcpXCJcbiAgICAgICAgICAgIGkxOG5cbiAgICAgICAgICAgID5QYXJhZ3JhcGhlXG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBtYXQtbWVudS1pdGVtXG4gICAgICAgICAgICAqbmdJZj1cIm1lbnUubWFrZUNvZGVCbG9ja1wiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwibWVudS5tYWtlQ29kZUJsb2NrLmRpc2FibGVkXCJcbiAgICAgICAgICAgIChjbGljayk9XCJydW4oJGV2ZW50LCAnbWFrZUNvZGVCbG9jaycpXCJcbiAgICAgICAgICAgIGkxOG5cbiAgICAgICAgICAgID5Db2RlXG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBtYXQtbWVudS1pdGVtXG4gICAgICAgICAgICAqbmdJZj1cIm1lbnUubWFrZUhlYWQxXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJtZW51Lm1ha2VIZWFkMS5kaXNhYmxlZFwiXG4gICAgICAgICAgICAoY2xpY2spPVwicnVuKCRldmVudCwgJ21ha2VIZWFkMScpXCJcbiAgICAgICAgICAgIGkxOG5cbiAgICAgICAgICAgID5UaXRyZSAxXG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBtYXQtbWVudS1pdGVtXG4gICAgICAgICAgICAqbmdJZj1cIm1lbnUubWFrZUhlYWQyXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJtZW51Lm1ha2VIZWFkMi5kaXNhYmxlZFwiXG4gICAgICAgICAgICAoY2xpY2spPVwicnVuKCRldmVudCwgJ21ha2VIZWFkMicpXCJcbiAgICAgICAgICAgIGkxOG5cbiAgICAgICAgICAgID5UaXRyZSAyXG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBtYXQtbWVudS1pdGVtXG4gICAgICAgICAgICAqbmdJZj1cIm1lbnUubWFrZUhlYWQzXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJtZW51Lm1ha2VIZWFkMy5kaXNhYmxlZFwiXG4gICAgICAgICAgICAoY2xpY2spPVwicnVuKCRldmVudCwgJ21ha2VIZWFkMycpXCJcbiAgICAgICAgICAgIGkxOG5cbiAgICAgICAgICAgID5UaXRyZSAzXG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBtYXQtbWVudS1pdGVtXG4gICAgICAgICAgICAqbmdJZj1cIm1lbnUubWFrZUhlYWQ0XCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJtZW51Lm1ha2VIZWFkNC5kaXNhYmxlZFwiXG4gICAgICAgICAgICAoY2xpY2spPVwicnVuKCRldmVudCwgJ21ha2VIZWFkNCcpXCJcbiAgICAgICAgICAgIGkxOG5cbiAgICAgICAgICAgID5UaXRyZSA0XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBtYXQtbWVudS1pdGVtXG4gICAgICAgICAgICAqbmdJZj1cIm1lbnUubWFrZUhlYWQ1XCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJtZW51Lm1ha2VIZWFkNS5kaXNhYmxlZFwiXG4gICAgICAgICAgICAoY2xpY2spPVwicnVuKCRldmVudCwgJ21ha2VIZWFkNScpXCJcbiAgICAgICAgICAgIGkxOG5cbiAgICAgICAgICAgID5UaXRyZSA1XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBtYXQtbWVudS1pdGVtXG4gICAgICAgICAgICAqbmdJZj1cIm1lbnUubWFrZUhlYWQ2XCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJtZW51Lm1ha2VIZWFkNi5kaXNhYmxlZFwiXG4gICAgICAgICAgICAoY2xpY2spPVwicnVuKCRldmVudCwgJ21ha2VIZWFkNicpXCJcbiAgICAgICAgICAgIGkxOG5cbiAgICAgICAgICAgID5UaXRyZSA2XG4gICAgICAgIDwvYnV0dG9uPlxuICAgIDwvbWF0LW1lbnU+XG5cbiAgICA8YnV0dG9uXG4gICAgICAgIG1hdC1idXR0b25cbiAgICAgICAgKm5nSWY9XCJtZW51LnVuZG9cIlxuICAgICAgICBbZGlzYWJsZWRdPVwibWVudS51bmRvLmRpc2FibGVkXCJcbiAgICAgICAgKGNsaWNrKT1cInJ1bigkZXZlbnQsICd1bmRvJylcIlxuICAgICAgICBpMThuLW1hdFRvb2x0aXBcbiAgICAgICAgbWF0VG9vbHRpcD1cIkFubnVsZXJcIlxuICAgID5cbiAgICAgICAgPG1hdC1pY29uPnVuZG88L21hdC1pY29uPlxuICAgIDwvYnV0dG9uPlxuXG4gICAgPGJ1dHRvblxuICAgICAgICBtYXQtYnV0dG9uXG4gICAgICAgICpuZ0lmPVwibWVudS5yZWRvXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cIm1lbnUucmVkby5kaXNhYmxlZFwiXG4gICAgICAgIChjbGljayk9XCJydW4oJGV2ZW50LCAncmVkbycpXCJcbiAgICAgICAgaTE4bi1tYXRUb29sdGlwXG4gICAgICAgIG1hdFRvb2x0aXA9XCJSZWZhaXJlXCJcbiAgICA+XG4gICAgICAgIDxtYXQtaWNvbj5yZWRvPC9tYXQtaWNvbj5cbiAgICA8L2J1dHRvbj5cblxuICAgIDxidXR0b25cbiAgICAgICAgbWF0LWJ1dHRvblxuICAgICAgICAqbmdJZj1cIm1lbnUud3JhcEJ1bGxldExpc3QgJiYgbWVudS53cmFwQnVsbGV0TGlzdC5zaG93XCJcbiAgICAgICAgW2Rpc2FibGVkXT1cIm1lbnUud3JhcEJ1bGxldExpc3QuZGlzYWJsZWRcIlxuICAgICAgICAoY2xpY2spPVwicnVuKCRldmVudCwgJ3dyYXBCdWxsZXRMaXN0JylcIlxuICAgICAgICBpMThuLW1hdFRvb2x0aXBcbiAgICAgICAgbWF0VG9vbHRpcD1cIkxpc3RlIMOgIHB1Y2VcIlxuICAgID5cbiAgICAgICAgPG1hdC1pY29uPmZvcm1hdF9saXN0X2J1bGxldGVkPC9tYXQtaWNvbj5cbiAgICA8L2J1dHRvbj5cblxuICAgIDxidXR0b25cbiAgICAgICAgbWF0LWJ1dHRvblxuICAgICAgICAqbmdJZj1cIm1lbnUud3JhcE9yZGVyZWRMaXN0ICYmIG1lbnUud3JhcE9yZGVyZWRMaXN0LnNob3dcIlxuICAgICAgICBbZGlzYWJsZWRdPVwibWVudS53cmFwT3JkZXJlZExpc3QuZGlzYWJsZWRcIlxuICAgICAgICAoY2xpY2spPVwicnVuKCRldmVudCwgJ3dyYXBPcmRlcmVkTGlzdCcpXCJcbiAgICAgICAgaTE4bi1tYXRUb29sdGlwXG4gICAgICAgIG1hdFRvb2x0aXA9XCJMaXN0ZSDDoCBudW3DqXJvXCJcbiAgICA+XG4gICAgICAgIDxtYXQtaWNvbj5mb3JtYXRfbGlzdF9udW1iZXJlZDwvbWF0LWljb24+XG4gICAgPC9idXR0b24+XG5cbiAgICA8YnV0dG9uXG4gICAgICAgIG1hdC1idXR0b25cbiAgICAgICAgKm5nSWY9XCJtZW51LndyYXBCbG9ja1F1b3RlICYmIG1lbnUud3JhcEJsb2NrUXVvdGUuc2hvd1wiXG4gICAgICAgIFtkaXNhYmxlZF09XCJtZW51LndyYXBCbG9ja1F1b3RlLmRpc2FibGVkXCJcbiAgICAgICAgKGNsaWNrKT1cInJ1bigkZXZlbnQsICd3cmFwQmxvY2tRdW90ZScpXCJcbiAgICAgICAgaTE4bi1tYXRUb29sdGlwXG4gICAgICAgIG1hdFRvb2x0aXA9XCJDaXRhdGlvblwiXG4gICAgPlxuICAgICAgICA8bWF0LWljb24+Zm9ybWF0X3F1b3RlPC9tYXQtaWNvbj5cbiAgICA8L2J1dHRvbj5cblxuICAgIDxidXR0b25cbiAgICAgICAgbWF0LWJ1dHRvblxuICAgICAgICAqbmdJZj1cIm1lbnUuam9pblVwICYmIG1lbnUuam9pblVwLnNob3dcIlxuICAgICAgICBbZGlzYWJsZWRdPVwibWVudS5qb2luVXAuZGlzYWJsZWRcIlxuICAgICAgICAoY2xpY2spPVwicnVuKCRldmVudCwgJ2pvaW5VcCcpXCJcbiAgICAgICAgaTE4bi1tYXRUb29sdGlwXG4gICAgICAgIG1hdFRvb2x0aXA9XCJGdXNpb25uZXIgYXZlYyBsJ8OpbMOpbWVudCBkdSBoYXV0XCJcbiAgICA+XG4gICAgICAgIDxtYXQtaWNvbj5tb3ZlX3VwPC9tYXQtaWNvbj5cbiAgICA8L2J1dHRvbj5cblxuICAgIDxidXR0b25cbiAgICAgICAgbWF0LWJ1dHRvblxuICAgICAgICAqbmdJZj1cIm1lbnUubGlmdCAmJiBtZW51LmxpZnQuc2hvd1wiXG4gICAgICAgIFtkaXNhYmxlZF09XCJtZW51LmxpZnQuZGlzYWJsZWRcIlxuICAgICAgICAoY2xpY2spPVwicnVuKCRldmVudCwgJ2xpZnQnKVwiXG4gICAgICAgIGkxOG4tbWF0VG9vbHRpcFxuICAgICAgICBtYXRUb29sdGlwPVwiRMOpc2luZGVudGVyXCJcbiAgICA+XG4gICAgICAgIDxtYXQtaWNvbj5mb3JtYXRfaW5kZW50X2RlY3JlYXNlPC9tYXQtaWNvbj5cbiAgICA8L2J1dHRvbj5cblxuICAgIDxidXR0b25cbiAgICAgICAgbWF0LWJ1dHRvblxuICAgICAgICAqbmdJZj1cIm1lbnUuc2VsZWN0UGFyZW50Tm9kZSAmJiBtZW51LnNlbGVjdFBhcmVudE5vZGUuc2hvd1wiXG4gICAgICAgIFtkaXNhYmxlZF09XCJtZW51LnNlbGVjdFBhcmVudE5vZGUuZGlzYWJsZWRcIlxuICAgICAgICAoY2xpY2spPVwicnVuKCRldmVudCwgJ3NlbGVjdFBhcmVudE5vZGUnKVwiXG4gICAgICAgIGkxOG4tbWF0VG9vbHRpcFxuICAgICAgICBtYXRUb29sdGlwPVwiU8OpbGVjdGlvbm5lciBsJ8OpbMOpbWVudCBwYXJlbnRcIlxuICAgID5cbiAgICAgICAgPG1hdC1pY29uPnNlbGVjdF9hbGw8L21hdC1pY29uPlxuICAgIDwvYnV0dG9uPlxuPC9kaXY+XG48ZGl2ICNlZGl0b3I+PC9kaXY+XG4iXX0=
|
package/esm2015/lib/menu.js
DELETED
|
@@ -1,222 +0,0 @@
|
|
|
1
|
-
import { blockTypeItem, joinUpItem, liftItem, redoItem, selectParentNodeItem, undoItem, wrapItem, } from 'prosemirror-menu';
|
|
2
|
-
import { toggleMark } from 'prosemirror-commands';
|
|
3
|
-
import { wrapInList } from 'prosemirror-schema-list';
|
|
4
|
-
import { LinkDialogComponent } from './link-dialog/link-dialog.component';
|
|
5
|
-
/**
|
|
6
|
-
* One item of the menu.
|
|
7
|
-
*
|
|
8
|
-
* This is the equivalent of `MenuItem` but without all the rendering logic since we use Angular
|
|
9
|
-
* templates for rendering. Also it caches the state of the item everytime the editor state changes,
|
|
10
|
-
* so Angular can query the state as often as needed without performance hit.
|
|
11
|
-
*/
|
|
12
|
-
export class Item {
|
|
13
|
-
constructor(spec) {
|
|
14
|
-
this.spec = spec;
|
|
15
|
-
/**
|
|
16
|
-
* Whether the item is 'active' (for example, the item for toggling the strong mark might be active when the cursor is in strong text).
|
|
17
|
-
*/
|
|
18
|
-
this.active = false;
|
|
19
|
-
/**
|
|
20
|
-
* Button is shown but disabled, because the item cannot be (un-)applied
|
|
21
|
-
*/
|
|
22
|
-
this.disabled = false;
|
|
23
|
-
/**
|
|
24
|
-
* Whether the item is shown at the moment
|
|
25
|
-
*/
|
|
26
|
-
this.show = true;
|
|
27
|
-
}
|
|
28
|
-
/**
|
|
29
|
-
* Update the item state according to the editor state
|
|
30
|
-
*/
|
|
31
|
-
update(view, state) {
|
|
32
|
-
if (this.spec.active) {
|
|
33
|
-
this.active = this.spec.active(state);
|
|
34
|
-
}
|
|
35
|
-
if (this.spec.enable) {
|
|
36
|
-
this.disabled = !this.spec.enable(state);
|
|
37
|
-
}
|
|
38
|
-
if (this.spec.select) {
|
|
39
|
-
this.show = this.spec.select(state);
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
/**
|
|
44
|
-
* Convert built-in `MenuItem` into our Angular specific `Item`
|
|
45
|
-
*/
|
|
46
|
-
function toItem(item) {
|
|
47
|
-
return new Item(item.spec);
|
|
48
|
-
}
|
|
49
|
-
function canInsert(state, nodeType) {
|
|
50
|
-
const $from = state.selection.$from;
|
|
51
|
-
for (let d = $from.depth; d >= 0; d--) {
|
|
52
|
-
const index = $from.index(d);
|
|
53
|
-
if ($from.node(d).canReplaceWith(index, index, nodeType)) {
|
|
54
|
-
return true;
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
return false;
|
|
58
|
-
}
|
|
59
|
-
// function insertImageItem(nodeType: NodeType) {
|
|
60
|
-
// return new MenuItem({
|
|
61
|
-
// enable(state): boolean {
|
|
62
|
-
// return canInsert(state, nodeType);
|
|
63
|
-
// },
|
|
64
|
-
// run(state, _, view) {
|
|
65
|
-
// let {from, to} = state.selection,
|
|
66
|
-
// attrs = null;
|
|
67
|
-
// if (state.selection instanceof NodeSelection && state.selection.node.type == nodeType) {
|
|
68
|
-
// attrs = state.selection.node.attrs;
|
|
69
|
-
// }
|
|
70
|
-
// openPrompt({
|
|
71
|
-
// title: 'Insert image',
|
|
72
|
-
// fields: {
|
|
73
|
-
// src: new TextField({label: 'Location', required: true, value: attrs && attrs.src}),
|
|
74
|
-
// title: new TextField({label: 'Title', value: attrs && attrs.title}),
|
|
75
|
-
// alt: new TextField({
|
|
76
|
-
// label: 'Description',
|
|
77
|
-
// value: attrs ? attrs.alt : state.doc.textBetween(from, to, ' '),
|
|
78
|
-
// }),
|
|
79
|
-
// },
|
|
80
|
-
// callback(attrs) {
|
|
81
|
-
// view.dispatch(view.state.tr.replaceSelectionWith(nodeType.createAndFill(attrs)));
|
|
82
|
-
// view.focus();
|
|
83
|
-
// },
|
|
84
|
-
// });
|
|
85
|
-
// },
|
|
86
|
-
// });
|
|
87
|
-
// }
|
|
88
|
-
function cmdItem(cmd, options = {}, useEnable = false) {
|
|
89
|
-
const passedOptions = Object.assign({ run: cmd }, options);
|
|
90
|
-
if ((!options.enable || useEnable) && !options.select) {
|
|
91
|
-
passedOptions[options.enable ? 'enable' : 'select'] = (state) => cmd(state);
|
|
92
|
-
}
|
|
93
|
-
return new Item(passedOptions);
|
|
94
|
-
}
|
|
95
|
-
function markActive(state, type) {
|
|
96
|
-
const { from, $from, to, empty } = state.selection;
|
|
97
|
-
if (empty) {
|
|
98
|
-
return !!type.isInSet(state.storedMarks || $from.marks());
|
|
99
|
-
}
|
|
100
|
-
else {
|
|
101
|
-
return state.doc.rangeHasMark(from, to, type);
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
function markItem(markType, options = {}) {
|
|
105
|
-
const passedOptions = Object.assign({ active(state) {
|
|
106
|
-
return markActive(state, markType);
|
|
107
|
-
} }, options);
|
|
108
|
-
return cmdItem(toggleMark(markType), passedOptions, true);
|
|
109
|
-
}
|
|
110
|
-
function linkItem(markType, dialog) {
|
|
111
|
-
return new Item({
|
|
112
|
-
active(state) {
|
|
113
|
-
return markActive(state, markType);
|
|
114
|
-
},
|
|
115
|
-
enable(state) {
|
|
116
|
-
return !state.selection.empty;
|
|
117
|
-
},
|
|
118
|
-
run(state, dispatch, view) {
|
|
119
|
-
if (markActive(state, markType)) {
|
|
120
|
-
toggleMark(markType)(state, dispatch);
|
|
121
|
-
return true;
|
|
122
|
-
}
|
|
123
|
-
dialog
|
|
124
|
-
.open(LinkDialogComponent, {
|
|
125
|
-
data: {
|
|
126
|
-
href: '',
|
|
127
|
-
title: '',
|
|
128
|
-
},
|
|
129
|
-
})
|
|
130
|
-
.afterClosed()
|
|
131
|
-
.subscribe(result => {
|
|
132
|
-
if (result) {
|
|
133
|
-
if (!result.title) {
|
|
134
|
-
delete result.title;
|
|
135
|
-
}
|
|
136
|
-
toggleMark(markType, result)(view.state, view.dispatch);
|
|
137
|
-
}
|
|
138
|
-
view.focus();
|
|
139
|
-
});
|
|
140
|
-
},
|
|
141
|
-
});
|
|
142
|
-
}
|
|
143
|
-
function wrapListItem(nodeType) {
|
|
144
|
-
return cmdItem(wrapInList(nodeType));
|
|
145
|
-
}
|
|
146
|
-
/**
|
|
147
|
-
* Given a schema, look for default mark and node types in it and
|
|
148
|
-
* return an object with relevant menu items relating to those marks:
|
|
149
|
-
*/
|
|
150
|
-
export function buildMenuItems(schema, dialog) {
|
|
151
|
-
const r = {
|
|
152
|
-
joinUp: toItem(joinUpItem),
|
|
153
|
-
lift: toItem(liftItem),
|
|
154
|
-
selectParentNode: toItem(selectParentNodeItem),
|
|
155
|
-
undo: toItem(undoItem),
|
|
156
|
-
redo: toItem(redoItem),
|
|
157
|
-
};
|
|
158
|
-
let type;
|
|
159
|
-
type = schema.marks.strong;
|
|
160
|
-
if (type) {
|
|
161
|
-
r.toggleStrong = markItem(type);
|
|
162
|
-
}
|
|
163
|
-
type = schema.marks.em;
|
|
164
|
-
if (type) {
|
|
165
|
-
r.toggleEm = markItem(type);
|
|
166
|
-
}
|
|
167
|
-
type = schema.marks.code;
|
|
168
|
-
if (type) {
|
|
169
|
-
r.toggleCode = markItem(type);
|
|
170
|
-
}
|
|
171
|
-
type = schema.marks.link;
|
|
172
|
-
if (type) {
|
|
173
|
-
r.toggleLink = linkItem(type, dialog);
|
|
174
|
-
}
|
|
175
|
-
type = schema.nodes.image;
|
|
176
|
-
if (type) {
|
|
177
|
-
// r.insertImage = insertImageItem(type);
|
|
178
|
-
}
|
|
179
|
-
type = schema.nodes.bullet_list;
|
|
180
|
-
if (type) {
|
|
181
|
-
r.wrapBulletList = wrapListItem(type);
|
|
182
|
-
}
|
|
183
|
-
type = schema.nodes.ordered_list;
|
|
184
|
-
if (type) {
|
|
185
|
-
r.wrapOrderedList = wrapListItem(type);
|
|
186
|
-
}
|
|
187
|
-
type = schema.nodes.blockquote;
|
|
188
|
-
if (type) {
|
|
189
|
-
r.wrapBlockQuote = toItem(wrapItem(type, {}));
|
|
190
|
-
}
|
|
191
|
-
type = schema.nodes.paragraph;
|
|
192
|
-
if (type) {
|
|
193
|
-
r.makeParagraph = toItem(blockTypeItem(type, {}));
|
|
194
|
-
}
|
|
195
|
-
type = schema.nodes.code_block;
|
|
196
|
-
if (type) {
|
|
197
|
-
r.makeCodeBlock = toItem(blockTypeItem(type, {}));
|
|
198
|
-
}
|
|
199
|
-
type = schema.nodes.heading;
|
|
200
|
-
if (type) {
|
|
201
|
-
r.makeHead1 = toItem(blockTypeItem(type, { attrs: { level: 1 } }));
|
|
202
|
-
r.makeHead2 = toItem(blockTypeItem(type, { attrs: { level: 2 } }));
|
|
203
|
-
r.makeHead3 = toItem(blockTypeItem(type, { attrs: { level: 3 } }));
|
|
204
|
-
r.makeHead4 = toItem(blockTypeItem(type, { attrs: { level: 4 } }));
|
|
205
|
-
r.makeHead5 = toItem(blockTypeItem(type, { attrs: { level: 5 } }));
|
|
206
|
-
r.makeHead6 = toItem(blockTypeItem(type, { attrs: { level: 6 } }));
|
|
207
|
-
}
|
|
208
|
-
type = schema.nodes.horizontal_rule;
|
|
209
|
-
if (type) {
|
|
210
|
-
const hr = type;
|
|
211
|
-
r.insertHorizontalRule = new Item({
|
|
212
|
-
enable(state) {
|
|
213
|
-
return canInsert(state, hr);
|
|
214
|
-
},
|
|
215
|
-
run(state, dispatch) {
|
|
216
|
-
dispatch(state.tr.replaceSelectionWith(hr.create()));
|
|
217
|
-
},
|
|
218
|
-
});
|
|
219
|
-
}
|
|
220
|
-
return r;
|
|
221
|
-
}
|
|
222
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25hdHVyYWwtZWRpdG9yL3NyYy9saWIvbWVudS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsYUFBYSxFQUNiLFVBQVUsRUFDVixRQUFRLEVBR1IsUUFBUSxFQUNSLG9CQUFvQixFQUNwQixRQUFRLEVBQ1IsUUFBUSxHQUNYLE1BQU0sa0JBQWtCLENBQUM7QUFFMUIsT0FBTyxFQUFVLFVBQVUsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ3pELE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUduRCxPQUFPLEVBQUMsbUJBQW1CLEVBQWlCLE1BQU0scUNBQXFDLENBQUM7QUFHeEY7Ozs7OztHQU1HO0FBQ0gsTUFBTSxPQUFPLElBQUk7SUFnQmIsWUFBNEIsSUFBa0I7UUFBbEIsU0FBSSxHQUFKLElBQUksQ0FBYztRQWY5Qzs7V0FFRztRQUNJLFdBQU0sR0FBRyxLQUFLLENBQUM7UUFFdEI7O1dBRUc7UUFDSSxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBRXhCOztXQUVHO1FBQ0ksU0FBSSxHQUFHLElBQUksQ0FBQztJQUU4QixDQUFDO0lBRWxEOztPQUVHO0lBQ0ksTUFBTSxDQUFDLElBQWdCLEVBQUUsS0FBa0I7UUFDOUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNsQixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ3pDO1FBRUQsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNsQixJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDNUM7UUFFRCxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO1lB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QUFDLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3pELENBQUM7U0FDSixDQUFDLENBQUM7S0FDTjtJQUVELE9BQU8sQ0FBQyxDQUFDO0FBQ2IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgYmxvY2tUeXBlSXRlbSxcbiAgICBqb2luVXBJdGVtLFxuICAgIGxpZnRJdGVtLFxuICAgIE1lbnVJdGVtLFxuICAgIE1lbnVJdGVtU3BlYyxcbiAgICByZWRvSXRlbSxcbiAgICBzZWxlY3RQYXJlbnROb2RlSXRlbSxcbiAgICB1bmRvSXRlbSxcbiAgICB3cmFwSXRlbSxcbn0gZnJvbSAncHJvc2VtaXJyb3ItbWVudSc7XG5pbXBvcnQge0VkaXRvclN0YXRlLCBUcmFuc2FjdGlvbn0gZnJvbSAncHJvc2VtaXJyb3Itc3RhdGUnO1xuaW1wb3J0IHtDb21tYW5kLCB0b2dnbGVNYXJrfSBmcm9tICdwcm9zZW1pcnJvci1jb21tYW5kcyc7XG5pbXBvcnQge3dyYXBJbkxpc3R9IGZyb20gJ3Byb3NlbWlycm9yLXNjaGVtYS1saXN0JztcbmltcG9ydCB7TWFya1R5cGUsIE5vZGVUeXBlLCBTY2hlbWF9IGZyb20gJ3Byb3NlbWlycm9yLW1vZGVsJztcbmltcG9ydCB7TWF0RGlhbG9nfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHtMaW5rRGlhbG9nQ29tcG9uZW50LCBMaW5rRGlhbG9nRGF0YX0gZnJvbSAnLi9saW5rLWRpYWxvZy9saW5rLWRpYWxvZy5jb21wb25lbnQnO1xuaW1wb3J0IHtFZGl0b3JWaWV3fSBmcm9tICdwcm9zZW1pcnJvci12aWV3JztcblxuLyoqXG4gKiBPbmUgaXRlbSBvZiB0aGUgbWVudS5cbiAqXG4gKiBUaGlzIGlzIHRoZSBlcXVpdmFsZW50IG9mIGBNZW51SXRlbWAgYnV0IHdpdGhvdXQgYWxsIHRoZSByZW5kZXJpbmcgbG9naWMgc2luY2Ugd2UgdXNlIEFuZ3VsYXJcbiAqIHRlbXBsYXRlcyBmb3IgcmVuZGVyaW5nLiBBbHNvIGl0IGNhY2hlcyB0aGUgc3RhdGUgb2YgdGhlIGl0ZW0gZXZlcnl0aW1lIHRoZSBlZGl0b3Igc3RhdGUgY2hhbmdlcyxcbiAqIHNvIEFuZ3VsYXIgY2FuIHF1ZXJ5IHRoZSBzdGF0ZSBhcyBvZnRlbiBhcyBuZWVkZWQgd2l0aG91dCBwZXJmb3JtYW5jZSBoaXQuXG4gKi9cbmV4cG9ydCBjbGFzcyBJdGVtIHtcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoZSBpdGVtIGlzICdhY3RpdmUnIChmb3IgZXhhbXBsZSwgdGhlIGl0ZW0gZm9yIHRvZ2dsaW5nIHRoZSBzdHJvbmcgbWFyayBtaWdodCBiZSBhY3RpdmUgd2hlbiB0aGUgY3Vyc29yIGlzIGluIHN0cm9uZyB0ZXh0KS5cbiAgICAgKi9cbiAgICBwdWJsaWMgYWN0aXZlID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBCdXR0b24gaXMgc2hvd24gYnV0IGRpc2FibGVkLCBiZWNhdXNlIHRoZSBpdGVtIGNhbm5vdCBiZSAodW4tKWFwcGxpZWRcbiAgICAgKi9cbiAgICBwdWJsaWMgZGlzYWJsZWQgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIGl0ZW0gaXMgc2hvd24gYXQgdGhlIG1vbWVudFxuICAgICAqL1xuICAgIHB1YmxpYyBzaG93ID0gdHJ1ZTtcblxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyByZWFkb25seSBzcGVjOiBNZW51SXRlbVNwZWMpIHt9XG5cbiAgICAvKipcbiAgICAgKiBVcGRhdGUgdGhlIGl0ZW0gc3RhdGUgYWNjb3JkaW5nIHRvIHRoZSBlZGl0b3Igc3RhdGVcbiAgICAgKi9cbiAgICBwdWJsaWMgdXBkYXRlKHZpZXc6IEVkaXRvclZpZXcsIHN0YXRlOiBFZGl0b3JTdGF0ZSk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5zcGVjLmFjdGl2ZSkge1xuICAgICAgICAgICAgdGhpcy5hY3RpdmUgPSB0aGlzLnNwZWMuYWN0aXZlKHN0YXRlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnNwZWMuZW5hYmxlKSB7XG4gICAgICAgICAgICB0aGlzLmRpc2FibGVkID0gIXRoaXMuc3BlYy5lbmFibGUoc3RhdGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuc3BlYy5zZWxlY3QpIHtcbiAgICAgICAgICAgIHRoaXMuc2hvdyA9IHRoaXMuc3BlYy5zZWxlY3Qoc3RhdGUpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vKipcbiAqIENvbnZlcnQgYnVpbHQtaW4gYE1lbnVJdGVtYCBpbnRvIG91ciBBbmd1bGFyIHNwZWNpZmljIGBJdGVtYFxuICovXG5mdW5jdGlvbiB0b0l0ZW0oaXRlbTogTWVudUl0ZW0pOiBJdGVtIHtcbiAgICByZXR1cm4gbmV3IEl0ZW0oaXRlbS5zcGVjKTtcbn1cblxuZnVuY3Rpb24gY2FuSW5zZXJ0KHN0YXRlOiBFZGl0b3JTdGF0ZSwgbm9kZVR5cGU6IE5vZGVUeXBlKTogYm9vbGVhbiB7XG4gICAgY29uc3QgJGZyb20gPSBzdGF0ZS5zZWxlY3Rpb24uJGZyb207XG4gICAgZm9yIChsZXQgZCA9ICRmcm9tLmRlcHRoOyBkID49IDA7IGQtLSkge1xuICAgICAgICBjb25zdCBpbmRleCA9ICRmcm9tLmluZGV4KGQpO1xuICAgICAgICBpZiAoJGZyb20ubm9kZShkKS5jYW5SZXBsYWNlV2l0aChpbmRleCwgaW5kZXgsIG5vZGVUeXBlKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbi8vIGZ1bmN0aW9uIGluc2VydEltYWdlSXRlbShub2RlVHlwZTogTm9kZVR5cGUpIHtcbi8vICAgICByZXR1cm4gbmV3IE1lbnVJdGVtKHtcbi8vICAgICAgICAgZW5hYmxlKHN0YXRlKTogYm9vbGVhbiB7XG4vLyAgICAgICAgICAgICByZXR1cm4gY2FuSW5zZXJ0KHN0YXRlLCBub2RlVHlwZSk7XG4vLyAgICAgICAgIH0sXG4vLyAgICAgICAgIHJ1bihzdGF0ZSwgXywgdmlldykge1xuLy8gICAgICAgICAgICAgbGV0IHtmcm9tLCB0b30gPSBzdGF0ZS5zZWxlY3Rpb24sXG4vLyAgICAgICAgICAgICAgICAgYXR0cnMgPSBudWxsO1xuLy8gICAgICAgICAgICAgaWYgKHN0YXRlLnNlbGVjdGlvbiBpbnN0YW5jZW9mIE5vZGVTZWxlY3Rpb24gJiYgc3RhdGUuc2VsZWN0aW9uLm5vZGUudHlwZSA9PSBub2RlVHlwZSkge1xuLy8gICAgICAgICAgICAgICAgIGF0dHJzID0gc3RhdGUuc2VsZWN0aW9uLm5vZGUuYXR0cnM7XG4vLyAgICAgICAgICAgICB9XG4vLyAgICAgICAgICAgICBvcGVuUHJvbXB0KHtcbi8vICAgICAgICAgICAgICAgICB0aXRsZTogJ0luc2VydCBpbWFnZScsXG4vLyAgICAgICAgICAgICAgICAgZmllbGRzOiB7XG4vLyAgICAgICAgICAgICAgICAgICAgIHNyYzogbmV3IFRleHRGaWVsZCh7bGFiZWw6ICdMb2NhdGlvbicsIHJlcXVpcmVkOiB0cnVlLCB2YWx1ZTogYXR0cnMgJiYgYXR0cnMuc3JjfSksXG4vLyAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBuZXcgVGV4dEZpZWxkKHtsYWJlbDogJ1RpdGxlJywgdmFsdWU6IGF0dHJzICYmIGF0dHJzLnRpdGxlfSksXG4vLyAgICAgICAgICAgICAgICAgICAgIGFsdDogbmV3IFRleHRGaWVsZCh7XG4vLyAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ0Rlc2NyaXB0aW9uJyxcbi8vICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBhdHRycyA/IGF0dHJzLmFsdCA6IHN0YXRlLmRvYy50ZXh0QmV0d2Vlbihmcm9tLCB0bywgJyAnKSxcbi8vICAgICAgICAgICAgICAgICAgICAgfSksXG4vLyAgICAgICAgICAgICAgICAgfSxcbi8vICAgICAgICAgICAgICAgICBjYWxsYmFjayhhdHRycykge1xuLy8gICAgICAgICAgICAgICAgICAgICB2aWV3LmRpc3BhdGNoKHZpZXcuc3RhdGUudHIucmVwbGFjZVNlbGVjdGlvbldpdGgobm9kZVR5cGUuY3JlYXRlQW5kRmlsbChhdHRycykpKTtcbi8vICAgICAgICAgICAgICAgICAgICAgdmlldy5mb2N1cygpO1xuLy8gICAgICAgICAgICAgICAgIH0sXG4vLyAgICAgICAgICAgICB9KTtcbi8vICAgICAgICAgfSxcbi8vICAgICB9KTtcbi8vIH1cblxuZnVuY3Rpb24gY21kSXRlbShjbWQ6IENvbW1hbmQsIG9wdGlvbnM6IFBhcnRpYWw8TWVudUl0ZW1TcGVjPiA9IHt9LCB1c2VFbmFibGUgPSBmYWxzZSk6IEl0ZW0ge1xuICAgIGNvbnN0IHBhc3NlZE9wdGlvbnM6IE1lbnVJdGVtU3BlYyA9IHtcbiAgICAgICAgcnVuOiBjbWQsXG4gICAgICAgIC4uLm9wdGlvbnMsXG4gICAgfTtcblxuICAgIGlmICgoIW9wdGlvbnMuZW5hYmxlIHx8IHVzZUVuYWJsZSkgJiYgIW9wdGlvbnMuc2VsZWN0KSB7XG4gICAgICAgIHBhc3NlZE9wdGlvbnNbb3B0aW9ucy5lbmFibGUgPyAnZW5hYmxlJyA6ICdzZWxlY3QnXSA9IChzdGF0ZTogRWRpdG9yU3RhdGUpID0+IGNtZChzdGF0ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBJdGVtKHBhc3NlZE9wdGlvbnMpO1xufVxuXG5mdW5jdGlvbiBtYXJrQWN0aXZlKHN0YXRlOiBFZGl0b3JTdGF0ZSwgdHlwZTogTWFya1R5cGUpOiBib29sZWFuIHtcbiAgICBjb25zdCB7ZnJvbSwgJGZyb20sIHRvLCBlbXB0eX0gPSBzdGF0ZS5zZWxlY3Rpb247XG4gICAgaWYgKGVtcHR5KSB7XG4gICAgICAgIHJldHVybiAhIXR5cGUuaXNJblNldChzdGF0ZS5zdG9yZWRNYXJrcyB8fCAkZnJvbS5tYXJrcygpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gc3RhdGUuZG9jLnJhbmdlSGFzTWFyayhmcm9tLCB0bywgdHlwZSk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBtYXJrSXRlbShtYXJrVHlwZTogTWFya1R5cGUsIG9wdGlvbnM6IFBhcnRpYWw8TWVudUl0ZW1TcGVjPiA9IHt9KTogSXRlbSB7XG4gICAgY29uc3QgcGFzc2VkT3B0aW9uczogUGFydGlhbDxNZW51SXRlbVNwZWM+ID0ge1xuICAgICAgICBhY3RpdmUoc3RhdGU6IEVkaXRvclN0YXRlKTogYm9vbGVhbiB7XG4gICAgICAgICAgICByZXR1cm4gbWFya0FjdGl2ZShzdGF0ZSwgbWFya1R5cGUpO1xuICAgICAgICB9LFxuICAgICAgICAuLi5vcHRpb25zLFxuICAgIH07XG5cbiAgICByZXR1cm4gY21kSXRlbSh0b2dnbGVNYXJrKG1hcmtUeXBlKSwgcGFzc2VkT3B0aW9ucywgdHJ1ZSk7XG59XG5cbmZ1bmN0aW9uIGxpbmtJdGVtKG1hcmtUeXBlOiBNYXJrVHlwZSwgZGlhbG9nOiBNYXREaWFsb2cpOiBJdGVtIHtcbiAgICByZXR1cm4gbmV3IEl0ZW0oe1xuICAgICAgICBhY3RpdmUoc3RhdGU6IEVkaXRvclN0YXRlKTogYm9vbGVhbiB7XG4gICAgICAgICAgICByZXR1cm4gbWFya0FjdGl2ZShzdGF0ZSwgbWFya1R5cGUpO1xuICAgICAgICB9LFxuICAgICAgICBlbmFibGUoc3RhdGU6IEVkaXRvclN0YXRlKTogYm9vbGVhbiB7XG4gICAgICAgICAgICByZXR1cm4gIXN0YXRlLnNlbGVjdGlvbi5lbXB0eTtcbiAgICAgICAgfSxcbiAgICAgICAgcnVuKHN0YXRlOiBFZGl0b3JTdGF0ZSwgZGlzcGF0Y2g6IChwOiBUcmFuc2FjdGlvbikgPT4gdm9pZCwgdmlldzogRWRpdG9yVmlldyk6IGJvb2xlYW4gfCB2b2lkIHtcbiAgICAgICAgICAgIGlmIChtYXJrQWN0aXZlKHN0YXRlLCBtYXJrVHlwZSkpIHtcbiAgICAgICAgICAgICAgICB0b2dnbGVNYXJrKG1hcmtUeXBlKShzdGF0ZSwgZGlzcGF0Y2gpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBkaWFsb2dcbiAgICAgICAgICAgICAgICAub3BlbjxMaW5rRGlhbG9nQ29tcG9uZW50LCBMaW5rRGlhbG9nRGF0YSwgTGlua0RpYWxvZ0RhdGE+KExpbmtEaWFsb2dDb21wb25lbnQsIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgICAgICAgICAgaHJlZjogJycsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogJycsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuYWZ0ZXJDbG9zZWQoKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUocmVzdWx0ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQudGl0bGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgcmVzdWx0LnRpdGxlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB0b2dnbGVNYXJrKG1hcmtUeXBlLCByZXN1bHQpKHZpZXcuc3RhdGUsIHZpZXcuZGlzcGF0Y2gpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdmlldy5mb2N1cygpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgIH0pO1xufVxuXG5mdW5jdGlvbiB3cmFwTGlzdEl0ZW0obm9kZVR5cGU6IE5vZGVUeXBlKTogSXRlbSB7XG4gICAgcmV0dXJuIGNtZEl0ZW0od3JhcEluTGlzdChub2RlVHlwZSkpO1xufVxuXG5leHBvcnQgdHlwZSBLZXkgPVxuICAgIHwgJ3RvZ2dsZVN0cm9uZydcbiAgICB8ICd0b2dnbGVFbSdcbiAgICB8ICd0b2dnbGVDb2RlJ1xuICAgIHwgJ3RvZ2dsZUxpbmsnXG4gICAgfCAnaW5zZXJ0SW1hZ2UnXG4gICAgfCAnd3JhcEJ1bGxldExpc3QnXG4gICAgfCAnd3JhcE9yZGVyZWRMaXN0J1xuICAgIHwgJ3dyYXBCbG9ja1F1b3RlJ1xuICAgIHwgJ21ha2VQYXJhZ3JhcGgnXG4gICAgfCAnbWFrZUNvZGVCbG9jaydcbiAgICB8ICdtYWtlSGVhZDEnXG4gICAgfCAnbWFrZUhlYWQyJ1xuICAgIHwgJ21ha2VIZWFkMydcbiAgICB8ICdtYWtlSGVhZDQnXG4gICAgfCAnbWFrZUhlYWQ1J1xuICAgIHwgJ21ha2VIZWFkNidcbiAgICB8ICdpbnNlcnRIb3Jpem9udGFsUnVsZSdcbiAgICB8ICdqb2luVXAnXG4gICAgfCAnbGlmdCdcbiAgICB8ICdzZWxlY3RQYXJlbnROb2RlJ1xuICAgIHwgJ3VuZG8nXG4gICAgfCAncmVkbyc7XG5cbmV4cG9ydCB0eXBlIE1lbnVJdGVtcyA9IFBhcnRpYWw8UmVjb3JkPEtleSwgSXRlbT4+O1xuXG4vKipcbiAqIEdpdmVuIGEgc2NoZW1hLCBsb29rIGZvciBkZWZhdWx0IG1hcmsgYW5kIG5vZGUgdHlwZXMgaW4gaXQgYW5kXG4gKiByZXR1cm4gYW4gb2JqZWN0IHdpdGggcmVsZXZhbnQgbWVudSBpdGVtcyByZWxhdGluZyB0byB0aG9zZSBtYXJrczpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkTWVudUl0ZW1zKHNjaGVtYTogU2NoZW1hLCBkaWFsb2c6IE1hdERpYWxvZyk6IE1lbnVJdGVtcyB7XG4gICAgY29uc3QgcjogTWVudUl0ZW1zID0ge1xuICAgICAgICBqb2luVXA6IHRvSXRlbShqb2luVXBJdGVtKSxcbiAgICAgICAgbGlmdDogdG9JdGVtKGxpZnRJdGVtKSxcbiAgICAgICAgc2VsZWN0UGFyZW50Tm9kZTogdG9JdGVtKHNlbGVjdFBhcmVudE5vZGVJdGVtKSxcbiAgICAgICAgdW5kbzogdG9JdGVtKHVuZG9JdGVtIGFzIHVua25vd24gYXMgTWVudUl0ZW0pLCAvLyBUeXBpbmcgaXMgaW5jb3JyZWN0LCBzbyB3ZSBmb3JjZSBpdFxuICAgICAgICByZWRvOiB0b0l0ZW0ocmVkb0l0ZW0gYXMgdW5rbm93biBhcyBNZW51SXRlbSksXG4gICAgfTtcblxuICAgIGxldCB0eXBlOiBNYXJrVHlwZSB8IE5vZGVUeXBlIHwgdW5kZWZpbmVkO1xuICAgIHR5cGUgPSBzY2hlbWEubWFya3Muc3Ryb25nO1xuICAgIGlmICh0eXBlKSB7XG4gICAgICAgIHIudG9nZ2xlU3Ryb25nID0gbWFya0l0ZW0odHlwZSk7XG4gICAgfVxuXG4gICAgdHlwZSA9IHNjaGVtYS5tYXJrcy5lbTtcbiAgICBpZiAodHlwZSkge1xuICAgICAgICByLnRvZ2dsZUVtID0gbWFya0l0ZW0odHlwZSk7XG4gICAgfVxuXG4gICAgdHlwZSA9IHNjaGVtYS5tYXJrcy5jb2RlO1xuICAgIGlmICh0eXBlKSB7XG4gICAgICAgIHIudG9nZ2xlQ29kZSA9IG1hcmtJdGVtKHR5cGUpO1xuICAgIH1cblxuICAgIHR5cGUgPSBzY2hlbWEubWFya3MubGluaztcbiAgICBpZiAodHlwZSkge1xuICAgICAgICByLnRvZ2dsZUxpbmsgPSBsaW5rSXRlbSh0eXBlLCBkaWFsb2cpO1xuICAgIH1cblxuICAgIHR5cGUgPSBzY2hlbWEubm9kZXMuaW1hZ2U7XG4gICAgaWYgKHR5cGUpIHtcbiAgICAgICAgLy8gci5pbnNlcnRJbWFnZSA9IGluc2VydEltYWdlSXRlbSh0eXBlKTtcbiAgICB9XG5cbiAgICB0eXBlID0gc2NoZW1hLm5vZGVzLmJ1bGxldF9saXN0O1xuICAgIGlmICh0eXBlKSB7XG4gICAgICAgIHIud3JhcEJ1bGxldExpc3QgPSB3cmFwTGlzdEl0ZW0odHlwZSk7XG4gICAgfVxuXG4gICAgdHlwZSA9IHNjaGVtYS5ub2Rlcy5vcmRlcmVkX2xpc3Q7XG4gICAgaWYgKHR5cGUpIHtcbiAgICAgICAgci53cmFwT3JkZXJlZExpc3QgPSB3cmFwTGlzdEl0ZW0odHlwZSk7XG4gICAgfVxuXG4gICAgdHlwZSA9IHNjaGVtYS5ub2Rlcy5ibG9ja3F1b3RlO1xuICAgIGlmICh0eXBlKSB7XG4gICAgICAgIHIud3JhcEJsb2NrUXVvdGUgPSB0b0l0ZW0od3JhcEl0ZW0odHlwZSwge30pKTtcbiAgICB9XG5cbiAgICB0eXBlID0gc2NoZW1hLm5vZGVzLnBhcmFncmFwaDtcbiAgICBpZiAodHlwZSkge1xuICAgICAgICByLm1ha2VQYXJhZ3JhcGggPSB0b0l0ZW0oYmxvY2tUeXBlSXRlbSh0eXBlLCB7fSkpO1xuICAgIH1cblxuICAgIHR5cGUgPSBzY2hlbWEubm9kZXMuY29kZV9ibG9jaztcbiAgICBpZiAodHlwZSkge1xuICAgICAgICByLm1ha2VDb2RlQmxvY2sgPSB0b0l0ZW0oYmxvY2tUeXBlSXRlbSh0eXBlLCB7fSkpO1xuICAgIH1cblxuICAgIHR5cGUgPSBzY2hlbWEubm9kZXMuaGVhZGluZztcbiAgICBpZiAodHlwZSkge1xuICAgICAgICByLm1ha2VIZWFkMSA9IHRvSXRlbShibG9ja1R5cGVJdGVtKHR5cGUsIHthdHRyczoge2xldmVsOiAxfX0pKTtcbiAgICAgICAgci5tYWtlSGVhZDIgPSB0b0l0ZW0oYmxvY2tUeXBlSXRlbSh0eXBlLCB7YXR0cnM6IHtsZXZlbDogMn19KSk7XG4gICAgICAgIHIubWFrZUhlYWQzID0gdG9JdGVtKGJsb2NrVHlwZUl0ZW0odHlwZSwge2F0dHJzOiB7bGV2ZWw6IDN9fSkpO1xuICAgICAgICByLm1ha2VIZWFkNCA9IHRvSXRlbShibG9ja1R5cGVJdGVtKHR5cGUsIHthdHRyczoge2xldmVsOiA0fX0pKTtcbiAgICAgICAgci5tYWtlSGVhZDUgPSB0b0l0ZW0oYmxvY2tUeXBlSXRlbSh0eXBlLCB7YXR0cnM6IHtsZXZlbDogNX19KSk7XG4gICAgICAgIHIubWFrZUhlYWQ2ID0gdG9JdGVtKGJsb2NrVHlwZUl0ZW0odHlwZSwge2F0dHJzOiB7bGV2ZWw6IDZ9fSkpO1xuICAgIH1cblxuICAgIHR5cGUgPSBzY2hlbWEubm9kZXMuaG9yaXpvbnRhbF9ydWxlO1xuICAgIGlmICh0eXBlKSB7XG4gICAgICAgIGNvbnN0IGhyID0gdHlwZTtcbiAgICAgICAgci5pbnNlcnRIb3Jpem9udGFsUnVsZSA9IG5ldyBJdGVtKHtcbiAgICAgICAgICAgIGVuYWJsZShzdGF0ZSk6IGJvb2xlYW4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYW5JbnNlcnQoc3RhdGUsIGhyKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBydW4oc3RhdGUsIGRpc3BhdGNoKTogdm9pZCB7XG4gICAgICAgICAgICAgICAgZGlzcGF0Y2goc3RhdGUudHIucmVwbGFjZVNlbGVjdGlvbldpdGgoaHIuY3JlYXRlKCkpKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiByO1xufVxuIl19
|
package/esm2015/lib/schema.js
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import { marks, nodes } from 'prosemirror-schema-basic';
|
|
2
|
-
import { addListNodes } from 'prosemirror-schema-list';
|
|
3
|
-
import { Schema } from 'prosemirror-model';
|
|
4
|
-
const myNodes = {
|
|
5
|
-
heading: nodes.heading,
|
|
6
|
-
doc: nodes.doc,
|
|
7
|
-
paragraph: nodes.paragraph,
|
|
8
|
-
text: nodes.text,
|
|
9
|
-
hard_break: nodes.hard_break,
|
|
10
|
-
};
|
|
11
|
-
const myMarks = {
|
|
12
|
-
link: marks.link,
|
|
13
|
-
em: marks.em,
|
|
14
|
-
strong: marks.strong,
|
|
15
|
-
};
|
|
16
|
-
const basicSchema = new Schema({ nodes: myNodes, marks: myMarks });
|
|
17
|
-
export const schema = new Schema({
|
|
18
|
-
nodes: addListNodes(basicSchema.spec.nodes, 'paragraph block*', 'block'),
|
|
19
|
-
marks: basicSchema.spec.marks,
|
|
20
|
-
});
|
|
21
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZW1hLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbmF0dXJhbC1lZGl0b3Ivc3JjL2xpYi9zY2hlbWEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLEtBQUssRUFBRSxLQUFLLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUN0RCxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFDckQsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBSXpDLE1BQU0sT0FBTyxHQUFlO0lBQ3hCLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTztJQUN0QixHQUFHLEVBQUUsS0FBSyxDQUFDLEdBQUc7SUFDZCxTQUFTLEVBQUUsS0FBSyxDQUFDLFNBQVM7SUFDMUIsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJO0lBQ2hCLFVBQVUsRUFBRSxLQUFLLENBQUMsVUFBVTtDQUMvQixDQUFDO0FBR0YsTUFBTSxPQUFPLEdBQWU7SUFDeEIsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJO0lBQ2hCLEVBQUUsRUFBRSxLQUFLLENBQUMsRUFBRTtJQUNaLE1BQU0sRUFBRSxLQUFLLENBQUMsTUFBTTtDQUN2QixDQUFDO0FBRUYsTUFBTSxXQUFXLEdBQUcsSUFBSSxNQUFNLENBQUMsRUFBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUMsQ0FBQyxDQUFDO0FBRWpFLE1BQU0sQ0FBQyxNQUFNLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQztJQUM3QixLQUFLLEVBQUUsWUFBWSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBWSxFQUFFLGtCQUFrQixFQUFFLE9BQU8sQ0FBQztJQUMvRSxLQUFLLEVBQUUsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLO0NBQ2hDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7bWFya3MsIG5vZGVzfSBmcm9tICdwcm9zZW1pcnJvci1zY2hlbWEtYmFzaWMnO1xuaW1wb3J0IHthZGRMaXN0Tm9kZXN9IGZyb20gJ3Byb3NlbWlycm9yLXNjaGVtYS1saXN0JztcbmltcG9ydCB7U2NoZW1hfSBmcm9tICdwcm9zZW1pcnJvci1tb2RlbCc7XG5cbi8vIEtlZXAgb25seSBiYXNpYyBlbGVtZW50c1xudHlwZSBCYXNpY05vZGVzID0gT21pdDx0eXBlb2Ygbm9kZXMsICdpbWFnZScgfCAnY29kZV9ibG9jaycgfCAnYmxvY2txdW90ZScgfCAnaG9yaXpvbnRhbF9ydWxlJz47XG5jb25zdCBteU5vZGVzOiBCYXNpY05vZGVzID0ge1xuICAgIGhlYWRpbmc6IG5vZGVzLmhlYWRpbmcsXG4gICAgZG9jOiBub2Rlcy5kb2MsXG4gICAgcGFyYWdyYXBoOiBub2Rlcy5wYXJhZ3JhcGgsXG4gICAgdGV4dDogbm9kZXMudGV4dCxcbiAgICBoYXJkX2JyZWFrOiBub2Rlcy5oYXJkX2JyZWFrLFxufTtcblxudHlwZSBCYXNpY01hcmtzID0gT21pdDx0eXBlb2YgbWFya3MsICdjb2RlJz47XG5jb25zdCBteU1hcmtzOiBCYXNpY01hcmtzID0ge1xuICAgIGxpbms6IG1hcmtzLmxpbmssXG4gICAgZW06IG1hcmtzLmVtLFxuICAgIHN0cm9uZzogbWFya3Muc3Ryb25nLFxufTtcblxuY29uc3QgYmFzaWNTY2hlbWEgPSBuZXcgU2NoZW1hKHtub2RlczogbXlOb2RlcywgbWFya3M6IG15TWFya3N9KTtcblxuZXhwb3J0IGNvbnN0IHNjaGVtYSA9IG5ldyBTY2hlbWEoe1xuICAgIG5vZGVzOiBhZGRMaXN0Tm9kZXMoYmFzaWNTY2hlbWEuc3BlYy5ub2RlcyBhcyBhbnksICdwYXJhZ3JhcGggYmxvY2sqJywgJ2Jsb2NrJyksXG4gICAgbWFya3M6IGJhc2ljU2NoZW1hLnNwZWMubWFya3MsXG59KTtcbiJdfQ==
|
package/lib/schema.d.ts
DELETED
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
@use 'sass:map';
|
|
2
|
-
@use '~@angular/material' as mat;
|
|
3
|
-
|
|
4
|
-
@mixin natural-editor($theme) {
|
|
5
|
-
$config: mat.get-color-config($theme);
|
|
6
|
-
$foreground: map.get($config, foreground);
|
|
7
|
-
$is-dark-theme: map.get($config, is-dark);
|
|
8
|
-
|
|
9
|
-
// Copied from Material Form Field
|
|
10
|
-
$fill-background: mat.get-color-from-palette($foreground, base, if($is-dark-theme, 0.1, 0.04));
|
|
11
|
-
$underline-color: mat.get-color-from-palette($foreground, divider, if($is-dark-theme, 0.5, 0.42));
|
|
12
|
-
|
|
13
|
-
natural-editor {
|
|
14
|
-
.menu,
|
|
15
|
-
.ProseMirror {
|
|
16
|
-
background-color: $fill-background;
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
.menu {
|
|
20
|
-
border-color: $underline-color;
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
}
|