From a17d707665a1570aea277441480b7dc0979b1364 Mon Sep 17 00:00:00 2001 From: Ian Storm Taylor Date: Fri, 5 May 2017 09:01:15 -0700 Subject: [PATCH] fix schema normalizing to merge into history --- src/plugins/core.js | 2 +- src/transforms/on-history.js | 4 +-- .../undo/remove-middle-void/index.js | 11 ++++++++ .../undo/remove-middle-void/input.yaml | 14 ++++++++++ .../undo/remove-middle-void/output.yaml | 14 ++++++++++ .../undo/remove-nested-middle-void/index.js | 12 +++++++++ .../undo/remove-nested-middle-void/input.yaml | 26 +++++++++++++++++++ .../remove-nested-middle-void/output.yaml | 26 +++++++++++++++++++ .../on-history/undo/remove-node/index.js | 8 +----- 9 files changed, 107 insertions(+), 10 deletions(-) create mode 100644 test/transforms/fixtures/on-history/undo/remove-middle-void/index.js create mode 100644 test/transforms/fixtures/on-history/undo/remove-middle-void/input.yaml create mode 100644 test/transforms/fixtures/on-history/undo/remove-middle-void/output.yaml create mode 100644 test/transforms/fixtures/on-history/undo/remove-nested-middle-void/index.js create mode 100644 test/transforms/fixtures/on-history/undo/remove-nested-middle-void/input.yaml create mode 100644 test/transforms/fixtures/on-history/undo/remove-nested-middle-void/output.yaml diff --git a/src/plugins/core.js b/src/plugins/core.js index 9c278c319..9f2d10ad9 100644 --- a/src/plugins/core.js +++ b/src/plugins/core.js @@ -56,7 +56,7 @@ function Plugin(options = {}) { const newState = state.transform() .normalize(schema) - .apply({ save: false }) + .apply({ merge: true }) debug('onBeforeChange') return newState diff --git a/src/transforms/on-history.js b/src/transforms/on-history.js index 7bc80658e..5d0dc8e03 100644 --- a/src/transforms/on-history.js +++ b/src/transforms/on-history.js @@ -52,13 +52,13 @@ Transforms.save = (transform, options = {}) => { let { state, operations } = transform let { history } = state let { undos, redos } = history + let previous = undos.peek() // If there are no operations, abort. if (!operations.length) return // Create a new save point or merge the operations into the previous one. - if (merge) { - let previous = undos.peek() + if (merge && previous) { undos = undos.pop() previous = previous.concat(operations) undos = undos.push(previous) diff --git a/test/transforms/fixtures/on-history/undo/remove-middle-void/index.js b/test/transforms/fixtures/on-history/undo/remove-middle-void/index.js new file mode 100644 index 000000000..b9bcc480e --- /dev/null +++ b/test/transforms/fixtures/on-history/undo/remove-middle-void/index.js @@ -0,0 +1,11 @@ + +export default function (state) { + return state + .transform() + .removeNodeByKey('b') + .apply() + + .transform() + .undo() + .apply() +} diff --git a/test/transforms/fixtures/on-history/undo/remove-middle-void/input.yaml b/test/transforms/fixtures/on-history/undo/remove-middle-void/input.yaml new file mode 100644 index 000000000..4bf3ab5ea --- /dev/null +++ b/test/transforms/fixtures/on-history/undo/remove-middle-void/input.yaml @@ -0,0 +1,14 @@ + +nodes: + - kind: block + key: a + type: image + isVoid: true + - kind: block + key: b + type: image + isVoid: true + - kind: block + key: c + type: image + isVoid: true diff --git a/test/transforms/fixtures/on-history/undo/remove-middle-void/output.yaml b/test/transforms/fixtures/on-history/undo/remove-middle-void/output.yaml new file mode 100644 index 000000000..4bf3ab5ea --- /dev/null +++ b/test/transforms/fixtures/on-history/undo/remove-middle-void/output.yaml @@ -0,0 +1,14 @@ + +nodes: + - kind: block + key: a + type: image + isVoid: true + - kind: block + key: b + type: image + isVoid: true + - kind: block + key: c + type: image + isVoid: true diff --git a/test/transforms/fixtures/on-history/undo/remove-nested-middle-void/index.js b/test/transforms/fixtures/on-history/undo/remove-nested-middle-void/index.js new file mode 100644 index 000000000..a5e20e868 --- /dev/null +++ b/test/transforms/fixtures/on-history/undo/remove-nested-middle-void/index.js @@ -0,0 +1,12 @@ + +export default function (state) { + return state + .transform() + .removeNodeByKey('bb') + .removeNodeByKey('b') + .apply() + + .transform() + .undo() + .apply() +} diff --git a/test/transforms/fixtures/on-history/undo/remove-nested-middle-void/input.yaml b/test/transforms/fixtures/on-history/undo/remove-nested-middle-void/input.yaml new file mode 100644 index 000000000..fb270ac3f --- /dev/null +++ b/test/transforms/fixtures/on-history/undo/remove-nested-middle-void/input.yaml @@ -0,0 +1,26 @@ + +nodes: + - kind: block + type: figure + key: a + nodes: + - kind: block + type: image + key: aa + isVoid: true + - kind: block + type: figure + key: b + nodes: + - kind: block + type: image + key: bb + isVoid: true + - kind: block + type: figure + key: c + nodes: + - kind: block + type: image + key: cc + isVoid: true diff --git a/test/transforms/fixtures/on-history/undo/remove-nested-middle-void/output.yaml b/test/transforms/fixtures/on-history/undo/remove-nested-middle-void/output.yaml new file mode 100644 index 000000000..fb270ac3f --- /dev/null +++ b/test/transforms/fixtures/on-history/undo/remove-nested-middle-void/output.yaml @@ -0,0 +1,26 @@ + +nodes: + - kind: block + type: figure + key: a + nodes: + - kind: block + type: image + key: aa + isVoid: true + - kind: block + type: figure + key: b + nodes: + - kind: block + type: image + key: bb + isVoid: true + - kind: block + type: figure + key: c + nodes: + - kind: block + type: image + key: cc + isVoid: true diff --git a/test/transforms/fixtures/on-history/undo/remove-node/index.js b/test/transforms/fixtures/on-history/undo/remove-node/index.js index eaa9abdc5..1018cec55 100644 --- a/test/transforms/fixtures/on-history/undo/remove-node/index.js +++ b/test/transforms/fixtures/on-history/undo/remove-node/index.js @@ -1,10 +1,6 @@ -import assert from 'assert' - export default function (state) { - const { selection } = state - - let next = state + return state .transform() .removeNodeByKey('key1') .apply() @@ -12,6 +8,4 @@ export default function (state) { .transform() .undo() .apply() - - return next }