@gravity-ui/markdown-editor 14.11.2 → 14.12.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/build/cjs/bundle/Editor.js +9 -2
- package/build/cjs/bundle/MarkupManager.d.ts +54 -0
- package/build/cjs/bundle/MarkupManager.js +68 -0
- package/build/cjs/bundle/config/dynamicModifiers.d.ts +3 -0
- package/build/cjs/bundle/config/dynamicModifiers.js +76 -0
- package/build/cjs/bundle/config/markup.js +7 -0
- package/build/cjs/bundle/config/previews/ActionPreview.css +45 -0
- package/build/cjs/bundle/config/previews/ActionPreview.d.ts +4 -0
- package/build/cjs/bundle/config/previews/ActionPreview.js +11 -0
- package/build/cjs/bundle/config/previews/HeadingPreview.d.ts +5 -0
- package/build/cjs/bundle/config/previews/HeadingPreview.js +16 -0
- package/build/cjs/bundle/config/previews/TextPreview.d.ts +1 -0
- package/build/cjs/bundle/config/previews/TextPreview.js +14 -0
- package/build/cjs/bundle/config/w-heading-config.js +11 -0
- package/build/cjs/bundle/toolbar/utils/toolbarsConfigs.js +2 -1
- package/build/cjs/bundle/types.d.ts +11 -0
- package/build/cjs/core/Editor.d.ts +2 -2
- package/build/cjs/core/Editor.js +16 -1
- package/build/cjs/core/ExtensionsManager.d.ts +12 -2
- package/build/cjs/core/ExtensionsManager.js +29 -13
- package/build/cjs/core/ParserTokensRegistry.d.ts +2 -1
- package/build/cjs/core/ParserTokensRegistry.js +2 -2
- package/build/cjs/core/SchemaDynamicModifier.d.ts +3 -0
- package/build/cjs/core/SchemaDynamicModifier.js +25 -0
- package/build/cjs/core/SchemaSpecRegistry.d.ts +2 -1
- package/build/cjs/core/SchemaSpecRegistry.js +9 -4
- package/build/cjs/core/SerializerTokensRegistry.d.ts +2 -1
- package/build/cjs/core/SerializerTokensRegistry.js +2 -2
- package/build/cjs/core/index.d.ts +2 -0
- package/build/cjs/core/markdown/MarkdownParser.d.ts +7 -3
- package/build/cjs/core/markdown/MarkdownParser.js +85 -16
- package/build/cjs/core/markdown/MarkdownSerializer.d.ts +4 -2
- package/build/cjs/core/markdown/MarkdownSerializer.js +16 -6
- package/build/cjs/core/markdown/MarkdownSerializerDynamicModifier.d.ts +1 -0
- package/build/cjs/core/markdown/MarkdownSerializerDynamicModifier.js +47 -0
- package/build/cjs/core/types/dynamicModifiers.d.ts +1 -0
- package/build/cjs/core/types/dynamicModifiers.js +2 -0
- package/build/cjs/core/utils/dynamicModifiers.d.ts +9 -0
- package/build/cjs/core/utils/dynamicModifiers.js +48 -0
- package/build/cjs/extensions/behavior/CommandMenu/component.d.ts +1 -1
- package/build/cjs/extensions/behavior/CommandMenu/component.js +10 -8
- package/build/cjs/i18n/action-previews/en.json +5 -0
- package/build/cjs/i18n/action-previews/index.d.ts +7 -0
- package/build/cjs/i18n/action-previews/index.js +9 -0
- package/build/cjs/i18n/action-previews/ru.json +5 -0
- package/build/cjs/modules/toolbars/items.js +9 -0
- package/build/cjs/modules/toolbars/types.d.ts +1 -0
- package/build/cjs/toolbar/PreviewTooltip.css +8 -0
- package/build/cjs/toolbar/PreviewTooltip.d.ts +7 -0
- package/build/cjs/toolbar/PreviewTooltip.js +13 -0
- package/build/cjs/toolbar/ToolbarListButton.js +23 -18
- package/build/cjs/toolbar/types.d.ts +1 -0
- package/build/cjs/version.js +1 -1
- package/build/esm/bundle/Editor.js +9 -2
- package/build/esm/bundle/MarkupManager.d.ts +54 -0
- package/build/esm/bundle/MarkupManager.js +64 -0
- package/build/esm/bundle/config/dynamicModifiers.d.ts +3 -0
- package/build/esm/bundle/config/dynamicModifiers.js +72 -0
- package/build/esm/bundle/config/markup.js +7 -0
- package/build/esm/bundle/config/previews/ActionPreview.css +45 -0
- package/build/esm/bundle/config/previews/ActionPreview.d.ts +5 -0
- package/build/esm/bundle/config/previews/ActionPreview.js +7 -0
- package/build/esm/bundle/config/previews/HeadingPreview.d.ts +6 -0
- package/build/esm/bundle/config/previews/HeadingPreview.js +12 -0
- package/build/esm/bundle/config/previews/TextPreview.d.ts +2 -0
- package/build/esm/bundle/config/previews/TextPreview.js +10 -0
- package/build/esm/bundle/config/w-heading-config.js +10 -0
- package/build/esm/bundle/toolbar/utils/toolbarsConfigs.js +2 -1
- package/build/esm/bundle/types.d.ts +11 -0
- package/build/esm/core/Editor.d.ts +2 -2
- package/build/esm/core/Editor.js +16 -1
- package/build/esm/core/ExtensionsManager.d.ts +12 -2
- package/build/esm/core/ExtensionsManager.js +29 -13
- package/build/esm/core/ParserTokensRegistry.d.ts +2 -1
- package/build/esm/core/ParserTokensRegistry.js +2 -2
- package/build/esm/core/SchemaDynamicModifier.d.ts +3 -0
- package/build/esm/core/SchemaDynamicModifier.js +21 -0
- package/build/esm/core/SchemaSpecRegistry.d.ts +2 -1
- package/build/esm/core/SchemaSpecRegistry.js +9 -4
- package/build/esm/core/SerializerTokensRegistry.d.ts +2 -1
- package/build/esm/core/SerializerTokensRegistry.js +2 -2
- package/build/esm/core/index.d.ts +2 -0
- package/build/esm/core/markdown/MarkdownParser.d.ts +7 -3
- package/build/esm/core/markdown/MarkdownParser.js +83 -15
- package/build/esm/core/markdown/MarkdownSerializer.d.ts +4 -2
- package/build/esm/core/markdown/MarkdownSerializer.js +16 -6
- package/build/esm/core/markdown/MarkdownSerializerDynamicModifier.d.ts +1 -0
- package/build/esm/core/markdown/MarkdownSerializerDynamicModifier.js +43 -0
- package/build/esm/core/types/dynamicModifiers.d.ts +1 -0
- package/build/esm/core/types/dynamicModifiers.js +1 -0
- package/build/esm/core/utils/dynamicModifiers.d.ts +9 -0
- package/build/esm/core/utils/dynamicModifiers.js +44 -0
- package/build/esm/extensions/behavior/CommandMenu/component.d.ts +1 -1
- package/build/esm/extensions/behavior/CommandMenu/component.js +10 -8
- package/build/esm/i18n/action-previews/en.json +5 -0
- package/build/esm/i18n/action-previews/index.d.ts +7 -0
- package/build/esm/i18n/action-previews/index.js +5 -0
- package/build/esm/i18n/action-previews/ru.json +5 -0
- package/build/esm/modules/toolbars/items.js +9 -0
- package/build/esm/modules/toolbars/types.d.ts +1 -0
- package/build/esm/toolbar/PreviewTooltip.css +8 -0
- package/build/esm/toolbar/PreviewTooltip.d.ts +8 -0
- package/build/esm/toolbar/PreviewTooltip.js +9 -0
- package/build/esm/toolbar/ToolbarListButton.js +23 -18
- package/build/esm/toolbar/types.d.ts +1 -0
- package/build/esm/version.js +1 -1
- package/build/styles.css +53 -0
- package/package.json +3 -2
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var _ExtensionsManager_schemaRegistry, _ExtensionsManager_parserRegistry, _ExtensionsManager_serializerRegistry, _ExtensionsManager_nodeViewCreators, _ExtensionsManager_markViewCreators, _ExtensionsManager_pmTransformers, _ExtensionsManager_mdForMarkup, _ExtensionsManager_mdForText, _ExtensionsManager_extensions, _ExtensionsManager_builder, _ExtensionsManager_spec, _ExtensionsManager_deps, _ExtensionsManager_plugins, _ExtensionsManager_actions, _ExtensionsManager_nodeViews, _ExtensionsManager_markViews;
|
|
2
|
+
var _ExtensionsManager_schemaRegistry, _ExtensionsManager_parserRegistry, _ExtensionsManager_serializerRegistry, _ExtensionsManager_nodeViewCreators, _ExtensionsManager_markViewCreators, _ExtensionsManager_pmTransformers, _ExtensionsManager_mdForMarkup, _ExtensionsManager_mdForText, _ExtensionsManager_extensions, _ExtensionsManager_builder, _ExtensionsManager_spec, _ExtensionsManager_deps, _ExtensionsManager_plugins, _ExtensionsManager_actions, _ExtensionsManager_nodeViews, _ExtensionsManager_markViews, _ExtensionsManager_serializerDynamicModifier, _ExtensionsManager_parserDynamicModifier;
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
4
|
exports.ExtensionsManager = void 0;
|
|
5
5
|
const tslib_1 = require("tslib");
|
|
@@ -11,10 +11,10 @@ const SchemaSpecRegistry_1 = require("./SchemaSpecRegistry");
|
|
|
11
11
|
const SerializerTokensRegistry_1 = require("./SerializerTokensRegistry");
|
|
12
12
|
class ExtensionsManager {
|
|
13
13
|
constructor({ extensions, options = {} }) {
|
|
14
|
-
var _a, _b, _c, _d;
|
|
15
|
-
_ExtensionsManager_schemaRegistry.set(this,
|
|
16
|
-
_ExtensionsManager_parserRegistry.set(this,
|
|
17
|
-
_ExtensionsManager_serializerRegistry.set(this,
|
|
14
|
+
var _a, _b, _c, _d, _e, _f, _g;
|
|
15
|
+
_ExtensionsManager_schemaRegistry.set(this, void 0);
|
|
16
|
+
_ExtensionsManager_parserRegistry.set(this, void 0);
|
|
17
|
+
_ExtensionsManager_serializerRegistry.set(this, void 0);
|
|
18
18
|
_ExtensionsManager_nodeViewCreators.set(this, new Map());
|
|
19
19
|
_ExtensionsManager_markViewCreators.set(this, new Map());
|
|
20
20
|
_ExtensionsManager_pmTransformers.set(this, []);
|
|
@@ -28,6 +28,8 @@ class ExtensionsManager {
|
|
|
28
28
|
_ExtensionsManager_actions.set(this, {});
|
|
29
29
|
_ExtensionsManager_nodeViews.set(this, {});
|
|
30
30
|
_ExtensionsManager_markViews.set(this, {});
|
|
31
|
+
_ExtensionsManager_serializerDynamicModifier.set(this, void 0);
|
|
32
|
+
_ExtensionsManager_parserDynamicModifier.set(this, void 0);
|
|
31
33
|
this.processNode = (name, { spec, fromMd, toMd: toMd, view }) => {
|
|
32
34
|
tslib_1.__classPrivateFieldGet(this, _ExtensionsManager_schemaRegistry, "f").addNode(name, spec);
|
|
33
35
|
tslib_1.__classPrivateFieldGet(this, _ExtensionsManager_parserRegistry, "f").addToken(fromMd.tokenName || name, fromMd.tokenSpec);
|
|
@@ -44,10 +46,17 @@ class ExtensionsManager {
|
|
|
44
46
|
tslib_1.__classPrivateFieldGet(this, _ExtensionsManager_markViewCreators, "f").set(name, view);
|
|
45
47
|
}
|
|
46
48
|
};
|
|
49
|
+
tslib_1.__classPrivateFieldSet(this, _ExtensionsManager_schemaRegistry, new SchemaSpecRegistry_1.SchemaSpecRegistry(undefined, (_a = options.dynamicModifiers) === null || _a === void 0 ? void 0 : _a.schema), "f");
|
|
50
|
+
tslib_1.__classPrivateFieldSet(this, _ExtensionsManager_parserRegistry, new ParserTokensRegistry_1.ParserTokensRegistry(), "f");
|
|
51
|
+
tslib_1.__classPrivateFieldSet(this, _ExtensionsManager_serializerRegistry, new SerializerTokensRegistry_1.SerializerTokensRegistry(), "f");
|
|
52
|
+
if (options.dynamicModifiers) {
|
|
53
|
+
tslib_1.__classPrivateFieldSet(this, _ExtensionsManager_parserDynamicModifier, (_b = options.dynamicModifiers) === null || _b === void 0 ? void 0 : _b.parser, "f");
|
|
54
|
+
tslib_1.__classPrivateFieldSet(this, _ExtensionsManager_serializerDynamicModifier, (_c = options.dynamicModifiers) === null || _c === void 0 ? void 0 : _c.serializer, "f");
|
|
55
|
+
}
|
|
47
56
|
tslib_1.__classPrivateFieldSet(this, _ExtensionsManager_extensions, extensions, "f");
|
|
48
|
-
const mdPreset = (
|
|
49
|
-
tslib_1.__classPrivateFieldSet(this, _ExtensionsManager_mdForMarkup, new markdown_it_1.default(mdPreset, (
|
|
50
|
-
tslib_1.__classPrivateFieldSet(this, _ExtensionsManager_mdForText, new markdown_it_1.default(mdPreset, (
|
|
57
|
+
const mdPreset = (_e = (_d = options.mdOpts) === null || _d === void 0 ? void 0 : _d.preset) !== null && _e !== void 0 ? _e : 'default';
|
|
58
|
+
tslib_1.__classPrivateFieldSet(this, _ExtensionsManager_mdForMarkup, new markdown_it_1.default(mdPreset, (_f = options.mdOpts) !== null && _f !== void 0 ? _f : {}), "f");
|
|
59
|
+
tslib_1.__classPrivateFieldSet(this, _ExtensionsManager_mdForText, new markdown_it_1.default(mdPreset, (_g = options.mdOpts) !== null && _g !== void 0 ? _g : {}), "f");
|
|
51
60
|
if (options.linkifyTlds) {
|
|
52
61
|
tslib_1.__classPrivateFieldGet(this, _ExtensionsManager_mdForMarkup, "f").linkify.tlds(options.linkifyTlds, true);
|
|
53
62
|
tslib_1.__classPrivateFieldGet(this, _ExtensionsManager_mdForText, "f").linkify.tlds(options.linkifyTlds, true);
|
|
@@ -79,14 +88,21 @@ class ExtensionsManager {
|
|
|
79
88
|
tslib_1.__classPrivateFieldGet(this, _ExtensionsManager_spec, "f").nodes().forEach(this.processNode);
|
|
80
89
|
tslib_1.__classPrivateFieldGet(this, _ExtensionsManager_spec, "f").marks().forEach(this.processMark);
|
|
81
90
|
}
|
|
91
|
+
createParser(schema, mdInstance) {
|
|
92
|
+
return tslib_1.__classPrivateFieldGet(this, _ExtensionsManager_parserRegistry, "f").createParser(schema, mdInstance, tslib_1.__classPrivateFieldGet(this, _ExtensionsManager_pmTransformers, "f"), tslib_1.__classPrivateFieldGet(this, _ExtensionsManager_parserDynamicModifier, "f"));
|
|
93
|
+
}
|
|
82
94
|
createDeps() {
|
|
95
|
+
const actions = new ActionsManager_1.ActionsManager();
|
|
83
96
|
const schema = tslib_1.__classPrivateFieldGet(this, _ExtensionsManager_schemaRegistry, "f").createSchema();
|
|
97
|
+
const markupParser = this.createParser(schema, tslib_1.__classPrivateFieldGet(this, _ExtensionsManager_mdForMarkup, "f"));
|
|
98
|
+
const textParser = this.createParser(schema, tslib_1.__classPrivateFieldGet(this, _ExtensionsManager_mdForText, "f"));
|
|
99
|
+
const serializer = tslib_1.__classPrivateFieldGet(this, _ExtensionsManager_serializerRegistry, "f").createSerializer(tslib_1.__classPrivateFieldGet(this, _ExtensionsManager_serializerDynamicModifier, "f"));
|
|
84
100
|
tslib_1.__classPrivateFieldSet(this, _ExtensionsManager_deps, {
|
|
85
101
|
schema,
|
|
86
|
-
actions
|
|
87
|
-
markupParser
|
|
88
|
-
textParser
|
|
89
|
-
serializer
|
|
102
|
+
actions,
|
|
103
|
+
markupParser,
|
|
104
|
+
textParser,
|
|
105
|
+
serializer,
|
|
90
106
|
}, "f");
|
|
91
107
|
}
|
|
92
108
|
createDerived() {
|
|
@@ -101,4 +117,4 @@ class ExtensionsManager {
|
|
|
101
117
|
}
|
|
102
118
|
}
|
|
103
119
|
exports.ExtensionsManager = ExtensionsManager;
|
|
104
|
-
_ExtensionsManager_schemaRegistry = new WeakMap(), _ExtensionsManager_parserRegistry = new WeakMap(), _ExtensionsManager_serializerRegistry = new WeakMap(), _ExtensionsManager_nodeViewCreators = new WeakMap(), _ExtensionsManager_markViewCreators = new WeakMap(), _ExtensionsManager_pmTransformers = new WeakMap(), _ExtensionsManager_mdForMarkup = new WeakMap(), _ExtensionsManager_mdForText = new WeakMap(), _ExtensionsManager_extensions = new WeakMap(), _ExtensionsManager_builder = new WeakMap(), _ExtensionsManager_spec = new WeakMap(), _ExtensionsManager_deps = new WeakMap(), _ExtensionsManager_plugins = new WeakMap(), _ExtensionsManager_actions = new WeakMap(), _ExtensionsManager_nodeViews = new WeakMap(), _ExtensionsManager_markViews = new WeakMap();
|
|
120
|
+
_ExtensionsManager_schemaRegistry = new WeakMap(), _ExtensionsManager_parserRegistry = new WeakMap(), _ExtensionsManager_serializerRegistry = new WeakMap(), _ExtensionsManager_nodeViewCreators = new WeakMap(), _ExtensionsManager_markViewCreators = new WeakMap(), _ExtensionsManager_pmTransformers = new WeakMap(), _ExtensionsManager_mdForMarkup = new WeakMap(), _ExtensionsManager_mdForText = new WeakMap(), _ExtensionsManager_extensions = new WeakMap(), _ExtensionsManager_builder = new WeakMap(), _ExtensionsManager_spec = new WeakMap(), _ExtensionsManager_deps = new WeakMap(), _ExtensionsManager_plugins = new WeakMap(), _ExtensionsManager_actions = new WeakMap(), _ExtensionsManager_nodeViews = new WeakMap(), _ExtensionsManager_markViews = new WeakMap(), _ExtensionsManager_serializerDynamicModifier = new WeakMap(), _ExtensionsManager_parserDynamicModifier = new WeakMap();
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import type MarkdownIt from 'markdown-it';
|
|
2
2
|
import type { Schema } from 'prosemirror-model';
|
|
3
|
+
import { MarkdownParserDynamicModifier } from './markdown/MarkdownParser';
|
|
3
4
|
import { TransformFn } from './markdown/ProseMirrorTransformer';
|
|
4
5
|
import type { Parser, ParserToken } from './types/parser';
|
|
5
6
|
export declare class ParserTokensRegistry {
|
|
6
7
|
#private;
|
|
7
8
|
addToken(name: string, token: ParserToken): this;
|
|
8
|
-
createParser(schema: Schema, tokenizer: MarkdownIt, pmTransformers: TransformFn[]): Parser;
|
|
9
|
+
createParser(schema: Schema, tokenizer: MarkdownIt, pmTransformers: TransformFn[], dynamicModifier?: MarkdownParserDynamicModifier): Parser;
|
|
9
10
|
}
|
|
@@ -12,8 +12,8 @@ class ParserTokensRegistry {
|
|
|
12
12
|
tslib_1.__classPrivateFieldGet(this, _ParserTokensRegistry_tokens, "f")[name] = token;
|
|
13
13
|
return this;
|
|
14
14
|
}
|
|
15
|
-
createParser(schema, tokenizer, pmTransformers) {
|
|
16
|
-
return new MarkdownParser_1.MarkdownParser(schema, tokenizer, tslib_1.__classPrivateFieldGet(this, _ParserTokensRegistry_tokens, "f"), pmTransformers);
|
|
15
|
+
createParser(schema, tokenizer, pmTransformers, dynamicModifier) {
|
|
16
|
+
return new MarkdownParser_1.MarkdownParser(schema, tokenizer, tslib_1.__classPrivateFieldGet(this, _ParserTokensRegistry_tokens, "f"), pmTransformers, dynamicModifier);
|
|
17
17
|
}
|
|
18
18
|
}
|
|
19
19
|
exports.ParserTokensRegistry = ParserTokensRegistry;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SchemaDynamicModifier = void 0;
|
|
4
|
+
/** @internal */
|
|
5
|
+
class SchemaDynamicModifier {
|
|
6
|
+
constructor(config) {
|
|
7
|
+
this.nodeSpecsProcessors = new Map(Object.entries(config));
|
|
8
|
+
}
|
|
9
|
+
processNodeSpec(name, nodeSpec) {
|
|
10
|
+
let updatedSpec = nodeSpec;
|
|
11
|
+
this.nodeSpecsProcessors.forEach((processor, elementType) => {
|
|
12
|
+
if (name === elementType &&
|
|
13
|
+
processor.allowedAttrs &&
|
|
14
|
+
processor.allowedAttrs.length > 0 &&
|
|
15
|
+
nodeSpec) {
|
|
16
|
+
updatedSpec = Object.assign(Object.assign({}, nodeSpec), { attrs: Object.assign(Object.assign({}, nodeSpec.attrs), processor.allowedAttrs.reduce((acc, key) => {
|
|
17
|
+
acc[key] = { default: null };
|
|
18
|
+
return acc;
|
|
19
|
+
}, {})) });
|
|
20
|
+
}
|
|
21
|
+
});
|
|
22
|
+
return updatedSpec;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
exports.SchemaDynamicModifier = SchemaDynamicModifier;
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { MarkSpec, NodeSpec, Schema } from 'prosemirror-model';
|
|
2
|
+
import { SchemaDynamicModifier } from './SchemaDynamicModifier';
|
|
2
3
|
export declare class SchemaSpecRegistry {
|
|
3
4
|
#private;
|
|
4
|
-
constructor(topNode?: string);
|
|
5
|
+
constructor(topNode?: string, dynamicModifier?: SchemaDynamicModifier);
|
|
5
6
|
addNode(name: string, spec: NodeSpec): this;
|
|
6
7
|
addMark(name: string, spec: MarkSpec): this;
|
|
7
8
|
createSchema(): Schema<string, string>;
|
|
@@ -1,16 +1,21 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var _SchemaSpecRegistry_spec;
|
|
2
|
+
var _SchemaSpecRegistry_spec, _SchemaSpecRegistry_dynamicModifier;
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
4
|
exports.SchemaSpecRegistry = void 0;
|
|
5
5
|
const tslib_1 = require("tslib");
|
|
6
6
|
const prosemirror_model_1 = require("prosemirror-model");
|
|
7
7
|
class SchemaSpecRegistry {
|
|
8
|
-
constructor(topNode) {
|
|
8
|
+
constructor(topNode, dynamicModifier) {
|
|
9
9
|
_SchemaSpecRegistry_spec.set(this, void 0);
|
|
10
|
+
_SchemaSpecRegistry_dynamicModifier.set(this, void 0);
|
|
10
11
|
tslib_1.__classPrivateFieldSet(this, _SchemaSpecRegistry_spec, { topNode, nodes: {}, marks: {} }, "f");
|
|
12
|
+
tslib_1.__classPrivateFieldSet(this, _SchemaSpecRegistry_dynamicModifier, dynamicModifier, "f");
|
|
11
13
|
}
|
|
12
14
|
addNode(name, spec) {
|
|
13
|
-
tslib_1.__classPrivateFieldGet(this,
|
|
15
|
+
const modifiedSpec = tslib_1.__classPrivateFieldGet(this, _SchemaSpecRegistry_dynamicModifier, "f")
|
|
16
|
+
? tslib_1.__classPrivateFieldGet(this, _SchemaSpecRegistry_dynamicModifier, "f").processNodeSpec(name, spec)
|
|
17
|
+
: spec;
|
|
18
|
+
tslib_1.__classPrivateFieldGet(this, _SchemaSpecRegistry_spec, "f").nodes[name] = modifiedSpec;
|
|
14
19
|
return this;
|
|
15
20
|
}
|
|
16
21
|
addMark(name, spec) {
|
|
@@ -22,4 +27,4 @@ class SchemaSpecRegistry {
|
|
|
22
27
|
}
|
|
23
28
|
}
|
|
24
29
|
exports.SchemaSpecRegistry = SchemaSpecRegistry;
|
|
25
|
-
_SchemaSpecRegistry_spec = new WeakMap();
|
|
30
|
+
_SchemaSpecRegistry_spec = new WeakMap(), _SchemaSpecRegistry_dynamicModifier = new WeakMap();
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
+
import { MarkdownSerializerDynamicModifier } from './markdown/MarkdownSerializerDynamicModifier';
|
|
1
2
|
import type { Serializer, SerializerMarkToken, SerializerNodeToken } from './types/serializer';
|
|
2
3
|
export declare class SerializerTokensRegistry {
|
|
3
4
|
#private;
|
|
4
5
|
addNode(name: string, node: SerializerNodeToken): this;
|
|
5
6
|
addMark(name: string, mark: SerializerMarkToken): this;
|
|
6
|
-
createSerializer(): Serializer;
|
|
7
|
+
createSerializer(dynamicModifier?: MarkdownSerializerDynamicModifier): Serializer;
|
|
7
8
|
}
|
|
@@ -17,8 +17,8 @@ class SerializerTokensRegistry {
|
|
|
17
17
|
tslib_1.__classPrivateFieldGet(this, _SerializerTokensRegistry_marks, "f")[name] = mark;
|
|
18
18
|
return this;
|
|
19
19
|
}
|
|
20
|
-
createSerializer() {
|
|
21
|
-
return new MarkdownSerializer_1.MarkdownSerializer(tslib_1.__classPrivateFieldGet(this, _SerializerTokensRegistry_nodes, "f"), tslib_1.__classPrivateFieldGet(this, _SerializerTokensRegistry_marks, "f"));
|
|
20
|
+
createSerializer(dynamicModifier) {
|
|
21
|
+
return new MarkdownSerializer_1.MarkdownSerializer(tslib_1.__classPrivateFieldGet(this, _SerializerTokensRegistry_nodes, "f"), tslib_1.__classPrivateFieldGet(this, _SerializerTokensRegistry_marks, "f"), dynamicModifier);
|
|
22
22
|
}
|
|
23
23
|
}
|
|
24
24
|
exports.SerializerTokensRegistry = SerializerTokensRegistry;
|
|
@@ -9,3 +9,5 @@ export type { Extension, ExtensionAuto, ExtensionWithOptions, ExtensionDeps, Ext
|
|
|
9
9
|
export type { Parser, ParserToken } from './types/parser';
|
|
10
10
|
export type { Serializer, SerializerState, SerializerNodeToken, SerializerMarkToken, } from './types/serializer';
|
|
11
11
|
export type { NodeViewConstructor, MarkViewConstructor } from './types/node-views';
|
|
12
|
+
export type { MarkdownParserDynamicModifierConfig } from './markdown/MarkdownParser';
|
|
13
|
+
export type { MarkdownSerializerDynamicModifierConfig } from './markdown/MarkdownSerializerDynamicModifier';
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import type { Match } from 'linkify-it';
|
|
2
2
|
import type MarkdownIt from 'markdown-it';
|
|
3
|
+
import type Token from 'markdown-it/lib/token';
|
|
3
4
|
import { Mark, Node, NodeType, Schema } from 'prosemirror-model';
|
|
4
5
|
import type { Parser, ParserToken } from '../types/parser';
|
|
5
6
|
import { TransformFn } from './ProseMirrorTransformer';
|
|
6
|
-
declare type TokenAttrs = {
|
|
7
|
+
export declare type TokenAttrs = {
|
|
7
8
|
[name: string]: unknown;
|
|
8
9
|
};
|
|
9
10
|
export declare class MarkdownParser implements Parser {
|
|
@@ -17,7 +18,8 @@ export declare class MarkdownParser implements Parser {
|
|
|
17
18
|
tokens: Record<string, ParserToken>;
|
|
18
19
|
tokenizer: MarkdownIt;
|
|
19
20
|
pmTransformers: TransformFn[];
|
|
20
|
-
|
|
21
|
+
dynamicModifier: MarkdownParserDynamicModifier | null;
|
|
22
|
+
constructor(schema: Schema, tokenizer: MarkdownIt, tokens: Record<string, ParserToken>, pmTransformers: TransformFn[], dynamicModifier?: MarkdownParserDynamicModifier);
|
|
21
23
|
validateLink(url: string): boolean;
|
|
22
24
|
normalizeLink(url: string): string;
|
|
23
25
|
normalizeLinkText(url: string): string;
|
|
@@ -30,6 +32,7 @@ export declare class MarkdownParser implements Parser {
|
|
|
30
32
|
private getTokenType;
|
|
31
33
|
private handlePrimitiveToken;
|
|
32
34
|
private handleMark;
|
|
35
|
+
private getNodeSchema;
|
|
33
36
|
private handleNode;
|
|
34
37
|
private handleBlock;
|
|
35
38
|
private handleToken;
|
|
@@ -41,4 +44,5 @@ export declare class MarkdownParser implements Parser {
|
|
|
41
44
|
private closeMark;
|
|
42
45
|
private parseTokens;
|
|
43
46
|
}
|
|
44
|
-
export
|
|
47
|
+
export declare type ProcessNodeAttrs = (token: Token, attrs: TokenAttrs, allowedAttrs?: string[]) => TokenAttrs;
|
|
48
|
+
export declare type ProcessNode = (node: Node) => Node;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.MarkdownParser = void 0;
|
|
3
|
+
exports.MarkdownParserDynamicModifier = exports.MarkdownParser = void 0;
|
|
4
4
|
const prosemirror_model_1 = require("prosemirror-model");
|
|
5
5
|
const logger_1 = require("../../logger");
|
|
6
6
|
const ProseMirrorTransformer_1 = require("./ProseMirrorTransformer");
|
|
@@ -12,14 +12,23 @@ var TokenType;
|
|
|
12
12
|
TokenType["close"] = "close";
|
|
13
13
|
TokenType["default"] = "default";
|
|
14
14
|
})(TokenType || (TokenType = {}));
|
|
15
|
+
/**
|
|
16
|
+
* Remove suffixes from the node name.
|
|
17
|
+
* Crops specified `openSuffix` and `closeSuffix` from the end of the given `tokName`.
|
|
18
|
+
*/
|
|
19
|
+
function cropNodeName(tokName, openSuffix, closeSuffix) {
|
|
20
|
+
const regex = new RegExp(`(${openSuffix})$|(${closeSuffix})$`);
|
|
21
|
+
return tokName.replace(regex, '');
|
|
22
|
+
}
|
|
15
23
|
class MarkdownParser {
|
|
16
|
-
constructor(schema, tokenizer, tokens, pmTransformers) {
|
|
24
|
+
constructor(schema, tokenizer, tokens, pmTransformers, dynamicModifier) {
|
|
17
25
|
this.stack = [];
|
|
18
26
|
this.schema = schema;
|
|
19
27
|
this.marks = prosemirror_model_1.Mark.none;
|
|
20
28
|
this.tokens = tokens;
|
|
21
29
|
this.tokenizer = tokenizer;
|
|
22
30
|
this.pmTransformers = pmTransformers;
|
|
31
|
+
this.dynamicModifier = dynamicModifier !== null && dynamicModifier !== void 0 ? dynamicModifier : null;
|
|
23
32
|
}
|
|
24
33
|
validateLink(url) {
|
|
25
34
|
return this.tokenizer.validateLink(url);
|
|
@@ -40,6 +49,9 @@ class MarkdownParser {
|
|
|
40
49
|
let mdItTokens;
|
|
41
50
|
try {
|
|
42
51
|
mdItTokens = this.tokenizer.parse(text, {});
|
|
52
|
+
if (this.dynamicModifier) {
|
|
53
|
+
mdItTokens = this.dynamicModifier.processTokens(mdItTokens, text);
|
|
54
|
+
}
|
|
43
55
|
}
|
|
44
56
|
catch (err) {
|
|
45
57
|
const e = err;
|
|
@@ -68,11 +80,20 @@ class MarkdownParser {
|
|
|
68
80
|
}
|
|
69
81
|
//#region helpers
|
|
70
82
|
getTokenAttrs(token, tokenSpec, tokenStream, i) {
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
83
|
+
let attrs = {};
|
|
84
|
+
if (tokenSpec.getAttrs) {
|
|
85
|
+
attrs = tokenSpec.getAttrs(token, tokenStream, i);
|
|
86
|
+
}
|
|
87
|
+
else if (tokenSpec.attrs instanceof Function) {
|
|
88
|
+
attrs = tokenSpec.attrs(token);
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
attrs = tokenSpec.attrs;
|
|
92
|
+
}
|
|
93
|
+
if (this.dynamicModifier) {
|
|
94
|
+
attrs = this.dynamicModifier.processAttrs(token, attrs !== null && attrs !== void 0 ? attrs : {});
|
|
95
|
+
}
|
|
96
|
+
return attrs;
|
|
76
97
|
}
|
|
77
98
|
getTokenSpec(token) {
|
|
78
99
|
var _a;
|
|
@@ -80,12 +101,14 @@ class MarkdownParser {
|
|
|
80
101
|
let tokName = ((_a = token.meta) === null || _a === void 0 ? void 0 : _a['pm-node']) || token.type;
|
|
81
102
|
// Cropping _open and _close from node name end
|
|
82
103
|
// e.g. paragraph_open -> paragraph
|
|
83
|
-
tokName = tokName
|
|
104
|
+
tokName = cropNodeName(tokName, openSuffix, closeSuffix);
|
|
84
105
|
let tokenSpec;
|
|
85
|
-
if (tokName in this.tokens)
|
|
106
|
+
if (tokName in this.tokens) {
|
|
86
107
|
tokenSpec = this.tokens[tokName];
|
|
87
|
-
|
|
108
|
+
}
|
|
109
|
+
if (!tokenSpec) {
|
|
88
110
|
throw new RangeError(`No token spec for token: ${JSON.stringify(token)}`);
|
|
111
|
+
}
|
|
89
112
|
return tokenSpec;
|
|
90
113
|
}
|
|
91
114
|
// Getting token type from its name
|
|
@@ -139,14 +162,18 @@ class MarkdownParser {
|
|
|
139
162
|
}
|
|
140
163
|
}
|
|
141
164
|
}
|
|
165
|
+
getNodeSchema(tokenSpec) {
|
|
166
|
+
const spec = this.schema.nodes[tokenSpec.name];
|
|
167
|
+
return spec;
|
|
168
|
+
}
|
|
142
169
|
handleNode(_token, tokenSpec, attrs) {
|
|
143
|
-
const schemaSpec = this.
|
|
170
|
+
const schemaSpec = this.getNodeSchema(tokenSpec);
|
|
144
171
|
// Adding node as is, becasuse it doesn't contain content.
|
|
145
172
|
this.addNode(schemaSpec, attrs);
|
|
146
173
|
}
|
|
147
174
|
handleBlock(token, tokenSpec, attrs) {
|
|
148
175
|
var _a;
|
|
149
|
-
const schemaSpec = this.
|
|
176
|
+
const schemaSpec = this.getNodeSchema(tokenSpec);
|
|
150
177
|
if (tokenSpec.noCloseToken) {
|
|
151
178
|
this.openNode(schemaSpec, attrs);
|
|
152
179
|
if (tokenSpec.contentField === 'children' && ((_a = token.children) === null || _a === void 0 ? void 0 : _a.length)) {
|
|
@@ -189,9 +216,13 @@ class MarkdownParser {
|
|
|
189
216
|
//#endregion
|
|
190
217
|
//#region state methods
|
|
191
218
|
addNode(type, attrs, content) {
|
|
192
|
-
|
|
193
|
-
if (!node)
|
|
219
|
+
let node = type.createAndFill(attrs, content, this.marks);
|
|
220
|
+
if (!node) {
|
|
194
221
|
return null;
|
|
222
|
+
}
|
|
223
|
+
if (this.dynamicModifier) {
|
|
224
|
+
node = this.dynamicModifier.processNodes(node);
|
|
225
|
+
}
|
|
195
226
|
this.push(node);
|
|
196
227
|
return node;
|
|
197
228
|
}
|
|
@@ -200,11 +231,13 @@ class MarkdownParser {
|
|
|
200
231
|
}
|
|
201
232
|
closeNode() {
|
|
202
233
|
// Marks operate within a node. Therefore, when we close the node, we reset the existing marks.
|
|
203
|
-
if (this.marks.length)
|
|
234
|
+
if (this.marks.length) {
|
|
204
235
|
this.marks = prosemirror_model_1.Mark.none;
|
|
236
|
+
}
|
|
205
237
|
const info = this.stack.pop();
|
|
206
|
-
if (info)
|
|
238
|
+
if (info) {
|
|
207
239
|
return this.addNode(info.type, info.attrs, info.content);
|
|
240
|
+
}
|
|
208
241
|
return null;
|
|
209
242
|
}
|
|
210
243
|
addText(text) {
|
|
@@ -252,3 +285,39 @@ function maybeMerge(a, b) {
|
|
|
252
285
|
function withoutTrailingNewline(str) {
|
|
253
286
|
return str[str.length - 1] === '\n' || str.endsWith('\\n') ? str.slice(0, str.length - 1) : str;
|
|
254
287
|
}
|
|
288
|
+
/** @internal */
|
|
289
|
+
class MarkdownParserDynamicModifier {
|
|
290
|
+
constructor(config) {
|
|
291
|
+
this.elementProcessors = new Map(Object.entries(config));
|
|
292
|
+
}
|
|
293
|
+
processTokens(tokens, rawMarkup) {
|
|
294
|
+
return tokens.map((token, index) => {
|
|
295
|
+
const processor = this.elementProcessors.get(cropNodeName(token.type, openSuffix, ''));
|
|
296
|
+
if (!processor || !processor.processToken || processor.processToken.length === 0) {
|
|
297
|
+
return token;
|
|
298
|
+
}
|
|
299
|
+
return processor.processToken.reduce((currentToken, process) => {
|
|
300
|
+
return process(currentToken, index, rawMarkup);
|
|
301
|
+
}, token);
|
|
302
|
+
});
|
|
303
|
+
}
|
|
304
|
+
processAttrs(token, attrs) {
|
|
305
|
+
const processor = this.elementProcessors.get(cropNodeName(token.type, openSuffix, ''));
|
|
306
|
+
if (!processor || !processor.processNodeAttrs || processor.processNodeAttrs.length === 0) {
|
|
307
|
+
return attrs;
|
|
308
|
+
}
|
|
309
|
+
return processor.processNodeAttrs.reduce((currentAttrs, process) => {
|
|
310
|
+
return process(token, currentAttrs);
|
|
311
|
+
}, attrs);
|
|
312
|
+
}
|
|
313
|
+
processNodes(node) {
|
|
314
|
+
const processor = this.elementProcessors.get(node.type.name);
|
|
315
|
+
if (!processor || !processor.processNode || processor.processNode.length === 0) {
|
|
316
|
+
return node;
|
|
317
|
+
}
|
|
318
|
+
return processor.processNode.reduce((currentNode, process) => {
|
|
319
|
+
return process(currentNode);
|
|
320
|
+
}, node);
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
exports.MarkdownParserDynamicModifier = MarkdownParserDynamicModifier;
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
export class MarkdownSerializer {
|
|
2
|
-
constructor(nodes: any, marks: any);
|
|
2
|
+
constructor(nodes: any, marks: any, dynamicModifier: any);
|
|
3
3
|
nodes: any;
|
|
4
4
|
marks: any;
|
|
5
|
+
dynamicModifier: any;
|
|
5
6
|
serialize(content: any, options: any): string;
|
|
6
7
|
containsNode(nodeName: any): boolean;
|
|
7
8
|
containsMark(markName: any): boolean;
|
|
8
9
|
}
|
|
9
10
|
export class MarkdownSerializerState {
|
|
10
|
-
constructor(nodes: any, marks: any, options: any);
|
|
11
|
+
constructor(nodes: any, marks: any, options: any, dynamicModifier: any);
|
|
11
12
|
nodes: any;
|
|
12
13
|
marks: any;
|
|
13
14
|
delim: string;
|
|
@@ -20,6 +21,7 @@ export class MarkdownSerializerState {
|
|
|
20
21
|
/** @type {Boolean} */
|
|
21
22
|
escapeWhitespace: boolean;
|
|
22
23
|
options: any;
|
|
24
|
+
dynamicModifier: any;
|
|
23
25
|
setNoAutoBlank(): void;
|
|
24
26
|
unsetNoAutoBlank(): void;
|
|
25
27
|
flushClose(size: any): void;
|
|
@@ -39,18 +39,19 @@ class MarkdownSerializer {
|
|
|
39
39
|
// outside the marks. This is necessary for emphasis marks as
|
|
40
40
|
// CommonMark does not permit enclosing whitespace inside emphasis
|
|
41
41
|
// marks, see: http://spec.commonmark.org/0.26/#example-330
|
|
42
|
-
constructor(nodes, marks) {
|
|
42
|
+
constructor(nodes, marks, dynamicModifier) {
|
|
43
43
|
// :: Object<(MarkdownSerializerState, Node)> The node serializer
|
|
44
44
|
// functions for this serializer.
|
|
45
45
|
this.nodes = nodes;
|
|
46
46
|
// :: Object The mark serializer info.
|
|
47
47
|
this.marks = marks;
|
|
48
|
+
this.dynamicModifier = dynamicModifier;
|
|
48
49
|
}
|
|
49
50
|
// :: (Node, ?Object) → string
|
|
50
51
|
// Serialize the content of the given node to
|
|
51
52
|
// [CommonMark](http://commonmark.org/).
|
|
52
53
|
serialize(content, options) {
|
|
53
|
-
const state = new MarkdownSerializerState(this.nodes, this.marks, options);
|
|
54
|
+
const state = new MarkdownSerializerState(this.nodes, this.marks, options, this.dynamicModifier);
|
|
54
55
|
state.renderContent(content);
|
|
55
56
|
return state.out;
|
|
56
57
|
}
|
|
@@ -69,7 +70,7 @@ exports.MarkdownSerializer = MarkdownSerializer;
|
|
|
69
70
|
// node and mark serialization methods (see `toMarkdown`).
|
|
70
71
|
// prettier-ignore
|
|
71
72
|
class MarkdownSerializerState {
|
|
72
|
-
constructor(nodes, marks, options) {
|
|
73
|
+
constructor(nodes, marks, options, dynamicModifier) {
|
|
73
74
|
this.nodes = nodes;
|
|
74
75
|
this.marks = marks;
|
|
75
76
|
this.delim = this.out = '';
|
|
@@ -87,6 +88,7 @@ class MarkdownSerializerState {
|
|
|
87
88
|
// on a node level by specifying a tight attribute on the node.
|
|
88
89
|
// Defaults to false.
|
|
89
90
|
this.options = options || {};
|
|
91
|
+
this.dynamicModifier = dynamicModifier;
|
|
90
92
|
if (typeof this.options.tightLists === 'undefined') {
|
|
91
93
|
this.options.tightLists = false;
|
|
92
94
|
}
|
|
@@ -177,11 +179,19 @@ class MarkdownSerializerState {
|
|
|
177
179
|
// :: (Node)
|
|
178
180
|
// Render the given node as a block.
|
|
179
181
|
render(node, parent, index) {
|
|
180
|
-
if (typeof parent === 'number')
|
|
182
|
+
if (typeof parent === 'number') {
|
|
181
183
|
throw new Error('!');
|
|
182
|
-
|
|
184
|
+
}
|
|
185
|
+
if (!this.nodes[node.type.name]) {
|
|
183
186
|
throw new Error('Token type `' + node.type.name + '` not supported by Markdown renderer');
|
|
184
|
-
|
|
187
|
+
}
|
|
188
|
+
const callback = this.nodes[node.type.name];
|
|
189
|
+
if (this.dynamicModifier) {
|
|
190
|
+
this.dynamicModifier.processNode(this, node, parent, index, callback);
|
|
191
|
+
}
|
|
192
|
+
else {
|
|
193
|
+
callback(this, node, parent, index);
|
|
194
|
+
}
|
|
185
195
|
}
|
|
186
196
|
// :: (Node)
|
|
187
197
|
// Render the contents of `parent` as block nodes.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MarkdownSerializerDynamicModifier = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Class MarkdownSerializerDynamicModifier
|
|
6
|
+
*
|
|
7
|
+
* Provides a mechanism for dynamic modification of node serialization during conversion of ProseMirror nodes
|
|
8
|
+
* to a markdown-like format. It allows sequential processing of nodes by applying a series of custom handlers:
|
|
9
|
+
*
|
|
10
|
+
* - `processNode`: An array of handlers that process nodes sequentially, each modifying the output.
|
|
11
|
+
*
|
|
12
|
+
* Example:
|
|
13
|
+
* ```ts
|
|
14
|
+
* const serializerModifier = new MarkdownSerializerDynamicModifier({
|
|
15
|
+
* paragraph: {
|
|
16
|
+
* processNode: [
|
|
17
|
+
* (state, node, parent, index, callback) => {
|
|
18
|
+
* // Custom modifications can be performed here.
|
|
19
|
+
* callback(state, node, parent, index);
|
|
20
|
+
* },
|
|
21
|
+
* ],
|
|
22
|
+
* },
|
|
23
|
+
* });
|
|
24
|
+
* ```
|
|
25
|
+
*
|
|
26
|
+
* This class extends the functionality of a MarkdownSerializer for scenarios such as:
|
|
27
|
+
* - Customizing the serialization output.
|
|
28
|
+
* - Logging or modifying node content during serialization.
|
|
29
|
+
*/
|
|
30
|
+
/** @internal */
|
|
31
|
+
class MarkdownSerializerDynamicModifier {
|
|
32
|
+
constructor(config) {
|
|
33
|
+
this.nodeProcessors = new Map(Object.entries(config));
|
|
34
|
+
}
|
|
35
|
+
processNode(state, node, parent, index, callback) {
|
|
36
|
+
const nodeType = this.nodeProcessors.get(node.type.name);
|
|
37
|
+
if (!nodeType || !nodeType.processNode || nodeType.processNode.length === 0) {
|
|
38
|
+
callback(state, node, parent, index);
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
nodeType.processNode.forEach((process) => {
|
|
42
|
+
process(state, node, parent, index, callback);
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
exports.MarkdownSerializerDynamicModifier = MarkdownSerializerDynamicModifier;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { SchemaDynamicModifierConfig } from '../SchemaDynamicModifier';
|
|
2
|
+
import { MarkdownParserDynamicModifierConfig } from '../markdown/MarkdownParser';
|
|
3
|
+
import { MarkdownSerializerDynamicModifierConfig } from '../markdown/MarkdownSerializerDynamicModifier';
|
|
4
|
+
import { DynamicModifiers } from '../types/dynamicModifiers';
|
|
5
|
+
export declare function convertDynamicModifiersConfigs(modifiers: DynamicModifiers[]): {
|
|
6
|
+
parser: MarkdownParserDynamicModifierConfig;
|
|
7
|
+
schema: SchemaDynamicModifierConfig;
|
|
8
|
+
serializer: MarkdownSerializerDynamicModifierConfig;
|
|
9
|
+
};
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.convertDynamicModifiersConfigs = void 0;
|
|
4
|
+
function convertDynamicModifiersConfigs(modifiers) {
|
|
5
|
+
const parser = {};
|
|
6
|
+
const schema = {};
|
|
7
|
+
const serializer = {};
|
|
8
|
+
modifiers.forEach((modifier) => {
|
|
9
|
+
var _a, _b, _c, _d;
|
|
10
|
+
switch (modifier.type) {
|
|
11
|
+
case 'parserToken': {
|
|
12
|
+
const { tokenName, process } = modifier;
|
|
13
|
+
parser[tokenName] = parser[tokenName] || {};
|
|
14
|
+
parser[tokenName].processToken = parser[tokenName].processToken || [];
|
|
15
|
+
(_a = parser[tokenName].processToken) === null || _a === void 0 ? void 0 : _a.push(process);
|
|
16
|
+
break;
|
|
17
|
+
}
|
|
18
|
+
case 'parserNodeAttrs': {
|
|
19
|
+
const { tokenName, process } = modifier;
|
|
20
|
+
parser[tokenName] = parser[tokenName] || {};
|
|
21
|
+
parser[tokenName].processNodeAttrs = parser[tokenName].processNodeAttrs || [];
|
|
22
|
+
(_b = parser[tokenName].processNodeAttrs) === null || _b === void 0 ? void 0 : _b.push(process);
|
|
23
|
+
break;
|
|
24
|
+
}
|
|
25
|
+
case 'parserNode': {
|
|
26
|
+
const { nodeName, process } = modifier;
|
|
27
|
+
parser[nodeName] = parser[nodeName] || {};
|
|
28
|
+
parser[nodeName].processNode = parser[nodeName].processNode || [];
|
|
29
|
+
(_c = parser[nodeName].processNode) === null || _c === void 0 ? void 0 : _c.push(process);
|
|
30
|
+
break;
|
|
31
|
+
}
|
|
32
|
+
case 'serializerNode': {
|
|
33
|
+
const { nodeName, process } = modifier;
|
|
34
|
+
serializer[nodeName] = serializer[nodeName] || {};
|
|
35
|
+
serializer[nodeName].processNode = serializer[nodeName].processNode || [];
|
|
36
|
+
(_d = serializer[nodeName].processNode) === null || _d === void 0 ? void 0 : _d.push(process);
|
|
37
|
+
break;
|
|
38
|
+
}
|
|
39
|
+
case 'schemaNodeSpec': {
|
|
40
|
+
const { nodeName, allowedAttrs } = modifier;
|
|
41
|
+
schema[nodeName] = { allowedAttrs };
|
|
42
|
+
break;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
return { parser, schema, serializer };
|
|
47
|
+
}
|
|
48
|
+
exports.convertDynamicModifiersConfigs = convertDynamicModifiersConfigs;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { AutocompletePopupProps } from '../../../utils/autocomplete-popup';
|
|
3
3
|
import type { CommandAction } from './types';
|
|
4
|
-
export declare type CommandMenuItem = Pick<CommandAction, 'id' | 'title' | 'icon' | 'hotkey' | 'hint'>;
|
|
4
|
+
export declare type CommandMenuItem = Pick<CommandAction, 'id' | 'title' | 'icon' | 'hotkey' | 'hint' | 'preview'>;
|
|
5
5
|
export declare type CommandMenuComponentProps = AutocompletePopupProps & {
|
|
6
6
|
currentIndex?: number;
|
|
7
7
|
items: readonly CommandMenuItem[];
|