11import type { NodeType } from 'prosemirror-model' ;
22import { chainCommands , exitCode } from 'prosemirror-commands' ;
3+ import { logger } from '../../../logger' ;
34import type { ExtensionAuto , Keymap } from '../../../core' ;
45import { isMac } from '../../../utils/platform' ;
56import { nodeTypeFactory } from '../../../utils/schema' ;
@@ -10,12 +11,25 @@ export const hbType = nodeTypeFactory(hardBreak);
1011export const sbType = nodeTypeFactory ( softBreak ) ;
1112
1213export type BreaksOptions = {
13- // TODO: [builder context] get this parameter from builder context
14- /** @default 'hard' */
14+ /**
15+ * This option is used if the 'breaks' parameter is not specified via the context
16+ * @default 'hard'
17+ */
18+ // TODO: [context] make this deprecated
1519 preferredBreak ?: 'hard' | 'soft' ;
1620} ;
1721
1822export const Breaks : ExtensionAuto < BreaksOptions > = ( builder , opts ) => {
23+ let preferredBreak : 'hard' | 'soft' ;
24+ if ( builder . context . has ( 'breaks' ) ) {
25+ preferredBreak = builder . context . get ( 'breaks' ) ? 'soft' : 'hard' ;
26+ } else {
27+ preferredBreak = opts . preferredBreak ?? 'hard' ;
28+ logger . info (
29+ "[Breaks extension]: Parameter 'breaks' is not defined in context; value from options is used" ,
30+ ) ;
31+ }
32+
1933 builder . addNode ( hardBreak , ( ) => ( {
2034 spec : {
2135 inline : true ,
@@ -62,7 +76,7 @@ export const Breaks: ExtensionAuto<BreaksOptions> = (builder, opts) => {
6276 } ) ) ;
6377
6478 builder . addKeymap ( ( { schema} ) => {
65- const cmd = addBr ( ( opts ?. preferredBreak === 'soft' ? sbType : hbType ) ( schema ) ) ;
79+ const cmd = addBr ( ( preferredBreak === 'soft' ? sbType : hbType ) ( schema ) ) ;
6680 const keys : Keymap = {
6781 'Shift-Enter' : cmd ,
6882 } ;
@@ -80,3 +94,14 @@ const addBr = (br: NodeType) =>
8094 dispatch ?.( state . tr . replaceSelectionWith ( br . create ( ) ) . scrollIntoView ( ) ) ;
8195 return true ;
8296 } ) ;
97+
98+ declare global {
99+ namespace YfmEditor {
100+ interface Context {
101+ /**
102+ * Same as @type {MarkdownIt.Options.breaks}
103+ */
104+ breaks : boolean ;
105+ }
106+ }
107+ }
0 commit comments