diff --git a/src/types/YText.js b/src/types/YText.js index 572bba9e..6092f172 100644 --- a/src/types/YText.js +++ b/src/types/YText.js @@ -802,10 +802,25 @@ export class YText extends AbstractType { } case ContentEmbed: packStr() - ops.push({ + /** + * @type {Object} + */ + const attributes = {} + let addAttributes = false; + for (const [key, value] of currentAttributes) { + addAttributes = true; + attributes[key] = value + } + /** + * @type {Object} + */ + const op = { insert: /** @type {ContentEmbed} */ (n.content).embed - }) - break + } + if(addAttributes) { + op.attributes = attributes + } + ops.push(op) case ContentFormat: if (isVisible(n, snapshot)) { packStr() diff --git a/tests/y-text.tests.js b/tests/y-text.tests.js index e59536b3..5b508746 100644 --- a/tests/y-text.tests.js +++ b/tests/y-text.tests.js @@ -158,3 +158,17 @@ export const testToJson = tc => { text0.insert(0, 'abc', { bold: true }) t.assert(text0.toJSON() === 'abc', 'toJSON returns the unformatted text') } + +/** + * @param {t.TestCase} tc + */ +export const testToDeltaEmbedAttributes = tc => { + const { text0 } = init(tc, { users: 1 }) + text0.insertEmbed(0, { image: 'imageSrc.png' }, { width: 100 }) + const [delta0] = text0.toDelta(); + t.assert(!!delta0.attributes, 'toDelta correctly reads attributes') + const { text0: text1 } = init(tc, { users: 1 }) + text1.insertEmbed(1, { image: 'imageSrc.png' }) + const [delta1] = text1.toDelta(); + t.assert(!delta1.hasOwnProperty('attributes'), 'toDelta does not set attributes key when no attributes are present') +}