From cfa8cf6834e1a603cdfa65528a22ab0f394e58e8 Mon Sep 17 00:00:00 2001 From: Ch1ll0ut1 Date: Wed, 1 Nov 2017 10:27:06 +0700 Subject: [PATCH] Feature/add marks (#1306) * add required yarnrc config to run yarn run bootstrap * add convience method to add list of marks * remove semicolon * remove yarn rc * change addMarks to simply call addMark for each mark * add required yarnrc config to run yarn run bootstrap * add convience method to add list of marks * remove semicolon * remove yarn rc * change addMarks to simply call addMark for each mark * rename state tag to value tag in test cases --- .../slate/src/changes/at-current-range.js | 11 +++++ packages/slate/src/changes/at-range.js | 14 +++++++ .../add-marks/across-blocks.js | 33 +++++++++++++++ .../add-marks/across-inlines.js | 37 +++++++++++++++++ .../add-marks/collapsed-selection.js | 29 +++++++++++++ .../add-marks/existing-marks.js | 27 ++++++++++++ .../add-marks/first-character.js | 27 ++++++++++++ .../add-marks/last-character.js | 27 ++++++++++++ .../add-marks/middle-character.js | 27 ++++++++++++ .../at-current-range/add-marks/whole-word.js | 27 ++++++++++++ .../add-marks/with-mark-object.js | 41 +++++++++++++++++++ .../add-marks/with-plain-object.js | 38 +++++++++++++++++ 12 files changed, 338 insertions(+) create mode 100644 packages/slate/test/changes/at-current-range/add-marks/across-blocks.js create mode 100644 packages/slate/test/changes/at-current-range/add-marks/across-inlines.js create mode 100644 packages/slate/test/changes/at-current-range/add-marks/collapsed-selection.js create mode 100644 packages/slate/test/changes/at-current-range/add-marks/existing-marks.js create mode 100644 packages/slate/test/changes/at-current-range/add-marks/first-character.js create mode 100644 packages/slate/test/changes/at-current-range/add-marks/last-character.js create mode 100644 packages/slate/test/changes/at-current-range/add-marks/middle-character.js create mode 100644 packages/slate/test/changes/at-current-range/add-marks/whole-word.js create mode 100644 packages/slate/test/changes/at-current-range/add-marks/with-mark-object.js create mode 100644 packages/slate/test/changes/at-current-range/add-marks/with-plain-object.js diff --git a/packages/slate/src/changes/at-current-range.js b/packages/slate/src/changes/at-current-range.js index 7040c5c08..3899c42e0 100644 --- a/packages/slate/src/changes/at-current-range.js +++ b/packages/slate/src/changes/at-current-range.js @@ -72,6 +72,17 @@ Changes.addMark = (change, mark) => { } } +/** + * Add a list of `marks` to the characters in the current selection. + * + * @param {Change} change + * @param {Mark} mark + */ + +Changes.addMarks = (change, marks) => { + marks.forEach(mark => change.addMark(mark)) +} + /** * Delete at the current selection. * diff --git a/packages/slate/src/changes/at-range.js b/packages/slate/src/changes/at-range.js index 391561c1c..6762f83f1 100644 --- a/packages/slate/src/changes/at-range.js +++ b/packages/slate/src/changes/at-range.js @@ -47,6 +47,20 @@ Changes.addMarkAtRange = (change, range, mark, options = {}) => { }) } +/** + * Add a list of `marks` to the characters at `range`. + * + * @param {Change} change + * @param {Range} range + * @param {Array} mark + * @param {Object} options + * @property {Boolean} normalize + */ + +Changes.addMarksAtRange = (change, range, marks, options = {}) => { + marks.forEach(mark => change.addMarkAtRange(range, mark, options)) +} + /** * Delete everything in a `range`. * diff --git a/packages/slate/test/changes/at-current-range/add-marks/across-blocks.js b/packages/slate/test/changes/at-current-range/add-marks/across-blocks.js new file mode 100644 index 000000000..84d3e3705 --- /dev/null +++ b/packages/slate/test/changes/at-current-range/add-marks/across-blocks.js @@ -0,0 +1,33 @@ +/** @jsx h */ + +import h from '../../../helpers/h' + +export default function (change) { + change.addMarks(['bold', 'italic']) +} + +export const input = ( + + + + word + + + another + + + +) + +export const output = ( + + + + word + + + another + + + +) diff --git a/packages/slate/test/changes/at-current-range/add-marks/across-inlines.js b/packages/slate/test/changes/at-current-range/add-marks/across-inlines.js new file mode 100644 index 000000000..683f1a4e7 --- /dev/null +++ b/packages/slate/test/changes/at-current-range/add-marks/across-inlines.js @@ -0,0 +1,37 @@ +/** @jsx h */ + +import h from '../../../helpers/h' + +export default function (change) { + change.addMarks(['bold', 'italic']) +} + +export const input = ( + + + + word + + + another + + + +) + +export const output = ( + + + + + word + + + + + another + + + + +) diff --git a/packages/slate/test/changes/at-current-range/add-marks/collapsed-selection.js b/packages/slate/test/changes/at-current-range/add-marks/collapsed-selection.js new file mode 100644 index 000000000..c23b0aaee --- /dev/null +++ b/packages/slate/test/changes/at-current-range/add-marks/collapsed-selection.js @@ -0,0 +1,29 @@ +/** @jsx h */ + +import h from '../../../helpers/h' + +export default function (change) { + change + .addMarks(['bold', 'italic']) + .insertText('a') +} + +export const input = ( + + + + word + + + +) + +export const output = ( + + + + aword + + + +) diff --git a/packages/slate/test/changes/at-current-range/add-marks/existing-marks.js b/packages/slate/test/changes/at-current-range/add-marks/existing-marks.js new file mode 100644 index 000000000..84ffecc1e --- /dev/null +++ b/packages/slate/test/changes/at-current-range/add-marks/existing-marks.js @@ -0,0 +1,27 @@ +/** @jsx h */ + +import h from '../../../helpers/h' + +export default function (change) { + change.addMarks(['bold', 'underline']) +} + +export const input = ( + + + + word + + + +) + +export const output = ( + + + + word + + + +) diff --git a/packages/slate/test/changes/at-current-range/add-marks/first-character.js b/packages/slate/test/changes/at-current-range/add-marks/first-character.js new file mode 100644 index 000000000..a38b37bf7 --- /dev/null +++ b/packages/slate/test/changes/at-current-range/add-marks/first-character.js @@ -0,0 +1,27 @@ +/** @jsx h */ + +import h from '../../../helpers/h' + +export default function (change) { + change.addMarks(['bold', 'italic']) +} + +export const input = ( + + + + word + + + +) + +export const output = ( + + + + word + + + +) diff --git a/packages/slate/test/changes/at-current-range/add-marks/last-character.js b/packages/slate/test/changes/at-current-range/add-marks/last-character.js new file mode 100644 index 000000000..0a1958ee5 --- /dev/null +++ b/packages/slate/test/changes/at-current-range/add-marks/last-character.js @@ -0,0 +1,27 @@ +/** @jsx h */ + +import h from '../../../helpers/h' + +export default function (change) { + change.addMarks(['bold', 'italic']) +} + +export const input = ( + + + + word + + + +) + +export const output = ( + + + + word + + + +) diff --git a/packages/slate/test/changes/at-current-range/add-marks/middle-character.js b/packages/slate/test/changes/at-current-range/add-marks/middle-character.js new file mode 100644 index 000000000..c93680e99 --- /dev/null +++ b/packages/slate/test/changes/at-current-range/add-marks/middle-character.js @@ -0,0 +1,27 @@ +/** @jsx h */ + +import h from '../../../helpers/h' + +export default function (change) { + change.addMarks(['bold', 'italic']) +} + +export const input = ( + + + + word + + + +) + +export const output = ( + + + + word + + + +) diff --git a/packages/slate/test/changes/at-current-range/add-marks/whole-word.js b/packages/slate/test/changes/at-current-range/add-marks/whole-word.js new file mode 100644 index 000000000..3d4de7b48 --- /dev/null +++ b/packages/slate/test/changes/at-current-range/add-marks/whole-word.js @@ -0,0 +1,27 @@ +/** @jsx h */ + +import h from '../../../helpers/h' + +export default function (change) { + change.addMarks(['bold', 'italic']) +} + +export const input = ( + + + + word + + + +) + +export const output = ( + + + + word + + + +) diff --git a/packages/slate/test/changes/at-current-range/add-marks/with-mark-object.js b/packages/slate/test/changes/at-current-range/add-marks/with-mark-object.js new file mode 100644 index 000000000..16fa88d63 --- /dev/null +++ b/packages/slate/test/changes/at-current-range/add-marks/with-mark-object.js @@ -0,0 +1,41 @@ +/** @jsx h */ + +import h from '../../../helpers/h' + +import { Mark } from '../../../..' + + +export default function (change) { + const marks = [] + + marks.push(Mark.create({ + type: 'bold', + data: { thing: 'value' } + })) + marks.push(Mark.create({ + type: 'italic', + data: { thing2: 'value2' } + })) + + change.addMarks(marks) +} + +export const input = ( + + + + word + + + +) + +export const output = ( + + + + word + + + +) diff --git a/packages/slate/test/changes/at-current-range/add-marks/with-plain-object.js b/packages/slate/test/changes/at-current-range/add-marks/with-plain-object.js new file mode 100644 index 000000000..474471519 --- /dev/null +++ b/packages/slate/test/changes/at-current-range/add-marks/with-plain-object.js @@ -0,0 +1,38 @@ +/** @jsx h */ + +import h from '../../../helpers/h' + +export default function (change) { + const marks = [] + + marks.push({ + type: 'bold', + data: { thing: 'value' } + }) + marks.push({ + type: 'italic', + data: { thing2: 'value2' } + }) + + change.addMarks(marks) +} + +export const input = ( + + + + word + + + +) + +export const output = ( + + + + word + + + +)