Skip to content

Commit 5bc33bf

Browse files
committed
fix diff issue
1 parent ed7f2ec commit 5bc33bf

File tree

2 files changed

+13
-1
lines changed

2 files changed

+13
-1
lines changed

src/delta/delta.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1174,10 +1174,12 @@ export const slice = (d, start = 0, end = d.childCnt, currNode = d.children.star
11741174
}
11751175
while (currNode != null && currNode.length <= remainingLen) {
11761176
list.pushEnd(cpy.children, currNode.clone())
1177+
remainingLen -= currNode.length
11771178
currNode = currNode.next
11781179
}
11791180
if (currNode != null && remainingLen > 0) {
11801181
list.pushEnd(cpy.children, currNode.clone(0, remainingLen))
1182+
remainingLen -= math.min(currNode.length, remainingLen)
11811183
}
11821184
cpy.childCnt = slicedLen - remainingLen
11831185
// @ts-ignore
@@ -1621,7 +1623,7 @@ export class DeltaBuilder extends Delta {
16211623
remainingLen -= delLen
16221624
}
16231625
}
1624-
} else if ($modifyAttrOp.check(op)) {
1626+
} else if ($modifyOp.check(op)) {
16251627
if (opsI == null) {
16261628
list.pushEnd(this.children, op.clone())
16271629
this.childCnt += 1

src/delta/delta.test.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -791,3 +791,13 @@ export const testDeltaTypings = () => {
791791
/**
792792
* @typedef {IsDeltaOpAny<delta.DeleteOp<{text:true}>>} DeltaOpTestAnyDeleteOp2
793793
*/
794+
795+
export const testDeltaDiffIssue1 = () => {
796+
const stateA = delta.create().insert([delta.create('paragraph').setAttr('ychange', null).insert('ABCDEFGHIJKLMNOPQRSTUVWXYZ')])
797+
const stateB = delta.create().insert([delta.create('paragraph').setAttr('ychange', null).insert('ABCDE123FGHIJKLMNOPQRSTUVWXYZ2sawfa')])
798+
const expectedDiff = delta.create().modify(delta.create().retain(5).insert('123').retain(21).insert('2sawfa'))
799+
const diffResult = delta.diff(stateA, stateB)
800+
const synced = delta.clone(stateA).apply(diffResult)
801+
t.assert(synced.equals(stateB))
802+
t.assert(expectedDiff.equals(diffResult))
803+
}

0 commit comments

Comments
 (0)