diff --git a/test/transforms/fixtures/toggle-mark-at-range/remove-across-blocks/index.js b/test/transforms/fixtures/toggle-mark-at-range/remove-across-blocks/index.js new file mode 100644 index 000000000..ab263ac73 --- /dev/null +++ b/test/transforms/fixtures/toggle-mark-at-range/remove-across-blocks/index.js @@ -0,0 +1,18 @@ + +export default function (state) { + const { document, selection } = state + const texts = document.getTexts() + const first = texts.first() + const second = texts.last() + const range = selection.merge({ + anchorKey: first.key, + anchorOffset: 2, + focusKey: second.key, + focusOffset: 2 + }) + + return state + .transform() + .toggleMarkAtRange(range, 'bold') + .apply() +} diff --git a/test/transforms/fixtures/toggle-mark-at-range/remove-across-blocks/input.yaml b/test/transforms/fixtures/toggle-mark-at-range/remove-across-blocks/input.yaml new file mode 100644 index 000000000..14db1f6db --- /dev/null +++ b/test/transforms/fixtures/toggle-mark-at-range/remove-across-blocks/input.yaml @@ -0,0 +1,18 @@ + +nodes: + - kind: block + type: paragraph + nodes: + - kind: text + ranges: + - text: word + marks: + - type: bold + - kind: block + type: paragraph + nodes: + - kind: text + ranges: + - text: another + marks: + - type: bold diff --git a/test/transforms/fixtures/toggle-mark-at-range/remove-across-blocks/output.yaml b/test/transforms/fixtures/toggle-mark-at-range/remove-across-blocks/output.yaml new file mode 100644 index 000000000..837e4e330 --- /dev/null +++ b/test/transforms/fixtures/toggle-mark-at-range/remove-across-blocks/output.yaml @@ -0,0 +1,20 @@ + +nodes: + - kind: block + type: paragraph + nodes: + - kind: text + ranges: + - text: wo + marks: + - type: bold + - text: rd + - kind: block + type: paragraph + nodes: + - kind: text + ranges: + - text: an + - text: other + marks: + - type: bold diff --git a/test/transforms/fixtures/toggle-mark-at-range/remove-across-inlines/index.js b/test/transforms/fixtures/toggle-mark-at-range/remove-across-inlines/index.js new file mode 100644 index 000000000..ab263ac73 --- /dev/null +++ b/test/transforms/fixtures/toggle-mark-at-range/remove-across-inlines/index.js @@ -0,0 +1,18 @@ + +export default function (state) { + const { document, selection } = state + const texts = document.getTexts() + const first = texts.first() + const second = texts.last() + const range = selection.merge({ + anchorKey: first.key, + anchorOffset: 2, + focusKey: second.key, + focusOffset: 2 + }) + + return state + .transform() + .toggleMarkAtRange(range, 'bold') + .apply() +} diff --git a/test/transforms/fixtures/toggle-mark-at-range/remove-across-inlines/input.yaml b/test/transforms/fixtures/toggle-mark-at-range/remove-across-inlines/input.yaml new file mode 100644 index 000000000..68d1f01fc --- /dev/null +++ b/test/transforms/fixtures/toggle-mark-at-range/remove-across-inlines/input.yaml @@ -0,0 +1,24 @@ + +nodes: + - kind: block + type: paragraph + nodes: + - kind: inline + type: link + nodes: + - kind: text + ranges: + - text: word + marks: + - type: bold + - kind: block + type: paragraph + nodes: + - kind: inline + type: link + nodes: + - kind: text + ranges: + - text: another + marks: + - type: bold diff --git a/test/transforms/fixtures/toggle-mark-at-range/remove-across-inlines/output.yaml b/test/transforms/fixtures/toggle-mark-at-range/remove-across-inlines/output.yaml new file mode 100644 index 000000000..68568ba65 --- /dev/null +++ b/test/transforms/fixtures/toggle-mark-at-range/remove-across-inlines/output.yaml @@ -0,0 +1,26 @@ + +nodes: + - kind: block + type: paragraph + nodes: + - kind: inline + type: link + nodes: + - kind: text + ranges: + - text: wo + marks: + - type: bold + - text: rd + - kind: block + type: paragraph + nodes: + - kind: inline + type: link + nodes: + - kind: text + ranges: + - text: an + - text: other + marks: + - type: bold diff --git a/test/transforms/fixtures/toggle-mark-at-range/remove-existing-marks/index.js b/test/transforms/fixtures/toggle-mark-at-range/remove-existing-marks/index.js new file mode 100644 index 000000000..4e84f3ae9 --- /dev/null +++ b/test/transforms/fixtures/toggle-mark-at-range/remove-existing-marks/index.js @@ -0,0 +1,17 @@ + +export default function (state) { + const { document, selection } = state + const texts = document.getTexts() + const first = texts.first() + const range = selection.merge({ + anchorKey: first.key, + anchorOffset: 0, + focusKey: first.key, + focusOffset: 2 + }) + + return state + .transform() + .toggleMarkAtRange(range, 'bold') + .apply() +} diff --git a/test/transforms/fixtures/toggle-mark-at-range/remove-existing-marks/input.yaml b/test/transforms/fixtures/toggle-mark-at-range/remove-existing-marks/input.yaml new file mode 100644 index 000000000..e92972a11 --- /dev/null +++ b/test/transforms/fixtures/toggle-mark-at-range/remove-existing-marks/input.yaml @@ -0,0 +1,11 @@ + +nodes: + - kind: block + type: paragraph + nodes: + - kind: text + ranges: + - text: word + marks: + - type: italic + - type: bold diff --git a/test/transforms/fixtures/toggle-mark-at-range/remove-existing-marks/output.yaml b/test/transforms/fixtures/toggle-mark-at-range/remove-existing-marks/output.yaml new file mode 100644 index 000000000..217fbdebf --- /dev/null +++ b/test/transforms/fixtures/toggle-mark-at-range/remove-existing-marks/output.yaml @@ -0,0 +1,14 @@ + +nodes: + - kind: block + type: paragraph + nodes: + - kind: text + ranges: + - text: wo + marks: + - type: italic + - text: rd + marks: + - type: italic + - type: bold diff --git a/test/transforms/fixtures/toggle-mark-at-range/remove-first-character/index.js b/test/transforms/fixtures/toggle-mark-at-range/remove-first-character/index.js new file mode 100644 index 000000000..a3ed53635 --- /dev/null +++ b/test/transforms/fixtures/toggle-mark-at-range/remove-first-character/index.js @@ -0,0 +1,17 @@ + +export default function (state) { + const { document, selection } = state + const texts = document.getTexts() + const first = texts.first() + const range = selection.merge({ + anchorKey: first.key, + anchorOffset: 0, + focusKey: first.key, + focusOffset: 1 + }) + + return state + .transform() + .toggleMarkAtRange(range, 'bold') + .apply() +} diff --git a/test/transforms/fixtures/toggle-mark-at-range/remove-first-character/input.yaml b/test/transforms/fixtures/toggle-mark-at-range/remove-first-character/input.yaml new file mode 100644 index 000000000..fce007c77 --- /dev/null +++ b/test/transforms/fixtures/toggle-mark-at-range/remove-first-character/input.yaml @@ -0,0 +1,10 @@ + +nodes: + - kind: block + type: paragraph + nodes: + - kind: text + ranges: + - text: word + marks: + - type: bold diff --git a/test/transforms/fixtures/toggle-mark-at-range/remove-first-character/output.yaml b/test/transforms/fixtures/toggle-mark-at-range/remove-first-character/output.yaml new file mode 100644 index 000000000..7ee8affff --- /dev/null +++ b/test/transforms/fixtures/toggle-mark-at-range/remove-first-character/output.yaml @@ -0,0 +1,11 @@ + +nodes: + - kind: block + type: paragraph + nodes: + - kind: text + ranges: + - text: w + - text: ord + marks: + - type: bold diff --git a/test/transforms/fixtures/toggle-mark-at-range/remove-last-character/index.js b/test/transforms/fixtures/toggle-mark-at-range/remove-last-character/index.js new file mode 100644 index 000000000..f6ebd6faa --- /dev/null +++ b/test/transforms/fixtures/toggle-mark-at-range/remove-last-character/index.js @@ -0,0 +1,17 @@ + +export default function (state) { + const { document, selection } = state + const texts = document.getTexts() + const first = texts.first() + const range = selection.merge({ + anchorKey: first.key, + anchorOffset: first.length - 1, + focusKey: first.key, + focusOffset: first.length + }) + + return state + .transform() + .toggleMarkAtRange(range, 'bold') + .apply() +} diff --git a/test/transforms/fixtures/toggle-mark-at-range/remove-last-character/input.yaml b/test/transforms/fixtures/toggle-mark-at-range/remove-last-character/input.yaml new file mode 100644 index 000000000..fce007c77 --- /dev/null +++ b/test/transforms/fixtures/toggle-mark-at-range/remove-last-character/input.yaml @@ -0,0 +1,10 @@ + +nodes: + - kind: block + type: paragraph + nodes: + - kind: text + ranges: + - text: word + marks: + - type: bold diff --git a/test/transforms/fixtures/toggle-mark-at-range/remove-last-character/output.yaml b/test/transforms/fixtures/toggle-mark-at-range/remove-last-character/output.yaml new file mode 100644 index 000000000..253cf57d9 --- /dev/null +++ b/test/transforms/fixtures/toggle-mark-at-range/remove-last-character/output.yaml @@ -0,0 +1,11 @@ + +nodes: + - kind: block + type: paragraph + nodes: + - kind: text + ranges: + - text: wor + marks: + - type: bold + - text: d diff --git a/test/transforms/fixtures/toggle-mark-at-range/remove-middle-character/index.js b/test/transforms/fixtures/toggle-mark-at-range/remove-middle-character/index.js new file mode 100644 index 000000000..09fb43fec --- /dev/null +++ b/test/transforms/fixtures/toggle-mark-at-range/remove-middle-character/index.js @@ -0,0 +1,17 @@ + +export default function (state) { + const { document, selection } = state + const texts = document.getTexts() + const first = texts.first() + const range = selection.merge({ + anchorKey: first.key, + anchorOffset: 1, + focusKey: first.key, + focusOffset: 2 + }) + + return state + .transform() + .toggleMarkAtRange(range, 'bold') + .apply() +} diff --git a/test/transforms/fixtures/toggle-mark-at-range/remove-middle-character/input.yaml b/test/transforms/fixtures/toggle-mark-at-range/remove-middle-character/input.yaml new file mode 100644 index 000000000..fce007c77 --- /dev/null +++ b/test/transforms/fixtures/toggle-mark-at-range/remove-middle-character/input.yaml @@ -0,0 +1,10 @@ + +nodes: + - kind: block + type: paragraph + nodes: + - kind: text + ranges: + - text: word + marks: + - type: bold diff --git a/test/transforms/fixtures/toggle-mark-at-range/remove-middle-character/output.yaml b/test/transforms/fixtures/toggle-mark-at-range/remove-middle-character/output.yaml new file mode 100644 index 000000000..b061698b5 --- /dev/null +++ b/test/transforms/fixtures/toggle-mark-at-range/remove-middle-character/output.yaml @@ -0,0 +1,14 @@ + +nodes: + - kind: block + type: paragraph + nodes: + - kind: text + ranges: + - text: w + marks: + - type: bold + - text: o + - text: rd + marks: + - type: bold diff --git a/test/transforms/fixtures/toggle-mark-at-range/remove-whole-word/index.js b/test/transforms/fixtures/toggle-mark-at-range/remove-whole-word/index.js new file mode 100644 index 000000000..e419b616b --- /dev/null +++ b/test/transforms/fixtures/toggle-mark-at-range/remove-whole-word/index.js @@ -0,0 +1,17 @@ + +export default function (state) { + const { document, selection } = state + const texts = document.getTexts() + const first = texts.first() + const range = selection.merge({ + anchorKey: first.key, + anchorOffset: 0, + focusKey: first.key, + focusOffset: first.length + }) + + return state + .transform() + .toggleMarkAtRange(range, 'bold') + .apply() +} diff --git a/test/transforms/fixtures/toggle-mark-at-range/remove-whole-word/input.yaml b/test/transforms/fixtures/toggle-mark-at-range/remove-whole-word/input.yaml new file mode 100644 index 000000000..fce007c77 --- /dev/null +++ b/test/transforms/fixtures/toggle-mark-at-range/remove-whole-word/input.yaml @@ -0,0 +1,10 @@ + +nodes: + - kind: block + type: paragraph + nodes: + - kind: text + ranges: + - text: word + marks: + - type: bold diff --git a/test/transforms/fixtures/toggle-mark-at-range/remove-whole-word/output.yaml b/test/transforms/fixtures/toggle-mark-at-range/remove-whole-word/output.yaml new file mode 100644 index 000000000..b1be31e90 --- /dev/null +++ b/test/transforms/fixtures/toggle-mark-at-range/remove-whole-word/output.yaml @@ -0,0 +1,8 @@ + +nodes: + - kind: block + type: paragraph + nodes: + - kind: text + ranges: + - text: word diff --git a/test/transforms/fixtures/toggle-mark-at-range/remove-with-mark-object/index.js b/test/transforms/fixtures/toggle-mark-at-range/remove-with-mark-object/index.js new file mode 100644 index 000000000..123976f57 --- /dev/null +++ b/test/transforms/fixtures/toggle-mark-at-range/remove-with-mark-object/index.js @@ -0,0 +1,22 @@ + +import { Mark } from '../../../../..' + +export default function (state) { + const { document, selection } = state + const texts = document.getTexts() + const first = texts.first() + const range = selection.merge({ + anchorKey: first.key, + anchorOffset: 0, + focusKey: first.key, + focusOffset: 1 + }) + + return state + .transform() + .toggleMarkAtRange(range, Mark.create({ + type: 'bold', + data: { key: 'value' } + })) + .apply() +} diff --git a/test/transforms/fixtures/toggle-mark-at-range/remove-with-mark-object/input.yaml b/test/transforms/fixtures/toggle-mark-at-range/remove-with-mark-object/input.yaml new file mode 100644 index 000000000..c400de58a --- /dev/null +++ b/test/transforms/fixtures/toggle-mark-at-range/remove-with-mark-object/input.yaml @@ -0,0 +1,13 @@ + +nodes: + - kind: block + type: paragraph + nodes: + - kind: text + ranges: + - text: w + marks: + - type: bold + data: + key: value + - text: ord diff --git a/test/transforms/fixtures/toggle-mark-at-range/remove-with-mark-object/output.yaml b/test/transforms/fixtures/toggle-mark-at-range/remove-with-mark-object/output.yaml new file mode 100644 index 000000000..b1be31e90 --- /dev/null +++ b/test/transforms/fixtures/toggle-mark-at-range/remove-with-mark-object/output.yaml @@ -0,0 +1,8 @@ + +nodes: + - kind: block + type: paragraph + nodes: + - kind: text + ranges: + - text: word diff --git a/test/transforms/fixtures/toggle-mark-at-range/remove-with-plain-object/index.js b/test/transforms/fixtures/toggle-mark-at-range/remove-with-plain-object/index.js new file mode 100644 index 000000000..e8e34fd28 --- /dev/null +++ b/test/transforms/fixtures/toggle-mark-at-range/remove-with-plain-object/index.js @@ -0,0 +1,20 @@ + +export default function (state) { + const { document, selection } = state + const texts = document.getTexts() + const first = texts.first() + const range = selection.merge({ + anchorKey: first.key, + anchorOffset: 0, + focusKey: first.key, + focusOffset: 1 + }) + + return state + .transform() + .toggleMarkAtRange(range, { + type: 'bold', + data: { key: 'value' } + }) + .apply() +} diff --git a/test/transforms/fixtures/toggle-mark-at-range/remove-with-plain-object/input.yaml b/test/transforms/fixtures/toggle-mark-at-range/remove-with-plain-object/input.yaml new file mode 100644 index 000000000..c400de58a --- /dev/null +++ b/test/transforms/fixtures/toggle-mark-at-range/remove-with-plain-object/input.yaml @@ -0,0 +1,13 @@ + +nodes: + - kind: block + type: paragraph + nodes: + - kind: text + ranges: + - text: w + marks: + - type: bold + data: + key: value + - text: ord diff --git a/test/transforms/fixtures/toggle-mark-at-range/remove-with-plain-object/output.yaml b/test/transforms/fixtures/toggle-mark-at-range/remove-with-plain-object/output.yaml new file mode 100644 index 000000000..b1be31e90 --- /dev/null +++ b/test/transforms/fixtures/toggle-mark-at-range/remove-with-plain-object/output.yaml @@ -0,0 +1,8 @@ + +nodes: + - kind: block + type: paragraph + nodes: + - kind: text + ranges: + - text: word