88} from '@codemirror/commands' ;
99import { syntaxHighlighting } from '@codemirror/language' ;
1010import 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
1313import { EventMap } from '../../bundle/Editor' ;
1414import { 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