diff --git a/client/js/libs/handlebars/ircmessageparser/merge.js b/client/js/libs/handlebars/ircmessageparser/merge.js index 3051be1d..890df86c 100644 --- a/client/js/libs/handlebars/ircmessageparser/merge.js +++ b/client/js/libs/handlebars/ircmessageparser/merge.js @@ -24,10 +24,7 @@ function sortParts(a, b) { // different styles, the first resulting part will contain fragments "fo" and // "o", and the second resulting part will contain "b" and "ar". "o" and "b" // fragments will contain duplicate styling attributes. -function merge(textParts, styleFragments) { - // Re-build the overall text (without control codes) from the style fragments - const cleanText = styleFragments.reduce((acc, frag) => acc + frag.text, ""); - +function merge(textParts, styleFragments, cleanText) { // Every section of the original text that has not been captured in a "part" // is filled with "text" parts, dummy objects with start/end but no extra // metadata. diff --git a/client/js/libs/handlebars/parse.js b/client/js/libs/handlebars/parse.js index 27bd76cf..0a08769a 100644 --- a/client/js/libs/handlebars/parse.js +++ b/client/js/libs/handlebars/parse.js @@ -91,7 +91,7 @@ module.exports = function parse(text, users) { // Merge the styling information with the channels / URLs / nicks / text objects and // generate HTML strings with the resulting fragments - return merge(parts, styleFragments).map((textPart) => { + return merge(parts, styleFragments, cleanText).map((textPart) => { // Create HTML strings with styling information const fragments = textPart.fragments.map(createFragment).join(""); diff --git a/test/client/js/libs/handlebars/ircmessageparser/merge.js b/test/client/js/libs/handlebars/ircmessageparser/merge.js index bcf79ca5..4125b6cc 100644 --- a/test/client/js/libs/handlebars/ircmessageparser/merge.js +++ b/test/client/js/libs/handlebars/ircmessageparser/merge.js @@ -56,7 +56,7 @@ describe("merge", () => { }], }]; - const actual = merge(textParts, styleFragments); + const actual = merge(textParts, styleFragments, styleFragments.map((fragment) => fragment.text).join("")); expect(actual).to.deep.equal(expected); });