diff --git a/client/js/libs/handlebars/parse.js b/client/js/libs/handlebars/parse.js index fdf32bdc..0bccaa1d 100644 --- a/client/js/libs/handlebars/parse.js +++ b/client/js/libs/handlebars/parse.js @@ -2,6 +2,7 @@ const Handlebars = require("handlebars/runtime"); const parseStyle = require("./ircmessageparser/parseStyle"); +const anyIntersection = require("./ircmessageparser/anyIntersection"); const findChannels = require("./ircmessageparser/findChannels"); const findLinks = require("./ircmessageparser/findLinks"); const findEmoji = require("./ircmessageparser/findEmoji"); @@ -66,7 +67,15 @@ module.exports = function parse(text) { const parts = channelParts .concat(linkParts) .concat(emojiParts) - .sort((a, b) => a.start - b.start); + .sort((a, b) => a.start - b.start || b.end - a.end) + .reduce((prev, curr) => { + const intersection = prev.some((p) => anyIntersection(p, curr)); + + if (intersection) { + return prev; + } + return prev.concat([curr]); + }, []); // Merge the styling information with the channels / URLs / text objects and // generate HTML strings with the resulting fragments