@kerebron/extension-codemirror 0.2.0 → 0.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/README.md +4 -3
- package/esm/editor/src/CoreEditor.d.ts +31 -0
- package/esm/editor/src/CoreEditor.d.ts.map +1 -0
- package/esm/editor/src/CoreEditor.js +198 -0
- package/esm/editor/src/DummyEditorView.d.ts +60 -0
- package/esm/editor/src/DummyEditorView.d.ts.map +1 -0
- package/esm/editor/src/DummyEditorView.js +277 -0
- package/esm/editor/src/Extension.d.ts +26 -0
- package/esm/editor/src/Extension.d.ts.map +1 -0
- package/esm/editor/src/Extension.js +33 -0
- package/esm/editor/src/ExtensionManager.d.ts +33 -0
- package/esm/editor/src/ExtensionManager.d.ts.map +1 -0
- package/esm/editor/src/ExtensionManager.js +272 -0
- package/esm/editor/src/Mark.d.ts +20 -0
- package/esm/editor/src/Mark.d.ts.map +1 -0
- package/esm/editor/src/Mark.js +40 -0
- package/esm/editor/src/Node.d.ts +29 -0
- package/esm/editor/src/Node.d.ts.map +1 -0
- package/esm/editor/src/Node.js +49 -0
- package/esm/editor/src/commands/CommandManager.d.ts +16 -0
- package/esm/editor/src/commands/CommandManager.d.ts.map +1 -0
- package/esm/editor/src/commands/CommandManager.js +61 -0
- package/esm/editor/src/commands/createChainableState.d.ts +3 -0
- package/esm/editor/src/commands/createChainableState.d.ts.map +1 -0
- package/esm/editor/src/commands/createChainableState.js +29 -0
- package/esm/editor/src/commands/mod.d.ts +55 -0
- package/esm/editor/src/commands/mod.d.ts.map +1 -0
- package/esm/editor/src/commands/mod.js +883 -0
- package/esm/editor/src/mod.d.ts +7 -0
- package/esm/editor/src/mod.d.ts.map +1 -0
- package/esm/editor/src/mod.js +6 -0
- package/esm/editor/src/nodeToTreeString.d.ts +4 -0
- package/esm/editor/src/nodeToTreeString.d.ts.map +1 -0
- package/esm/editor/src/nodeToTreeString.js +58 -0
- package/esm/editor/src/plugins/input-rules/InputRulesPlugin.d.ts +23 -0
- package/esm/editor/src/plugins/input-rules/InputRulesPlugin.d.ts.map +1 -0
- package/esm/editor/src/plugins/input-rules/InputRulesPlugin.js +163 -0
- package/esm/editor/src/plugins/input-rules/mod.d.ts +3 -0
- package/esm/editor/src/plugins/input-rules/mod.d.ts.map +1 -0
- package/esm/editor/src/plugins/input-rules/mod.js +2 -0
- package/esm/editor/src/plugins/input-rules/rulebuilders.d.ts +5 -0
- package/esm/editor/src/plugins/input-rules/rulebuilders.d.ts.map +1 -0
- package/esm/editor/src/plugins/input-rules/rulebuilders.js +50 -0
- package/esm/editor/src/plugins/keymap/keymap.d.ts +11 -0
- package/esm/editor/src/plugins/keymap/keymap.d.ts.map +1 -0
- package/esm/editor/src/plugins/keymap/keymap.js +125 -0
- package/esm/editor/src/plugins/keymap/w3c-keyname.d.ts +4 -0
- package/esm/editor/src/plugins/keymap/w3c-keyname.d.ts.map +1 -0
- package/esm/editor/src/plugins/keymap/w3c-keyname.js +124 -0
- package/esm/editor/src/types.d.ts +34 -0
- package/esm/editor/src/types.d.ts.map +1 -0
- package/esm/editor/src/types.js +1 -0
- package/esm/editor/src/utilities/createNodeFromContent.d.ts +9 -0
- package/esm/editor/src/utilities/createNodeFromContent.d.ts.map +1 -0
- package/esm/editor/src/utilities/createNodeFromContent.js +32 -0
- package/esm/editor/src/utilities/getHtmlAttributes.d.ts +9 -0
- package/esm/editor/src/utilities/getHtmlAttributes.d.ts.map +1 -0
- package/esm/editor/src/utilities/getHtmlAttributes.js +47 -0
- package/esm/editor/src/utilities/mod.d.ts +3 -0
- package/esm/editor/src/utilities/mod.d.ts.map +1 -0
- package/esm/editor/src/utilities/mod.js +2 -0
- package/esm/extension-codemirror/src/ExtensionCodeMirror.d.ts +5 -0
- package/esm/extension-codemirror/src/ExtensionCodeMirror.d.ts.map +1 -0
- package/esm/extension-codemirror/src/ExtensionCodeMirror.js +4 -0
- package/esm/extension-codemirror/src/NodeCodeMirror.d.ts +16 -0
- package/esm/extension-codemirror/src/NodeCodeMirror.d.ts.map +1 -0
- package/esm/extension-codemirror/src/NodeCodeMirror.js +186 -0
- package/esm/extension-codemirror/src/NodeDocumentCode.d.ts +7 -0
- package/esm/extension-codemirror/src/NodeDocumentCode.d.ts.map +1 -0
- package/esm/extension-codemirror/src/NodeDocumentCode.js +37 -0
- package/esm/extension-codemirror/src/codeMirrorBlockNodeView.d.ts +6 -0
- package/esm/extension-codemirror/src/codeMirrorBlockNodeView.d.ts.map +1 -0
- package/esm/extension-codemirror/src/codeMirrorBlockNodeView.js +267 -0
- package/esm/extension-codemirror/src/defaults.d.ts +6 -0
- package/esm/extension-codemirror/src/defaults.d.ts.map +1 -0
- package/esm/extension-codemirror/src/defaults.js +57 -0
- package/esm/extension-codemirror/src/languageLoaders.d.ts +5 -0
- package/esm/extension-codemirror/src/languageLoaders.d.ts.map +1 -0
- package/esm/extension-codemirror/src/languageLoaders.js +113 -0
- package/esm/extension-codemirror/src/languages.d.ts +109 -0
- package/esm/extension-codemirror/src/languages.d.ts.map +1 -0
- package/esm/extension-codemirror/src/languages.js +110 -0
- package/esm/extension-codemirror/src/types.d.ts +30 -0
- package/esm/extension-codemirror/src/types.d.ts.map +1 -0
- package/esm/extension-codemirror/src/types.js +1 -0
- package/esm/extension-codemirror/src/utils.d.ts +39 -0
- package/esm/extension-codemirror/src/utils.d.ts.map +1 -0
- package/esm/extension-codemirror/src/utils.js +199 -0
- package/esm/extension-codemirror/src/y-remote-selections.d.ts +15 -0
- package/esm/extension-codemirror/src/y-remote-selections.d.ts.map +1 -0
- package/esm/extension-codemirror/src/y-remote-selections.js +273 -0
- package/esm/extension-codemirror/src/y-sync.d.ts +11 -0
- package/esm/extension-codemirror/src/y-sync.d.ts.map +1 -0
- package/esm/extension-codemirror/src/y-sync.js +29 -0
- package/esm/package.json +3 -0
- package/package.json +2 -6
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/editor/src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,IAAI,eAAe,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAC/E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEtC,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,IAAI,GAAG,IAAI,CAAC;AACnD,MAAM,MAAM,iBAAiB,GAAG,YAAY,GAAG;IAC7C,QAAQ,EAAE,KAAK,CAAC,iBAAiB,GAAG,MAAM,CAAC,CAAC;CAC7C,CAAC;AAEF,MAAM,MAAM,OAAO,GAAG,WAAW,GAAG,WAAW,EAAE,GAAG,IAAI,CAAC;AAEzD,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,YAAY,CAAC;IAC3B,UAAU,EAAE,iBAAiB,EAAE,CAAC;IAChC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC5B,OAAO,CAAC,EAAE,WAAW,EAAE,CAAC;IACxB,KAAK,CAAC,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAC5B,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;KACpB,EAAE,CAAC;IACJ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,SAAS,CAAC,CAAC,IAAI;IACzB,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,CAAC,CAAC;IACtC,OAAO,EAAE,CAAC,CAAC;IACX,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,eAAe,KAAK,CAAC,CAAC;CACtC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { Fragment, Node as ProseMirrorNode, Schema } from 'prosemirror-model';
|
|
2
|
+
import type { JSONContent } from '../types.js';
|
|
3
|
+
export type CreateNodeFromContentOptions = {
|
|
4
|
+
errorOnInvalidContent?: boolean;
|
|
5
|
+
};
|
|
6
|
+
export declare function createNodeFromObject(content: JSONContent | ProseMirrorNode | Fragment, schema: Schema, options?: CreateNodeFromContentOptions): ProseMirrorNode;
|
|
7
|
+
export declare function createNodeFromArray(content: JSONContent[], schema: Schema): Fragment;
|
|
8
|
+
export declare function createNodeFromContent(content: JSONContent | ProseMirrorNode | Fragment, schema: Schema, options?: CreateNodeFromContentOptions): ProseMirrorNode | Fragment;
|
|
9
|
+
//# sourceMappingURL=createNodeFromContent.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createNodeFromContent.d.ts","sourceRoot":"","sources":["../../../../src/editor/src/utilities/createNodeFromContent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,IAAI,IAAI,eAAe,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAE9E,OAAO,KAAK,EAAW,WAAW,EAAE,MAAM,aAAa,CAAC;AAExD,MAAM,MAAM,4BAA4B,GAAG;IACzC,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACjC,CAAC;AAEF,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,WAAW,GAAG,eAAe,GAAG,QAAQ,EACjD,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,4BAA4B,GACrC,eAAe,CA0BjB;AAED,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,WAAW,EAAE,EACtB,MAAM,EAAE,MAAM,GACb,QAAQ,CAIV;AAED,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,WAAW,GAAG,eAAe,GAAG,QAAQ,EACjD,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,4BAA4B,GACrC,eAAe,GAAG,QAAQ,CAY5B"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { Fragment, Node as ProseMirrorNode } from 'prosemirror-model';
|
|
2
|
+
export function createNodeFromObject(content, schema, options) {
|
|
3
|
+
try {
|
|
4
|
+
const node = schema.nodeFromJSON(content);
|
|
5
|
+
if (options?.errorOnInvalidContent) {
|
|
6
|
+
node.check();
|
|
7
|
+
}
|
|
8
|
+
return node;
|
|
9
|
+
}
|
|
10
|
+
catch (error) {
|
|
11
|
+
if (options?.errorOnInvalidContent) {
|
|
12
|
+
throw new Error('Invalid JSON content', {
|
|
13
|
+
cause: error,
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
console.warn('Invalid content.', 'Passed value:', content, 'Error:', error);
|
|
17
|
+
return schema.topNodeType.createAndFill(null, []);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
export function createNodeFromArray(content, schema) {
|
|
21
|
+
return Fragment.fromArray(content.map((item) => schema.nodeFromJSON(item)));
|
|
22
|
+
}
|
|
23
|
+
export function createNodeFromContent(content, schema, options) {
|
|
24
|
+
if (content instanceof ProseMirrorNode || content instanceof Fragment) {
|
|
25
|
+
return content;
|
|
26
|
+
}
|
|
27
|
+
const isJSONContent = typeof content === 'object' && content !== null;
|
|
28
|
+
if (isJSONContent) {
|
|
29
|
+
return createNodeFromObject(content, schema, options);
|
|
30
|
+
}
|
|
31
|
+
return schema.topNodeType.createAndFill(null, []);
|
|
32
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { MarkSpec, Node as ProseMirrorNode, NodeSpec } from 'prosemirror-model';
|
|
2
|
+
import type { Mark } from '../Mark.js';
|
|
3
|
+
import type { Node } from '../Node.js';
|
|
4
|
+
type MarkOfNode = Mark | Node;
|
|
5
|
+
export declare function getHtmlAttributes(extension: MarkOfNode, node: ProseMirrorNode): Record<string, any>;
|
|
6
|
+
export declare function setHtmlAttributes(extension: MarkOfNode, element: HTMLElement): Record<string, any>;
|
|
7
|
+
export declare function addAttributesToSchema(spec: MarkSpec | NodeSpec, extension: MarkOfNode): void;
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=getHtmlAttributes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getHtmlAttributes.d.ts","sourceRoot":"","sources":["../../../../src/editor/src/utilities/getHtmlAttributes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,QAAQ,EACR,IAAI,IAAI,eAAe,EACvB,QAAQ,EACT,MAAM,mBAAmB,CAAC;AAE3B,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAEvC,KAAK,UAAU,GAAG,IAAI,GAAG,IAAI,CAAC;AAE9B,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,UAAU,EACrB,IAAI,EAAE,eAAe,uBAmBtB;AAED,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,uBAc5E;AAED,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,QAAQ,GAAG,QAAQ,EACzB,SAAS,EAAE,UAAU,QAetB"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
export function getHtmlAttributes(extension, node) {
|
|
2
|
+
const attrs = {};
|
|
3
|
+
if (extension.attributes) {
|
|
4
|
+
for (const [key, value] of Object.entries(extension.attributes)) {
|
|
5
|
+
if ('undefined' !== typeof node.attrs[key]) {
|
|
6
|
+
attrs[key] = node.attrs[key];
|
|
7
|
+
}
|
|
8
|
+
else {
|
|
9
|
+
if (value.toDom) {
|
|
10
|
+
attrs[key] = value.toDom(node);
|
|
11
|
+
}
|
|
12
|
+
else {
|
|
13
|
+
attrs[key] = value.default;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
return attrs;
|
|
19
|
+
}
|
|
20
|
+
export function setHtmlAttributes(extension, element) {
|
|
21
|
+
const attrs = {};
|
|
22
|
+
if (extension.attributes) {
|
|
23
|
+
for (const [key, value] of Object.entries(extension.attributes)) {
|
|
24
|
+
if (value.fromDom) {
|
|
25
|
+
attrs[key] = value.fromDom(element);
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
attrs[key] = value.default;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
return attrs;
|
|
33
|
+
}
|
|
34
|
+
export function addAttributesToSchema(spec, extension) {
|
|
35
|
+
const attrs = {};
|
|
36
|
+
if (extension.attributes) {
|
|
37
|
+
if (!spec.attrs) {
|
|
38
|
+
spec.attrs = {};
|
|
39
|
+
}
|
|
40
|
+
for (const [key, value] of Object.entries(extension.attributes)) {
|
|
41
|
+
spec.attrs[key] = value;
|
|
42
|
+
if (!value.toDom) {
|
|
43
|
+
value.toDom = (node) => node.attrs[key];
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mod.d.ts","sourceRoot":"","sources":["../../../../src/editor/src/utilities/mod.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC;AACvC,cAAc,4BAA4B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ExtensionCodeMirror.d.ts","sourceRoot":"","sources":["../../../src/extension-codemirror/src/ExtensionCodeMirror.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AAEpC,qBAAa,mBAAmB;CAC/B"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Plugin, PluginKey } from 'prosemirror-state';
|
|
2
|
+
import type { NodeSpec, NodeType, Schema } from 'prosemirror-model';
|
|
3
|
+
import { Converter, type CoreEditor, Node } from '../../editor/src/mod.js';
|
|
4
|
+
import { type CommandFactories, type CommandShortcuts } from '../../editor/src/commands/mod.js';
|
|
5
|
+
import { type InputRule } from '../../editor/src/plugins/input-rules/mod.js';
|
|
6
|
+
export declare const codeMirrorBlockKey: PluginKey<any>;
|
|
7
|
+
export declare class NodeCodeMirror extends Node {
|
|
8
|
+
name: string;
|
|
9
|
+
getConverters(editor: CoreEditor, schema: Schema): Record<string, Converter>;
|
|
10
|
+
getNodeSpec(): NodeSpec;
|
|
11
|
+
getInputRules(type: NodeType): InputRule[];
|
|
12
|
+
getCommandFactories(editor: CoreEditor, type: NodeType): Partial<CommandFactories>;
|
|
13
|
+
getKeyboardShortcuts(): Partial<CommandShortcuts>;
|
|
14
|
+
getProseMirrorPlugins(editor: CoreEditor): Plugin[];
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=NodeCodeMirror.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NodeCodeMirror.d.ts","sourceRoot":"","sources":["../../../src/extension-codemirror/src/NodeCodeMirror.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,MAAM,EAAE,SAAS,EAAa,MAAM,mBAAmB,CAAC;AAC9E,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEpE,OAAO,EAAE,SAAS,EAAE,KAAK,UAAU,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAC;AAC3E,OAAO,EACL,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EAEtB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EACL,KAAK,SAAS,EAEf,MAAM,6CAA6C,CAAC;AAOrD,eAAO,MAAM,kBAAkB,gBAAoC,CAAC;AAyCpE,qBAAa,cAAe,SAAQ,IAAI;IAC7B,IAAI,SAAgB;IAGpB,aAAa,CACpB,MAAM,EAAE,UAAU,EAClB,MAAM,EAAE,MAAM,GACb,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC;IAgDnB,WAAW,IAAI,QAAQ;IA0CvB,aAAa,CAAC,IAAI,EAAE,QAAQ,GAAG,SAAS,EAAE;IAQ1C,mBAAmB,CAC1B,MAAM,EAAE,UAAU,EAClB,IAAI,EAAE,QAAQ,GACb,OAAO,CAAC,gBAAgB,CAAC;IAUnB,oBAAoB,IAAI,OAAO,CAAC,gBAAgB,CAAC;IAUjD,qBAAqB,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,EAAE;CA8B7D"}
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
import { Plugin, PluginKey, Selection } from 'prosemirror-state';
|
|
2
|
+
import { Node } from '../../editor/src/mod.js';
|
|
3
|
+
import { setBlockType, } from '../../editor/src/commands/mod.js';
|
|
4
|
+
import { textblockTypeInputRule, } from '../../editor/src/plugins/input-rules/mod.js';
|
|
5
|
+
import { codeMirrorBlockNodeView } from './codeMirrorBlockNodeView.js';
|
|
6
|
+
import { defaultSettings } from './defaults.js';
|
|
7
|
+
import languageLoaders, { legacyLanguageLoaders } from './languageLoaders.js';
|
|
8
|
+
import { createNodeFromObject } from '../../editor/src/utilities/mod.js';
|
|
9
|
+
export const codeMirrorBlockKey = new PluginKey('codemirror-block');
|
|
10
|
+
function arrowHandler(dir) {
|
|
11
|
+
return (state, dispatch, view) => {
|
|
12
|
+
if (state.selection.empty && view.endOfTextblock(dir)) {
|
|
13
|
+
let side = dir == 'left' || dir == 'up' ? -1 : 1;
|
|
14
|
+
let $head = state.selection.$head;
|
|
15
|
+
let nextPos = Selection.near(state.doc.resolve(side > 0 ? $head.after() : $head.before()), side);
|
|
16
|
+
if (nextPos.$head && nextPos.$head.parent.type.name == 'code_block') {
|
|
17
|
+
dispatch(state.tr.setSelection(nextPos));
|
|
18
|
+
return true;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
return false;
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
const LANGS = [
|
|
25
|
+
'diff',
|
|
26
|
+
'dockerfile',
|
|
27
|
+
'http',
|
|
28
|
+
'nginx',
|
|
29
|
+
'properties',
|
|
30
|
+
'shell',
|
|
31
|
+
'toml',
|
|
32
|
+
'yaml',
|
|
33
|
+
'sql',
|
|
34
|
+
'javascript',
|
|
35
|
+
'cpp',
|
|
36
|
+
'css',
|
|
37
|
+
'xml',
|
|
38
|
+
'java',
|
|
39
|
+
'json',
|
|
40
|
+
'markdown',
|
|
41
|
+
'rust',
|
|
42
|
+
'html',
|
|
43
|
+
];
|
|
44
|
+
export class NodeCodeMirror extends Node {
|
|
45
|
+
constructor() {
|
|
46
|
+
super(...arguments);
|
|
47
|
+
Object.defineProperty(this, "name", {
|
|
48
|
+
enumerable: true,
|
|
49
|
+
configurable: true,
|
|
50
|
+
writable: true,
|
|
51
|
+
value: 'code_block'
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
// requires = ['doc'];
|
|
55
|
+
getConverters(editor, schema) {
|
|
56
|
+
return {
|
|
57
|
+
'text/code-only': {
|
|
58
|
+
fromDoc: async (document) => {
|
|
59
|
+
const retVal = [];
|
|
60
|
+
if (document.content) {
|
|
61
|
+
for (const node of document.content.toJSON()) {
|
|
62
|
+
if ('code_block' === node.type && Array.isArray(node.content)) {
|
|
63
|
+
for (const content of node.content) {
|
|
64
|
+
retVal.push(content.text);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
return retVal.join('');
|
|
70
|
+
},
|
|
71
|
+
toDoc: async (buffer) => {
|
|
72
|
+
const content = {
|
|
73
|
+
'type': 'doc_code',
|
|
74
|
+
'content': [
|
|
75
|
+
{
|
|
76
|
+
'type': 'code_block',
|
|
77
|
+
'attrs': {
|
|
78
|
+
'lang': schema.topNodeType.spec.defaultAttrs?.lang,
|
|
79
|
+
},
|
|
80
|
+
'content': [
|
|
81
|
+
{
|
|
82
|
+
'type': 'text',
|
|
83
|
+
'text': code,
|
|
84
|
+
},
|
|
85
|
+
],
|
|
86
|
+
},
|
|
87
|
+
],
|
|
88
|
+
};
|
|
89
|
+
return createNodeFromObject(content, schema, {
|
|
90
|
+
slice: false,
|
|
91
|
+
errorOnInvalidContent: false,
|
|
92
|
+
});
|
|
93
|
+
},
|
|
94
|
+
},
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
getNodeSpec() {
|
|
98
|
+
const langs = this.config.languageWhitelist || LANGS;
|
|
99
|
+
return {
|
|
100
|
+
content: 'text*',
|
|
101
|
+
marks: '',
|
|
102
|
+
group: 'block',
|
|
103
|
+
code: true,
|
|
104
|
+
defining: true,
|
|
105
|
+
parseDOM: [
|
|
106
|
+
{
|
|
107
|
+
tag: 'pre',
|
|
108
|
+
preserveWhitespace: 'full',
|
|
109
|
+
getAttrs(dom) {
|
|
110
|
+
let lang = dom.getAttribute('lang');
|
|
111
|
+
if (!lang) {
|
|
112
|
+
for (const className of dom.classList) {
|
|
113
|
+
if (className.startsWith('lang-') &&
|
|
114
|
+
langs.indexOf(className.substring('lang-'.length)) > -1) {
|
|
115
|
+
lang = className.substring('lang-'.length);
|
|
116
|
+
break;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
return {
|
|
121
|
+
lang,
|
|
122
|
+
};
|
|
123
|
+
},
|
|
124
|
+
},
|
|
125
|
+
],
|
|
126
|
+
attrs: { lang: { default: null } },
|
|
127
|
+
toDOM(node) {
|
|
128
|
+
const { lang } = node.attrs;
|
|
129
|
+
return ['pre', { lang }, ['code', 0]];
|
|
130
|
+
},
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
getInputRules(type) {
|
|
134
|
+
/// Given a code block node type, returns an input rule that turns a
|
|
135
|
+
/// textblock starting with three backticks into a code block.
|
|
136
|
+
return [
|
|
137
|
+
textblockTypeInputRule(/^```$/, type),
|
|
138
|
+
];
|
|
139
|
+
}
|
|
140
|
+
getCommandFactories(editor, type) {
|
|
141
|
+
return {
|
|
142
|
+
'setCodeBlock': (lang) => setBlockType(type, { lang }),
|
|
143
|
+
ArrowLeft: () => arrowHandler('left'),
|
|
144
|
+
ArrowRight: () => arrowHandler('right'),
|
|
145
|
+
ArrowUp: () => arrowHandler('up'),
|
|
146
|
+
ArrowDown: () => arrowHandler('down'),
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
getKeyboardShortcuts() {
|
|
150
|
+
return {
|
|
151
|
+
'Shift-Ctrl-"': 'setCodeBlock',
|
|
152
|
+
'ArrowLeft': 'ArrowLeft',
|
|
153
|
+
'ArrowRight': 'ArrowRight',
|
|
154
|
+
'ArrowUp': 'ArrowUp',
|
|
155
|
+
'ArrowDown': 'ArrowDown',
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
getProseMirrorPlugins(editor) {
|
|
159
|
+
const codeMirrorBlockPlugin = (settings) => new Plugin({
|
|
160
|
+
key: codeMirrorBlockKey,
|
|
161
|
+
props: {
|
|
162
|
+
nodeViews: {
|
|
163
|
+
[this.name]: codeMirrorBlockNodeView(settings),
|
|
164
|
+
},
|
|
165
|
+
},
|
|
166
|
+
});
|
|
167
|
+
return [
|
|
168
|
+
codeMirrorBlockPlugin({
|
|
169
|
+
provider: this.config.provider,
|
|
170
|
+
languageWhitelist: this.config.languageWhitelist || LANGS,
|
|
171
|
+
shadowRoot: this.config.shadowRoot,
|
|
172
|
+
...defaultSettings,
|
|
173
|
+
readOnly: this.config.readOnly,
|
|
174
|
+
languageLoaders: { ...languageLoaders, ...legacyLanguageLoaders },
|
|
175
|
+
undo: () => {
|
|
176
|
+
editor.chain().undo().run();
|
|
177
|
+
},
|
|
178
|
+
redo: () => {
|
|
179
|
+
editor.chain().redo().run();
|
|
180
|
+
},
|
|
181
|
+
theme: [...(this.config.theme || [])],
|
|
182
|
+
}),
|
|
183
|
+
// keymap(codeBlockKeymap),
|
|
184
|
+
];
|
|
185
|
+
}
|
|
186
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NodeDocumentCode.d.ts","sourceRoot":"","sources":["../../../src/extension-codemirror/src/NodeDocumentCode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAE7C,OAAO,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAC;AAE/C,qBAAa,gBAAiB,SAAQ,IAAI;IAC/B,IAAI,SAAc;IAElB,WAAW,IAAI,QAAQ;CAyBjC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { Node } from '../../editor/src/mod.js';
|
|
2
|
+
export class NodeDocumentCode extends Node {
|
|
3
|
+
constructor() {
|
|
4
|
+
super(...arguments);
|
|
5
|
+
Object.defineProperty(this, "name", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
configurable: true,
|
|
8
|
+
writable: true,
|
|
9
|
+
value: 'doc_code'
|
|
10
|
+
});
|
|
11
|
+
}
|
|
12
|
+
getNodeSpec() {
|
|
13
|
+
return {
|
|
14
|
+
content: 'code_block',
|
|
15
|
+
defaultAttrs: {
|
|
16
|
+
'lang': this.config.lang || null,
|
|
17
|
+
},
|
|
18
|
+
EMPTY_DOC: {
|
|
19
|
+
'type': this.name,
|
|
20
|
+
'content': [
|
|
21
|
+
{
|
|
22
|
+
'type': 'code_block',
|
|
23
|
+
'attrs': {
|
|
24
|
+
'lang': this.config.lang || null,
|
|
25
|
+
},
|
|
26
|
+
'content': [
|
|
27
|
+
// {
|
|
28
|
+
// "type": "text",
|
|
29
|
+
// "text": ""
|
|
30
|
+
// }
|
|
31
|
+
],
|
|
32
|
+
},
|
|
33
|
+
],
|
|
34
|
+
},
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { Node } from 'prosemirror-model';
|
|
2
|
+
import { EditorView as PMEditorView, NodeView } from 'prosemirror-view';
|
|
3
|
+
import { CodeBlockSettings } from './types.js';
|
|
4
|
+
export declare const themeCallbacks: Array<(theme: string) => void>;
|
|
5
|
+
export declare const codeMirrorBlockNodeView: (settings: CodeBlockSettings) => (pmNode: Node, view: PMEditorView, getPos: (() => number) | boolean) => NodeView;
|
|
6
|
+
//# sourceMappingURL=codeMirrorBlockNodeView.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codeMirrorBlockNodeView.d.ts","sourceRoot":"","sources":["../../../src/extension-codemirror/src/codeMirrorBlockNodeView.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AACzC,OAAO,EAEL,UAAU,IAAI,YAAY,EAC1B,QAAQ,EACT,MAAM,kBAAkB,CAAC;AA0C1B,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAO/C,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAM,CAAC;AA0QjE,eAAO,MAAM,uBAAuB,EAAE,CACpC,QAAQ,EAAE,iBAAiB,KACxB,CACH,MAAM,EAAE,IAAI,EACZ,IAAI,EAAE,YAAY,EAClB,MAAM,EAAE,CAAC,MAAM,MAAM,CAAC,GAAG,OAAO,KAC7B,QAQJ,CAAC"}
|