Skip to content

Commit 333a816

Browse files
authored
feat: support overriding codemirror history extension (#331)
* feat: support overriding codemirror history extension * feat: support overriding codemirror history extension
1 parent 86163ab commit 333a816

File tree

2 files changed

+25
-7
lines changed

2 files changed

+25
-7
lines changed

src/bundle/Editor.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,10 @@ type ChangeEditorModeOptions = {
111111
export type MarkupConfig = {
112112
/** Additional extensions for codemirror instance. */
113113
extensions?: CreateCodemirrorParams['extensions'];
114+
/** Can be used to disable some of the default extensions */
115+
disabledExtensions?: CreateCodemirrorParams['disabledExtensions'];
116+
/** Additional keymaps for codemirror instance */
117+
keymaps?: CreateCodemirrorParams['keymaps'];
114118
/**
115119
* Additional language data for markdown language in codemirror.
116120
* Can be used to configure additional autocompletions and others.
@@ -287,6 +291,8 @@ export class EditorImpl extends SafeEventEmitter<EventMapInt> implements EditorI
287291
uploadHandler: this.fileUploadHandler,
288292
needImgDimms: this.needToSetDimensionsForUploadedImages,
289293
extensions: this.#markupConfig.extensions,
294+
disabledExtensions: this.#markupConfig.disabledExtensions,
295+
keymaps: this.#markupConfig.keymaps,
290296
yfmLangOptions: {languageData: this.#markupConfig.languageData},
291297
receiver: this,
292298
}),

src/markup/codemirror/create.ts

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import {
88
} from '@codemirror/commands';
99
import {syntaxHighlighting} from '@codemirror/language';
1010
import type {Extension, StateCommand} from '@codemirror/state';
11-
import {EditorView, EditorViewConfig, keymap, placeholder} from '@codemirror/view';
11+
import {EditorView, EditorViewConfig, KeyBinding, keymap, placeholder} from '@codemirror/view';
1212

1313
import {EventMap} from '../../bundle/Editor';
1414
import {ActionName} from '../../bundle/config/action-names';
@@ -55,6 +55,10 @@ export type CreateCodemirrorParams = {
5555
uploadHandler?: FileUploadHandler;
5656
needImgDimms?: boolean;
5757
extensions?: Extension[];
58+
disabledExtensions?: {
59+
history?: boolean;
60+
};
61+
keymaps?: readonly KeyBinding[];
5862
receiver?: Receiver<EventMap>;
5963
yfmLangOptions?: YfmLangOptions;
6064
};
@@ -70,14 +74,19 @@ export function createCodemirror(params: CreateCodemirrorParams) {
7074
onChange,
7175
onDocChange,
7276
extensions: extraExtensions,
77+
disabledExtensions = {},
78+
keymaps = [],
7379
receiver,
7480
yfmLangOptions,
7581
} = params;
7682

77-
const extensions: Extension[] = [
78-
gravityTheme,
79-
placeholder(placeholderText),
80-
history(),
83+
const extensions: Extension[] = [gravityTheme, placeholder(placeholderText)];
84+
85+
if (!disabledExtensions.history) {
86+
extensions.push(history());
87+
}
88+
89+
extensions.push(
8190
syntaxHighlighting(gravityHighlightStyle),
8291
keymap.of([
8392
{key: f.toCM(A.Bold)!, run: withLogger(ActionName.bold, toggleBold)},
@@ -114,7 +123,8 @@ export function createCodemirror(params: CreateCodemirrorParams) {
114123
{key: 'Tab', preventDefault: true, run: insertTab},
115124
indentWithTab,
116125
...defaultKeymap,
117-
...historyKeymap,
126+
...(disabledExtensions.history ? [] : historyKeymap),
127+
...keymaps,
118128
]),
119129
autocompletion(),
120130
yfmLang(yfmLangOptions),
@@ -131,7 +141,8 @@ export function createCodemirror(params: CreateCodemirrorParams) {
131141
anchorSelector: '.g-md-search-anchor',
132142
receiver,
133143
}),
134-
];
144+
);
145+
135146
if (params.uploadHandler) {
136147
extensions.push(
137148
FileUploadHandlerFacet.of({
@@ -140,6 +151,7 @@ export function createCodemirror(params: CreateCodemirrorParams) {
140151
}),
141152
);
142153
}
154+
143155
if (extraExtensions) {
144156
extensions.push(...extraExtensions);
145157
}

0 commit comments

Comments
 (0)