aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHenry Jameson <me@hjkos.com>2021-06-11 11:50:05 +0300
committerHenry Jameson <me@hjkos.com>2021-06-11 11:50:05 +0300
commit5834790d0b38d487e314e8419509d162abbd6a80 (patch)
tree858c53999b1ad9e2f6843360b37a02d33beab555
parentf819227bed8ab34e775ce5c0501457bf94c45fed (diff)
fix #935
-rw-r--r--src/services/html_converter/html_line_converter.service.js13
-rw-r--r--test/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
index 80482c9a..d8f5ecb8 100644
--- 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
index 82cb4170..532ea187 100644
--- 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)
+ })
})
})