regression: Markdown broken on safari (#21780)

Co-authored-by: Guilherme Gazzo <guilhermegazzo@gmail.com>
pull/21806/head^2
gabriellsh 5 years ago committed by GitHub
parent 86ab5d1210
commit 4d07e9cf5b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 23
      app/markdown/lib/parser/original/markdown.js
  2. 41
      app/markdown/tests/client.tests.js

@ -33,6 +33,21 @@ const validateUrl = (url, message) => {
}
};
const getParserWithCustomMarker = (marker, tagName) => (msg) => msg.replace(new RegExp(`(\\${ marker }+(?!\\s))([^\\${ marker }\r\n]+)(\\${ marker }+)`, 'gm'), (match, p1, p2, p3) => {
if (p2.substring(p2.length - 1).match(/\s/)) {
return match;
}
const usableMarkers = p1.length > 1 ? 2 : 1;
const finalMarkerCount = p3.length - usableMarkers >= 0 ? usableMarkers : 1;
return `${ p1.substring(finalMarkerCount) }<span class="copyonly">${ marker }</span><${ tagName }>${ p2 }</${ tagName }><span class="copyonly">${ marker }</span>${ p3.substring(finalMarkerCount) }`;
});
const parseBold = getParserWithCustomMarker('*', 'strong');
const parseItalic = getParserWithCustomMarker('_', 'em');
const parseStrike = getParserWithCustomMarker('~', 'strike');
const parseNotEscaped = (message, {
supportSchemesForLink,
headers,
@ -60,13 +75,13 @@ const parseNotEscaped = (message, {
}
// Support *text* to make bold
msg = msg.replace(/\*{1,2}(?!\s)([^\*\r\n]+)(?<!\s)\*{1,2}/gm, '<span class="copyonly">*</span><strong>$1</strong><span class="copyonly">*</span>');
msg = parseBold(msg);
// Support _text_ to make italics
msg = msg.replace(/(?<!\_)\_{1,2}(?!\s)([^\_\r\n]+)(?<!\s)\_{1,2}(?!\_)/gm, '<span class="copyonly">_</span><em>$1</em><span class="copyonly">_</span>');
msg = parseItalic(msg);
// Support ~text~ to strike through text
msg = msg.replace(/(?<!\~)\~{1,2}(?!\s)([^~\r\n]+)(?<!\s)\~{1,2}(?!\~)/gm, '<span class="copyonly">~</span><strike>$1</strike><span class="copyonly">~</span>');
// // Support ~text~ to strike through text
msg = parseStrike(msg);
// Support for block quote
// >>>

@ -19,10 +19,17 @@ const inlinecodeWrapper = (text) => wrapper(`<span><code class="code-colors inli
const codeWrapper = (text, lang) => `<pre><code class='code-colors hljs ${ lang }'><span class='copyonly'>\`\`\`<br></span>${ text }<span class='copyonly'><br>\`\`\`</span></code></pre>`;
const bold = {
'**': '**',
'* *': '* *',
'** *': '** *',
'** **': '** **',
'* Hello*': '* Hello*',
'*Hello *': '*Hello *',
'*Hel lo*': boldWrapper('Hel lo'),
'*Hello*': boldWrapper('Hello'),
'**Hello**': boldWrapper('Hello'),
'**Hello*': boldWrapper('Hello'),
'*Hello**': boldWrapper('Hello'),
'**Hello*': `*${ boldWrapper('Hello') }`,
'*Hello**': `${ boldWrapper('Hello') }*`,
Hello: 'Hello',
'*Hello': '*Hello',
'Hello*': 'Hello*',
@ -40,16 +47,23 @@ const bold = {
};
const italic = {
__: '__',
'_ _': '_ _',
'__ _': '__ _',
'__ __': '__ __',
'_ Hello_': '_ Hello_',
'_Hello _': '_Hello _',
'_Hel lo_': italicWrapper('Hel lo'),
_Hello_: italicWrapper('Hello'),
__Hello__: italicWrapper('Hello'),
__Hello_: italicWrapper('Hello'),
_Hello__: italicWrapper('Hello'),
__Hello_: `_${ italicWrapper('Hello') }`,
_Hello__: `${ italicWrapper('Hello') }_`,
Hello: 'Hello',
_Hello: '_Hello',
Hello_: 'Hello_',
He_llo: 'He_llo',
___Hello___: '___Hello___',
___Hello__: '___Hello__',
___Hello___: `_${ italicWrapper('Hello') }_`,
___Hello__: `_${ italicWrapper('Hello') }`,
'_Hello_ this is dog': `${ italicWrapper('Hello') } this is dog`,
'Rocket cat says _Hello_': `Rocket cat says ${ italicWrapper('Hello') }`,
'He said _Hello_ to her': `He said ${ italicWrapper('Hello') } to her`,
@ -59,16 +73,23 @@ const italic = {
};
const strike = {
'~~': '~~',
'~ ~': '~ ~',
'~~ ~': '~~ ~',
'~~ ~~': '~~ ~~',
'~ Hello~': '~ Hello~',
'~Hello ~': '~Hello ~',
'~Hel lo~': strikeWrapper('Hel lo'),
'~Hello~': strikeWrapper('Hello'),
'~~Hello~~': strikeWrapper('Hello'),
'~~Hello~': strikeWrapper('Hello'),
'~Hello~~': strikeWrapper('Hello'),
'~~Hello~': `~${ strikeWrapper('Hello') }`,
'~Hello~~': `${ strikeWrapper('Hello') }~`,
Hello: 'Hello',
'~Hello': '~Hello',
'Hello~': 'Hello~',
'He~llo': 'He~llo',
'~~~Hello~~~': '~~~Hello~~~',
'~~~Hello~~': '~~~Hello~~',
'~~~Hello~~~': `~${ strikeWrapper('Hello') }~`,
'~~~Hello~~': `~${ strikeWrapper('Hello') }`,
'~Hello~ this is dog': `${ strikeWrapper('Hello') } this is dog`,
'Rocket cat says ~Hello~': `Rocket cat says ${ strikeWrapper('Hello') }`,
'He said ~Hello~ to her': `He said ${ strikeWrapper('Hello') } to her`,

Loading…
Cancel
Save