logo

pleroma-fe

My custom branche(s) on git.pleroma.social/pleroma/pleroma-fe git clone https://hacktivis.me/git/pleroma-fe.git
commit: 5834790d0b38d487e314e8419509d162abbd6a80
parent f819227bed8ab34e775ce5c0501457bf94c45fed
Author: Henry Jameson <me@hjkos.com>
Date:   Fri, 11 Jun 2021 11:50:05 +0300

fix #935

Diffstat:

Msrc/services/html_converter/html_line_converter.service.js13+++++++------
Mtest/unit/specs/services/html_converter/html_line_converter.spec.js25+++++++++++++++++++++++++
2 files changed, 32 insertions(+), 6 deletions(-)

diff --git a/src/services/html_converter/html_line_converter.service.js b/src/services/html_converter/html_line_converter.service.js @@ -17,8 +17,9 @@ * @return {(string|{ text: string })[]} processed html in form of a list. */ export const convertHtmlToLines = (html) => { - const handledTags = new Set(['p', 'br', 'div']) - const openCloseTags = new Set(['p', 'div']) + const ignoredTags = new Set(['code', 'blockquote']) + const handledTags = new Set(['p', 'br', 'div', 'pre', 'code', 'blockquote']) + const openCloseTags = new Set(['p', 'div', 'pre', 'code', 'blockquote']) let buffer = [] // Current output buffer const level = [] // How deep we are in tags and which tags were there @@ -32,7 +33,7 @@ export const convertHtmlToLines = (html) => { } const flush = () => { // Processes current line buffer, adds it to output buffer and clears line buffer - if (textBuffer.trim().length > 0) { + if (textBuffer.trim().length > 0 && !level.some(l => ignoredTags.has(l))) { buffer.push({ text: textBuffer }) } else { buffer.push(textBuffer) @@ -48,14 +49,14 @@ export const convertHtmlToLines = (html) => { const handleOpen = (tag) => { // handles opening tags flush() buffer.push(tag) - level.push(tag) + level.unshift(getTagName(tag)) } const handleClose = (tag) => { // handles closing tags flush() buffer.push(tag) - if (level[level.length - 1] === tag) { - level.pop() + if (level[0] === getTagName(tag)) { + level.shift() } } diff --git a/test/unit/specs/services/html_converter/html_line_converter.spec.js b/test/unit/specs/services/html_converter/html_line_converter.spec.js @@ -126,5 +126,30 @@ describe('TinyPostHTMLProcessor', () => { const comparableResult = result.map(mapOnlyText(processorReplace)).join('') expect(comparableResult).to.eql(output) }) + + it('Testing handling ignored blocks', () => { + const input = ` + <pre><code>&gt; rei = &quot;0&quot; + &#39;0&#39; + &gt; rei == 0 + true + &gt; rei == null + false</code></pre><blockquote>That, christian-like JS diagram but it’s evangelion instead.</blockquote> + ` + const result = convertHtmlToLines(input) + const comparableResult = result.map(mapOnlyText(processorReplace)).join('') + expect(comparableResult).to.eql(input) + }) + it('Testing handling ignored blocks 2', () => { + const input = ` + <blockquote>An SSL error has happened.</blockquote><p>Shakespeare</p> + ` + const output = ` + <blockquote>An SSL error has happened.</blockquote><p>_</p> + ` + const result = convertHtmlToLines(input) + const comparableResult = result.map(mapOnlyText(processorReplace)).join('') + expect(comparableResult).to.eql(output) + }) }) })