59 lines
1.1 KiB
TypeScript
59 lines
1.1 KiB
TypeScript
import { toggleMark } from "prosemirror-commands";
|
|
import { MarkSpec, MarkType } from "prosemirror-model";
|
|
import markInputRule from "../lib/markInputRule";
|
|
import Mark from "./Mark";
|
|
|
|
export default class Strikethrough extends Mark {
|
|
get name() {
|
|
return "strikethrough";
|
|
}
|
|
|
|
get schema(): MarkSpec {
|
|
return {
|
|
parseDOM: [
|
|
{
|
|
tag: "s",
|
|
},
|
|
{
|
|
tag: "del",
|
|
},
|
|
{
|
|
tag: "strike",
|
|
},
|
|
{
|
|
style: "text-decoration",
|
|
getAttrs: (value) => (value === "line-through" ? null : false),
|
|
},
|
|
],
|
|
toDOM: () => ["del", 0],
|
|
};
|
|
}
|
|
|
|
keys({ type }: { type: MarkType }) {
|
|
return {
|
|
"Mod-d": toggleMark(type),
|
|
};
|
|
}
|
|
|
|
inputRules({ type }: { type: MarkType }) {
|
|
return [markInputRule(/~([^~]+)~$/, type)];
|
|
}
|
|
|
|
toMarkdown() {
|
|
return {
|
|
open: "~~",
|
|
close: "~~",
|
|
mixable: true,
|
|
expelEnclosingWhitespace: true,
|
|
};
|
|
}
|
|
|
|
get markdownToken() {
|
|
return "s";
|
|
}
|
|
|
|
parseMarkdown() {
|
|
return { mark: "strikethrough" };
|
|
}
|
|
}
|