From c97c19c7ca1d221e87e7e6c9ac38d45be770fb1e Mon Sep 17 00:00:00 2001 From: chris <kokosias@yahoo.gr> Date: Tue, 12 May 2020 12:20:48 +0300 Subject: [PATCH] fix cursor movement on lists --- editors/editoria/src/Editoria.js | 3 ++- .../track-changes/helpers/replaceStep.js | 1 + .../track-changes/trackedTransaction.js | 22 ++++++++++++------- 3 files changed, 17 insertions(+), 9 deletions(-) diff --git a/editors/editoria/src/Editoria.js b/editors/editoria/src/Editoria.js index cf3460faa..eef362a05 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 72c2028b2..a74a96c2e 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 ee80e0839..5edc27cda 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; }; -- GitLab