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 + + + +)