diff --git a/packages/slate/src/interfaces/path.ts b/packages/slate/src/interfaces/path.ts index dd2f6e6be..fb256082b 100755 --- a/packages/slate/src/interfaces/path.ts +++ b/packages/slate/src/interfaces/path.ts @@ -386,12 +386,14 @@ export const Path = { const copy = onp.slice() if (Path.endsBefore(op, onp) && op.length < onp.length) { - const i = Math.min(onp.length, op.length) - 1 - copy[i] -= 1 + copy[op.length - 1] -= 1 } return copy.concat(p.slice(op.length)) - } else if (Path.isSibling(op, p) && Path.equals(onp, p)) { + } else if ( + Path.isSibling(op, onp) && + (Path.isAncestor(onp, p) || Path.equals(onp, p)) + ) { if (Path.endsBefore(op, p)) { p[op.length - 1] -= 1 } else { diff --git a/packages/slate/test/interfaces/Path/transform/move_node/ancestor-sibling-ends-after-to-ancestor.js b/packages/slate/test/interfaces/Path/transform/move_node/ancestor-sibling-ends-after-to-ancestor.js new file mode 100644 index 000000000..8e194450c --- /dev/null +++ b/packages/slate/test/interfaces/Path/transform/move_node/ancestor-sibling-ends-after-to-ancestor.js @@ -0,0 +1,15 @@ +import { Path } from 'slate' + +const path = [3, 3, 3] + +const op = { + type: 'move_node', + path: [4], + newPath: [3], +} + +export const test = () => { + return Path.transform(path, op) +} + +export const output = [4, 3, 3] diff --git a/packages/slate/test/interfaces/Path/transform/move_node/ancestor-sibling-ends-after-to-ends-after.js b/packages/slate/test/interfaces/Path/transform/move_node/ancestor-sibling-ends-after-to-ends-after.js new file mode 100644 index 000000000..c1dc2b014 --- /dev/null +++ b/packages/slate/test/interfaces/Path/transform/move_node/ancestor-sibling-ends-after-to-ends-after.js @@ -0,0 +1,15 @@ +import { Path } from 'slate' + +const path = [3, 3, 3] + +const op = { + type: 'move_node', + path: [4], + newPath: [2], +} + +export const test = () => { + return Path.transform(path, op) +} + +export const output = [4, 3, 3] diff --git a/packages/slate/test/interfaces/Path/transform/move_node/ancestor-sibling-ends-before-to-ancestor.js b/packages/slate/test/interfaces/Path/transform/move_node/ancestor-sibling-ends-before-to-ancestor.js new file mode 100644 index 000000000..58d6447c6 --- /dev/null +++ b/packages/slate/test/interfaces/Path/transform/move_node/ancestor-sibling-ends-before-to-ancestor.js @@ -0,0 +1,15 @@ +import { Path } from 'slate' + +const path = [3, 3, 3] + +const op = { + type: 'move_node', + path: [2], + newPath: [3], +} + +export const test = () => { + return Path.transform(path, op) +} + +export const output = [2, 3, 3] diff --git a/packages/slate/test/interfaces/Path/transform/move_node/ancestor-sibling-ends-before-to-ends-after.js b/packages/slate/test/interfaces/Path/transform/move_node/ancestor-sibling-ends-before-to-ends-after.js new file mode 100644 index 000000000..5f50281fb --- /dev/null +++ b/packages/slate/test/interfaces/Path/transform/move_node/ancestor-sibling-ends-before-to-ends-after.js @@ -0,0 +1,15 @@ +import { Path } from 'slate' + +const path = [3, 3, 3] + +const op = { + type: 'move_node', + path: [2], + newPath: [4], +} + +export const test = () => { + return Path.transform(path, op) +} + +export const output = [2, 3, 3] diff --git a/packages/slate/test/interfaces/Path/transform/move_node/ancestor-to-ends-after.js b/packages/slate/test/interfaces/Path/transform/move_node/ancestor-to-ends-after.js new file mode 100644 index 000000000..270be0fd1 --- /dev/null +++ b/packages/slate/test/interfaces/Path/transform/move_node/ancestor-to-ends-after.js @@ -0,0 +1,15 @@ +import { Path } from 'slate' + +const path = [3, 3, 3] + +const op = { + type: 'move_node', + path: [3], + newPath: [5, 1], +} + +export const test = () => { + return Path.transform(path, op) +} + +export const output = [4, 1, 3, 3] diff --git a/packages/slate/test/interfaces/Path/transform/move_node/ancestor-to-ends-before.js b/packages/slate/test/interfaces/Path/transform/move_node/ancestor-to-ends-before.js new file mode 100644 index 000000000..b36d50a75 --- /dev/null +++ b/packages/slate/test/interfaces/Path/transform/move_node/ancestor-to-ends-before.js @@ -0,0 +1,15 @@ +import { Path } from 'slate' + +const path = [3, 3, 3] + +const op = { + type: 'move_node', + path: [3], + newPath: [2, 5], +} + +export const test = () => { + return Path.transform(path, op) +} + +export const output = [2, 5, 3, 3] diff --git a/packages/slate/test/interfaces/Path/transform/move_node/ends-after-to-no-relation.js b/packages/slate/test/interfaces/Path/transform/move_node/ends-after-to-no-relation.js new file mode 100644 index 000000000..1b4e04415 --- /dev/null +++ b/packages/slate/test/interfaces/Path/transform/move_node/ends-after-to-no-relation.js @@ -0,0 +1,15 @@ +import { Path } from 'slate' + +const path = [3, 3, 3] + +const op = { + type: 'move_node', + path: [3, 4], + newPath: [3, 0, 0], +} + +export const test = () => { + return Path.transform(path, op) +} + +export const output = [3, 3, 3] diff --git a/packages/slate/test/interfaces/Path/transform/move_node/ends-before-to-no-relation.js b/packages/slate/test/interfaces/Path/transform/move_node/ends-before-to-no-relation.js new file mode 100644 index 000000000..9463a0835 --- /dev/null +++ b/packages/slate/test/interfaces/Path/transform/move_node/ends-before-to-no-relation.js @@ -0,0 +1,15 @@ +import { Path } from 'slate' + +const path = [3, 3, 3] + +const op = { + type: 'move_node', + path: [3, 2], + newPath: [3, 0, 0], +} + +export const test = () => { + return Path.transform(path, op) +} + +export const output = [3, 2, 3] diff --git a/packages/slate/test/interfaces/Path/transform/move_node/equal-to-ends-after.js b/packages/slate/test/interfaces/Path/transform/move_node/equal-to-ends-after.js new file mode 100644 index 000000000..e889e85e0 --- /dev/null +++ b/packages/slate/test/interfaces/Path/transform/move_node/equal-to-ends-after.js @@ -0,0 +1,15 @@ +import { Path } from 'slate' + +const path = [3, 3] + +const op = { + type: 'move_node', + path: [3, 3], + newPath: [3, 5, 0], +} + +export const test = () => { + return Path.transform(path, op) +} + +export const output = [3, 4, 0] diff --git a/packages/slate/test/interfaces/Path/transform/move_node/equal-to-ends-before.js b/packages/slate/test/interfaces/Path/transform/move_node/equal-to-ends-before.js new file mode 100644 index 000000000..e212001e6 --- /dev/null +++ b/packages/slate/test/interfaces/Path/transform/move_node/equal-to-ends-before.js @@ -0,0 +1,15 @@ +import { Path } from 'slate' + +const path = [3, 3] + +const op = { + type: 'move_node', + path: [3, 3], + newPath: [3, 1, 0], +} + +export const test = () => { + return Path.transform(path, op) +} + +export const output = [3, 1, 0] diff --git a/packages/slate/test/interfaces/Path/transform/move_node/no-relation-to-ends-after.js b/packages/slate/test/interfaces/Path/transform/move_node/no-relation-to-ends-after.js new file mode 100644 index 000000000..f19d0ad85 --- /dev/null +++ b/packages/slate/test/interfaces/Path/transform/move_node/no-relation-to-ends-after.js @@ -0,0 +1,15 @@ +import { Path } from 'slate' + +const path = [3, 3, 3] + +const op = { + type: 'move_node', + path: [3, 0, 0], + newPath: [3, 4], +} + +export const test = () => { + return Path.transform(path, op) +} + +export const output = [3, 3, 3] diff --git a/packages/slate/test/interfaces/Path/transform/move_node/no-relation-to-ends-before.js b/packages/slate/test/interfaces/Path/transform/move_node/no-relation-to-ends-before.js new file mode 100644 index 000000000..3bf8d3703 --- /dev/null +++ b/packages/slate/test/interfaces/Path/transform/move_node/no-relation-to-ends-before.js @@ -0,0 +1,15 @@ +import { Path } from 'slate' + +const path = [3, 3, 3] + +const op = { + type: 'move_node', + path: [3, 0, 0], + newPath: [3, 2], +} + +export const test = () => { + return Path.transform(path, op) +} + +export const output = [3, 4, 3] diff --git a/packages/slate/test/interfaces/Path/transform/move_node/parent-to-ends-after.js b/packages/slate/test/interfaces/Path/transform/move_node/parent-to-ends-after.js new file mode 100644 index 000000000..4a492959d --- /dev/null +++ b/packages/slate/test/interfaces/Path/transform/move_node/parent-to-ends-after.js @@ -0,0 +1,15 @@ +import { Path } from 'slate' + +const path = [3, 3, 3] + +const op = { + type: 'move_node', + path: [3, 3], + newPath: [5, 1], +} + +export const test = () => { + return Path.transform(path, op) +} + +export const output = [5, 1, 3] diff --git a/packages/slate/test/interfaces/Path/transform/move_node/parent-to-ends-before.js b/packages/slate/test/interfaces/Path/transform/move_node/parent-to-ends-before.js new file mode 100644 index 000000000..0337455a5 --- /dev/null +++ b/packages/slate/test/interfaces/Path/transform/move_node/parent-to-ends-before.js @@ -0,0 +1,15 @@ +import { Path } from 'slate' + +const path = [3, 3, 3] + +const op = { + type: 'move_node', + path: [3, 3], + newPath: [2, 1], +} + +export const test = () => { + return Path.transform(path, op) +} + +export const output = [2, 1, 3] diff --git a/packages/slate/test/interfaces/Path/transform/move_node/ends-after-to-ends-equal.js b/packages/slate/test/interfaces/Path/transform/move_node/sibling-ends-after-to-ends-equal.js similarity index 100% rename from packages/slate/test/interfaces/Path/transform/move_node/ends-after-to-ends-equal.js rename to packages/slate/test/interfaces/Path/transform/move_node/sibling-ends-after-to-ends-equal.js diff --git a/packages/slate/test/interfaces/Path/transform/move_node/ends-after-to-ends-before.js b/packages/slate/test/interfaces/Path/transform/move_node/sibling-ends-after-to-sibling-ends-before.js similarity index 100% rename from packages/slate/test/interfaces/Path/transform/move_node/ends-after-to-ends-before.js rename to packages/slate/test/interfaces/Path/transform/move_node/sibling-ends-after-to-sibling-ends-before.js diff --git a/packages/slate/test/interfaces/Path/transform/move_node/ends-before-to-ends-equal.js b/packages/slate/test/interfaces/Path/transform/move_node/sibling-ends-before-to-ends-equal.js similarity index 100% rename from packages/slate/test/interfaces/Path/transform/move_node/ends-before-to-ends-equal.js rename to packages/slate/test/interfaces/Path/transform/move_node/sibling-ends-before-to-ends-equal.js diff --git a/packages/slate/test/interfaces/Path/transform/move_node/ends-before-to-ends-after.js b/packages/slate/test/interfaces/Path/transform/move_node/sibling-ends-before-to-sibling-ends-after.js similarity index 100% rename from packages/slate/test/interfaces/Path/transform/move_node/ends-before-to-ends-after.js rename to packages/slate/test/interfaces/Path/transform/move_node/sibling-ends-before-to-sibling-ends-after.js