diff --git a/client/src/view-helper.js b/client/src/view-helper.js index 2be1c445a9..d4d54343f0 100644 --- a/client/src/view-helper.js +++ b/client/src/view-helper.js @@ -42,16 +42,18 @@ class ViewHelper { /** @private */ this.mdBeforeList = [ - { - regex: /```\n?([\s\S]*?)```/g, + /*{ + regex: /```\n?([\s\S]*?)```/g, value: (s, string) => { - return '```\n' + string + '```'; + return '```\n' + string.replace(/\\\>/g, '>') + '```'; }, - }, + },*/ { - regex: /`([\s\S]*?)`/g, + // Also covers triple-backtick blocks. + regex: /`([\s\S]*?)`/g, value: (s, string) => { - return '`' + string + '`'; + // noinspection RegExpRedundantEscape + return '`' + string.replace(/\\\>/g, '>') + '`'; }, }, ]; @@ -689,7 +691,8 @@ class ViewHelper { transformMarkdownText(text, options) { text = text || ''; - text = Handlebars.Utils.escapeExpression(text).replace(/>+/g, '>'); + // noinspection RegExpRedundantEscape + text = text.replace(/\>/g, '\\>'); this.mdBeforeList.forEach(item => { text = text.replace(item.regex, item.value); @@ -697,12 +700,9 @@ class ViewHelper { options = options || {}; - if (options.inline) { - text = marked.parseInline(text); - } - else { - text = marked.parse(text); - } + text = options.inline ? + marked.parseInline(text) : + marked.parse(text); text = DOMPurify.sanitize(text, {}).toString(); diff --git a/package-lock.json b/package-lock.json index 50774c4a48..539e6eac81 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "espocrm", - "version": "8.1.2", + "version": "8.1.3", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "espocrm", - "version": "8.1.2", + "version": "8.1.3", "hasInstallScript": true, "license": "AGPL-3.0-or-later", "dependencies": { diff --git a/package.json b/package.json index f65468239a..543fbf4277 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "espocrm", - "version": "8.1.2", + "version": "8.1.3", "description": "Open-source CRM.", "repository": { "type": "git",