@ecodev/natural-editor 41.1.3 → 41.3.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 +343 -18
- package/bundles/ecodev-natural-editor.umd.js.map +1 -1
- package/esm2015/lib/editor/editor.component.js +28 -9
- package/esm2015/lib/utils/inputrules.js +70 -0
- package/esm2015/lib/utils/item.js +39 -0
- package/esm2015/lib/utils/keymap.js +115 -0
- package/esm2015/lib/utils/menu.js +10 -39
- package/esm2015/lib/utils/paragraph-with-alignment.js +43 -0
- package/esm2015/lib/utils/schema.js +4 -3
- package/esm2015/lib/utils/text-align-item.js +78 -0
- package/fesm2015/ecodev-natural-editor.js +336 -12
- package/fesm2015/ecodev-natural-editor.js.map +1 -1
- package/lib/editor/editor.component.d.ts +1 -0
- package/lib/utils/inputrules.d.ts +7 -0
- package/lib/utils/item.d.ts +30 -0
- package/lib/utils/keymap.d.ts +32 -0
- package/lib/utils/menu.d.ts +2 -31
- package/lib/utils/paragraph-with-alignment.d.ts +2 -0
- package/lib/utils/text-align-item.d.ts +6 -0
- package/package.json +10 -3
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
import { Component, ElementRef, EventEmitter, Inject, Input, Optional, Output, Self, ViewChild, } from '@angular/core';
|
|
2
2
|
import { EditorView } from 'prosemirror-view';
|
|
3
3
|
import { EditorState, Plugin } from 'prosemirror-state';
|
|
4
|
-
// @ts-ignore
|
|
5
|
-
import { exampleSetup } from 'prosemirror-example-setup';
|
|
6
4
|
import { DOMParser, DOMSerializer } from 'prosemirror-model';
|
|
7
5
|
import { DOCUMENT } from '@angular/common';
|
|
8
6
|
import { columnResizing, goToNextCell, tableEditing } from 'prosemirror-tables';
|
|
@@ -10,6 +8,12 @@ import { keymap } from 'prosemirror-keymap';
|
|
|
10
8
|
import { ImagePlugin } from '../utils/image';
|
|
11
9
|
import { advancedSchema, basicSchema } from '../utils/schema';
|
|
12
10
|
import { buildMenuItems } from '../utils/menu';
|
|
11
|
+
import { history } from 'prosemirror-history';
|
|
12
|
+
import { baseKeymap } from 'prosemirror-commands';
|
|
13
|
+
import { dropCursor } from 'prosemirror-dropcursor';
|
|
14
|
+
import { gapCursor } from 'prosemirror-gapcursor';
|
|
15
|
+
import { buildInputRules } from '../utils/inputrules';
|
|
16
|
+
import { buildKeymap } from '../utils/keymap';
|
|
13
17
|
import * as i0 from "@angular/core";
|
|
14
18
|
import * as i1 from "@angular/forms";
|
|
15
19
|
import * as i2 from "@angular/material/dialog";
|
|
@@ -108,8 +112,26 @@ export class NaturalEditorComponent {
|
|
|
108
112
|
}
|
|
109
113
|
const parser = DOMParser.fromSchema(this.schema);
|
|
110
114
|
const doc = parser.parse(template.firstChild);
|
|
115
|
+
return EditorState.create({
|
|
116
|
+
doc: doc,
|
|
117
|
+
plugins: this.createPlugins(),
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
createPlugins() {
|
|
121
|
+
var _a;
|
|
122
|
+
const isMac = !!((_a = this.document.defaultView) === null || _a === void 0 ? void 0 : _a.navigator.platform.match(/Mac/));
|
|
111
123
|
const plugins = [
|
|
112
|
-
|
|
124
|
+
buildInputRules(this.schema),
|
|
125
|
+
keymap(buildKeymap(this.schema, isMac)),
|
|
126
|
+
keymap(baseKeymap),
|
|
127
|
+
dropCursor(),
|
|
128
|
+
gapCursor(),
|
|
129
|
+
history(),
|
|
130
|
+
new Plugin({
|
|
131
|
+
props: {
|
|
132
|
+
attributes: { class: 'ProseMirror-example-setup-style' },
|
|
133
|
+
},
|
|
134
|
+
}),
|
|
113
135
|
new Plugin({
|
|
114
136
|
view: () => this,
|
|
115
137
|
}),
|
|
@@ -120,10 +142,7 @@ export class NaturalEditorComponent {
|
|
|
120
142
|
'Shift-Tab': goToNextCell(-1),
|
|
121
143
|
}));
|
|
122
144
|
}
|
|
123
|
-
return
|
|
124
|
-
doc: doc,
|
|
125
|
-
plugins: plugins,
|
|
126
|
-
});
|
|
145
|
+
return plugins;
|
|
127
146
|
}
|
|
128
147
|
/**
|
|
129
148
|
* Called by Prosemirror whenever the editor state changes. So we update our menu states.
|
|
@@ -171,7 +190,7 @@ export class NaturalEditorComponent {
|
|
|
171
190
|
}
|
|
172
191
|
}
|
|
173
192
|
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 }, { token: i3.ImagePlugin }], target: i0.ɵɵFactoryTarget.Component });
|
|
174
|
-
NaturalEditorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.9", type: NaturalEditorComponent, selector: "natural-editor", inputs: { imageUploader: "imageUploader" }, outputs: { contentChange: "contentChange", save: "save" }, providers: [ImagePlugin], viewQueries: [{ propertyName: "editor", first: true, predicate: ["editor"], descendants: true, read: ElementRef, static: true }], ngImport: i0, template: "<div class=\"menu-container\" *ngIf=\"menu\">\n <div class=\"menu\">\n <button mat-button *ngIf=\"save.observed\" (click)=\"save.emit()\" i18n-matTooltip matTooltip=\"Enregistrer\">\n <mat-icon>save</mat-icon>\n </button>\n\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 mat-button [matMenuTriggerFor]=\"tableMenu\" *ngIf=\"menu.addColumnBefore\">\n <span i18n>Tableau</span>\n <mat-icon>arrow_drop_down</mat-icon>\n </button>\n\n <mat-menu #tableMenu=\"matMenu\">\n <button\n mat-menu-item\n *ngIf=\"menu.insertTable\"\n [disabled]=\"menu.insertTable.disabled\"\n (click)=\"run($event, 'insertTable')\"\n i18n\n >Ins\u00E9rer un tableau\n </button>\n <button\n mat-menu-item\n *ngIf=\"menu.deleteTable\"\n [disabled]=\"menu.deleteTable.disabled\"\n (click)=\"run($event, 'deleteTable')\"\n i18n\n >Supprimer le tableau\n </button>\n <button\n mat-menu-item\n *ngIf=\"menu.mergeCells\"\n [disabled]=\"menu.mergeCells.disabled\"\n (click)=\"run($event, 'mergeCells')\"\n i18n\n >Fusionner les cellules\n </button>\n <button\n mat-menu-item\n *ngIf=\"menu.splitCell\"\n [disabled]=\"menu.splitCell.disabled\"\n (click)=\"run($event, 'splitCell')\"\n i18n\n >Scinder les cellules\n </button>\n\n <mat-divider></mat-divider>\n\n <button\n mat-menu-item\n *ngIf=\"menu.addColumnBefore\"\n [disabled]=\"menu.addColumnBefore.disabled\"\n (click)=\"run($event, 'addColumnBefore')\"\n i18n\n >Ins\u00E9rer une colonne avant\n </button>\n <button\n mat-menu-item\n *ngIf=\"menu.addColumnAfter\"\n [disabled]=\"menu.addColumnAfter.disabled\"\n (click)=\"run($event, 'addColumnAfter')\"\n i18n\n >Ins\u00E9rer une colonne apr\u00E8s\n </button>\n <button\n mat-menu-item\n *ngIf=\"menu.deleteColumn\"\n [disabled]=\"menu.deleteColumn.disabled\"\n (click)=\"run($event, 'deleteColumn')\"\n i18n\n >Supprimer la colonne\n </button>\n\n <mat-divider></mat-divider>\n\n <button\n mat-menu-item\n *ngIf=\"menu.addRowBefore\"\n [disabled]=\"menu.addRowBefore.disabled\"\n (click)=\"run($event, 'addRowBefore')\"\n i18n\n >Ins\u00E9rer une ligne avant\n </button>\n <button\n mat-menu-item\n *ngIf=\"menu.addRowAfter\"\n [disabled]=\"menu.addRowAfter.disabled\"\n (click)=\"run($event, 'addRowAfter')\"\n i18n\n >Ins\u00E9rer une ligne apr\u00E8s\n </button>\n <button\n mat-menu-item\n *ngIf=\"menu.deleteRow\"\n [disabled]=\"menu.deleteRow.disabled\"\n (click)=\"run($event, 'deleteRow')\"\n i18n\n >Supprimer la ligne\n </button>\n\n <mat-divider></mat-divider>\n\n <button\n mat-menu-item\n *ngIf=\"menu.toggleHeaderColumn\"\n [disabled]=\"menu.toggleHeaderColumn.disabled\"\n (click)=\"run($event, 'toggleHeaderColumn')\"\n i18n\n >Ent\u00EAte de colonne\n </button>\n <button\n mat-menu-item\n *ngIf=\"menu.toggleHeaderRow\"\n [disabled]=\"menu.toggleHeaderRow.disabled\"\n (click)=\"run($event, 'toggleHeaderRow')\"\n i18n\n >Ent\u00EAte de ligne\n </button>\n <button\n mat-menu-item\n *ngIf=\"menu.toggleHeaderCell\"\n [disabled]=\"menu.toggleHeaderCell.disabled\"\n (click)=\"run($event, 'toggleHeaderCell')\"\n i18n\n >Ent\u00EAte de cellule\n </button>\n </mat-menu>\n\n <button\n mat-button\n *ngIf=\"imageUploader\"\n naturalFileDrop\n [selectable]=\"true\"\n [broadcast]=\"false\"\n i18n-matTooltip\n matTooltip=\"Ins\u00E9rer une image\"\n (fileChange)=\"upload($event)\"\n >\n <mat-icon>insert_photo</mat-icon>\n </button>\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>\n<div #editor></div>\n", styles: [".menu{border-bottom:1px solid;display:flex;flex-wrap:wrap;padding:10px 18px}.menu-container{position:sticky;top:-20px;z-index:999}::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}::ng-deep .ProseMirror .tableWrapper{overflow-x:auto}::ng-deep .ProseMirror table{border-collapse:collapse;table-layout:fixed;width:100%;overflow:hidden}::ng-deep .ProseMirror td,::ng-deep .ProseMirror th{vertical-align:top;box-sizing:border-box;position:relative}::ng-deep .ProseMirror .column-resize-handle{position:absolute;right:-2px;top:0;bottom:0;width:4px;z-index:20;background-color:#adf;pointer-events:none}::ng-deep .ProseMirror.resize-cursor{cursor:col-resize}::ng-deep .ProseMirror .selectedCell:after{z-index:2;position:absolute;content:\"\";left:0;right:0;top:0;bottom:0;background:rgba(200,200,255,.4);pointer-events:none}::ng-deep .ProseMirror table{margin:0}::ng-deep .ProseMirror th,::ng-deep .ProseMirror td{min-width:1em;border:1px solid #ddd;padding:3px 5px}::ng-deep .ProseMirror .tableWrapper{margin:1em 0}::ng-deep .ProseMirror th{font-weight:bold;text-align:left}::ng-deep placeholder{display:block;width:50px;height:50px;background-size:500% 100%!important;animation:gradient 3s none infinite}@keyframes gradient{0%{background-position:100% 100%}to{background-position:0 0}}\n"], components: [{ type: i4.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: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i6.MatButtonToggle, selector: "mat-button-toggle", inputs: ["disableRipple", "aria-labelledby", "tabIndex", "appearance", "checked", "disabled", "id", "name", "aria-label", "value"], outputs: ["change"], exportAs: ["matButtonToggle"] }, { type: i7.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { type: i7.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { type: i8.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }], directives: [{ type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i10.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { type: i6.MatButtonToggleGroup, selector: "mat-button-toggle-group", inputs: ["appearance", "name", "vertical", "value", "multiple", "disabled"], outputs: ["valueChange", "change"], exportAs: ["matButtonToggleGroup"] }, { type: i7.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { type: i11.NaturalFileDropDirective, selector: ":not([naturalFileSelect])[naturalFileDrop]", outputs: ["fileOver"] }] });
|
|
193
|
+
NaturalEditorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.9", type: NaturalEditorComponent, selector: "natural-editor", inputs: { imageUploader: "imageUploader" }, outputs: { contentChange: "contentChange", save: "save" }, providers: [ImagePlugin], viewQueries: [{ propertyName: "editor", first: true, predicate: ["editor"], descendants: true, read: ElementRef, static: true }], ngImport: i0, template: "<div class=\"menu-container\" *ngIf=\"menu\">\n <div class=\"menu\">\n <button mat-button *ngIf=\"save.observed\" (click)=\"save.emit()\" i18n-matTooltip matTooltip=\"Enregistrer\">\n <mat-icon>save</mat-icon>\n </button>\n\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 mat-button [matMenuTriggerFor]=\"tableMenu\" *ngIf=\"menu.addColumnBefore\">\n <span i18n>Tableau</span>\n <mat-icon>arrow_drop_down</mat-icon>\n </button>\n\n <mat-menu #tableMenu=\"matMenu\">\n <button\n mat-menu-item\n *ngIf=\"menu.insertTable\"\n [disabled]=\"menu.insertTable.disabled\"\n (click)=\"run($event, 'insertTable')\"\n i18n\n >Ins\u00E9rer un tableau\n </button>\n <button\n mat-menu-item\n *ngIf=\"menu.deleteTable\"\n [disabled]=\"menu.deleteTable.disabled\"\n (click)=\"run($event, 'deleteTable')\"\n i18n\n >Supprimer le tableau\n </button>\n <button\n mat-menu-item\n *ngIf=\"menu.mergeCells\"\n [disabled]=\"menu.mergeCells.disabled\"\n (click)=\"run($event, 'mergeCells')\"\n i18n\n >Fusionner les cellules\n </button>\n <button\n mat-menu-item\n *ngIf=\"menu.splitCell\"\n [disabled]=\"menu.splitCell.disabled\"\n (click)=\"run($event, 'splitCell')\"\n i18n\n >Scinder les cellules\n </button>\n\n <mat-divider></mat-divider>\n\n <button\n mat-menu-item\n *ngIf=\"menu.addColumnBefore\"\n [disabled]=\"menu.addColumnBefore.disabled\"\n (click)=\"run($event, 'addColumnBefore')\"\n i18n\n >Ins\u00E9rer une colonne avant\n </button>\n <button\n mat-menu-item\n *ngIf=\"menu.addColumnAfter\"\n [disabled]=\"menu.addColumnAfter.disabled\"\n (click)=\"run($event, 'addColumnAfter')\"\n i18n\n >Ins\u00E9rer une colonne apr\u00E8s\n </button>\n <button\n mat-menu-item\n *ngIf=\"menu.deleteColumn\"\n [disabled]=\"menu.deleteColumn.disabled\"\n (click)=\"run($event, 'deleteColumn')\"\n i18n\n >Supprimer la colonne\n </button>\n\n <mat-divider></mat-divider>\n\n <button\n mat-menu-item\n *ngIf=\"menu.addRowBefore\"\n [disabled]=\"menu.addRowBefore.disabled\"\n (click)=\"run($event, 'addRowBefore')\"\n i18n\n >Ins\u00E9rer une ligne avant\n </button>\n <button\n mat-menu-item\n *ngIf=\"menu.addRowAfter\"\n [disabled]=\"menu.addRowAfter.disabled\"\n (click)=\"run($event, 'addRowAfter')\"\n i18n\n >Ins\u00E9rer une ligne apr\u00E8s\n </button>\n <button\n mat-menu-item\n *ngIf=\"menu.deleteRow\"\n [disabled]=\"menu.deleteRow.disabled\"\n (click)=\"run($event, 'deleteRow')\"\n i18n\n >Supprimer la ligne\n </button>\n\n <mat-divider></mat-divider>\n\n <button\n mat-menu-item\n *ngIf=\"menu.toggleHeaderColumn\"\n [disabled]=\"menu.toggleHeaderColumn.disabled\"\n (click)=\"run($event, 'toggleHeaderColumn')\"\n i18n\n >Ent\u00EAte de colonne\n </button>\n <button\n mat-menu-item\n *ngIf=\"menu.toggleHeaderRow\"\n [disabled]=\"menu.toggleHeaderRow.disabled\"\n (click)=\"run($event, 'toggleHeaderRow')\"\n i18n\n >Ent\u00EAte de ligne\n </button>\n <button\n mat-menu-item\n *ngIf=\"menu.toggleHeaderCell\"\n [disabled]=\"menu.toggleHeaderCell.disabled\"\n (click)=\"run($event, 'toggleHeaderCell')\"\n i18n\n >Ent\u00EAte de cellule\n </button>\n </mat-menu>\n\n <button\n mat-button\n *ngIf=\"imageUploader\"\n naturalFileDrop\n [selectable]=\"true\"\n [broadcast]=\"false\"\n i18n-matTooltip\n matTooltip=\"Ins\u00E9rer une image\"\n (fileChange)=\"upload($event)\"\n >\n <mat-icon>insert_photo</mat-icon>\n </button>\n\n <mat-button-toggle-group *ngIf=\"menu.alignLeft\">\n <mat-button-toggle\n *ngIf=\"menu.alignLeft\"\n [disabled]=\"menu.alignLeft.disabled\"\n [checked]=\"menu.alignLeft.active\"\n (click)=\"run($event, 'alignLeft')\"\n i18n-matTooltip\n matTooltip=\"Aligner gauche\"\n >\n <mat-icon>format_align_left</mat-icon>\n </mat-button-toggle>\n\n <mat-button-toggle\n *ngIf=\"menu.alignCenter\"\n [disabled]=\"menu.alignCenter.disabled\"\n [checked]=\"menu.alignCenter.active\"\n (click)=\"run($event, 'alignCenter')\"\n i18n-matTooltip\n matTooltip=\"Centrer\"\n >\n <mat-icon>format_align_center</mat-icon>\n </mat-button-toggle>\n\n <mat-button-toggle\n *ngIf=\"menu.alignRight\"\n [disabled]=\"menu.alignRight.disabled\"\n [checked]=\"menu.alignRight.active\"\n (click)=\"run($event, 'alignRight')\"\n i18n-matTooltip\n matTooltip=\"Aligner droite\"\n >\n <mat-icon>format_align_right</mat-icon>\n </mat-button-toggle>\n\n <mat-button-toggle\n *ngIf=\"menu.alignJustify\"\n [disabled]=\"menu.alignJustify.disabled\"\n [checked]=\"menu.alignJustify.active\"\n (click)=\"run($event, 'alignJustify')\"\n i18n-matTooltip\n matTooltip=\"Justifier\"\n >\n <mat-icon>format_align_justify</mat-icon>\n </mat-button-toggle>\n </mat-button-toggle-group>\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>\n<div #editor></div>\n", styles: [".menu{border-bottom:1px solid;display:flex;flex-wrap:wrap;padding:10px 18px}.menu-container{position:sticky;top:-20px;z-index:999}::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}::ng-deep .ProseMirror .tableWrapper{overflow-x:auto}::ng-deep .ProseMirror table{border-collapse:collapse;table-layout:fixed;width:100%;overflow:hidden}::ng-deep .ProseMirror td,::ng-deep .ProseMirror th{vertical-align:top;box-sizing:border-box;position:relative}::ng-deep .ProseMirror .column-resize-handle{position:absolute;right:-2px;top:0;bottom:0;width:4px;z-index:20;background-color:#adf;pointer-events:none}::ng-deep .ProseMirror.resize-cursor{cursor:col-resize}::ng-deep .ProseMirror .selectedCell:after{z-index:2;position:absolute;content:\"\";left:0;right:0;top:0;bottom:0;background:rgba(200,200,255,.4);pointer-events:none}::ng-deep .ProseMirror table{margin:0}::ng-deep .ProseMirror th,::ng-deep .ProseMirror td{min-width:1em;border:1px solid #ddd;padding:3px 5px}::ng-deep .ProseMirror .tableWrapper{margin:1em 0}::ng-deep .ProseMirror th{font-weight:bold;text-align:left}::ng-deep placeholder{display:block;width:50px;height:50px;background-size:500% 100%!important;animation:gradient 3s none infinite}@keyframes gradient{0%{background-position:100% 100%}to{background-position:0 0}}\n"], components: [{ type: i4.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: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i6.MatButtonToggle, selector: "mat-button-toggle", inputs: ["disableRipple", "aria-labelledby", "tabIndex", "appearance", "checked", "disabled", "id", "name", "aria-label", "value"], outputs: ["change"], exportAs: ["matButtonToggle"] }, { type: i7.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { type: i7.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { type: i8.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }], directives: [{ type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i10.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { type: i6.MatButtonToggleGroup, selector: "mat-button-toggle-group", inputs: ["appearance", "name", "vertical", "value", "multiple", "disabled"], outputs: ["valueChange", "change"], exportAs: ["matButtonToggleGroup"] }, { type: i7.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { type: i11.NaturalFileDropDirective, selector: ":not([naturalFileSelect])[naturalFileDrop]", outputs: ["fileOver"] }] });
|
|
175
194
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.9", ngImport: i0, type: NaturalEditorComponent, decorators: [{
|
|
176
195
|
type: Component,
|
|
177
196
|
args: [{
|
|
@@ -197,4 +216,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.9", ngImpor
|
|
|
197
216
|
}], save: [{
|
|
198
217
|
type: Output
|
|
199
218
|
}] } });
|
|
200
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25hdHVyYWwtZWRpdG9yL3NyYy9saWIvZWRpdG9yL2VkaXRvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uYXR1cmFsLWVkaXRvci9zcmMvbGliL2VkaXRvci9lZGl0b3IuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBR0wsUUFBUSxFQUNSLE1BQU0sRUFDTixJQUFJLEVBQ0osU0FBUyxHQUNaLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUM1QyxPQUFPLEVBQUMsV0FBVyxFQUFFLE1BQU0sRUFBYyxNQUFNLG1CQUFtQixDQUFDO0FBQ25FLGFBQWE7QUFDYixPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFDdkQsT0FBTyxFQUFDLFNBQVMsRUFBRSxhQUFhLEVBQVMsTUFBTSxtQkFBbUIsQ0FBQztBQUNuRSxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFFekMsT0FBTyxFQUFDLGNBQWMsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFDOUUsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBQzFDLE9BQU8sRUFBQyxXQUFXLEVBQWdCLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUQsT0FBTyxFQUFDLGNBQWMsRUFBRSxXQUFXLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUM1RCxPQUFPLEVBQUMsY0FBYyxFQUFpQixNQUFNLGVBQWUsQ0FBQzs7Ozs7Ozs7Ozs7OztBQUU3RDs7Ozs7Ozs7R0FRRztBQUNILFdBQVc7QUFP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QzJDLE1BQU07c0JBQXBFLFNBQVM7dUJBQUMsUUFBUSxFQUFFLEVBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFDO2dCQUUzQixhQUFhO3NCQUF0QyxNQUFNO2dCQVFTLGFBQWE7c0JBQTVCLEtBQUs7Z0JBb0JvQixJQUFJO3NCQUE3QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDb21wb25lbnQsXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSW5qZWN0LFxuICAgIElucHV0LFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgT3B0aW9uYWwsXG4gICAgT3V0cHV0LFxuICAgIFNlbGYsXG4gICAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Q29udHJvbFZhbHVlQWNjZXNzb3IsIE5nQ29udHJvbH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtFZGl0b3JWaWV3fSBmcm9tICdwcm9zZW1pcnJvci12aWV3JztcbmltcG9ydCB7RWRpdG9yU3RhdGUsIFBsdWdpbiwgVHJhbnNhY3Rpb259IGZyb20gJ3Byb3NlbWlycm9yLXN0YXRlJztcbi8vIEB0cy1pZ25vcmVcbmltcG9ydCB7ZXhhbXBsZVNldHVwfSBmcm9tICdwcm9zZW1pcnJvci1leGFtcGxlLXNldHVwJztcbmltcG9ydCB7RE9NUGFyc2VyLCBET01TZXJpYWxpemVyLCBTY2hlbWF9IGZyb20gJ3Byb3NlbWlycm9yLW1vZGVsJztcbmltcG9ydCB7RE9DVU1FTlR9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge01hdERpYWxvZ30gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7Y29sdW1uUmVzaXppbmcsIGdvVG9OZXh0Q2VsbCwgdGFibGVFZGl0aW5nfSBmcm9tICdwcm9zZW1pcnJvci10YWJsZXMnO1xuaW1wb3J0IHtrZXltYXB9IGZyb20gJ3Byb3NlbWlycm9yLWtleW1hcCc7XG5pbXBvcnQge0ltYWdlUGx1Z2luLCBJbWFnZVVwbG9hZGVyfSBmcm9tICcuLi91dGlscy9pbWFnZSc7XG5pbXBvcnQge2FkdmFuY2VkU2NoZW1hLCBiYXNpY1NjaGVtYX0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hJztcbmltcG9ydCB7YnVpbGRNZW51SXRlbXMsIEtleSwgTWVudUl0ZW1zfSBmcm9tICcuLi91dGlscy9tZW51JztcblxuLyoqXG4gKiBQcm9zZW1pcnJvciBjb21wb25lbnRcbiAqXG4gKiBVc2FnZSA6XG4gKlxuICogYGBgaHRtbFxuICogPG5hdHVyYWwtZWRpdG9yIFsobmdNb2RlbCldPVwiaHRtbFN0cmluZ1wiPjwvbmF0dXJhbC1lZGl0b3I+XG4gKiBgYGBcbiAqL1xuLy8gQGR5bmFtaWNcbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnbmF0dXJhbC1lZGl0b3InLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9lZGl0b3IuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2VkaXRvci5jb21wb25lbnQuc2NzcyddLFxuICAgIHByb3ZpZGVyczogW0ltYWdlUGx1Z2luXSxcbn0pXG5leHBvcnQgY2xhc3MgTmF0dXJhbEVkaXRvckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG4gICAgcHJpdmF0ZSB2aWV3OiBFZGl0b3JWaWV3IHwgbnVsbCA9IG51bGw7XG5cbiAgICBAVmlld0NoaWxkKCdlZGl0b3InLCB7cmVhZDogRWxlbWVudFJlZiwgc3RhdGljOiB0cnVlfSkgcHJpdmF0ZSBlZGl0b3IhOiBFbGVtZW50UmVmO1xuXG4gICAgQE91dHB1dCgpIHB1YmxpYyByZWFkb25seSBjb250ZW50Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cbiAgICAvKipcbiAgICAgKiBDYWxsYmFjayB0byB1cGxvYWQgYW4gaW1hZ2UuXG4gICAgICpcbiAgICAgKiBJZiBnaXZlbiBpdCB3aWxsIGVuYWJsZSBhZHZhbmNlZCBzY2hlbWEsIGluY2x1ZGluZyBpbWFnZSBhbmQgdGFibGVzLlxuICAgICAqIEl0IG11c3QgYmUgZ2l2ZW4gb24gaW5pdGlhbGl6YXRpb24gYW5kIGNhbm5vdCBiZSBjaGFuZ2VkIGxhdGVyIG9uLlxuICAgICAqL1xuICAgIEBJbnB1dCgpIHB1YmxpYyBpbWFnZVVwbG9hZGVyOiBJbWFnZVVwbG9hZGVyIHwgbnVsbCA9IG51bGw7XG5cbiAgICBwcml2YXRlIHNjaGVtYTogU2NoZW1hID0gYmFzaWNTY2hlbWE7XG5cbiAgICAvKipcbiAgICAgKiBJbnRlcmZhY2Ugd2l0aCBDb250cm9sVmFsdWVBY2Nlc3NvclxuICAgICAqIE5vdGlmaWVzIHBhcmVudCBtb2RlbCAvIGZvcm0gY29udHJvbGxlclxuICAgICAqL1xuICAgIHByaXZhdGUgb25DaGFuZ2U/OiAodmFsdWU6IHN0cmluZyB8IG51bGwpID0+IHZvaWQ7XG5cbiAgICAvKipcbiAgICAgKiBIVE1MIHN0cmluZ1xuICAgICAqL1xuICAgIHByaXZhdGUgY29udGVudCA9ICcnO1xuXG4gICAgcHVibGljIG1lbnU6IE1lbnVJdGVtcyB8IG51bGwgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogSWYgc3Vic2NyaWJlZCB0bywgdGhlbiB0aGUgc2F2ZSBidXR0b24gd2lsbCBiZSBzaG93biBhbmQgY2xpY2sgZXZlbnRzIGZvcndhcmRlZFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBwdWJsaWMgcmVhZG9ubHkgc2F2ZSA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBAT3B0aW9uYWwoKSBAU2VsZigpIHB1YmxpYyByZWFkb25seSBuZ0NvbnRyb2w6IE5nQ29udHJvbCxcbiAgICAgICAgQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSByZWFkb25seSBkb2N1bWVudDogRG9jdW1lbnQsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgZGlhbG9nOiBNYXREaWFsb2csXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgaW1hZ2VQbHVnaW46IEltYWdlUGx1Z2luLFxuICAgICkge1xuICAgICAgICBpZiAodGhpcy5uZ0NvbnRyb2wgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMubmdDb250cm9sLnZhbHVlQWNjZXNzb3IgPSB0aGlzO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNjaGVtYSA9IHRoaXMuaW1hZ2VVcGxvYWRlciA/IGFkdmFuY2VkU2NoZW1hIDogYmFzaWNTY2hlbWE7XG4gICAgICAgIHRoaXMubWVudSA9IGJ1aWxkTWVudUl0ZW1zKHRoaXMuc2NoZW1hLCB0aGlzLmRpYWxvZyk7XG4gICAgICAgIGNvbnN0IHNlcmlhbGl6ZXIgPSBET01TZXJpYWxpemVyLmZyb21TY2hlbWEodGhpcy5zY2hlbWEpO1xuICAgICAgICBjb25zdCBzdGF0ZSA9IHRoaXMuY3JlYXRlU3RhdGUoKTtcblxuICAgICAgICB0aGlzLnZpZXcgPSBuZXcgRWRpdG9yVmlldyh0aGlzLmVkaXRvci5uYXRpdmVFbGVtZW50LCB7XG4gICAgICAgICAgICBzdGF0ZTogc3RhdGUsXG4gICAgICAgICAgICBkaXNwYXRjaFRyYW5zYWN0aW9uOiAodHJhbnNhY3Rpb246IFRyYW5zYWN0aW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLnZpZXcpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IG5ld1N0YXRlID0gdGhpcy52aWV3LnN0YXRlLmFwcGx5KHRyYW5zYWN0aW9uKTtcbiAgICAgICAgICAgICAgICB0aGlzLnZpZXcudXBkYXRlU3RhdGUobmV3U3RhdGUpO1xuXG4gICAgICAgICAgICAgICAgLy8gVHJhbnNmb3JtIGRvYyBpbnRvIEhUTUwgc3RyaW5nXG4gICAgICAgICAgICAgICAgY29uc3QgZG9tID0gc2VyaWFsaXplci5zZXJpYWxpemVGcmFnbWVudCh0aGlzLnZpZXcuc3RhdGUuZG9jIGFzIGFueSk7XG4gICAgICAgICAgICAgICAgY29uc3QgZWwgPSB0aGlzLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ18nKTtcbiAgICAgICAgICAgICAgICBlbC5hcHBlbmRDaGlsZChkb20pO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgbmV3Q29udGVudCA9IGVsLmlubmVySFRNTDtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jb250ZW50ID09PSBuZXdDb250ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRlbnQgPSBlbC5pbm5lckhUTUw7XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5vbkNoYW5nZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uQ2hhbmdlKHRoaXMuY29udGVudCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuY29udGVudENoYW5nZS5lbWl0KHRoaXMuY29udGVudCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy51cGRhdGUoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgd3JpdGVWYWx1ZSh2YWw6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHZvaWQge1xuICAgICAgICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycgJiYgdmFsICE9PSB0aGlzLmNvbnRlbnQpIHtcbiAgICAgICAgICAgIHRoaXMuY29udGVudCA9IHZhbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnZpZXcgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0YXRlID0gdGhpcy5jcmVhdGVTdGF0ZSgpO1xuICAgICAgICAgICAgdGhpcy52aWV3LnVwZGF0ZVN0YXRlKHN0YXRlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlU3RhdGUoKTogRWRpdG9yU3RhdGUge1xuICAgICAgICBjb25zdCB0ZW1wbGF0ZSA9IHRoaXMuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnXycpO1xuICAgICAgICB0ZW1wbGF0ZS5pbm5lckhUTUwgPSAnPGRpdj4nICsgdGhpcy5jb250ZW50ICsgJzwvZGl2Pic7XG4gICAgICAgIGlmICghdGVtcGxhdGUuZmlyc3RDaGlsZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdjaGlsZCBvZiB0ZW1wbGF0ZSBlbGVtZW50IGNvdWxkIG5vdCBiZSBjcmVhdGVkJyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwYXJzZXIgPSBET01QYXJzZXIuZnJvbVNjaGVtYSh0aGlzLnNjaGVtYSk7XG4gICAgICAgIGNvbnN0IGRvYyA9IHBhcnNlci5wYXJzZSh0ZW1wbGF0ZS5maXJzdENoaWxkKTtcblxuICAgICAgICBjb25zdCBwbHVnaW5zID0gW1xuICAgICAgICAgICAgLi4uZXhhbXBsZVNldHVwKHtzY2hlbWE6IHRoaXMuc2NoZW1hLCBtZW51QmFyOiBmYWxzZX0pLFxuICAgICAgICAgICAgbmV3IFBsdWdpbih7XG4gICAgICAgICAgICAgICAgdmlldzogKCkgPT4gdGhpcyxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICBdO1xuXG4gICAgICAgIGlmICh0aGlzLnNjaGVtYSA9PT0gYWR2YW5jZWRTY2hlbWEpIHtcbiAgICAgICAgICAgIHBsdWdpbnMucHVzaChcbiAgICAgICAgICAgICAgICB0aGlzLmltYWdlUGx1Z2luLnBsdWdpbixcbiAgICAgICAgICAgICAgICBjb2x1bW5SZXNpemluZyh1bmRlZmluZWQgYXMgYW55KSxcbiAgICAgICAgICAgICAgICB0YWJsZUVkaXRpbmcoKSxcbiAgICAgICAgICAgICAgICBrZXltYXAoe1xuICAgICAgICAgICAgICAgICAgICBUYWI6IGdvVG9OZXh0Q2VsbCgxKSxcbiAgICAgICAgICAgICAgICAgICAgJ1NoaWZ0LVRhYic6IGdvVG9OZXh0Q2VsbCgtMSksXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIEVkaXRvclN0YXRlLmNyZWF0ZSh7XG4gICAgICAgICAgICBkb2M6IGRvYyxcbiAgICAgICAgICAgIHBsdWdpbnM6IHBsdWdpbnMsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENhbGxlZCBieSBQcm9zZW1pcnJvciB3aGVuZXZlciB0aGUgZWRpdG9yIHN0YXRlIGNoYW5nZXMuIFNvIHdlIHVwZGF0ZSBvdXIgbWVudSBzdGF0ZXMuXG4gICAgICovXG4gICAgcHVibGljIHVwZGF0ZSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLnZpZXcgfHwgIXRoaXMubWVudSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIE9iamVjdC52YWx1ZXModGhpcy5tZW51KSkge1xuICAgICAgICAgICAgaXRlbS51cGRhdGUodGhpcy52aWV3LCB0aGlzLnZpZXcuc3RhdGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gICAgfVxuXG4gICAgcHVibGljIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHt9XG5cbiAgICBwdWJsaWMgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIC8vIFRPRE8gZGlzYWJsZSBlZGl0b3IgP1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMudmlldykge1xuICAgICAgICAgICAgdGhpcy52aWV3LmRlc3Ryb3koKTtcbiAgICAgICAgICAgIHRoaXMudmlldyA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgcnVuKGV2ZW50OiBFdmVudCwga2V5OiBLZXkpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLnZpZXcgfHwgIXRoaXMubWVudSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMubWVudVtrZXldO1xuICAgICAgICBpZiAoIWl0ZW0gfHwgaXRlbS5kaXNhYmxlZCB8fCAhaXRlbS5zaG93KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpdGVtLnNwZWMucnVuKHRoaXMudmlldy5zdGF0ZSwgdGhpcy52aWV3LmRpc3BhdGNoLCB0aGlzLnZpZXcsIGV2ZW50KTtcbiAgICAgICAgdGhpcy52aWV3LmZvY3VzKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHVwbG9hZChmaWxlOiBGaWxlKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy52aWV3IHx8ICF0aGlzLmltYWdlVXBsb2FkZXIpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnZpZXcuc3RhdGUuc2VsZWN0aW9uLiRmcm9tLnBhcmVudC5pbmxpbmVDb250ZW50KSB7XG4gICAgICAgICAgICB0aGlzLmltYWdlUGx1Z2luLnN0YXJ0SW1hZ2VVcGxvYWQodGhpcy52aWV3LCBmaWxlLCB0aGlzLmltYWdlVXBsb2FkZXIsIHRoaXMuc2NoZW1hKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudmlldy5mb2N1cygpO1xuICAgIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJtZW51LWNvbnRhaW5lclwiICpuZ0lmPVwibWVudVwiPlxuICAgIDxkaXYgY2xhc3M9XCJtZW51XCI+XG4gICAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiAqbmdJZj1cInNhdmUub2JzZXJ2ZWRcIiAoY2xpY2spPVwic2F2ZS5lbWl0KClcIiBpMThuLW1hdFRvb2x0aXAgbWF0VG9vbHRpcD1cIkVucmVnaXN0cmVyXCI+XG4gICAgICAgICAgICA8bWF0LWljb24+c2F2ZTwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgIDxtYXQtYnV0dG9uLXRvZ2dsZS1ncm91cCBtdWx0aXBsZT5cbiAgICAgICAgICAgIDxtYXQtYnV0dG9uLXRvZ2dsZVxuICAgICAgICAgICAgICAgICpuZ0lmPVwibWVudS50b2dnbGVTdHJvbmdcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJtZW51LnRvZ2dsZVN0cm9uZy5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwibWVudS50b2dnbGVTdHJvbmcuYWN0aXZlXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwicnVuKCRldmVudCwgJ3RvZ2dsZVN0cm9uZycpXCJcbiAgICAgICAgICAgICAgICBpMThuLW1hdFRvb2x0aXBcbiAgICAgICAgICAgICAgICBtYXRUb29sdGlwPVwiR3Jhc1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uPmZvcm1hdF9ib2xkPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvbWF0LWJ1dHRvbi10b2dnbGU+XG5cbiAgICAgICAgICAgIDxtYXQtYnV0dG9uLXRvZ2dsZVxuICAgICAgICAgICAgICAgICpuZ0lmPVwibWVudS50b2dnbGVFbVwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIm1lbnUudG9nZ2xlRW0uZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cIm1lbnUudG9nZ2xlRW0uYWN0aXZlXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwicnVuKCRldmVudCwgJ3RvZ2dsZUVtJylcIlxuICAgICAgICAgICAgICAgIGkxOG4tbWF0VG9vbHRpcFxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJJdGFsaXF1ZVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uPmZvcm1hdF9pdGFsaWM8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9tYXQtYnV0dG9uLXRvZ2dsZT5cblxuICAgICAgICAgICAgPG1hdC1idXR0b24tdG9nZ2xlXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJtZW51LnRvZ2dsZUNvZGVcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJtZW51LnRvZ2dsZUNvZGUuZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cIm1lbnUudG9nZ2xlQ29kZS5hY3RpdmVcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJydW4oJGV2ZW50LCAndG9nZ2xlQ29kZScpXCJcbiAgICAgICAgICAgICAgICBpMThuLW1hdFRvb2x0aXBcbiAgICAgICAgICAgICAgICBtYXRUb29sdGlwPVwiQ29kZVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uPmNvZGU8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9tYXQtYnV0dG9uLXRvZ2dsZT5cblxuICAgICAgICAgICAgPG1hdC1idXR0b24tdG9nZ2xlXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJtZW51LnRvZ2dsZUxpbmtcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJtZW51LnRvZ2dsZUxpbmsuZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cIm1lbnUudG9nZ2xlTGluay5hY3RpdmVcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJydW4oJGV2ZW50LCAndG9nZ2xlTGluaycpXCJcbiAgICAgICAgICAgICAgICBpMThuLW1hdFRvb2x0aXBcbiAgICAgICAgICAgICAgICBtYXRUb29sdGlwPVwiSW5zw6lyZXIgdW4gbGllbi4uLlwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uPmluc2VydF9saW5rPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvbWF0LWJ1dHRvbi10b2dnbGU+XG4gICAgICAgIDwvbWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXA+XG5cbiAgICAgICAgPGJ1dHRvbiBtYXQtYnV0dG9uIFttYXRNZW51VHJpZ2dlckZvcl09XCJibG9ja01lbnVcIj5cbiAgICAgICAgICAgIDxzcGFuIGkxOG4+VHlwZTwvc3Bhbj5cbiAgICAgICAgICAgIDxtYXQtaWNvbj5hcnJvd19kcm9wX2Rvd248L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICA8bWF0LW1lbnUgI2Jsb2NrTWVudT1cIm1hdE1lbnVcIj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBtYXQtbWVudS1pdGVtXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJtZW51Lm1ha2VQYXJhZ3JhcGhcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJtZW51Lm1ha2VQYXJhZ3JhcGguZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJydW4oJGV2ZW50LCAnbWFrZVBhcmFncmFwaCcpXCJcbiAgICAgICAgICAgICAgICBpMThuXG4gICAgICAgICAgICAgICAgPlBhcmFncmFwaGVcbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIG1hdC1tZW51LWl0ZW1cbiAgICAgICAgICAgICAgICAqbmdJZj1cIm1lbnUubWFrZUNvZGVCbG9ja1wiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIm1lbnUubWFrZUNvZGVCbG9jay5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInJ1bigkZXZlbnQsICdtYWtlQ29kZUJsb2NrJylcIlxuICAgICAgICAgICAgICAgIGkxOG5cbiAgICAgICAgICAgICAgICA+Q29kZVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgbWF0LW1lbnUtaXRlbVxuICAgICAgICAgICAgICAgICpuZ0lmPVwibWVudS5tYWtlSGVhZDFcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJtZW51Lm1ha2VIZWFkMS5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInJ1bigkZXZlbnQsICdtYWtlSGVhZDEnKVwiXG4gICAgICAgICAgICAgICAgaTE4blxuICAgICAgICAgICAgICAgID5UaXRyZSAxXG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBtYXQtbWVudS1pdGVtXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJtZW51Lm1ha2VIZWFkMlwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIm1lbnUubWFrZUhlYWQyLmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwicnVuKCRldmVudCwgJ21ha2VIZWFkMicpXCJcbiAgICAgICAgICAgICAgICBpMThuXG4gICAgICAgICAgICAgICAgPlRpdHJlIDJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIG1hdC1tZW51LWl0ZW1cbiAgICAgICAgICAgICAgICAqbmdJZj1cIm1lbnUubWFrZUhlYWQzXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwibWVudS5tYWtlSGVhZDMuZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJydW4oJGV2ZW50LCAnbWFrZUhlYWQzJylcIlxuICAgICAgICAgICAgICAgIGkxOG5cbiAgICAgICAgICAgICAgICA+VGl0cmUgM1xuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgbWF0LW1lbnUtaXRlbVxuICAgICAgICAgICAgICAgICpuZ0lmPVwibWVudS5tYWtlSGVhZDRcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJtZW51Lm1ha2VIZWFkNC5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInJ1bigkZXZlbnQsICdtYWtlSGVhZDQnKVwiXG4gICAgICAgICAgICAgICAgaTE4blxuICAgICAgICAgICAgICAgID5UaXRyZSA0XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBtYXQtbWVudS1pdGVtXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJtZW51Lm1ha2VIZWFkNVwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIm1lbnUubWFrZUhlYWQ1LmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwicnVuKCRldmVudCwgJ21ha2VIZWFkNScpXCJcbiAgICAgICAgICAgICAgICBpMThuXG4gICAgICAgICAgICAgICAgPlRpdHJlIDVcbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIG1hdC1tZW51LWl0ZW1cbiAgICAgICAgICAgICAgICAqbmdJZj1cIm1lbnUubWFrZUhlYWQ2XCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwibWVudS5tYWtlSGVhZDYuZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJydW4oJGV2ZW50LCAnbWFrZUhlYWQ2JylcIlxuICAgICAgICAgICAgICAgIGkxOG5cbiAgICAgICAgICAgICAgICA+VGl0cmUgNlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvbWF0LW1lbnU+XG5cbiAgICAgICAgPGJ1dHRvbiBtYXQtYnV0dG9uIFttYXRNZW51VHJpZ2dlckZvcl09XCJ0YWJsZU1lbnVcIiAqbmdJZj1cIm1lbnUuYWRkQ29sdW1uQmVmb3JlXCI+XG4gICAgICAgICAgICA8c3BhbiBpMThuPlRhYmxlYXU8L3NwYW4+XG4gICAgICAgICAgICA8bWF0LWljb24+YXJyb3dfZHJvcF9kb3duPC9tYXQtaWNvbj5cbiAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgPG1hdC1tZW51ICN0YWJsZU1lbnU9XCJtYXRNZW51XCI+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgbWF0LW1lbnUtaXRlbVxuICAgICAgICAgICAgICAgICpuZ0lmPVwibWVudS5pbnNlcnRUYWJsZVwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIm1lbnUuaW5zZXJ0VGFibGUuZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJydW4oJGV2ZW50LCAnaW5zZXJ0VGFibGUnKVwiXG4gICAgICAgICAgICAgICAgaTE4blxuICAgICAgICAgICAgICAgID5JbnPDqXJlciB1biB0YWJsZWF1XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBtYXQtbWVudS1pdGVtXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJtZW51LmRlbGV0ZVRhYmxlXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwibWVudS5kZWxldGVUYWJsZS5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInJ1bigkZXZlbnQsICdkZWxldGVUYWJsZScpXCJcbiAgICAgICAgICAgICAgICBpMThuXG4gICAgICAgICAgICAgICAgPlN1cHByaW1lciBsZSB0YWJsZWF1XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBtYXQtbWVudS1pdGVtXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJtZW51Lm1lcmdlQ2VsbHNcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJtZW51Lm1lcmdlQ2VsbHMuZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJydW4oJGV2ZW50LCAnbWVyZ2VDZWxscycpXCJcbiAgICAgICAgICAgICAgICBpMThuXG4gICAgICAgICAgICAgICAgPkZ1c2lvbm5lciBsZXMgY2VsbHVsZXNcbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIG1hdC1tZW51LWl0ZW1cbiAgICAgICAgICAgICAgICAqbmdJZj1cIm1lbnUuc3BsaXRDZWxsXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwibWVudS5zcGxpdENlbGwuZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJydW4oJGV2ZW50LCAnc3BsaXRDZWxsJylcIlxuICAgICAgICAgICAgICAgIGkxOG5cbiAgICAgICAgICAgICAgICA+U2NpbmRlciBsZXMgY2VsbHVsZXNcbiAgICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cblxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIG1hdC1tZW51LWl0ZW1cbiAgICAgICAgICAgICAgICAqbmdJZj1cIm1lbnUuYWRkQ29sdW1uQmVmb3JlXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwibWVudS5hZGRDb2x1bW5CZWZvcmUuZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJydW4oJGV2ZW50LCAnYWRkQ29sdW1uQmVmb3JlJylcIlxuICAgICAgICAgICAgICAgIGkxOG5cbiAgICAgICAgICAgICAgICA+SW5zw6lyZXIgdW5lIGNvbG9ubmUgYXZhbnRcbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIG1hdC1tZW51LWl0ZW1cbiAgICAgICAgICAgICAgICAqbmdJZj1cIm1lbnUuYWRkQ29sdW1uQWZ0ZXJcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJtZW51LmFkZENvbHVtbkFmdGVyLmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwicnVuKCRldmVudCwgJ2FkZENvbHVtbkFmdGVyJylcIlxuICAgICAgICAgICAgICAgIGkxOG5cbiAgICAgICAgICAgICAgICA+SW5zw6lyZXIgdW5lIGNvbG9ubmUgYXByw6hzXG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBtYXQtbWVudS1pdGVtXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJtZW51LmRlbGV0ZUNvbHVtblwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIm1lbnUuZGVsZXRlQ29sdW1uLmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwicnVuKCRldmVudCwgJ2RlbGV0ZUNvbHVtbicpXCJcbiAgICAgICAgICAgICAgICBpMThuXG4gICAgICAgICAgICAgICAgPlN1cHByaW1lciBsYSBjb2xvbm5lXG4gICAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XG5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBtYXQtbWVudS1pdGVtXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJtZW51LmFkZFJvd0JlZm9yZVwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIm1lbnUuYWRkUm93QmVmb3JlLmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwicnVuKCRldmVudCwgJ2FkZFJvd0JlZm9yZScpXCJcbiAgICAgICAgICAgICAgICBpMThuXG4gICAgICAgICAgICAgICAgPkluc8OpcmVyIHVuZSBsaWduZSBhdmFudFxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgbWF0LW1lbnUtaXRlbVxuICAgICAgICAgICAgICAgICpuZ0lmPVwibWVudS5hZGRSb3dBZnRlclwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIm1lbnUuYWRkUm93QWZ0ZXIuZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJydW4oJGV2ZW50LCAnYWRkUm93QWZ0ZXInKVwiXG4gICAgICAgICAgICAgICAgaTE4blxuICAgICAgICAgICAgICAgID5JbnPDqXJlciB1bmUgbGlnbmUgYXByw6hzXG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBtYXQtbWVudS1pdGVtXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJtZW51LmRlbGV0ZVJvd1wiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIm1lbnUuZGVsZXRlUm93LmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwicnVuKCRldmVudCwgJ2RlbGV0ZVJvdycpXCJcbiAgICAgICAgICAgICAgICBpMThuXG4gICAgICAgICAgICAgICAgPlN1cHByaW1lciBsYSBsaWduZVxuICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICAgIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxuXG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgbWF0LW1lbnUtaXRlbVxuICAgICAgICAgICAgICAgICpuZ0lmPVwibWVudS50b2dnbGVIZWFkZXJDb2x1bW5cIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJtZW51LnRvZ2dsZUhlYWRlckNvbHVtbi5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInJ1bigkZXZlbnQsICd0b2dnbGVIZWFkZXJDb2x1bW4nKVwiXG4gICAgICAgICAgICAgICAgaTE4blxuICAgICAgICAgICAgICAgID5FbnTDqnRlIGRlIGNvbG9ubmVcbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIG1hdC1tZW51LWl0ZW1cbiAgICAgICAgICAgICAgICAqbmdJZj1cIm1lbnUudG9nZ2xlSGVhZGVyUm93XCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwibWVudS50b2dnbGVIZWFkZXJSb3cuZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJydW4oJGV2ZW50LCAndG9nZ2xlSGVhZGVyUm93JylcIlxuICAgICAgICAgICAgICAgIGkxOG5cbiAgICAgICAgICAgICAgICA+RW50w6p0ZSBkZSBsaWduZVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgbWF0LW1lbnUtaXRlbVxuICAgICAgICAgICAgICAgICpuZ0lmPVwibWVudS50b2dnbGVIZWFkZXJDZWxsXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwibWVudS50b2dnbGVIZWFkZXJDZWxsLmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwicnVuKCRldmVudCwgJ3RvZ2dsZUhlYWRlckNlbGwnKVwiXG4gICAgICAgICAgICAgICAgaTE4blxuICAgICAgICAgICAgICAgID5FbnTDqnRlIGRlIGNlbGx1bGVcbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L21hdC1tZW51PlxuXG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIG1hdC1idXR0b25cbiAgICAgICAgICAgICpuZ0lmPVwiaW1hZ2VVcGxvYWRlclwiXG4gICAgICAgICAgICBuYXR1cmFsRmlsZURyb3BcbiAgICAgICAgICAgIFtzZWxlY3RhYmxlXT1cInRydWVcIlxuICAgICAgICAgICAgW2Jyb2FkY2FzdF09XCJmYWxzZVwiXG4gICAgICAgICAgICBpMThuLW1hdFRvb2x0aXBcbiAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJJbnPDqXJlciB1bmUgaW1hZ2VcIlxuICAgICAgICAgICAgKGZpbGVDaGFuZ2UpPVwidXBsb2FkKCRldmVudClcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8bWF0LWljb24+aW5zZXJ0X3Bob3RvPC9tYXQtaWNvbj5cbiAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgbWF0LWJ1dHRvblxuICAgICAgICAgICAgKm5nSWY9XCJtZW51LnVuZG9cIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cIm1lbnUudW5kby5kaXNhYmxlZFwiXG4gICAgICAgICAgICAoY2xpY2spPVwicnVuKCRldmVudCwgJ3VuZG8nKVwiXG4gICAgICAgICAgICBpMThuLW1hdFRvb2x0aXBcbiAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJBbm51bGVyXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPG1hdC1pY29uPnVuZG88L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBtYXQtYnV0dG9uXG4gICAgICAgICAgICAqbmdJZj1cIm1lbnUucmVkb1wiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwibWVudS5yZWRvLmRpc2FibGVkXCJcbiAgICAgICAgICAgIChjbGljayk9XCJydW4oJGV2ZW50LCAncmVkbycpXCJcbiAgICAgICAgICAgIGkxOG4tbWF0VG9vbHRpcFxuICAgICAgICAgICAgbWF0VG9vbHRpcD1cIlJlZmFpcmVcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8bWF0LWljb24+cmVkbzwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIG1hdC1idXR0b25cbiAgICAgICAgICAgICpuZ0lmPVwibWVudS53cmFwQnVsbGV0TGlzdCAmJiBtZW51LndyYXBCdWxsZXRMaXN0LnNob3dcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cIm1lbnUud3JhcEJ1bGxldExpc3QuZGlzYWJsZWRcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInJ1bigkZXZlbnQsICd3cmFwQnVsbGV0TGlzdCcpXCJcbiAgICAgICAgICAgIGkxOG4tbWF0VG9vbHRpcFxuICAgICAgICAgICAgbWF0VG9vbHRpcD1cIkxpc3RlIMOgIHB1Y2VcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8bWF0LWljb24+Zm9ybWF0X2xpc3RfYnVsbGV0ZWQ8L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBtYXQtYnV0dG9uXG4gICAgICAgICAgICAqbmdJZj1cIm1lbnUud3JhcE9yZGVyZWRMaXN0ICYmIG1lbnUud3JhcE9yZGVyZWRMaXN0LnNob3dcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cIm1lbnUud3JhcE9yZGVyZWRMaXN0LmRpc2FibGVkXCJcbiAgICAgICAgICAgIChjbGljayk9XCJydW4oJGV2ZW50LCAnd3JhcE9yZGVyZWRMaXN0JylcIlxuICAgICAgICAgICAgaTE4bi1tYXRUb29sdGlwXG4gICAgICAgICAgICBtYXRUb29sdGlwPVwiTGlzdGUgw6AgbnVtw6lyb1wiXG4gICAgICAgID5cbiAgICAgICAgICAgIDxtYXQtaWNvbj5mb3JtYXRfbGlzdF9udW1iZXJlZDwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIG1hdC1idXR0b25cbiAgICAgICAgICAgICpuZ0lmPVwibWVudS53cmFwQmxvY2tRdW90ZSAmJiBtZW51LndyYXBCbG9ja1F1b3RlLnNob3dcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cIm1lbnUud3JhcEJsb2NrUXVvdGUuZGlzYWJsZWRcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInJ1bigkZXZlbnQsICd3cmFwQmxvY2tRdW90ZScpXCJcbiAgICAgICAgICAgIGkxOG4tbWF0VG9vbHRpcFxuICAgICAgICAgICAgbWF0VG9vbHRpcD1cIkNpdGF0aW9uXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPG1hdC1pY29uPmZvcm1hdF9xdW90ZTwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIG1hdC1idXR0b25cbiAgICAgICAgICAgICpuZ0lmPVwibWVudS5qb2luVXAgJiYgbWVudS5qb2luVXAuc2hvd1wiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwibWVudS5qb2luVXAuZGlzYWJsZWRcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInJ1bigkZXZlbnQsICdqb2luVXAnKVwiXG4gICAgICAgICAgICBpMThuLW1hdFRvb2x0aXBcbiAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJGdXNpb25uZXIgYXZlYyBsJ8OpbMOpbWVudCBkdSBoYXV0XCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPG1hdC1pY29uPm1vdmVfdXA8L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBtYXQtYnV0dG9uXG4gICAgICAgICAgICAqbmdJZj1cIm1lbnUubGlmdCAmJiBtZW51LmxpZnQuc2hvd1wiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwibWVudS5saWZ0LmRpc2FibGVkXCJcbiAgICAgICAgICAgIChjbGljayk9XCJydW4oJGV2ZW50LCAnbGlmdCcpXCJcbiAgICAgICAgICAgIGkxOG4tbWF0VG9vbHRpcFxuICAgICAgICAgICAgbWF0VG9vbHRpcD1cIkTDqXNpbmRlbnRlclwiXG4gICAgICAgID5cbiAgICAgICAgICAgIDxtYXQtaWNvbj5mb3JtYXRfaW5kZW50X2RlY3JlYXNlPC9tYXQtaWNvbj5cbiAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgbWF0LWJ1dHRvblxuICAgICAgICAgICAgKm5nSWY9XCJtZW51LnNlbGVjdFBhcmVudE5vZGUgJiYgbWVudS5zZWxlY3RQYXJlbnROb2RlLnNob3dcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cIm1lbnUuc2VsZWN0UGFyZW50Tm9kZS5kaXNhYmxlZFwiXG4gICAgICAgICAgICAoY2xpY2spPVwicnVuKCRldmVudCwgJ3NlbGVjdFBhcmVudE5vZGUnKVwiXG4gICAgICAgICAgICBpMThuLW1hdFRvb2x0aXBcbiAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJTw6lsZWN0aW9ubmVyIGwnw6lsw6ltZW50IHBhcmVudFwiXG4gICAgICAgID5cbiAgICAgICAgICAgIDxtYXQtaWNvbj5zZWxlY3RfYWxsPC9tYXQtaWNvbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG48L2Rpdj5cbjxkaXYgI2VkaXRvcj48L2Rpdj5cbiJdfQ==
|
|
219
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25hdHVyYWwtZWRpdG9yL3NyYy9saWIvZWRpdG9yL2VkaXRvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uYXR1cmFsLWVkaXRvci9zcmMvbGliL2VkaXRvci9lZGl0b3IuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBR0wsUUFBUSxFQUNSLE1BQU0sRUFDTixJQUFJLEVBQ0osU0FBUyxHQUNaLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUM1QyxPQUFPLEVBQUMsV0FBVyxFQUFFLE1BQU0sRUFBYyxNQUFNLG1CQUFtQixDQUFDO0FBQ25FLE9BQU8sRUFBQyxTQUFTLEVBQUUsYUFBYSxFQUFTLE1BQU0sbUJBQW1CLENBQUM7QUFDbkUsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBRXpDLE9BQU8sRUFBQyxjQUFjLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBQzlFLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUMxQyxPQUFPLEVBQUMsV0FBVyxFQUFnQixNQUFNLGdCQUFnQixDQUFDO0FBQzFELE9BQU8sRUFBQyxjQUFjLEVBQUUsV0FBVyxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDNUQsT0FBTyxFQUFDLGNBQWMsRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDN0QsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQzVDLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUNoRCxPQUFP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LE9BQU87U0FDVjtRQUVELElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsYUFBYSxFQUFFO1lBQ3RELElBQUksQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDdkY7UUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3RCLENBQUM7O21IQXZNUSxzQkFBc0IsdUVBcUNuQixRQUFRO3VHQXJDWCxzQkFBc0IsZ0pBRnBCLENBQUMsV0FBVyxDQUFDLHVHQUtJLFVBQVUsMkNDbEQxQyx1bGJBMFlBOzJGRDNWYSxzQkFBc0I7a0JBTmxDLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLGdCQUFnQjtvQkFDMUIsV0FBVyxFQUFFLHlCQUF5QjtvQkFDdEMsU0FBUyxFQUFFLENBQUMseUJBQXlCLENBQUM7b0JBQ3RDLFNBQVMsRUFBRSxDQUFDLFdBQVcsQ0FBQztpQkFDM0I7OzBCQXFDUSxRQUFROzswQkFBSSxJQUFJOzhCQUM0QixRQUFROzBCQUFwRCxNQUFNOzJCQUFDLFFBQVE7OEZBbEMyQyxNQUFNO3NCQUFwRSxTQUFTO3VCQUFDLFFBQVEsRUFBRSxFQUFDLElBQUksRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBQztnQkFFM0IsYUFBYTtzQkFBdEMsTUFBTTtnQkFRUyxhQUFhO3NCQUE1QixLQUFLO2dCQW9Cb0IsSUFBSTtzQkFBN0IsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ29tcG9uZW50LFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEluamVjdCxcbiAgICBJbnB1dCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE9wdGlvbmFsLFxuICAgIE91dHB1dCxcbiAgICBTZWxmLFxuICAgIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0NvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOZ0NvbnRyb2x9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7RWRpdG9yVmlld30gZnJvbSAncHJvc2VtaXJyb3Itdmlldyc7XG5pbXBvcnQge0VkaXRvclN0YXRlLCBQbHVnaW4sIFRyYW5zYWN0aW9ufSBmcm9tICdwcm9zZW1pcnJvci1zdGF0ZSc7XG5pbXBvcnQge0RPTVBhcnNlciwgRE9NU2VyaWFsaXplciwgU2NoZW1hfSBmcm9tICdwcm9zZW1pcnJvci1tb2RlbCc7XG5pbXBvcnQge0RPQ1VNRU5UfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtNYXREaWFsb2d9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQge2NvbHVtblJlc2l6aW5nLCBnb1RvTmV4dENlbGwsIHRhYmxlRWRpdGluZ30gZnJvbSAncHJvc2VtaXJyb3ItdGFibGVzJztcbmltcG9ydCB7a2V5bWFwfSBmcm9tICdwcm9zZW1pcnJvci1rZXltYXAnO1xuaW1wb3J0IHtJbWFnZVBsdWdpbiwgSW1hZ2VVcGxvYWRlcn0gZnJvbSAnLi4vdXRpbHMvaW1hZ2UnO1xuaW1wb3J0IHthZHZhbmNlZFNjaGVtYSwgYmFzaWNTY2hlbWF9IGZyb20gJy4uL3V0aWxzL3NjaGVtYSc7XG5pbXBvcnQge2J1aWxkTWVudUl0ZW1zLCBLZXksIE1lbnVJdGVtc30gZnJvbSAnLi4vdXRpbHMvbWVudSc7XG5pbXBvcnQge2hpc3Rvcnl9IGZyb20gJ3Byb3NlbWlycm9yLWhpc3RvcnknO1xuaW1wb3J0IHtiYXNlS2V5bWFwfSBmcm9tICdwcm9zZW1pcnJvci1jb21tYW5kcyc7XG5pbXBvcnQge2Ryb3BDdXJzb3J9IGZyb20gJ3Byb3NlbWlycm9yLWRyb3BjdXJzb3InO1xuaW1wb3J0IHtnYXBDdXJzb3J9IGZyb20gJ3Byb3NlbWlycm9yLWdhcGN1cnNvcic7XG5pbXBvcnQge2J1aWxkSW5wdXRSdWxlc30gZnJvbSAnLi4vdXRpbHMvaW5wdXRydWxlcyc7XG5pbXBvcnQge2J1aWxkS2V5bWFwfSBmcm9tICcuLi91dGlscy9rZXltYXAnO1xuXG4vKipcbiAqIFByb3NlbWlycm9yIGNvbXBvbmVudFxuICpcbiAqIFVzYWdlIDpcbiAqXG4gKiBgYGBodG1sXG4gKiA8bmF0dXJhbC1lZGl0b3IgWyhuZ01vZGVsKV09XCJodG1sU3RyaW5nXCI+PC9uYXR1cmFsLWVkaXRvcj5cbiAqIGBgYFxuICovXG4vLyBAZHluYW1pY1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICduYXR1cmFsLWVkaXRvcicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2VkaXRvci5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vZWRpdG9yLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgcHJvdmlkZXJzOiBbSW1hZ2VQbHVnaW5dLFxufSlcbmV4cG9ydCBjbGFzcyBOYXR1cmFsRWRpdG9yQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcbiAgICBwcml2YXRlIHZpZXc6IEVkaXRvclZpZXcgfCBudWxsID0gbnVsbDtcblxuICAgIEBWaWV3Q2hpbGQoJ2VkaXRvcicsIHtyZWFkOiBFbGVtZW50UmVmLCBzdGF0aWM6IHRydWV9KSBwcml2YXRlIGVkaXRvciE6IEVsZW1lbnRSZWY7XG5cbiAgICBAT3V0cHV0KCkgcHVibGljIHJlYWRvbmx5IGNvbnRlbnRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcblxuICAgIC8qKlxuICAgICAqIENhbGxiYWNrIHRvIHVwbG9hZCBhbiBpbWFnZS5cbiAgICAgKlxuICAgICAqIElmIGdpdmVuIGl0IHdpbGwgZW5hYmxlIGFkdmFuY2VkIHNjaGVtYSwgaW5jbHVkaW5nIGltYWdlIGFuZCB0YWJsZXMuXG4gICAgICogSXQgbXVzdCBiZSBnaXZlbiBvbiBpbml0aWFsaXphdGlvbiBhbmQgY2Fubm90IGJlIGNoYW5nZWQgbGF0ZXIgb24uXG4gICAgICovXG4gICAgQElucHV0KCkgcHVibGljIGltYWdlVXBsb2FkZXI6IEltYWdlVXBsb2FkZXIgfCBudWxsID0gbnVsbDtcblxuICAgIHByaXZhdGUgc2NoZW1hOiBTY2hlbWEgPSBiYXNpY1NjaGVtYTtcblxuICAgIC8qKlxuICAgICAqIEludGVyZmFjZSB3aXRoIENvbnRyb2xWYWx1ZUFjY2Vzc29yXG4gICAgICogTm90aWZpZXMgcGFyZW50IG1vZGVsIC8gZm9ybSBjb250cm9sbGVyXG4gICAgICovXG4gICAgcHJpdmF0ZSBvbkNoYW5nZT86ICh2YWx1ZTogc3RyaW5nIHwgbnVsbCkgPT4gdm9pZDtcblxuICAgIC8qKlxuICAgICAqIEhUTUwgc3RyaW5nXG4gICAgICovXG4gICAgcHJpdmF0ZSBjb250ZW50ID0gJyc7XG5cbiAgICBwdWJsaWMgbWVudTogTWVudUl0ZW1zIHwgbnVsbCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBJZiBzdWJzY3JpYmVkIHRvLCB0aGVuIHRoZSBzYXZlIGJ1dHRvbiB3aWxsIGJlIHNob3duIGFuZCBjbGljayBldmVudHMgZm9yd2FyZGVkXG4gICAgICovXG4gICAgQE91dHB1dCgpIHB1YmxpYyByZWFkb25seSBzYXZlID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIEBPcHRpb25hbCgpIEBTZWxmKCkgcHVibGljIHJlYWRvbmx5IG5nQ29udHJvbDogTmdDb250cm9sLFxuICAgICAgICBASW5qZWN0KERPQ1VNRU5UKSBwcml2YXRlIHJlYWRvbmx5IGRvY3VtZW50OiBEb2N1bWVudCxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBkaWFsb2c6IE1hdERpYWxvZyxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBpbWFnZVBsdWdpbjogSW1hZ2VQbHVnaW4sXG4gICAgKSB7XG4gICAgICAgIGlmICh0aGlzLm5nQ29udHJvbCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5uZ0NvbnRyb2wudmFsdWVBY2Nlc3NvciA9IHRoaXM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2NoZW1hID0gdGhpcy5pbWFnZVVwbG9hZGVyID8gYWR2YW5jZWRTY2hlbWEgOiBiYXNpY1NjaGVtYTtcbiAgICAgICAgdGhpcy5tZW51ID0gYnVpbGRNZW51SXRlbXModGhpcy5zY2hlbWEsIHRoaXMuZGlhbG9nKTtcbiAgICAgICAgY29uc3Qgc2VyaWFsaXplciA9IERPTVNlcmlhbGl6ZXIuZnJvbVNjaGVtYSh0aGlzLnNjaGVtYSk7XG4gICAgICAgIGNvbnN0IHN0YXRlID0gdGhpcy5jcmVhdGVTdGF0ZSgpO1xuXG4gICAgICAgIHRoaXMudmlldyA9IG5ldyBFZGl0b3JWaWV3KHRoaXMuZWRpdG9yLm5hdGl2ZUVsZW1lbnQsIHtcbiAgICAgICAgICAgIHN0YXRlOiBzdGF0ZSxcbiAgICAgICAgICAgIGRpc3BhdGNoVHJhbnNhY3Rpb246ICh0cmFuc2FjdGlvbjogVHJhbnNhY3Rpb24pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMudmlldykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3QgbmV3U3RhdGUgPSB0aGlzLnZpZXcuc3RhdGUuYXBwbHkodHJhbnNhY3Rpb24pO1xuICAgICAgICAgICAgICAgIHRoaXMudmlldy51cGRhdGVTdGF0ZShuZXdTdGF0ZSk7XG5cbiAgICAgICAgICAgICAgICAvLyBUcmFuc2Zvcm0gZG9jIGludG8gSFRNTCBzdHJpbmdcbiAgICAgICAgICAgICAgICBjb25zdCBkb20gPSBzZXJpYWxpemVyLnNlcmlhbGl6ZUZyYWdtZW50KHRoaXMudmlldy5zdGF0ZS5kb2MgYXMgYW55KTtcbiAgICAgICAgICAgICAgICBjb25zdCBlbCA9IHRoaXMuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnXycpO1xuICAgICAgICAgICAgICAgIGVsLmFwcGVuZENoaWxkKGRvbSk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBuZXdDb250ZW50ID0gZWwuaW5uZXJIVE1MO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbnRlbnQgPT09IG5ld0NvbnRlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMuY29udGVudCA9IGVsLmlubmVySFRNTDtcblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLm9uQ2hhbmdlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25DaGFuZ2UodGhpcy5jb250ZW50KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5jb250ZW50Q2hhbmdlLmVtaXQodGhpcy5jb250ZW50KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnVwZGF0ZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyB3cml0ZVZhbHVlKHZhbDogc3RyaW5nIHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsID09PSAnc3RyaW5nJyAmJiB2YWwgIT09IHRoaXMuY29udGVudCkge1xuICAgICAgICAgICAgdGhpcy5jb250ZW50ID0gdmFsO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMudmlldyAhPT0gbnVsbCkge1xuICAgICAgICAgICAgY29uc3Qgc3RhdGUgPSB0aGlzLmNyZWF0ZVN0YXRlKCk7XG4gICAgICAgICAgICB0aGlzLnZpZXcudXBkYXRlU3RhdGUoc3RhdGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVTdGF0ZSgpOiBFZGl0b3JTdGF0ZSB7XG4gICAgICAgIGNvbnN0IHRlbXBsYXRlID0gdGhpcy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdfJyk7XG4gICAgICAgIHRlbXBsYXRlLmlubmVySFRNTCA9ICc8ZGl2PicgKyB0aGlzLmNvbnRlbnQgKyAnPC9kaXY+JztcbiAgICAgICAgaWYgKCF0ZW1wbGF0ZS5maXJzdENoaWxkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NoaWxkIG9mIHRlbXBsYXRlIGVsZW1lbnQgY291bGQgbm90IGJlIGNyZWF0ZWQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHBhcnNlciA9IERPTVBhcnNlci5mcm9tU2NoZW1hKHRoaXMuc2NoZW1hKTtcbiAgICAgICAgY29uc3QgZG9jID0gcGFyc2VyLnBhcnNlKHRlbXBsYXRlLmZpcnN0Q2hpbGQpO1xuXG4gICAgICAgIHJldHVybiBFZGl0b3JTdGF0ZS5jcmVhdGUoe1xuICAgICAgICAgICAgZG9jOiBkb2MsXG4gICAgICAgICAgICBwbHVnaW5zOiB0aGlzLmNyZWF0ZVBsdWdpbnMoKSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVQbHVnaW5zKCk6IFBsdWdpbltdIHtcbiAgICAgICAgY29uc3QgaXNNYWMgPSAhIXRoaXMuZG9jdW1lbnQuZGVmYXVsdFZpZXc/Lm5hdmlnYXRvci5wbGF0Zm9ybS5tYXRjaCgvTWFjLyk7XG5cbiAgICAgICAgY29uc3QgcGx1Z2lucyA9IFtcbiAgICAgICAgICAgIGJ1aWxkSW5wdXRSdWxlcyh0aGlzLnNjaGVtYSksXG4gICAgICAgICAgICBrZXltYXAoYnVpbGRLZXltYXAodGhpcy5zY2hlbWEsIGlzTWFjKSksXG4gICAgICAgICAgICBrZXltYXAoYmFzZUtleW1hcCksXG4gICAgICAgICAgICBkcm9wQ3Vyc29yKCksXG4gICAgICAgICAgICBnYXBDdXJzb3IoKSxcbiAgICAgICAgICAgIGhpc3RvcnkoKSxcbiAgICAgICAgICAgIG5ldyBQbHVnaW4oe1xuICAgICAgICAgICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IHtjbGFzczogJ1Byb3NlTWlycm9yLWV4YW1wbGUtc2V0dXAtc3R5bGUnfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgUGx1Z2luKHtcbiAgICAgICAgICAgICAgICB2aWV3OiAoKSA9PiB0aGlzLFxuICAgICAgICAgICAgfSksXG4gICAgICAgIF07XG5cbiAgICAgICAgaWYgKHRoaXMuc2NoZW1hID09PSBhZHZhbmNlZFNjaGVtYSkge1xuICAgICAgICAgICAgcGx1Z2lucy5wdXNoKFxuICAgICAgICAgICAgICAgIHRoaXMuaW1hZ2VQbHVnaW4ucGx1Z2luLFxuICAgICAgICAgICAgICAgIGNvbHVtblJlc2l6aW5nKHVuZGVmaW5lZCBhcyBhbnkpLFxuICAgICAgICAgICAgICAgIHRhYmxlRWRpdGluZygpLFxuICAgICAgICAgICAgICAgIGtleW1hcCh7XG4gICAgICAgICAgICAgICAgICAgIFRhYjogZ29Ub05leHRDZWxsKDEpLFxuICAgICAgICAgICAgICAgICAgICAnU2hpZnQtVGFiJzogZ29Ub05leHRDZWxsKC0xKSxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcGx1Z2lucztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDYWxsZWQgYnkgUHJvc2VtaXJyb3Igd2hlbmV2ZXIgdGhlIGVkaXRvciBzdGF0ZSBjaGFuZ2VzLiBTbyB3ZSB1cGRhdGUgb3VyIG1lbnUgc3RhdGVzLlxuICAgICAqL1xuICAgIHB1YmxpYyB1cGRhdGUoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy52aWV3IHx8ICF0aGlzLm1lbnUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBPYmplY3QudmFsdWVzKHRoaXMubWVudSkpIHtcbiAgICAgICAgICAgIGl0ZW0udXBkYXRlKHRoaXMudmlldywgdGhpcy52aWV3LnN0YXRlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xuICAgIH1cblxuICAgIHB1YmxpYyByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7fVxuXG4gICAgcHVibGljIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICAvLyBUT0RPIGRpc2FibGUgZWRpdG9yID9cbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnZpZXcpIHtcbiAgICAgICAgICAgIHRoaXMudmlldy5kZXN0cm95KCk7XG4gICAgICAgICAgICB0aGlzLnZpZXcgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHJ1bihldmVudDogRXZlbnQsIGtleTogS2V5KTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy52aWV3IHx8ICF0aGlzLm1lbnUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLm1lbnVba2V5XTtcbiAgICAgICAgaWYgKCFpdGVtIHx8IGl0ZW0uZGlzYWJsZWQgfHwgIWl0ZW0uc2hvdykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaXRlbS5zcGVjLnJ1bih0aGlzLnZpZXcuc3RhdGUsIHRoaXMudmlldy5kaXNwYXRjaCwgdGhpcy52aWV3LCBldmVudCk7XG4gICAgICAgIHRoaXMudmlldy5mb2N1cygpO1xuICAgIH1cblxuICAgIHB1YmxpYyB1cGxvYWQoZmlsZTogRmlsZSk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMudmlldyB8fCAhdGhpcy5pbWFnZVVwbG9hZGVyKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy52aWV3LnN0YXRlLnNlbGVjdGlvbi4kZnJvbS5wYXJlbnQuaW5saW5lQ29udGVudCkge1xuICAgICAgICAgICAgdGhpcy5pbWFnZVBsdWdpbi5zdGFydEltYWdlVXBsb2FkKHRoaXMudmlldywgZmlsZSwgdGhpcy5pbWFnZVVwbG9hZGVyLCB0aGlzLnNjaGVtYSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnZpZXcuZm9jdXMoKTtcbiAgICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwibWVudS1jb250YWluZXJcIiAqbmdJZj1cIm1lbnVcIj5cbiAgICA8ZGl2IGNsYXNzPVwibWVudVwiPlxuICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gKm5nSWY9XCJzYXZlLm9ic2VydmVkXCIgKGNsaWNrKT1cInNhdmUuZW1pdCgpXCIgaTE4bi1tYXRUb29sdGlwIG1hdFRvb2x0aXA9XCJFbnJlZ2lzdHJlclwiPlxuICAgICAgICAgICAgPG1hdC1pY29uPnNhdmU8L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICA8bWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAgbXVsdGlwbGU+XG4gICAgICAgICAgICA8bWF0LWJ1dHRvbi10b2dnbGVcbiAgICAgICAgICAgICAgICAqbmdJZj1cIm1lbnUudG9nZ2xlU3Ryb25nXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwibWVudS50b2dnbGVTdHJvbmcuZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cIm1lbnUudG9nZ2xlU3Ryb25nLmFjdGl2ZVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInJ1bigkZXZlbnQsICd0b2dnbGVTdHJvbmcnKVwiXG4gICAgICAgICAgICAgICAgaTE4bi1tYXRUb29sdGlwXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcD1cIkdyYXNcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5mb3JtYXRfYm9sZDwvbWF0LWljb24+XG4gICAgICAgICAgICA8L21hdC1idXR0b24tdG9nZ2xlPlxuXG4gICAgICAgICAgICA8bWF0LWJ1dHRvbi10b2dnbGVcbiAgICAgICAgICAgICAgICAqbmdJZj1cIm1lbnUudG9nZ2xlRW1cIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJtZW51LnRvZ2dsZUVtLmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJtZW51LnRvZ2dsZUVtLmFjdGl2ZVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInJ1bigkZXZlbnQsICd0b2dnbGVFbScpXCJcbiAgICAgICAgICAgICAgICBpMThuLW1hdFRvb2x0aXBcbiAgICAgICAgICAgICAgICBtYXRUb29sdGlwPVwiSXRhbGlxdWVcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5mb3JtYXRfaXRhbGljPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvbWF0LWJ1dHRvbi10b2dnbGU+XG5cbiAgICAgICAgICAgIDxtYXQtYnV0dG9uLXRvZ2dsZVxuICAgICAgICAgICAgICAgICpuZ0lmPVwibWVudS50b2dnbGVDb2RlXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwibWVudS50b2dnbGVDb2RlLmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJtZW51LnRvZ2dsZUNvZGUuYWN0aXZlXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwicnVuKCRldmVudCwgJ3RvZ2dsZUNvZGUnKVwiXG4gICAgICAgICAgICAgICAgaTE4bi1tYXRUb29sdGlwXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcD1cIkNvZGVcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jb2RlPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvbWF0LWJ1dHRvbi10b2dnbGU+XG5cbiAgICAgICAgICAgIDxtYXQtYnV0dG9uLXRvZ2dsZVxuICAgICAgICAgICAgICAgICpuZ0lmPVwibWVudS50b2dnbGVMaW5rXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwibWVudS50b2dnbGVMaW5rLmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJtZW51LnRvZ2dsZUxpbmsuYWN0aXZlXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwicnVuKCRldmVudCwgJ3RvZ2dsZUxpbmsnKVwiXG4gICAgICAgICAgICAgICAgaTE4bi1tYXRUb29sdGlwXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcD1cIkluc8OpcmVyIHVuIGxpZW4uLi5cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5pbnNlcnRfbGluazwvbWF0LWljb24+XG4gICAgICAgICAgICA8L21hdC1idXR0b24tdG9nZ2xlPlxuICAgICAgICA8L21hdC1idXR0b24tdG9nZ2xlLWdyb3VwPlxuXG4gICAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiBbbWF0TWVudVRyaWdnZXJGb3JdPVwiYmxvY2tNZW51XCI+XG4gICAgICAgICAgICA8c3BhbiBpMThuPlR5cGU8L3NwYW4+XG4gICAgICAgICAgICA8bWF0LWljb24+YXJyb3dfZHJvcF9kb3duPC9tYXQtaWNvbj5cbiAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgPG1hdC1tZW51ICNibG9ja01lbnU9XCJtYXRNZW51XCI+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgbWF0LW1lbnUtaXRlbVxuICAgICAgICAgICAgICAgICpuZ0lmPVwibWVudS5tYWtlUGFyYWdyYXBoXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwibWVudS5tYWtlUGFyYWdyYXBoLmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwicnVuKCRldmVudCwgJ21ha2VQYXJhZ3JhcGgnKVwiXG4gICAgICAgICAgICAgICAgaTE4blxuICAgICAgICAgICAgICAgID5QYXJhZ3JhcGhlXG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBtYXQtbWVudS1pdGVtXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJtZW51Lm1ha2VDb2RlQmxvY2tcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJtZW51Lm1ha2VDb2RlQmxvY2suZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJydW4oJGV2ZW50LCAnbWFrZUNvZGVCbG9jaycpXCJcbiAgICAgICAgICAgICAgICBpMThuXG4gICAgICAgICAgICAgICAgPkNvZGVcbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIG1hdC1tZW51LWl0ZW1cbiAgICAgICAgICAgICAgICAqbmdJZj1cIm1lbnUubWFrZUhlYWQxXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwibWVudS5tYWtlSGVhZDEuZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJydW4oJGV2ZW50LCAnbWFrZUhlYWQxJylcIlxuICAgICAgICAgICAgICAgIGkxOG5cbiAgICAgICAgICAgICAgICA+VGl0cmUgMVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgbWF0LW1lbnUtaXRlbVxuICAgICAgICAgICAgICAgICpuZ0lmPVwibWVudS5tYWtlSGVhZDJcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJtZW51Lm1ha2VIZWFkMi5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInJ1bigkZXZlbnQsICdtYWtlSGVhZDInKVwiXG4gICAgICAgICAgICAgICAgaTE4blxuICAgICAgICAgICAgICAgID5UaXRyZSAyXG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBtYXQtbWVudS1pdGVtXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJtZW51Lm1ha2VIZWFkM1wiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIm1lbnUubWFrZUhlYWQzLmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwicnVuKCRldmVudCwgJ21ha2VIZWFkMycpXCJcbiAgICAgICAgICAgICAgICBpMThuXG4gICAgICAgICAgICAgICAgPlRpdHJlIDNcbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIG1hdC1tZW51LWl0ZW1cbiAgICAgICAgICAgICAgICAqbmdJZj1cIm1lbnUubWFrZUhlYWQ0XCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwibWVudS5tYWtlSGVhZDQuZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJydW4oJGV2ZW50LCAnbWFrZUhlYWQ0JylcIlxuICAgICAgICAgICAgICAgIGkxOG5cbiAgICAgICAgICAgICAgICA+VGl0cmUgNFxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgbWF0LW1lbnUtaXRlbVxuICAgICAgICAgICAgICAgICpuZ0lmPVwibWVudS5tYWtlSGVhZDVcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJtZW51Lm1ha2VIZWFkNS5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInJ1bigkZXZlbnQsICdtYWtlSGVhZDUnKVwiXG4gICAgICAgICAgICAgICAgaTE4blxuICAgICAgICAgICAgICAgID5UaXRyZSA1XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBtYXQtbWVudS1pdGVtXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJtZW51Lm1ha2VIZWFkNlwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIm1lbnUubWFrZUhlYWQ2LmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwicnVuKCRldmVudCwgJ21ha2VIZWFkNicpXCJcbiAgICAgICAgICAgICAgICBpMThuXG4gICAgICAgICAgICAgICAgPlRpdHJlIDZcbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L21hdC1tZW51PlxuXG4gICAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiBbbWF0TWVudVRyaWdnZXJGb3JdPVwidGFibGVNZW51XCIgKm5nSWY9XCJtZW51LmFkZENvbHVtbkJlZm9yZVwiPlxuICAgICAgICAgICAgPHNwYW4gaTE4bj5UYWJsZWF1PC9zcGFuPlxuICAgICAgICAgICAgPG1hdC1pY29uPmFycm93X2Ryb3BfZG93bjwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgIDxtYXQtbWVudSAjdGFibGVNZW51PVwibWF0TWVudVwiPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIG1hdC1tZW51LWl0ZW1cbiAgICAgICAgICAgICAgICAqbmdJZj1cIm1lbnUuaW5zZXJ0VGFibGVcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJtZW51Lmluc2VydFRhYmxlLmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwicnVuKCRldmVudCwgJ2luc2VydFRhYmxlJylcIlxuICAgICAgICAgICAgICAgIGkxOG5cbiAgICAgICAgICAgICAgICA+SW5zw6lyZXIgdW4gdGFibGVhdVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgbWF0LW1lbnUtaXRlbVxuICAgICAgICAgICAgICAgICpuZ0lmPVwibWVudS5kZWxldGVUYWJsZVwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIm1lbnUuZGVsZXRlVGFibGUuZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJydW4oJGV2ZW50LCAnZGVsZXRlVGFibGUnKVwiXG4gICAgICAgICAgICAgICAgaTE4blxuICAgICAgICAgICAgICAgID5TdXBwcmltZXIgbGUgdGFibGVhdVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgbWF0LW1lbnUtaXRlbVxuICAgICAgICAgICAgICAgICpuZ0lmPVwibWVudS5tZXJnZUNlbGxzXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwibWVudS5tZXJnZUNlbGxzLmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwicnVuKCRldmVudCwgJ21lcmdlQ2VsbHMnKVwiXG4gICAgICAgICAgICAgICAgaTE4blxuICAgICAgICAgICAgICAgID5GdXNpb25uZXIgbGVzIGNlbGx1bGVzXG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBtYXQtbWVudS1pdGVtXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJtZW51LnNwbGl0Q2VsbFwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIm1lbnUuc3BsaXRDZWxsLmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwicnVuKCRldmVudCwgJ3NwbGl0Q2VsbCcpXCJcbiAgICAgICAgICAgICAgICBpMThuXG4gICAgICAgICAgICAgICAgPlNjaW5kZXIgbGVzIGNlbGx1bGVzXG4gICAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XG5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBtYXQtbWVudS1pdGVtXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJtZW51LmFkZENvbHVtbkJlZm9yZVwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIm1lbnUuYWRkQ29sdW1uQmVmb3JlLmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwicnVuKCRldmVudCwgJ2FkZENvbHVtbkJlZm9yZScpXCJcbiAgICAgICAgICAgICAgICBpMThuXG4gICAgICAgICAgICAgICAgPkluc8OpcmVyIHVuZSBjb2xvbm5lIGF2YW50XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBtYXQtbWVudS1pdGVtXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJtZW51LmFkZENvbHVtbkFmdGVyXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwibWVudS5hZGRDb2x1bW5BZnRlci5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInJ1bigkZXZlbnQsICdhZGRDb2x1bW5BZnRlcicpXCJcbiAgICAgICAgICAgICAgICBpMThuXG4gICAgICAgICAgICAgICAgPkluc8OpcmVyIHVuZSBjb2xvbm5lIGFwcsOoc1xuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgbWF0LW1lbnUtaXRlbVxuICAgICAgICAgICAgICAgICpuZ0lmPVwibWVudS5kZWxldGVDb2x1bW5cIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJtZW51LmRlbGV0ZUNvbHVtbi5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInJ1bigkZXZlbnQsICdkZWxldGVDb2x1bW4nKVwiXG4gICAgICAgICAgICAgICAgaTE4blxuICAgICAgICAgICAgICAgID5TdXBwcmltZXIgbGEgY29sb25uZVxuICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICAgIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxuXG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgbWF0LW1lbnUtaXRlbVxuICAgICAgICAgICAgICAgICpuZ0lmPVwibWVudS5hZGRSb3dCZWZvcmVcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJtZW51LmFkZFJvd0JlZm9yZS5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInJ1bigkZXZlbnQsICdhZGRSb3dCZWZvcmUnKVwiXG4gICAgICAgICAgICAgICAgaTE4blxuICAgICAgICAgICAgICAgID5JbnPDqXJlciB1bmUgbGlnbmUgYXZhbnRcbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIG1hdC1tZW51LWl0ZW1cbiAgICAgICAgICAgICAgICAqbmdJZj1cIm1lbnUuYWRkUm93QWZ0ZXJcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJtZW51LmFkZFJvd0FmdGVyLmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwicnVuKCRldmVudCwgJ2FkZFJvd0FmdGVyJylcIlxuICAgICAgICAgICAgICAgIGkxOG5cbiAgICAgICAgICAgICAgICA+SW5zw6lyZXIgdW5lIGxpZ25lIGFwcsOoc1xuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgbWF0LW1lbnUtaXRlbVxuICAgICAgICAgICAgICAgICpuZ0lmPVwibWVudS5kZWxldGVSb3dcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJtZW51LmRlbGV0ZVJvdy5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInJ1bigkZXZlbnQsICdkZWxldGVSb3cnKVwiXG4gICAgICAgICAgICAgICAgaTE4blxuICAgICAgICAgICAgICAgID5TdXBwcmltZXIgbGEgbGlnbmVcbiAgICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cblxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIG1hdC1tZW51LWl0ZW1cbiAgICAgICAgICAgICAgICAqbmdJZj1cIm1lbnUudG9nZ2xlSGVhZGVyQ29sdW1uXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwibWVudS50b2dnbGVIZWFkZXJDb2x1bW4uZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJydW4oJGV2ZW50LCAndG9nZ2xlSGVhZGVyQ29sdW1uJylcIlxuICAgICAgICAgICAgICAgIGkxOG5cbiAgICAgICAgICAgICAgICA+RW50w6p0ZSBkZSBjb2xvbm5lXG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBtYXQtbWVudS1pdGVtXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJtZW51LnRvZ2dsZUhlYWRlclJvd1wiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIm1lbnUudG9nZ2xlSGVhZGVyUm93LmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwicnVuKCRldmVudCwgJ3RvZ2dsZUhlYWRlclJvdycpXCJcbiAgICAgICAgICAgICAgICBpMThuXG4gICAgICAgICAgICAgICAgPkVudMOqdGUgZGUgbGlnbmVcbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIG1hdC1tZW51LWl0ZW1cbiAgICAgICAgICAgICAgICAqbmdJZj1cIm1lbnUudG9nZ2xlSGVhZGVyQ2VsbFwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIm1lbnUudG9nZ2xlSGVhZGVyQ2VsbC5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInJ1bigkZXZlbnQsICd0b2dnbGVIZWFkZXJDZWxsJylcIlxuICAgICAgICAgICAgICAgIGkxOG5cbiAgICAgICAgICAgICAgICA+RW50w6p0ZSBkZSBjZWxsdWxlXG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9tYXQtbWVudT5cblxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBtYXQtYnV0dG9uXG4gICAgICAgICAgICAqbmdJZj1cImltYWdlVXBsb2FkZXJcIlxuICAgICAgICAgICAgbmF0dXJhbEZpbGVEcm9wXG4gICAgICAgICAgICBbc2VsZWN0YWJsZV09XCJ0cnVlXCJcbiAgICAgICAgICAgIFticm9hZGNhc3RdPVwiZmFsc2VcIlxuICAgICAgICAgICAgaTE4bi1tYXRUb29sdGlwXG4gICAgICAgICAgICBtYXRUb29sdGlwPVwiSW5zw6lyZXIgdW5lIGltYWdlXCJcbiAgICAgICAgICAgIChmaWxlQ2hhbmdlKT1cInVwbG9hZCgkZXZlbnQpXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPG1hdC1pY29uPmluc2VydF9waG90bzwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgIDxtYXQtYnV0dG9uLXRvZ2dsZS1ncm91cCAqbmdJZj1cIm1lbnUuYWxpZ25MZWZ0XCI+XG4gICAgICAgICAgICA8bWF0LWJ1dHRvbi10b2dnbGVcbiAgICAgICAgICAgICAgICAqbmdJZj1cIm1lbnUuYWxpZ25MZWZ0XCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwibWVudS5hbGlnbkxlZnQuZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cIm1lbnUuYWxpZ25MZWZ0LmFjdGl2ZVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInJ1bigkZXZlbnQsICdhbGlnbkxlZnQnKVwiXG4gICAgICAgICAgICAgICAgaTE4bi1tYXRUb29sdGlwXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcD1cIkFsaWduZXIgZ2F1Y2hlXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24+Zm9ybWF0X2FsaWduX2xlZnQ8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9tYXQtYnV0dG9uLXRvZ2dsZT5cblxuICAgICAgICAgICAgPG1hdC1idXR0b24tdG9nZ2xlXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJtZW51LmFsaWduQ2VudGVyXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwibWVudS5hbGlnbkNlbnRlci5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwibWVudS5hbGlnbkNlbnRlci5hY3RpdmVcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJydW4oJGV2ZW50LCAnYWxpZ25DZW50ZXInKVwiXG4gICAgICAgICAgICAgICAgaTE4bi1tYXRUb29sdGlwXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcD1cIkNlbnRyZXJcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5mb3JtYXRfYWxpZ25fY2VudGVyPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvbWF0LWJ1dHRvbi10b2dnbGU+XG5cbiAgICAgICAgICAgIDxtYXQtYnV0dG9uLXRvZ2dsZVxuICAgICAgICAgICAgICAgICpuZ0lmPVwibWVudS5hbGlnblJpZ2h0XCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwibWVudS5hbGlnblJpZ2h0LmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJtZW51LmFsaWduUmlnaHQuYWN0aXZlXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwicnVuKCRldmVudCwgJ2FsaWduUmlnaHQnKVwiXG4gICAgICAgICAgICAgICAgaTE4bi1tYXRUb29sdGlwXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcD1cIkFsaWduZXIgZHJvaXRlXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24+Zm9ybWF0X2FsaWduX3JpZ2h0PC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvbWF0LWJ1dHRvbi10b2dnbGU+XG5cbiAgICAgICAgICAgIDxtYXQtYnV0dG9uLXRvZ2dsZVxuICAgICAgICAgICAgICAgICpuZ0lmPVwibWVudS5hbGlnbkp1c3RpZnlcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJtZW51LmFsaWduSnVzdGlmeS5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwibWVudS5hbGlnbkp1c3RpZnkuYWN0aXZlXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwicnVuKCRldmVudCwgJ2FsaWduSnVzdGlmeScpXCJcbiAgICAgICAgICAgICAgICBpMThuLW1hdFRvb2x0aXBcbiAgICAgICAgICAgICAgICBtYXRUb29sdGlwPVwiSnVzdGlmaWVyXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24+Zm9ybWF0X2FsaWduX2p1c3RpZnk8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9tYXQtYnV0dG9uLXRvZ2dsZT5cbiAgICAgICAgPC9tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cD5cblxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBtYXQtYnV0dG9uXG4gICAgICAgICAgICAqbmdJZj1cIm1lbnUudW5kb1wiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwibWVudS51bmRvLmRpc2FibGVkXCJcbiAgICAgICAgICAgIChjbGljayk9XCJydW4oJGV2ZW50LCAndW5kbycpXCJcbiAgICAgICAgICAgIGkxOG4tbWF0VG9vbHRpcFxuICAgICAgICAgICAgbWF0VG9vbHRpcD1cIkFubnVsZXJcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8bWF0LWljb24+dW5kbzwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIG1hdC1idXR0b25cbiAgICAgICAgICAgICpuZ0lmPVwibWVudS5yZWRvXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJtZW51LnJlZG8uZGlzYWJsZWRcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInJ1bigkZXZlbnQsICdyZWRvJylcIlxuICAgICAgICAgICAgaTE4bi1tYXRUb29sdGlwXG4gICAgICAgICAgICBtYXRUb29sdGlwPVwiUmVmYWlyZVwiXG4gICAgICAgID5cbiAgICAgICAgICAgIDxtYXQtaWNvbj5yZWRvPC9tYXQtaWNvbj5cbiAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgbWF0LWJ1dHRvblxuICAgICAgICAgICAgKm5nSWY9XCJtZW51LndyYXBCdWxsZXRMaXN0ICYmIG1lbnUud3JhcEJ1bGxldExpc3Quc2hvd1wiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwibWVudS53cmFwQnVsbGV0TGlzdC5kaXNhYmxlZFwiXG4gICAgICAgICAgICAoY2xpY2spPVwicnVuKCRldmVudCwgJ3dyYXBCdWxsZXRMaXN0JylcIlxuICAgICAgICAgICAgaTE4bi1tYXRUb29sdGlwXG4gICAgICAgICAgICBtYXRUb29sdGlwPVwiTGlzdGUgw6AgcHVjZVwiXG4gICAgICAgID5cbiAgICAgICAgICAgIDxtYXQtaWNvbj5mb3JtYXRfbGlzdF9idWxsZXRlZDwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIG1hdC1idXR0b25cbiAgICAgICAgICAgICpuZ0lmPVwibWVudS53cmFwT3JkZXJlZExpc3QgJiYgbWVudS53cmFwT3JkZXJlZExpc3Quc2hvd1wiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwibWVudS53cmFwT3JkZXJlZExpc3QuZGlzYWJsZWRcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInJ1bigkZXZlbnQsICd3cmFwT3JkZXJlZExpc3QnKVwiXG4gICAgICAgICAgICBpMThuLW1hdFRvb2x0aXBcbiAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJMaXN0ZSDDoCBudW3DqXJvXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPG1hdC1pY29uPmZvcm1hdF9saXN0X251bWJlcmVkPC9tYXQtaWNvbj5cbiAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgbWF0LWJ1dHRvblxuICAgICAgICAgICAgKm5nSWY9XCJtZW51LndyYXBCbG9ja1F1b3RlICYmIG1lbnUud3JhcEJsb2NrUXVvdGUuc2hvd1wiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwibWVudS53cmFwQmxvY2tRdW90ZS5kaXNhYmxlZFwiXG4gICAgICAgICAgICAoY2xpY2spPVwicnVuKCRldmVudCwgJ3dyYXBCbG9ja1F1b3RlJylcIlxuICAgICAgICAgICAgaTE4bi1tYXRUb29sdGlwXG4gICAgICAgICAgICBtYXRUb29sdGlwPVwiQ2l0YXRpb25cIlxuICAgICAgICA+XG4gICAgICAgICAgICA8bWF0LWljb24+Zm9ybWF0X3F1b3RlPC9tYXQtaWNvbj5cbiAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgbWF0LWJ1dHRvblxuICAgICAgICAgICAgKm5nSWY9XCJtZW51LmpvaW5VcCAmJiBtZW51LmpvaW5VcC5zaG93XCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJtZW51LmpvaW5VcC5kaXNhYmxlZFwiXG4gICAgICAgICAgICAoY2xpY2spPVwicnVuKCRldmVudCwgJ2pvaW5VcCcpXCJcbiAgICAgICAgICAgIGkxOG4tbWF0VG9vbHRpcFxuICAgICAgICAgICAgbWF0VG9vbHRpcD1cIkZ1c2lvbm5lciBhdmVjIGwnw6lsw6ltZW50IGR1IGhhdXRcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8bWF0LWljb24+bW92ZV91cDwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIG1hdC1idXR0b25cbiAgICAgICAgICAgICpuZ0lmPVwibWVudS5saWZ0ICYmIG1lbnUubGlmdC5zaG93XCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJtZW51LmxpZnQuZGlzYWJsZWRcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInJ1bigkZXZlbnQsICdsaWZ0JylcIlxuICAgICAgICAgICAgaTE4bi1tYXRUb29sdGlwXG4gICAgICAgICAgICBtYXRUb29sdGlwPVwiRMOpc2luZGVudGVyXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPG1hdC1pY29uPmZvcm1hdF9pbmRlbnRfZGVjcmVhc2U8L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBtYXQtYnV0dG9uXG4gICAgICAgICAgICAqbmdJZj1cIm1lbnUuc2VsZWN0UGFyZW50Tm9kZSAmJiBtZW51LnNlbGVjdFBhcmVudE5vZGUuc2hvd1wiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwibWVudS5zZWxlY3RQYXJlbnROb2RlLmRpc2FibGVkXCJcbiAgICAgICAgICAgIChjbGljayk9XCJydW4oJGV2ZW50LCAnc2VsZWN0UGFyZW50Tm9kZScpXCJcbiAgICAgICAgICAgIGkxOG4tbWF0VG9vbHRpcFxuICAgICAgICAgICAgbWF0VG9vbHRpcD1cIlPDqWxlY3Rpb25uZXIgbCfDqWzDqW1lbnQgcGFyZW50XCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPG1hdC1pY29uPnNlbGVjdF9hbGw8L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuPGRpdiAjZWRpdG9yPjwvZGl2PlxuIl19
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { ellipsis, emDash, inputRules, textblockTypeInputRule, wrappingInputRule, } from 'prosemirror-inputrules';
|
|
2
|
+
/**
|
|
3
|
+
* Given a blockquote node type, returns an input rule that turns `"> "`
|
|
4
|
+
* at the start of a textblock into a blockquote.
|
|
5
|
+
*/
|
|
6
|
+
function blockQuoteRule(nodeType) {
|
|
7
|
+
return wrappingInputRule(/^\s*>\s$/, nodeType);
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Given a list node type, returns an input rule that turns a number
|
|
11
|
+
* followed by a dot at the start of a textblock into an ordered list.
|
|
12
|
+
*/
|
|
13
|
+
function orderedListRule(nodeType) {
|
|
14
|
+
return wrappingInputRule(/^(\d+)\.\s$/, nodeType, match => ({ order: +match[1] }), (match, node) => node.childCount + node.attrs.order === +match[1]);
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Given a list node type, returns an input rule that turns a bullet
|
|
18
|
+
* (dash, plush, or asterisk) at the start of a textblock into a
|
|
19
|
+
* bullet list.
|
|
20
|
+
*/
|
|
21
|
+
function bulletListRule(nodeType) {
|
|
22
|
+
return wrappingInputRule(/^\s*([-+*])\s$/, nodeType);
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Given a code block node type, returns an input rule that turns a
|
|
26
|
+
* textblock starting with three backticks into a code block.
|
|
27
|
+
*/
|
|
28
|
+
function codeBlockRule(nodeType) {
|
|
29
|
+
return textblockTypeInputRule(/^```$/, nodeType);
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Given a node type and a maximum level, creates an input rule that
|
|
33
|
+
* turns up to that number of `#` characters followed by a space at
|
|
34
|
+
* the start of a textblock into a heading whose level corresponds to
|
|
35
|
+
* the number of `#` signs.
|
|
36
|
+
*/
|
|
37
|
+
function headingRule(nodeType, maxLevel) {
|
|
38
|
+
return textblockTypeInputRule(new RegExp('^(#{1,' + maxLevel + '})\\s$'), nodeType, match => ({
|
|
39
|
+
level: match[1].length,
|
|
40
|
+
}));
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* A set of input rules for creating the basic block quotes, lists,
|
|
44
|
+
* code blocks, and heading.
|
|
45
|
+
*/
|
|
46
|
+
export function buildInputRules(schema) {
|
|
47
|
+
const rules = [ellipsis, emDash];
|
|
48
|
+
let type = schema.nodes.blockquote;
|
|
49
|
+
if (type) {
|
|
50
|
+
rules.push(blockQuoteRule(type));
|
|
51
|
+
}
|
|
52
|
+
type = schema.nodes.ordered_list;
|
|
53
|
+
if (type) {
|
|
54
|
+
rules.push(orderedListRule(type));
|
|
55
|
+
}
|
|
56
|
+
type = schema.nodes.bullet_list;
|
|
57
|
+
if (type) {
|
|
58
|
+
rules.push(bulletListRule(type));
|
|
59
|
+
}
|
|
60
|
+
type = schema.nodes.code_block;
|
|
61
|
+
if (type) {
|
|
62
|
+
rules.push(codeBlockRule(type));
|
|
63
|
+
}
|
|
64
|
+
type = schema.nodes.heading;
|
|
65
|
+
if (type) {
|
|
66
|
+
rules.push(headingRule(type, 6));
|
|
67
|
+
}
|
|
68
|
+
return inputRules({ rules });
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXRydWxlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25hdHVyYWwtZWRpdG9yL3NyYy9saWIvdXRpbHMvaW5wdXRydWxlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsUUFBUSxFQUNSLE1BQU0sRUFFTixVQUFVLEVBQ1Ysc0JBQXNCLEVBQ3RCLGlCQUFpQixHQUNwQixNQUFNLHdCQUF3QixDQUFDO0FBSWhDOzs7R0FHRztBQUNILFNBQVMsY0FBYyxDQUFDLFFBQWtCO0lBQ3RDLE9BQU8saUJBQWlCLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQ25ELENBQUM7QUFFRDs7O0dBR0c7QUFDSCxTQUFTLGVBQWUsQ0FBQyxRQUFrQjtJQUN2QyxPQUFPLGlCQUFpQixDQUNwQixhQUFhLEVBQ2IsUUFBUSxFQUNSLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFDLEtBQUssRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQzdCLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FDcEUsQ0FBQztBQUNOLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBUyxjQUFjLENBQUMsUUFBa0I7SUFDdEMsT0FBTyxpQkFBaUIsQ0FBQyxnQkFBZ0IsRUFBRSxRQUFRLENBQUMsQ0FBQztBQUN6RCxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsU0FBUyxhQUFhLENBQUMsUUFBa0I7SUFDckMsT0FBTyxzQkFBc0IsQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDckQsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsU0FBUyxXQUFXLENBQUMsUUFBa0IsRUFBRSxRQUFnQjtJQUNyRCxPQUFPLHNCQUFzQixDQUFDLElBQUksTUFBTSxDQUFDLFFBQVEsR0FBRyxRQUFRLEdBQUcsUUFBUSxDQUFDLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUMxRixLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU07S0FDekIsQ0FBQyxDQUFDLENBQUM7QUFDUixDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLGVBQWUsQ0FBQyxNQUFjO0lBQzFDLE1BQU0sS0FBSyxHQUFHLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBRWpDLElBQUksSUFBSSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDO0lBQ25DLElBQUksSUFBSSxFQUFFO1FBQ04sS0FBSyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztLQUNwQztJQUVELElBQUksR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQztJQUNqQyxJQUFJLElBQUksRUFBRTtRQUNOLEtBQUssQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7S0FDckM7SUFFRCxJQUFJLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUM7SUFDaEMsSUFBSSxJQUFJLEVBQUU7UUFDTixLQUFLLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0tBQ3BDO0lBRUQsSUFBSSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDO0lBQy9CLElBQUksSUFBSSxFQUFFO1FBQ04sS0FBSyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztLQUNuQztJQUVELElBQUksR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQztJQUM1QixJQUFJLElBQUksRUFBRTtRQUNOLEtBQUssQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ3BDO0lBRUQsT0FBTyxVQUFVLENBQUMsRUFBQyxLQUFLLEVBQUMsQ0FBQyxDQUFDO0FBQy9CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIGVsbGlwc2lzLFxuICAgIGVtRGFzaCxcbiAgICBJbnB1dFJ1bGUsXG4gICAgaW5wdXRSdWxlcyxcbiAgICB0ZXh0YmxvY2tUeXBlSW5wdXRSdWxlLFxuICAgIHdyYXBwaW5nSW5wdXRSdWxlLFxufSBmcm9tICdwcm9zZW1pcnJvci1pbnB1dHJ1bGVzJztcbmltcG9ydCB7Tm9kZVR5cGUsIFNjaGVtYX0gZnJvbSAncHJvc2VtaXJyb3ItbW9kZWwnO1xuaW1wb3J0IHtQbHVnaW59IGZyb20gJ3Byb3NlbWlycm9yLXN0YXRlJztcblxuLyoqXG4gKiBHaXZlbiBhIGJsb2NrcXVvdGUgbm9kZSB0eXBlLCByZXR1cm5zIGFuIGlucHV0IHJ1bGUgdGhhdCB0dXJucyBgXCI+IFwiYFxuICogYXQgdGhlIHN0YXJ0IG9mIGEgdGV4dGJsb2NrIGludG8gYSBibG9ja3F1b3RlLlxuICovXG5mdW5jdGlvbiBibG9ja1F1b3RlUnVsZShub2RlVHlwZTogTm9kZVR5cGUpOiBJbnB1dFJ1bGUge1xuICAgIHJldHVybiB3cmFwcGluZ0lucHV0UnVsZSgvXlxccyo+XFxzJC8sIG5vZGVUeXBlKTtcbn1cblxuLyoqXG4gKiBHaXZlbiBhIGxpc3Qgbm9kZSB0eXBlLCByZXR1cm5zIGFuIGlucHV0IHJ1bGUgdGhhdCB0dXJucyBhIG51bWJlclxuICogZm9sbG93ZWQgYnkgYSBkb3QgYXQgdGhlIHN0YXJ0IG9mIGEgdGV4dGJsb2NrIGludG8gYW4gb3JkZXJlZCBsaXN0LlxuICovXG5mdW5jdGlvbiBvcmRlcmVkTGlzdFJ1bGUobm9kZVR5cGU6IE5vZGVUeXBlKTogSW5wdXRSdWxlIHtcbiAgICByZXR1cm4gd3JhcHBpbmdJbnB1dFJ1bGUoXG4gICAgICAgIC9eKFxcZCspXFwuXFxzJC8sXG4gICAgICAgIG5vZGVUeXBlLFxuICAgICAgICBtYXRjaCA9PiAoe29yZGVyOiArbWF0Y2hbMV19KSxcbiAgICAgICAgKG1hdGNoLCBub2RlKSA9PiBub2RlLmNoaWxkQ291bnQgKyBub2RlLmF0dHJzLm9yZGVyID09PSArbWF0Y2hbMV0sXG4gICAgKTtcbn1cblxuLyoqXG4gKiBHaXZlbiBhIGxpc3Qgbm9kZSB0eXBlLCByZXR1cm5zIGFuIGlucHV0IHJ1bGUgdGhhdCB0dXJucyBhIGJ1bGxldFxuICogKGRhc2gsIHBsdXNoLCBvciBhc3RlcmlzaykgYXQgdGhlIHN0YXJ0IG9mIGEgdGV4dGJsb2NrIGludG8gYVxuICogYnVsbGV0IGxpc3QuXG4gKi9cbmZ1bmN0aW9uIGJ1bGxldExpc3RSdWxlKG5vZGVUeXBlOiBOb2RlVHlwZSk6IElucHV0UnVsZSB7XG4gICAgcmV0dXJuIHdyYXBwaW5nSW5wdXRSdWxlKC9eXFxzKihbLSsqXSlcXHMkLywgbm9kZVR5cGUpO1xufVxuXG4vKipcbiAqIEdpdmVuIGEgY29kZSBibG9jayBub2RlIHR5cGUsIHJldHVybnMgYW4gaW5wdXQgcnVsZSB0aGF0IHR1cm5zIGFcbiAqIHRleHRibG9jayBzdGFydGluZyB3aXRoIHRocmVlIGJhY2t0aWNrcyBpbnRvIGEgY29kZSBibG9jay5cbiAqL1xuZnVuY3Rpb24gY29kZUJsb2NrUnVsZShub2RlVHlwZTogTm9kZVR5cGUpOiBJbnB1dFJ1bGUge1xuICAgIHJldHVybiB0ZXh0YmxvY2tUeXBlSW5wdXRSdWxlKC9eYGBgJC8sIG5vZGVUeXBlKTtcbn1cblxuLyoqXG4gKiBHaXZlbiBhIG5vZGUgdHlwZSBhbmQgYSBtYXhpbXVtIGxldmVsLCBjcmVhdGVzIGFuIGlucHV0IHJ1bGUgdGhhdFxuICogdHVybnMgdXAgdG8gdGhhdCBudW1iZXIgb2YgYCNgIGNoYXJhY3RlcnMgZm9sbG93ZWQgYnkgYSBzcGFjZSBhdFxuICogdGhlIHN0YXJ0IG9mIGEgdGV4dGJsb2NrIGludG8gYSBoZWFkaW5nIHdob3NlIGxldmVsIGNvcnJlc3BvbmRzIHRvXG4gKiB0aGUgbnVtYmVyIG9mIGAjYCBzaWducy5cbiAqL1xuZnVuY3Rpb24gaGVhZGluZ1J1bGUobm9kZVR5cGU6IE5vZGVUeXBlLCBtYXhMZXZlbDogbnVtYmVyKTogSW5wdXRSdWxlIHtcbiAgICByZXR1cm4gdGV4dGJsb2NrVHlwZUlucHV0UnVsZShuZXcgUmVnRXhwKCdeKCN7MSwnICsgbWF4TGV2ZWwgKyAnfSlcXFxccyQnKSwgbm9kZVR5cGUsIG1hdGNoID0+ICh7XG4gICAgICAgIGxldmVsOiBtYXRjaFsxXS5sZW5ndGgsXG4gICAgfSkpO1xufVxuXG4vKipcbiAqIEEgc2V0IG9mIGlucHV0IHJ1bGVzIGZvciBjcmVhdGluZyB0aGUgYmFzaWMgYmxvY2sgcXVvdGVzLCBsaXN0cyxcbiAqIGNvZGUgYmxvY2tzLCBhbmQgaGVhZGluZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkSW5wdXRSdWxlcyhzY2hlbWE6IFNjaGVtYSk6IFBsdWdpbiB7XG4gICAgY29uc3QgcnVsZXMgPSBbZWxsaXBzaXMsIGVtRGFzaF07XG5cbiAgICBsZXQgdHlwZSA9IHNjaGVtYS5ub2Rlcy5ibG9ja3F1b3RlO1xuICAgIGlmICh0eXBlKSB7XG4gICAgICAgIHJ1bGVzLnB1c2goYmxvY2tRdW90ZVJ1bGUodHlwZSkpO1xuICAgIH1cblxuICAgIHR5cGUgPSBzY2hlbWEubm9kZXMub3JkZXJlZF9saXN0O1xuICAgIGlmICh0eXBlKSB7XG4gICAgICAgIHJ1bGVzLnB1c2gob3JkZXJlZExpc3RSdWxlKHR5cGUpKTtcbiAgICB9XG5cbiAgICB0eXBlID0gc2NoZW1hLm5vZGVzLmJ1bGxldF9saXN0O1xuICAgIGlmICh0eXBlKSB7XG4gICAgICAgIHJ1bGVzLnB1c2goYnVsbGV0TGlzdFJ1bGUodHlwZSkpO1xuICAgIH1cblxuICAgIHR5cGUgPSBzY2hlbWEubm9kZXMuY29kZV9ibG9jaztcbiAgICBpZiAodHlwZSkge1xuICAgICAgICBydWxlcy5wdXNoKGNvZGVCbG9ja1J1bGUodHlwZSkpO1xuICAgIH1cblxuICAgIHR5cGUgPSBzY2hlbWEubm9kZXMuaGVhZGluZztcbiAgICBpZiAodHlwZSkge1xuICAgICAgICBydWxlcy5wdXNoKGhlYWRpbmdSdWxlKHR5cGUsIDYpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gaW5wdXRSdWxlcyh7cnVsZXN9KTtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* One item of the menu.
|
|
3
|
+
*
|
|
4
|
+
* This is the equivalent of `MenuItem` but without all the rendering logic since we use Angular
|
|
5
|
+
* templates for rendering. Also it caches the state of the item everytime the editor state changes,
|
|
6
|
+
* so Angular can query the state as often as needed without performance hit.
|
|
7
|
+
*/
|
|
8
|
+
export class Item {
|
|
9
|
+
constructor(spec) {
|
|
10
|
+
this.spec = spec;
|
|
11
|
+
/**
|
|
12
|
+
* Whether the item is 'active' (for example, the item for toggling the strong mark might be active when the cursor is in strong text).
|
|
13
|
+
*/
|
|
14
|
+
this.active = false;
|
|
15
|
+
/**
|
|
16
|
+
* Button is shown but disabled, because the item cannot be (un-)applied
|
|
17
|
+
*/
|
|
18
|
+
this.disabled = false;
|
|
19
|
+
/**
|
|
20
|
+
* Whether the item is shown at the moment
|
|
21
|
+
*/
|
|
22
|
+
this.show = true;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Update the item state according to the editor state
|
|
26
|
+
*/
|
|
27
|
+
update(view, state) {
|
|
28
|
+
if (this.spec.active) {
|
|
29
|
+
this.active = this.spec.active(state);
|
|
30
|
+
}
|
|
31
|
+
if (this.spec.enable) {
|
|
32
|
+
this.disabled = !this.spec.enable(state);
|
|
33
|
+
}
|
|
34
|
+
if (this.spec.select) {
|
|
35
|
+
this.show = this.spec.select(state);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXRlbS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25hdHVyYWwtZWRpdG9yL3NyYy9saWIvdXRpbHMvaXRlbS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFJQTs7Ozs7O0dBTUc7QUFDSCxNQUFNLE9BQU8sSUFBSTtJQWdCYixZQUE0QixJQUFrQjtRQUFsQixTQUFJLEdBQUosSUFBSSxDQUFjO1FBZjlDOztXQUVHO1FBQ0ksV0FBTSxHQUFHLEtBQUssQ0FBQztRQUV0Qjs7V0FFRztRQUNJLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFFeEI7O1dBRUc7UUFDSSxTQUFJLEdBQUcsSUFBSSxDQUFDO0lBRThCLENBQUM7SUFFbEQ7O09BRUc7SUFDSSxNQUFNLENBQUMsSUFBZ0IsRUFBRSxLQUFrQjtRQUM5QyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ2xCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDekM7UUFFRCxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ2xCLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUM1QztRQUVELElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDbEIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUN2QztJQUNMLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7TWVudUl0ZW1TcGVjfSBmcm9tICdwcm9zZW1pcnJvci1tZW51JztcbmltcG9ydCB7RWRpdG9yU3RhdGV9IGZyb20gJ3Byb3NlbWlycm9yLXN0YXRlJztcbmltcG9ydCB7RWRpdG9yVmlld30gZnJvbSAncHJvc2VtaXJyb3Itdmlldyc7XG5cbi8qKlxuICogT25lIGl0ZW0gb2YgdGhlIG1lbnUuXG4gKlxuICogVGhpcyBpcyB0aGUgZXF1aXZhbGVudCBvZiBgTWVudUl0ZW1gIGJ1dCB3aXRob3V0IGFsbCB0aGUgcmVuZGVyaW5nIGxvZ2ljIHNpbmNlIHdlIHVzZSBBbmd1bGFyXG4gKiB0ZW1wbGF0ZXMgZm9yIHJlbmRlcmluZy4gQWxzbyBpdCBjYWNoZXMgdGhlIHN0YXRlIG9mIHRoZSBpdGVtIGV2ZXJ5dGltZSB0aGUgZWRpdG9yIHN0YXRlIGNoYW5nZXMsXG4gKiBzbyBBbmd1bGFyIGNhbiBxdWVyeSB0aGUgc3RhdGUgYXMgb2Z0ZW4gYXMgbmVlZGVkIHdpdGhvdXQgcGVyZm9ybWFuY2UgaGl0LlxuICovXG5leHBvcnQgY2xhc3MgSXRlbSB7XG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGUgaXRlbSBpcyAnYWN0aXZlJyAoZm9yIGV4YW1wbGUsIHRoZSBpdGVtIGZvciB0b2dnbGluZyB0aGUgc3Ryb25nIG1hcmsgbWlnaHQgYmUgYWN0aXZlIHdoZW4gdGhlIGN1cnNvciBpcyBpbiBzdHJvbmcgdGV4dCkuXG4gICAgICovXG4gICAgcHVibGljIGFjdGl2ZSA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogQnV0dG9uIGlzIHNob3duIGJ1dCBkaXNhYmxlZCwgYmVjYXVzZSB0aGUgaXRlbSBjYW5ub3QgYmUgKHVuLSlhcHBsaWVkXG4gICAgICovXG4gICAgcHVibGljIGRpc2FibGVkID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoZSBpdGVtIGlzIHNob3duIGF0IHRoZSBtb21lbnRcbiAgICAgKi9cbiAgICBwdWJsaWMgc2hvdyA9IHRydWU7XG5cbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgcmVhZG9ubHkgc3BlYzogTWVudUl0ZW1TcGVjKSB7fVxuXG4gICAgLyoqXG4gICAgICogVXBkYXRlIHRoZSBpdGVtIHN0YXRlIGFjY29yZGluZyB0byB0aGUgZWRpdG9yIHN0YXRlXG4gICAgICovXG4gICAgcHVibGljIHVwZGF0ZSh2aWV3OiBFZGl0b3JWaWV3LCBzdGF0ZTogRWRpdG9yU3RhdGUpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuc3BlYy5hY3RpdmUpIHtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlID0gdGhpcy5zcGVjLmFjdGl2ZShzdGF0ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5zcGVjLmVuYWJsZSkge1xuICAgICAgICAgICAgdGhpcy5kaXNhYmxlZCA9ICF0aGlzLnNwZWMuZW5hYmxlKHN0YXRlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnNwZWMuc2VsZWN0KSB7XG4gICAgICAgICAgICB0aGlzLnNob3cgPSB0aGlzLnNwZWMuc2VsZWN0KHN0YXRlKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import { chainCommands, exitCode, joinDown, joinUp, lift, selectParentNode, setBlockType, toggleMark, wrapIn, } from 'prosemirror-commands';
|
|
2
|
+
import { liftListItem, sinkListItem, splitListItem, wrapInList } from 'prosemirror-schema-list';
|
|
3
|
+
import { redo, undo } from 'prosemirror-history';
|
|
4
|
+
import { undoInputRule } from 'prosemirror-inputrules';
|
|
5
|
+
/**
|
|
6
|
+
* Inspect the given schema looking for marks and nodes from the
|
|
7
|
+
* basic schema, and if found, add key bindings related to them.
|
|
8
|
+
* This will add:
|
|
9
|
+
*
|
|
10
|
+
* * **Mod-b** for toggling [strong](#schema-basic.StrongMark)
|
|
11
|
+
* * **Mod-i** for toggling [emphasis](#schema-basic.EmMark)
|
|
12
|
+
* * **Mod-`** for toggling [code font](#schema-basic.CodeMark)
|
|
13
|
+
* * **Ctrl-Shift-0** for making the current textblock a paragraph
|
|
14
|
+
* * **Ctrl-Shift-1** to **Ctrl-Shift-Digit6** for making the current
|
|
15
|
+
* textblock a heading of the corresponding level
|
|
16
|
+
* * **Ctrl-Shift-Backslash** to make the current textblock a code block
|
|
17
|
+
* * **Ctrl-Shift-8** to wrap the selection in an ordered list
|
|
18
|
+
* * **Ctrl-Shift-9** to wrap the selection in a bullet list
|
|
19
|
+
* * **Ctrl->** to wrap the selection in a block quote
|
|
20
|
+
* * **Enter** to split a non-empty textblock in a list item while at
|
|
21
|
+
* the same time splitting the list item
|
|
22
|
+
* * **Mod-Enter** to insert a hard break
|
|
23
|
+
* * **Mod-_** to insert a horizontal rule
|
|
24
|
+
* * **Backspace** to undo an input rule
|
|
25
|
+
* * **Alt-ArrowUp** to `joinUp`
|
|
26
|
+
* * **Alt-ArrowDown** to `joinDown`
|
|
27
|
+
* * **Mod-BracketLeft** to `lift`
|
|
28
|
+
* * **Escape** to `selectParentNode`
|
|
29
|
+
*
|
|
30
|
+
* You can suppress or map these bindings by passing a `mapKeys`
|
|
31
|
+
* argument, which maps key names (say `"Mod-B"` to either `false`, to
|
|
32
|
+
* remove the binding, or a new key name string.
|
|
33
|
+
*/
|
|
34
|
+
export function buildKeymap(schema, isMac) {
|
|
35
|
+
const keys = {};
|
|
36
|
+
keys['Mod-z'] = undo;
|
|
37
|
+
keys['Shift-Mod-z'] = redo;
|
|
38
|
+
keys['Backspace'] = undoInputRule;
|
|
39
|
+
if (!isMac) {
|
|
40
|
+
keys['Mod-y'] = redo;
|
|
41
|
+
}
|
|
42
|
+
keys['Alt-ArrowUp'] = joinUp;
|
|
43
|
+
keys['Alt-ArrowDown'] = joinDown;
|
|
44
|
+
keys['Mod-BracketLeft'] = lift;
|
|
45
|
+
keys['Escape'] = selectParentNode;
|
|
46
|
+
let type = schema.marks.strong;
|
|
47
|
+
if (type) {
|
|
48
|
+
keys['Mod-b'] = toggleMark(type);
|
|
49
|
+
keys['Mod-B'] = toggleMark(type);
|
|
50
|
+
}
|
|
51
|
+
type = schema.marks.em;
|
|
52
|
+
if (type) {
|
|
53
|
+
keys['Mod-i'] = toggleMark(type);
|
|
54
|
+
keys['Mod-I'] = toggleMark(type);
|
|
55
|
+
}
|
|
56
|
+
type = schema.marks.code;
|
|
57
|
+
if (type) {
|
|
58
|
+
keys['Mod-`'] = toggleMark(type);
|
|
59
|
+
}
|
|
60
|
+
type = schema.nodes.bullet_list;
|
|
61
|
+
if (type) {
|
|
62
|
+
keys['Shift-Ctrl-8'] = wrapInList(type);
|
|
63
|
+
}
|
|
64
|
+
type = schema.nodes.ordered_list;
|
|
65
|
+
if (type) {
|
|
66
|
+
keys['Shift-Ctrl-9'] = wrapInList(type);
|
|
67
|
+
}
|
|
68
|
+
type = schema.nodes.blockquote;
|
|
69
|
+
if (type) {
|
|
70
|
+
keys['Ctrl->'] = wrapIn(type);
|
|
71
|
+
}
|
|
72
|
+
type = schema.nodes.hard_break;
|
|
73
|
+
if (type) {
|
|
74
|
+
const br = type;
|
|
75
|
+
const cmd = chainCommands(exitCode, (state, dispatch) => {
|
|
76
|
+
dispatch === null || dispatch === void 0 ? void 0 : dispatch(state.tr.replaceSelectionWith(br.create()).scrollIntoView());
|
|
77
|
+
return true;
|
|
78
|
+
});
|
|
79
|
+
keys['Mod-Enter'] = cmd;
|
|
80
|
+
keys['Shift-Enter'] = cmd;
|
|
81
|
+
if (isMac) {
|
|
82
|
+
keys['Ctrl-Enter'] = cmd;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
type = schema.nodes.list_item;
|
|
86
|
+
if (type) {
|
|
87
|
+
keys['Enter'] = splitListItem(type);
|
|
88
|
+
keys['Mod-['] = liftListItem(type);
|
|
89
|
+
keys['Mod-]'] = sinkListItem(type);
|
|
90
|
+
}
|
|
91
|
+
type = schema.nodes.paragraph;
|
|
92
|
+
if (type) {
|
|
93
|
+
keys['Shift-Ctrl-0'] = setBlockType(type);
|
|
94
|
+
}
|
|
95
|
+
type = schema.nodes.code_block;
|
|
96
|
+
if (type) {
|
|
97
|
+
keys['Shift-Ctrl-\\'] = setBlockType(type);
|
|
98
|
+
}
|
|
99
|
+
type = schema.nodes.heading;
|
|
100
|
+
if (type) {
|
|
101
|
+
for (let i = 1; i <= 6; i++) {
|
|
102
|
+
keys['Shift-Ctrl-' + i] = setBlockType(type, { level: i });
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
type = schema.nodes.horizontal_rule;
|
|
106
|
+
if (type) {
|
|
107
|
+
const hr = type;
|
|
108
|
+
keys['Mod-_'] = (state, dispatch) => {
|
|
109
|
+
dispatch === null || dispatch === void 0 ? void 0 : dispatch(state.tr.replaceSelectionWith(hr.create()).scrollIntoView());
|
|
110
|
+
return true;
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
return keys;
|
|
114
|
+
}
|
|
115
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5bWFwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmF0dXJhbC1lZGl0b3Ivc3JjL2xpYi91dGlscy9rZXltYXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILGFBQWEsRUFDYixRQUFRLEVBQ1IsUUFBUSxFQUNSLE1BQU0sRUFFTixJQUFJLEVBQ0osZ0JBQWdCLEVBQ2hCLFlBQVksRUFDWixVQUFVLEVBQ1YsTUFBTSxHQUNULE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUFDLFlBQVksRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLFVBQVUsRUFBQyxNQUFNLHlCQUF5QixDQUFDO0FBQzlGLE9BQU8sRUFBQyxJQUFJLEVBQUUsSUFBSSxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDL0MsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBR3JEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBNEJHO0FBQ0gsTUFBTSxVQUFVLFdBQVcsQ0FBQyxNQUFjLEVBQUUsS0FBYztJQUN0RCxNQUFNLElBQUksR0FBVyxFQUFFLENBQUM7SUFFeEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQztJQUNyQixJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsSUFBSSxDQUFDO0lBQzNCLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxhQUFhLENBQUM7SUFDbEMsSUFBSSxDQUFDLEtBQUssRUFBRTtRQUNSLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUM7S0FDeEI7SUFFRCxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsTUFBTSxDQUFDO0lBQzdCLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxRQUFRLENBQUM7SUFDakMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsSUFBSSxDQUFDO0lBQy9CLElBQUksQ0FBQyxRQUFRLENBQUMsR0FB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QUksRUFBRTtRQUNOLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDOUM7SUFFRCxJQUFJLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUM7SUFDNUIsSUFBSSxJQUFJLEVBQUU7UUFDTixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3pCLElBQUksQ0FBQyxhQUFhLEdBQUcsQ0FBQyxDQUFDLEdBQUcsWUFBWSxDQUFDLElBQUksRUFBRSxFQUFDLEtBQUssRUFBRSxDQUFDLEVBQUMsQ0FBQyxDQUFDO1NBQzVEO0tBQ0o7SUFFRCxJQUFJLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUM7SUFDcEMsSUFBSSxJQUFJLEVBQUU7UUFDTixNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUM7UUFDaEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxFQUFFO1lBQ2hDLFFBQVEsYUFBUixRQUFRLHVCQUFSLFFBQVEsQ0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDLG9CQUFvQixDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUM7WUFDeEUsT0FBTyxJQUFJLENBQUM7UUFDaEIsQ0FBQyxDQUFDO0tBQ0w7SUFFRCxPQUFPLElBQUksQ0FBQztBQUNoQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBjaGFpbkNvbW1hbmRzLFxuICAgIGV4aXRDb2RlLFxuICAgIGpvaW5Eb3duLFxuICAgIGpvaW5VcCxcbiAgICBLZXltYXAsXG4gICAgbGlmdCxcbiAgICBzZWxlY3RQYXJlbnROb2RlLFxuICAgIHNldEJsb2NrVHlwZSxcbiAgICB0b2dnbGVNYXJrLFxuICAgIHdyYXBJbixcbn0gZnJvbSAncHJvc2VtaXJyb3ItY29tbWFuZHMnO1xuaW1wb3J0IHtsaWZ0TGlzdEl0ZW0sIHNpbmtMaXN0SXRlbSwgc3BsaXRMaXN0SXRlbSwgd3JhcEluTGlzdH0gZnJvbSAncHJvc2VtaXJyb3Itc2NoZW1hLWxpc3QnO1xuaW1wb3J0IHtyZWRvLCB1bmRvfSBmcm9tICdwcm9zZW1pcnJvci1oaXN0b3J5JztcbmltcG9ydCB7dW5kb0lucHV0UnVsZX0gZnJvbSAncHJvc2VtaXJyb3ItaW5wdXRydWxlcyc7XG5pbXBvcnQge01hcmtUeXBlLCBOb2RlVHlwZSwgU2NoZW1hfSBmcm9tICdwcm9zZW1pcnJvci1tb2RlbCc7XG5cbi8qKlxuICogSW5zcGVjdCB0aGUgZ2l2ZW4gc2NoZW1hIGxvb2tpbmcgZm9yIG1hcmtzIGFuZCBub2RlcyBmcm9tIHRoZVxuICogYmFzaWMgc2NoZW1hLCBhbmQgaWYgZm91bmQsIGFkZCBrZXkgYmluZGluZ3MgcmVsYXRlZCB0byB0aGVtLlxuICogVGhpcyB3aWxsIGFkZDpcbiAqXG4gKiAqICoqTW9kLWIqKiBmb3IgdG9nZ2xpbmcgW3N0cm9uZ10oI3NjaGVtYS1iYXNpYy5TdHJvbmdNYXJrKVxuICogKiAqKk1vZC1pKiogZm9yIHRvZ2dsaW5nIFtlbXBoYXNpc10oI3NjaGVtYS1iYXNpYy5FbU1hcmspXG4gKiAqICoqTW9kLWAqKiBmb3IgdG9nZ2xpbmcgW2NvZGUgZm9udF0oI3NjaGVtYS1iYXNpYy5Db2RlTWFyaylcbiAqICogKipDdHJsLVNoaWZ0LTAqKiBmb3IgbWFraW5nIHRoZSBjdXJyZW50IHRleHRibG9jayBhIHBhcmFncmFwaFxuICogKiAqKkN0cmwtU2hpZnQtMSoqIHRvICoqQ3RybC1TaGlmdC1EaWdpdDYqKiBmb3IgbWFraW5nIHRoZSBjdXJyZW50XG4gKiAgIHRleHRibG9jayBhIGhlYWRpbmcgb2YgdGhlIGNvcnJlc3BvbmRpbmcgbGV2ZWxcbiAqICogKipDdHJsLVNoaWZ0LUJhY2tzbGFzaCoqIHRvIG1ha2UgdGhlIGN1cnJlbnQgdGV4dGJsb2NrIGEgY29kZSBibG9ja1xuICogKiAqKkN0cmwtU2hpZnQtOCoqIHRvIHdyYXAgdGhlIHNlbGVjdGlvbiBpbiBhbiBvcmRlcmVkIGxpc3RcbiAqICogKipDdHJsLVNoaWZ0LTkqKiB0byB3cmFwIHRoZSBzZWxlY3Rpb24gaW4gYSBidWxsZXQgbGlzdFxuICogKiAqKkN0cmwtPioqIHRvIHdyYXAgdGhlIHNlbGVjdGlvbiBpbiBhIGJsb2NrIHF1b3RlXG4gKiAqICoqRW50ZXIqKiB0byBzcGxpdCBhIG5vbi1lbXB0eSB0ZXh0YmxvY2sgaW4gYSBsaXN0IGl0ZW0gd2hpbGUgYXRcbiAqICAgdGhlIHNhbWUgdGltZSBzcGxpdHRpbmcgdGhlIGxpc3QgaXRlbVxuICogKiAqKk1vZC1FbnRlcioqIHRvIGluc2VydCBhIGhhcmQgYnJlYWtcbiAqICogKipNb2QtXyoqIHRvIGluc2VydCBhIGhvcml6b250YWwgcnVsZVxuICogKiAqKkJhY2tzcGFjZSoqIHRvIHVuZG8gYW4gaW5wdXQgcnVsZVxuICogKiAqKkFsdC1BcnJvd1VwKiogdG8gYGpvaW5VcGBcbiAqICogKipBbHQtQXJyb3dEb3duKiogdG8gYGpvaW5Eb3duYFxuICogKiAqKk1vZC1CcmFja2V0TGVmdCoqIHRvIGBsaWZ0YFxuICogKiAqKkVzY2FwZSoqIHRvIGBzZWxlY3RQYXJlbnROb2RlYFxuICpcbiAqIFlvdSBjYW4gc3VwcHJlc3Mgb3IgbWFwIHRoZXNlIGJpbmRpbmdzIGJ5IHBhc3NpbmcgYSBgbWFwS2V5c2BcbiAqIGFyZ3VtZW50LCB3aGljaCBtYXBzIGtleSBuYW1lcyAoc2F5IGBcIk1vZC1CXCJgIHRvIGVpdGhlciBgZmFsc2VgLCB0b1xuICogcmVtb3ZlIHRoZSBiaW5kaW5nLCBvciBhIG5ldyBrZXkgbmFtZSBzdHJpbmcuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZEtleW1hcChzY2hlbWE6IFNjaGVtYSwgaXNNYWM6IGJvb2xlYW4pOiBLZXltYXAge1xuICAgIGNvbnN0IGtleXM6IEtleW1hcCA9IHt9O1xuXG4gICAga2V5c1snTW9kLXonXSA9IHVuZG87XG4gICAga2V5c1snU2hpZnQtTW9kLXonXSA9IHJlZG87XG4gICAga2V5c1snQmFja3NwYWNlJ10gPSB1bmRvSW5wdXRSdWxlO1xuICAgIGlmICghaXNNYWMpIHtcbiAgICAgICAga2V5c1snTW9kLXknXSA9IHJlZG87XG4gICAgfVxuXG4gICAga2V5c1snQWx0LUFycm93VXAnXSA9IGpvaW5VcDtcbiAgICBrZXlzWydBbHQtQXJyb3dEb3duJ10gPSBqb2luRG93bjtcbiAgICBrZXlzWydNb2QtQnJhY2tldExlZnQnXSA9IGxpZnQ7XG4gICAga2V5c1snRXNjYXBlJ10gPSBzZWxlY3RQYXJlbnROb2RlO1xuXG4gICAgbGV0IHR5cGU6IE1hcmtUeXBlIHwgTm9kZVR5cGUgPSBzY2hlbWEubWFya3Muc3Ryb25nO1xuICAgIGlmICh0eXBlKSB7XG4gICAgICAgIGtleXNbJ01vZC1iJ10gPSB0b2dnbGVNYXJrKHR5cGUpO1xuICAgICAgICBrZXlzWydNb2QtQiddID0gdG9nZ2xlTWFyayh0eXBlKTtcbiAgICB9XG5cbiAgICB0eXBlID0gc2NoZW1hLm1hcmtzLmVtO1xuICAgIGlmICh0eXBlKSB7XG4gICAgICAgIGtleXNbJ01vZC1pJ10gPSB0b2dnbGVNYXJrKHR5cGUpO1xuICAgICAgICBrZXlzWydNb2QtSSddID0gdG9nZ2xlTWFyayh0eXBlKTtcbiAgICB9XG5cbiAgICB0eXBlID0gc2NoZW1hLm1hcmtzLmNvZGU7XG4gICAgaWYgKHR5cGUpIHtcbiAgICAgICAga2V5c1snTW9kLWAnXSA9IHRvZ2dsZU1hcmsodHlwZSk7XG4gICAgfVxuXG4gICAgdHlwZSA9IHNjaGVtYS5ub2Rlcy5idWxsZXRfbGlzdDtcbiAgICBpZiAodHlwZSkge1xuICAgICAgICBrZXlzWydTaGlmdC1DdHJsLTgnXSA9IHdyYXBJbkxpc3QodHlwZSk7XG4gICAgfVxuXG4gICAgdHlwZSA9IHNjaGVtYS5ub2Rlcy5vcmRlcmVkX2xpc3Q7XG4gICAgaWYgKHR5cGUpIHtcbiAgICAgICAga2V5c1snU2hpZnQtQ3RybC05J10gPSB3cmFwSW5MaXN0KHR5cGUpO1xuICAgIH1cblxuICAgIHR5cGUgPSBzY2hlbWEubm9kZXMuYmxvY2txdW90ZTtcbiAgICBpZiAodHlwZSkge1xuICAgICAgICBrZXlzWydDdHJsLT4nXSA9IHdyYXBJbih0eXBlKTtcbiAgICB9XG5cbiAgICB0eXBlID0gc2NoZW1hLm5vZGVzLmhhcmRfYnJlYWs7XG4gICAgaWYgKHR5cGUpIHtcbiAgICAgICAgY29uc3QgYnIgPSB0eXBlO1xuICAgICAgICBjb25zdCBjbWQgPSBjaGFpbkNvbW1hbmRzKGV4aXRDb2RlLCAoc3RhdGUsIGRpc3BhdGNoKSA9PiB7XG4gICAgICAgICAgICBkaXNwYXRjaD8uKHN0YXRlLnRyLnJlcGxhY2VTZWxlY3Rpb25XaXRoKGJyLmNyZWF0ZSgpKS5zY3JvbGxJbnRvVmlldygpKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9KTtcbiAgICAgICAga2V5c1snTW9kLUVudGVyJ10gPSBjbWQ7XG4gICAgICAgIGtleXNbJ1NoaWZ0LUVudGVyJ10gPSBjbWQ7XG4gICAgICAgIGlmIChpc01hYykge1xuICAgICAgICAgICAga2V5c1snQ3RybC1FbnRlciddID0gY21kO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdHlwZSA9IHNjaGVtYS5ub2Rlcy5saXN0X2l0ZW07XG4gICAgaWYgKHR5cGUpIHtcbiAgICAgICAga2V5c1snRW50ZXInXSA9IHNwbGl0TGlzdEl0ZW0odHlwZSk7XG4gICAgICAgIGtleXNbJ01vZC1bJ10gPSBsaWZ0TGlzdEl0ZW0odHlwZSk7XG4gICAgICAgIGtleXNbJ01vZC1dJ10gPSBzaW5rTGlzdEl0ZW0odHlwZSk7XG4gICAgfVxuXG4gICAgdHlwZSA9IHNjaGVtYS5ub2Rlcy5wYXJhZ3JhcGg7XG4gICAgaWYgKHR5cGUpIHtcbiAgICAgICAga2V5c1snU2hpZnQtQ3RybC0wJ10gPSBzZXRCbG9ja1R5cGUodHlwZSk7XG4gICAgfVxuXG4gICAgdHlwZSA9IHNjaGVtYS5ub2Rlcy5jb2RlX2Jsb2NrO1xuICAgIGlmICh0eXBlKSB7XG4gICAgICAgIGtleXNbJ1NoaWZ0LUN0cmwtXFxcXCddID0gc2V0QmxvY2tUeXBlKHR5cGUpO1xuICAgIH1cblxuICAgIHR5cGUgPSBzY2hlbWEubm9kZXMuaGVhZGluZztcbiAgICBpZiAodHlwZSkge1xuICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8PSA2OyBpKyspIHtcbiAgICAgICAgICAgIGtleXNbJ1NoaWZ0LUN0cmwtJyArIGldID0gc2V0QmxvY2tUeXBlKHR5cGUsIHtsZXZlbDogaX0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdHlwZSA9IHNjaGVtYS5ub2Rlcy5ob3Jpem9udGFsX3J1bGU7XG4gICAgaWYgKHR5cGUpIHtcbiAgICAgICAgY29uc3QgaHIgPSB0eXBlO1xuICAgICAgICBrZXlzWydNb2QtXyddID0gKHN0YXRlLCBkaXNwYXRjaCkgPT4ge1xuICAgICAgICAgICAgZGlzcGF0Y2g/LihzdGF0ZS50ci5yZXBsYWNlU2VsZWN0aW9uV2l0aChoci5jcmVhdGUoKSkuc2Nyb2xsSW50b1ZpZXcoKSk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4ga2V5cztcbn1cbiJdfQ==
|