Skip to content
This repository was archived by the owner on Jan 20, 2022. It is now read-only.

Commit 138a8af

Browse files
committed
Merge branch 'develop' of github.com:outline/rich-markdown-editor into develop
2 parents 7483bdd + ea5d2bc commit 138a8af

File tree

5 files changed

+77
-11
lines changed

5 files changed

+77
-11
lines changed

.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
dist
22
node_modules/*
33
.log
4-
.DS_Store
4+
.DS_Store
5+
.idea

src/index.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ import Placeholder from "./plugins/Placeholder";
6464
import SmartText from "./plugins/SmartText";
6565
import TrailingNode from "./plugins/TrailingNode";
6666
import MarkdownPaste from "./plugins/MarkdownPaste";
67+
import HardBreak from "./nodes/HardBreak";
6768

6869
export { schema, parser, serializer } from "./server";
6970

@@ -218,6 +219,7 @@ class RichMarkdownEditor extends React.PureComponent<Props, State> {
218219
[
219220
new Doc(),
220221
new Text(),
222+
new HardBreak(),
221223
new Paragraph(),
222224
new Blockquote(),
223225
new BulletList(),

src/lib/markdown/tables.ts

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,24 @@ export default function markdownTables(md: MarkdownIt) {
1212
tokens[i].level--;
1313
}
1414

15+
// convert break line into br tag
16+
if (tokens[i].type === "inline" && tokens[i].content.includes("\\n")) {
17+
const nodes: Token[] = [];
18+
const breakParts = tokens[i].content.split("\\n");
19+
breakParts.forEach((part, index) => {
20+
const token = new Token("text", "", 1);
21+
token.content = part.trim();
22+
nodes.push(token);
23+
24+
if (index < breakParts.length - 1) {
25+
const brToken = new Token("br", "br", 1);
26+
nodes.push(brToken);
27+
}
28+
});
29+
30+
tokens.splice(i, 1, ...nodes);
31+
}
32+
1533
// filter out incompatible tokens from markdown-it that we don't need
1634
// in prosemirror. thead/tbody do nothing.
1735
if (

src/nodes/HardBreak.ts

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
import Node from "./Node";
2+
import { isInTable } from "prosemirror-tables";
3+
4+
export default class HardBreak extends Node {
5+
get name() {
6+
return "br";
7+
}
8+
9+
get schema() {
10+
return {
11+
inline: true,
12+
group: "inline",
13+
selectable: false,
14+
parseDOM: [{ tag: "br" }],
15+
toDOM() {
16+
return ["br"];
17+
},
18+
};
19+
}
20+
21+
commands({ type }) {
22+
return () => (state, dispatch) => {
23+
dispatch(state.tr.replaceSelectionWith(type.create()).scrollIntoView());
24+
return true;
25+
};
26+
}
27+
28+
keys({ type }) {
29+
return {
30+
"Shift-Enter": (state, dispatch) => {
31+
if (!isInTable(state)) return false;
32+
dispatch(state.tr.replaceSelectionWith(type.create()).scrollIntoView());
33+
return true;
34+
},
35+
};
36+
}
37+
38+
toMarkdown(state) {
39+
state.write(" \\n ");
40+
}
41+
42+
parseMarkdown() {
43+
return { node: "br" };
44+
}
45+
}

src/nodes/Table.ts

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,25 @@
11
import Node from "./Node";
2-
import { DecorationSet, Decoration } from "prosemirror-view";
2+
import { Decoration, DecorationSet } from "prosemirror-view";
33
import {
4-
tableEditing,
5-
goToNextCell,
6-
addColumnBefore,
74
addColumnAfter,
5+
addColumnBefore,
86
deleteColumn,
97
deleteRow,
108
deleteTable,
11-
toggleHeaderColumn,
12-
toggleHeaderRow,
13-
toggleHeaderCell,
14-
setCellAttr,
159
fixTables,
10+
goToNextCell,
1611
isInTable,
12+
setCellAttr,
13+
tableEditing,
14+
toggleHeaderCell,
15+
toggleHeaderColumn,
16+
toggleHeaderRow,
1717
} from "prosemirror-tables";
1818
import {
19-
getCellsInColumn,
19+
addRowAt,
2020
createTable,
21+
getCellsInColumn,
2122
moveRow,
22-
addRowAt,
2323
} from "prosemirror-utils";
2424
import { Plugin, TextSelection } from "prosemirror-state";
2525

0 commit comments

Comments
 (0)