Skip to content
Snippets Groups Projects
Commit 212bb8ec authored by chris's avatar chris
Browse files

move cursor when on deletion

parent 3efcec39
No related branches found
No related tags found
1 merge request!107Tracked transaction
......@@ -47,7 +47,9 @@ const Editoria = () => (
autoFocus
placeholder="Type Something..."
fileUpload={file => renderImage(file)}
value={"<p>this is some content</p><p>second paragraph</p>"}
value={
'<p class="paragraph">this is <span class="deletion user-1234" data-id="" data-user="1234" data-username="demo" data-date="26486384" data-group="">some</span> content</p><p class="paragraph">second paragraph</p>'
}
layout={EditoriaLayout}
TrackChange
// onChange={source => console.log(source)}
......
import { ReplaceStep } from "prosemirror-transform";
import { CellSelection } from "prosemirror-tables";
import { DocumentHelpers } from "wax-prosemirror-utilities";
import markDeletion from "./markDeletion";
import markInsertion from "./markInsertion";
const replaceStep = (state, tr, step, newTr, map, doc, user, date) => {
// We only insert content if this is not directly a tr for cell deletion. This is because tables delete rows by deleting the
// contents of each cell and replacing it with an empty paragraph.
const cellDeleteTr =
["deleteContentBackward", "deleteContentForward"].includes(
tr.getMeta("inputType")
) && state.selection instanceof CellSelection;
// if deletion mark move to the end of deletion
const deletionMarkSchema = state.schema.marks.deletion;
const deletionMark = DocumentHelpers.findMark(
state,
deletionMarkSchema,
false
);
const positionTo = deletionMark ? deletionMark.to : step.to;
const newStep = !cellDeleteTr
? new ReplaceStep(
step.to, // We insert all the same steps, but with "from"/"to" both set to "to" in order not to delete content. Mapped as needed.
step.to,
positionTo, // We insert all the same steps, but with "from"/"to" both set to "to" in order not to delete content. Mapped as needed.
positionTo,
step.slice,
step.structure
)
......@@ -28,6 +36,7 @@ const replaceStep = (state, tr, step, newTr, map, doc, user, date) => {
return;
}
const mappedNewStepTo = newStep.getMap().map(newStep.to);
markInsertion(trTemp, newStep.from, mappedNewStepTo, user, date);
// We condense it down to a single replace step.
const condensedStep = new ReplaceStep(
......
......@@ -13,6 +13,8 @@ import {
Mapping
} from "prosemirror-transform";
import { DocumentHelpers } from "wax-prosemirror-utilities";
import replaceStep from "./helpers/replaceStep";
import replaceAroundStep from "./helpers/replaceAroundStep";
import addMarkStep from "./helpers/addMarkStep";
......@@ -65,6 +67,13 @@ const trackedTransaction = (tr, state, user) => {
}
if (tr.selectionSet) {
const deletionMarkSchema = state.schema.marks.deletion;
const deletionMark = DocumentHelpers.findMark(
state,
deletionMarkSchema,
false
);
if (
tr.selection instanceof TextSelection &&
(tr.selection.from < state.selection.from ||
......@@ -72,7 +81,11 @@ const trackedTransaction = (tr, state, user) => {
) {
const caretPos = map.map(tr.selection.from, -1);
newTr.setSelection(new TextSelection(newTr.doc.resolve(caretPos)));
} else if (tr.selection.from > state.selection.from && deletionMark) {
const caretPos = map.map(deletionMark.to + 1, 1);
newTr.setSelection(new TextSelection(newTr.doc.resolve(caretPos)));
} else {
console.log("not");
newTr.setSelection(tr.selection.map(newTr.doc, map));
}
}
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment