fix #935
This commit is contained in:
parent
f819227bed
commit
5834790d0b
|
@ -17,8 +17,9 @@
|
||||||
* @return {(string|{ text: string })[]} processed html in form of a list.
|
* @return {(string|{ text: string })[]} processed html in form of a list.
|
||||||
*/
|
*/
|
||||||
export const convertHtmlToLines = (html) => {
|
export const convertHtmlToLines = (html) => {
|
||||||
const handledTags = new Set(['p', 'br', 'div'])
|
const ignoredTags = new Set(['code', 'blockquote'])
|
||||||
const openCloseTags = new Set(['p', 'div'])
|
const handledTags = new Set(['p', 'br', 'div', 'pre', 'code', 'blockquote'])
|
||||||
|
const openCloseTags = new Set(['p', 'div', 'pre', 'code', 'blockquote'])
|
||||||
|
|
||||||
let buffer = [] // Current output buffer
|
let buffer = [] // Current output buffer
|
||||||
const level = [] // How deep we are in tags and which tags were there
|
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
|
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 })
|
buffer.push({ text: textBuffer })
|
||||||
} else {
|
} else {
|
||||||
buffer.push(textBuffer)
|
buffer.push(textBuffer)
|
||||||
|
@ -48,14 +49,14 @@ export const convertHtmlToLines = (html) => {
|
||||||
const handleOpen = (tag) => { // handles opening tags
|
const handleOpen = (tag) => { // handles opening tags
|
||||||
flush()
|
flush()
|
||||||
buffer.push(tag)
|
buffer.push(tag)
|
||||||
level.push(tag)
|
level.unshift(getTagName(tag))
|
||||||
}
|
}
|
||||||
|
|
||||||
const handleClose = (tag) => { // handles closing tags
|
const handleClose = (tag) => { // handles closing tags
|
||||||
flush()
|
flush()
|
||||||
buffer.push(tag)
|
buffer.push(tag)
|
||||||
if (level[level.length - 1] === tag) {
|
if (level[0] === getTagName(tag)) {
|
||||||
level.pop()
|
level.shift()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -126,5 +126,30 @@ describe('TinyPostHTMLProcessor', () => {
|
||||||
const comparableResult = result.map(mapOnlyText(processorReplace)).join('')
|
const comparableResult = result.map(mapOnlyText(processorReplace)).join('')
|
||||||
expect(comparableResult).to.eql(output)
|
expect(comparableResult).to.eql(output)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
it('Testing handling ignored blocks', () => {
|
||||||
|
const input = `
|
||||||
|
<pre><code>> rei = "0"
|
||||||
|
'0'
|
||||||
|
> rei == 0
|
||||||
|
true
|
||||||
|
> 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)
|
||||||
|
})
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
Loading…
Reference in New Issue