prosemirror-history
Advanced tools
Comparing version 1.3.0 to 1.3.1
@@ -0,1 +1,7 @@ | ||
## 1.3.1 (2023-04-26) | ||
### Bug fixes | ||
Fix an issue where, if a composition moved the selection, it might get split across multiple undo events. | ||
## 1.3.0 (2022-05-30) | ||
@@ -2,0 +8,0 @@ |
@@ -248,3 +248,3 @@ import RopeSequence from 'rope-sequence'; | ||
class HistoryState { | ||
constructor(done, undone, prevRanges, prevTime) { | ||
constructor(done, undone, prevRanges, prevTime, prevComposition) { | ||
this.done = done; | ||
@@ -254,2 +254,3 @@ this.undone = undone; | ||
this.prevTime = prevTime; | ||
this.prevComposition = prevComposition; | ||
} | ||
@@ -264,3 +265,3 @@ } | ||
if (tr.getMeta(closeHistoryKey)) | ||
history = new HistoryState(history.done, history.undone, null, 0); | ||
history = new HistoryState(history.done, history.undone, null, 0, -1); | ||
let appended = tr.getMeta("appendedTransaction"); | ||
@@ -272,12 +273,14 @@ if (tr.steps.length == 0) { | ||
if (appended.getMeta(historyKey).redo) | ||
return new HistoryState(history.done.addTransform(tr, undefined, options, mustPreserveItems(state)), history.undone, rangesFor(tr.mapping.maps[tr.steps.length - 1]), history.prevTime); | ||
return new HistoryState(history.done.addTransform(tr, undefined, options, mustPreserveItems(state)), history.undone, rangesFor(tr.mapping.maps[tr.steps.length - 1]), history.prevTime, history.prevComposition); | ||
else | ||
return new HistoryState(history.done, history.undone.addTransform(tr, undefined, options, mustPreserveItems(state)), null, history.prevTime); | ||
return new HistoryState(history.done, history.undone.addTransform(tr, undefined, options, mustPreserveItems(state)), null, history.prevTime, history.prevComposition); | ||
} | ||
else if (tr.getMeta("addToHistory") !== false && !(appended && appended.getMeta("addToHistory") === false)) { | ||
// Group transforms that occur in quick succession into one event. | ||
let newGroup = history.prevTime == 0 || !appended && (history.prevTime < (tr.time || 0) - options.newGroupDelay || | ||
!isAdjacentTo(tr, history.prevRanges)); | ||
let composition = tr.getMeta("composition"); | ||
let newGroup = history.prevTime == 0 || | ||
(!appended && history.prevComposition != composition && | ||
(history.prevTime < (tr.time || 0) - options.newGroupDelay || !isAdjacentTo(tr, history.prevRanges))); | ||
let prevRanges = appended ? mapRanges(history.prevRanges, tr.mapping) : rangesFor(tr.mapping.maps[tr.steps.length - 1]); | ||
return new HistoryState(history.done.addTransform(tr, newGroup ? state.selection.getBookmark() : undefined, options, mustPreserveItems(state)), Branch.empty, prevRanges, tr.time); | ||
return new HistoryState(history.done.addTransform(tr, newGroup ? state.selection.getBookmark() : undefined, options, mustPreserveItems(state)), Branch.empty, prevRanges, tr.time, composition == null ? history.prevComposition : composition); | ||
} | ||
@@ -287,6 +290,6 @@ else if (rebased = tr.getMeta("rebased")) { | ||
// content has been rebased. | ||
return new HistoryState(history.done.rebased(tr, rebased), history.undone.rebased(tr, rebased), mapRanges(history.prevRanges, tr.mapping), history.prevTime); | ||
return new HistoryState(history.done.rebased(tr, rebased), history.undone.rebased(tr, rebased), mapRanges(history.prevRanges, tr.mapping), history.prevTime, history.prevComposition); | ||
} | ||
else { | ||
return new HistoryState(history.done.addMaps(tr.mapping.maps), history.undone.addMaps(tr.mapping.maps), mapRanges(history.prevRanges, tr.mapping), history.prevTime); | ||
return new HistoryState(history.done.addMaps(tr.mapping.maps), history.undone.addMaps(tr.mapping.maps), mapRanges(history.prevRanges, tr.mapping), history.prevTime, history.prevComposition); | ||
} | ||
@@ -333,3 +336,3 @@ } | ||
let added = (redo ? history.done : history.undone).addTransform(pop.transform, state.selection.getBookmark(), histOptions, preserveItems); | ||
let newHist = new HistoryState(redo ? added : pop.remaining, redo ? pop.remaining : added, null, 0); | ||
let newHist = new HistoryState(redo ? added : pop.remaining, redo ? pop.remaining : added, null, 0, -1); | ||
dispatch(pop.transform.setSelection(selection).setMeta(historyKey, { redo, historyState: newHist }).scrollIntoView()); | ||
@@ -381,3 +384,3 @@ } | ||
init() { | ||
return new HistoryState(Branch.empty, Branch.empty, null, 0); | ||
return new HistoryState(Branch.empty, Branch.empty, null, 0, -1); | ||
}, | ||
@@ -384,0 +387,0 @@ apply(tr, hist, state) { |
{ | ||
"name": "prosemirror-history", | ||
"version": "1.3.0", | ||
"version": "1.3.1", | ||
"description": "Undo history for ProseMirror", | ||
@@ -18,3 +18,3 @@ "type": "module", | ||
"name": "Marijn Haverbeke", | ||
"email": "marijnh@gmail.com", | ||
"email": "marijn@haverbeke.berlin", | ||
"web": "http://marijnhaverbeke.nl" | ||
@@ -30,2 +30,3 @@ } | ||
"prosemirror-transform": "^1.0.0", | ||
"prosemirror-view": "^1.31.0", | ||
"rope-sequence": "^1.3.0" | ||
@@ -32,0 +33,0 @@ }, |
# prosemirror-history | ||
[ [**WEBSITE**](https://prosemirror.net) | [**ISSUES**](https://github.com/prosemirror/prosemirror/issues) | [**FORUM**](https://discuss.prosemirror.net) | [**GITTER**](https://gitter.im/ProseMirror/prosemirror) | [**CHANGELOG**](https://github.com/ProseMirror/prosemirror-history/blob/master/CHANGELOG.md) ] | ||
[ [**WEBSITE**](https://prosemirror.net) | [**ISSUES**](https://github.com/prosemirror/prosemirror/issues) | [**FORUM**](https://discuss.prosemirror.net) | [**CHANGELOG**](https://github.com/ProseMirror/prosemirror-history/blob/master/CHANGELOG.md) ] | ||
@@ -5,0 +5,0 @@ This is a [core module](https://prosemirror.net/docs/ref/#history) of [ProseMirror](https://prosemirror.net). |
@@ -251,3 +251,4 @@ import RopeSequence from "rope-sequence" | ||
readonly prevRanges: readonly number[] | null, | ||
readonly prevTime: number | ||
readonly prevTime: number, | ||
readonly prevComposition: number | ||
) {} | ||
@@ -263,3 +264,3 @@ } | ||
if (tr.getMeta(closeHistoryKey)) history = new HistoryState(history.done, history.undone, null, 0) | ||
if (tr.getMeta(closeHistoryKey)) history = new HistoryState(history.done, history.undone, null, 0, -1) | ||
@@ -273,14 +274,17 @@ let appended = tr.getMeta("appendedTransaction") | ||
return new HistoryState(history.done.addTransform(tr, undefined, options, mustPreserveItems(state)), | ||
history.undone, rangesFor(tr.mapping.maps[tr.steps.length - 1]), history.prevTime) | ||
history.undone, rangesFor(tr.mapping.maps[tr.steps.length - 1]), | ||
history.prevTime, history.prevComposition) | ||
else | ||
return new HistoryState(history.done, history.undone.addTransform(tr, undefined, options, mustPreserveItems(state)), | ||
null, history.prevTime) | ||
null, history.prevTime, history.prevComposition) | ||
} else if (tr.getMeta("addToHistory") !== false && !(appended && appended.getMeta("addToHistory") === false)) { | ||
// Group transforms that occur in quick succession into one event. | ||
let newGroup = history.prevTime == 0 || !appended && (history.prevTime < (tr.time || 0) - options.newGroupDelay || | ||
!isAdjacentTo(tr, history.prevRanges!)) | ||
let composition = tr.getMeta("composition") | ||
let newGroup = history.prevTime == 0 || | ||
(!appended && history.prevComposition != composition && | ||
(history.prevTime < (tr.time || 0) - options.newGroupDelay || !isAdjacentTo(tr, history.prevRanges!))) | ||
let prevRanges = appended ? mapRanges(history.prevRanges!, tr.mapping) : rangesFor(tr.mapping.maps[tr.steps.length - 1]) | ||
return new HistoryState(history.done.addTransform(tr, newGroup ? state.selection.getBookmark() : undefined, | ||
options, mustPreserveItems(state)), | ||
Branch.empty, prevRanges, tr.time) | ||
Branch.empty, prevRanges, tr.time, composition == null ? history.prevComposition : composition) | ||
} else if (rebased = tr.getMeta("rebased")) { | ||
@@ -291,7 +295,7 @@ // Used by the collab module to tell the history that some of its | ||
history.undone.rebased(tr, rebased), | ||
mapRanges(history.prevRanges!, tr.mapping), history.prevTime) | ||
mapRanges(history.prevRanges!, tr.mapping), history.prevTime, history.prevComposition) | ||
} else { | ||
return new HistoryState(history.done.addMaps(tr.mapping.maps), | ||
history.undone.addMaps(tr.mapping.maps), | ||
mapRanges(history.prevRanges!, tr.mapping), history.prevTime) | ||
mapRanges(history.prevRanges!, tr.mapping), history.prevTime, history.prevComposition) | ||
} | ||
@@ -340,3 +344,3 @@ } | ||
let newHist = new HistoryState(redo ? added : pop.remaining, redo ? pop.remaining : added, null, 0) | ||
let newHist = new HistoryState(redo ? added : pop.remaining, redo ? pop.remaining : added, null, 0, -1) | ||
dispatch(pop.transform.setSelection(selection).setMeta(historyKey, {redo, historyState: newHist}).scrollIntoView()) | ||
@@ -400,3 +404,3 @@ } | ||
init() { | ||
return new HistoryState(Branch.empty, Branch.empty, null, 0) | ||
return new HistoryState(Branch.empty, Branch.empty, null, 0, -1) | ||
}, | ||
@@ -403,0 +407,0 @@ apply(tr, hist, state) { |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
64160
4
11
1263
+ Addedprosemirror-view@^1.31.0