aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/client/util/ParagraphNodeSpec.ts2
-rw-r--r--src/client/util/RichTextRules.ts28
-rw-r--r--src/client/util/RichTextSchema.tsx13
3 files changed, 30 insertions, 13 deletions
diff --git a/src/client/util/ParagraphNodeSpec.ts b/src/client/util/ParagraphNodeSpec.ts
index 3a993e1ff..593aec498 100644
--- a/src/client/util/ParagraphNodeSpec.ts
+++ b/src/client/util/ParagraphNodeSpec.ts
@@ -115,7 +115,7 @@ function toDOM(node: Node): DOMOutputSpec {
attrs.id = id;
}
- return ['p', attrs, 0];
+ return ['p', { ...attrs, ...{ style: `text-indent: ${indent}; padding-left: ${indent < 0 ? -indent : undefined};` } }, 0];
}
export const toParagraphDOM = toDOM;
diff --git a/src/client/util/RichTextRules.ts b/src/client/util/RichTextRules.ts
index c9414fb0b..4e60976d5 100644
--- a/src/client/util/RichTextRules.ts
+++ b/src/client/util/RichTextRules.ts
@@ -115,6 +115,34 @@ export const inpRules = {
return node ? state.tr.addMark(start, end, schema.marks.user_tag.create({ userid: Doc.CurrentUserEmail, tag: "ignore", modified: Math.round(Date.now() / 1000 / 60) })) : state.tr;
}),
new InputRule(
+ new RegExp(/d$/),
+ (state, match, start, end) => {
+ if (state.selection.to === state.selection.from) return null;
+ const pos = (state.doc.resolve(start) as any);
+ let depth = pos.path.length / 3 - 1;
+ for (; depth >= 0; depth--) {
+ if (pos.node(depth).type === schema.nodes.paragraph) {
+ const replaced = state.tr.setNodeMarkup(pos.pos - pos.parentOffset - 1, pos.node(depth).type, { ...pos.node(depth).attrs, indent: 25 });
+ return replaced.setSelection(new TextSelection(replaced.doc.resolve(end - 2)));
+ }
+ }
+ return null;
+ }),
+ new InputRule(
+ new RegExp(/h$/),
+ (state, match, start, end) => {
+ if (state.selection.to === state.selection.from) return null;
+ const pos = (state.doc.resolve(start) as any);
+ let depth = pos.path.length / 3 - 1;
+ for (; depth >= 0; depth--) {
+ if (pos.node(depth).type === schema.nodes.paragraph) {
+ const replaced = state.tr.setNodeMarkup(pos.pos - pos.parentOffset - 1, pos.node(depth).type, { ...pos.node(depth).attrs, indent: -25 });
+ return replaced.setSelection(new TextSelection(replaced.doc.resolve(end - 2)));
+ }
+ }
+ return null;
+ }),
+ new InputRule(
new RegExp(/!$/),
(state, match, start, end) => {
if (state.selection.to === state.selection.from && !(state as any).EnteringStyle) return null;
diff --git a/src/client/util/RichTextSchema.tsx b/src/client/util/RichTextSchema.tsx
index 9e95314a9..02ede3419 100644
--- a/src/client/util/RichTextSchema.tsx
+++ b/src/client/util/RichTextSchema.tsx
@@ -18,9 +18,8 @@ import { Transform } from "./Transform";
import React = require("react");
import { BoolCast, NumCast } from "../../new_fields/Types";
import { FormattedTextBox } from "../views/nodes/FormattedTextBox";
-import { any } from "bluebird";
-const pDOM: DOMOutputSpecArray = ["p", 0], blockquoteDOM: DOMOutputSpecArray = ["blockquote", 0], hrDOM: DOMOutputSpecArray = ["hr"],
+const blockquoteDOM: DOMOutputSpecArray = ["blockquote", 0], hrDOM: DOMOutputSpecArray = ["hr"],
preDOM: DOMOutputSpecArray = ["pre", ["code", 0]], brDOM: DOMOutputSpecArray = ["br"], ulDOM: DOMOutputSpecArray = ["ul", 0];
// :: Object
@@ -31,7 +30,6 @@ export const nodes: { [index: string]: NodeSpec } = {
content: "block+"
},
-
footnote: {
group: "inline",
content: "inline*",
@@ -46,15 +44,6 @@ export const nodes: { [index: string]: NodeSpec } = {
parseDOM: [{ tag: "footnote" }]
},
- // // :: NodeSpec A plain paragraph textblock. Represented in the DOM
- // // as a `<p>` element.
- // paragraph: {
- // content: "inline*",
- // group: "block",
- // parseDOM: [{ tag: "p" }],
- // toDOM() { return pDOM; }
- // },
-
paragraph: ParagraphNodeSpec,
// :: NodeSpec A blockquote (`<blockquote>`) wrapping one or more blocks.