From 2d1e3fde43965940d019a0d3279348a2fded7c42 Mon Sep 17 00:00:00 2001 From: Kevin Jahns Date: Fri, 4 Feb 2022 11:26:32 +0100 Subject: [PATCH] fixed edge formatting case --- src/types/YText.js | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/types/YText.js b/src/types/YText.js index 8e505f5a..c0339003 100644 --- a/src/types/YText.js +++ b/src/types/YText.js @@ -338,14 +338,16 @@ const formatText = (transaction, parent, currPos, length, attributes) => { * * @param {Transaction} transaction * @param {Item} start - * @param {Item|null} end exclusive end, automatically iterates to the next Content Item + * @param {Item|null} curr exclusive end, automatically iterates to the next Content Item * @param {Map} startAttributes - * @param {Map} endAttributes This attribute is modified! + * @param {Map} currAttributes * @return {number} The amount of formatting Items deleted. * * @function */ -const cleanupFormattingGap = (transaction, start, end, startAttributes, endAttributes) => { +const cleanupFormattingGap = (transaction, start, curr, startAttributes, currAttributes) => { + let end = curr + const endAttributes = map.copy(currAttributes) while (end && (!end.countable || end.deleted)) { if (!end.deleted && end.content.constructor === ContentFormat) { updateCurrentAttributes(endAttributes, /** @type {ContentFormat} */ (end.content)) @@ -353,7 +355,11 @@ const cleanupFormattingGap = (transaction, start, end, startAttributes, endAttri end = end.right } let cleanups = 0 + let reachedEndOfCurr = false while (start !== end) { + if (curr === start) { + reachedEndOfCurr = true + } if (!start.deleted) { const content = start.content switch (content.constructor) { @@ -363,6 +369,9 @@ const cleanupFormattingGap = (transaction, start, end, startAttributes, endAttri // Either this format is overwritten or it is not necessary because the attribute already existed. start.delete(transaction) cleanups++ + if (!reachedEndOfCurr && (currAttributes.get(key) || null) === value) { + currAttributes.delete(key) + } } break }