From b678c3bd89f6e5beb257acc3499ba763a710b714 Mon Sep 17 00:00:00 2001 From: Baptiste Augrain Date: Fri, 12 Jun 2020 16:40:16 +0200 Subject: [PATCH] export html is escaping html characters as the preview --- browser/components/MarkdownPreview.js | 32 +++-------------------- browser/main/lib/dataApi/formatHTML.js | 35 +++++++++++++++++++++++++- 2 files changed, 37 insertions(+), 30 deletions(-) diff --git a/browser/components/MarkdownPreview.js b/browser/components/MarkdownPreview.js index 41868165..7871704e 100755 --- a/browser/components/MarkdownPreview.js +++ b/browser/components/MarkdownPreview.js @@ -23,10 +23,10 @@ import formatHTML, { CSS_FILES, buildStyle, getCodeThemeLink, - getStyleParams + getStyleParams, + escapeHtmlCharactersInCodeTag } from 'browser/main/lib/dataApi/formatHTML' import formatPDF from 'browser/main/lib/dataApi/formatPDF' -import { escapeHtmlCharacters } from 'browser/lib/utils' import yaml from 'js-yaml' import i18n from 'browser/lib/i18n' import path from 'path' @@ -247,32 +247,6 @@ class MarkdownPreview extends React.Component { } } - /** - * @description Convert special characters between three ``` - * @param {string[]} splitWithCodeTag Array of HTML strings separated by three ``` - * @returns {string} HTML in which special characters between three ``` have been converted - */ - escapeHtmlCharactersInCodeTag(splitWithCodeTag) { - for (let index = 0; index < splitWithCodeTag.length; index++) { - const codeTagRequired = - splitWithCodeTag[index] !== '```' && index < splitWithCodeTag.length - 1 - if (codeTagRequired) { - splitWithCodeTag.splice(index + 1, 0, '```') - } - } - let inCodeTag = false - let result = '' - for (let content of splitWithCodeTag) { - if (content === '```') { - inCodeTag = !inCodeTag - } else if (inCodeTag) { - content = escapeHtmlCharacters(content) - } - result += content - } - return result - } - getScrollBarStyle() { const { theme } = this.props @@ -485,7 +459,7 @@ class MarkdownPreview extends React.Component { this.refs.root.contentWindow.document.body.setAttribute('data-theme', theme) if (sanitize === 'NONE') { const splitWithCodeTag = value.split('```') - value = this.escapeHtmlCharactersInCodeTag(splitWithCodeTag) + value = escapeHtmlCharactersInCodeTag(splitWithCodeTag) } const renderedHTML = this.markdown.render(value) attachmentManagement.migrateAttachments(value, storagePath, noteKey) diff --git a/browser/main/lib/dataApi/formatHTML.js b/browser/main/lib/dataApi/formatHTML.js index 1ab14945..37c3756c 100644 --- a/browser/main/lib/dataApi/formatHTML.js +++ b/browser/main/lib/dataApi/formatHTML.js @@ -6,6 +6,7 @@ import consts from 'browser/lib/consts' import Markdown from 'browser/lib/markdown' import attachmentManagement from './attachmentManagement' import { version as codemirrorVersion } from 'codemirror/package.json' +import { escapeHtmlCharacters } from 'browser/lib/utils' const { app } = remote const appPath = fileUrl( @@ -467,7 +468,13 @@ document.addEventListener('DOMContentLoaded', displaySequences); } }) - let body = markdown.render(note.content) + let body = note.content + + if (sanitize === 'NONE') { + body = escapeHtmlCharactersInCodeTag(body.split('```')) + } + + body = markdown.render(note.content) const attachmentsAbsolutePaths = attachmentManagement.getAbsolutePathsOfAttachmentsInContent( note.content, @@ -761,3 +768,29 @@ body p { ${allowCustomCSS ? customCSS : ''} ` } + +/** + * @description Convert special characters between three ``` + * @param {string[]} splitWithCodeTag Array of HTML strings separated by three ``` + * @returns {string} HTML in which special characters between three ``` have been converted + */ +export function escapeHtmlCharactersInCodeTag(splitWithCodeTag) { + for (let index = 0; index < splitWithCodeTag.length; index++) { + const codeTagRequired = + splitWithCodeTag[index] !== '```' && index < splitWithCodeTag.length - 1 + if (codeTagRequired) { + splitWithCodeTag.splice(index + 1, 0, '```') + } + } + let inCodeTag = false + let result = '' + for (let content of splitWithCodeTag) { + if (content === '```') { + inCodeTag = !inCodeTag + } else if (inCodeTag) { + content = escapeHtmlCharacters(content) + } + result += content + } + return result +}