From 164b38f0cd10118d1f3ff8ae11daff03e657ec9e Mon Sep 17 00:00:00 2001 From: Jeremy Nicholl Date: Mon, 31 Jan 2022 14:49:16 -0500 Subject: [PATCH 1/2] Avoid copying attribute map when deleting Calling cleanupFormattingGap should not make a copy of the attributes because it needs to be able to update them. --- src/types/YText.js | 2 +- tests/y-text.tests.js | 22 ++++++++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/src/types/YText.js b/src/types/YText.js index 328795e0..8e505f5a 100644 --- a/src/types/YText.js +++ b/src/types/YText.js @@ -465,7 +465,7 @@ const deleteText = (transaction, currPos, length) => { currPos.forward() } if (start) { - cleanupFormattingGap(transaction, start, currPos.right, startAttrs, map.copy(currPos.currentAttributes)) + cleanupFormattingGap(transaction, start, currPos.right, startAttrs, currPos.currentAttributes) } const parent = /** @type {AbstractType} */ (/** @type {Item} */ (currPos.left || currPos.right).parent) if (parent._searchMarker) { diff --git a/tests/y-text.tests.js b/tests/y-text.tests.js index 2a555237..0ca9a879 100644 --- a/tests/y-text.tests.js +++ b/tests/y-text.tests.js @@ -138,6 +138,28 @@ export const testNotMergeEmptyLinesFormat = tc => { ]) } +/** + * @param {t.TestCase} tc + */ +export const testPreserveAttributesThroughDelete = tc => { + const ydoc = new Y.Doc() + const testText = ydoc.getText('test'); + testText.applyDelta([ + { insert: 'Text' }, + { insert: '\n', attributes: { title: true } }, + { insert: '\n' } + ]) + testText.applyDelta([ + { retain: 4 }, + { delete: 1 }, + { retain: 1, attributes: { title: true } }, + ]) + t.compare(testText.toDelta(), [ + { insert: 'Text' }, + { insert: '\n', attributes: { title: true } }, + ]) +} + /** * @param {t.TestCase} tc */ From 84e95f11cb9bdae13f3c4af3625efdc85990bfff Mon Sep 17 00:00:00 2001 From: Jeremy Nicholl Date: Thu, 3 Feb 2022 15:19:57 -0500 Subject: [PATCH 2/2] Fix formatting --- tests/y-text.tests.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/y-text.tests.js b/tests/y-text.tests.js index 0ca9a879..7a8c448a 100644 --- a/tests/y-text.tests.js +++ b/tests/y-text.tests.js @@ -143,7 +143,7 @@ export const testNotMergeEmptyLinesFormat = tc => { */ export const testPreserveAttributesThroughDelete = tc => { const ydoc = new Y.Doc() - const testText = ydoc.getText('test'); + const testText = ydoc.getText('test') testText.applyDelta([ { insert: 'Text' }, { insert: '\n', attributes: { title: true } }, @@ -152,11 +152,11 @@ export const testPreserveAttributesThroughDelete = tc => { testText.applyDelta([ { retain: 4 }, { delete: 1 }, - { retain: 1, attributes: { title: true } }, + { retain: 1, attributes: { title: true } } ]) t.compare(testText.toDelta(), [ { insert: 'Text' }, - { insert: '\n', attributes: { title: true } }, + { insert: '\n', attributes: { title: true } } ]) }