diff --git a/editors/editoria/src/Editoria.js b/editors/editoria/src/Editoria.js index cf3460faa9b15130446baf7033f26e61d9ff5488..eef362a05c763e4a61286d28e9601f9d889319aa 100644 --- a/editors/editoria/src/Editoria.js +++ b/editors/editoria/src/Editoria.js @@ -48,12 +48,13 @@ const Editoria = () => ( placeholder="Type Something..." fileUpload={file => renderImage(file)} 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><ul> <li> <p> some li text</p></li><li> <p> some li second text</p></li><li> <p> some li third text</p></li></ul><p class="paragraph">second paragraph</p>' + '<p class="paragraph">this is</p><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><ul> <li> <p> some li text</p></li><li> <p> some li second text</p></li><li> <p> some li third text</p></li></ul><p class="paragraph">second paragraph</p>' } layout={EditoriaLayout} TrackChange // onChange={source => console.log(source)} user={user} + debug /> </Fragment> ); diff --git a/wax-prosemirror-services/src/TrackChangeService/track-changes/helpers/replaceStep.js b/wax-prosemirror-services/src/TrackChangeService/track-changes/helpers/replaceStep.js index 72c2028b2abc74ec2a6cc16f62849e308919dfe6..a74a96c2e3124164299ced2d57601046d040816c 100644 --- a/wax-prosemirror-services/src/TrackChangeService/track-changes/helpers/replaceStep.js +++ b/wax-prosemirror-services/src/TrackChangeService/track-changes/helpers/replaceStep.js @@ -28,6 +28,7 @@ const replaceStep = (state, tr, step, newTr, map, doc, user, date) => { step.structure ) : false; + // We didn't apply the original step in its original place. We adjust the map accordingly. map.appendMap(step.invert(doc).getMap()); if (newStep) { diff --git a/wax-prosemirror-services/src/TrackChangeService/track-changes/trackedTransaction.js b/wax-prosemirror-services/src/TrackChangeService/track-changes/trackedTransaction.js index ee80e0839238ed243a68849bf2502aaa72563165..5edc27cda76ec9be20578d972d58adec784161a7 100644 --- a/wax-prosemirror-services/src/TrackChangeService/track-changes/trackedTransaction.js +++ b/wax-prosemirror-services/src/TrackChangeService/track-changes/trackedTransaction.js @@ -45,12 +45,15 @@ const trackedTransaction = (tr, state, user) => { switch (step.constructor) { case ReplaceStep: + console.log("ReplaceStep"); replaceStep(state, tr, step, newTr, map, doc, user, date); break; case ReplaceAroundStep: + console.log("ReplaceAroundStep"); replaceAroundStep(state, tr, step, newTr, map, doc, user, date); break; case AddMarkStep: + console.log("AddMarkStep"); addMarkStep(state, tr, step, newTr, map, doc, user, date); break; case RemoveMarkStep: @@ -85,9 +88,19 @@ const trackedTransaction = (tr, state, user) => { 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)); } + } else { + if ( + state.selection.from - tr.selection.from > 1 && + tr.selection.$head.depth > 1 + ) { + const caretPos = map.map(tr.selection.from - 2, -1); + newTr.setSelection(new TextSelection(newTr.doc.resolve(caretPos))); + } else { + const caretPos = map.map(tr.selection.from, -1); + newTr.setSelection(new TextSelection(newTr.doc.resolve(caretPos))); + } } if (tr.storedMarksSet) { newTr.setStoredMarks(tr.storedMarks); @@ -95,13 +108,6 @@ const trackedTransaction = (tr, state, user) => { if (tr.scrolledIntoView) { newTr.scrollIntoView(); } - if ( - tr.selection instanceof TextSelection && - tr.selection.from < state.selection.from - ) { - const caretPos = map.map(tr.selection.from, -1); - newTr.setSelection(new TextSelection(newTr.doc.resolve(caretPos))); - } return newTr; };