feat(html-parser): support collapsible blockquotes

This commit is contained in:
alina 🌸 2024-06-01 16:12:33 +03:00
parent 9fd2aa85f2
commit 3cc193a8fa
Signed by: teidesu
SSH key fingerprint: SHA256:uNeCpw6aTSU4aIObXLvHfLkDa82HWH9EiOj9AXOIRpI
2 changed files with 21 additions and 3 deletions

View file

@ -64,6 +64,14 @@ describe('HtmlMessageEntityParser', () => {
)
})
it('should handle collapsible blockquotes', () => {
test(
'plain blockquote plain',
[createEntity('messageEntityBlockquote', 6, 10, { collapsed: true })],
'plain <blockquote collapsible>blockquote</blockquote> plain',
)
})
it('should handle links and text mentions', () => {
test(
'plain https://google.com google @durov Pavel Durov mail@mail.ru plain',
@ -253,13 +261,21 @@ describe('HtmlMessageEntityParser', () => {
[
createEntity('messageEntityCode', 6, 4),
createEntity('messageEntityPre', 11, 3, { language: '' }),
createEntity('messageEntityBlockquote', 15, 10),
createEntity('messageEntityBlockquote', 15, 10, { collapsed: false }),
createEntity('messageEntitySpoiler', 26, 7),
],
'plain code pre blockquote spoiler plain',
)
})
it('should handle collapsible blockquotes', () => {
test(
htm`plain <blockquote collapsible>blockquote</blockquote> plain`,
[createEntity('messageEntityBlockquote', 6, 10, { collapsed: true })],
'plain blockquote plain',
)
})
it('should handle links and text mentions', () => {
test(
htm`plain https://google.com <a href="https://google.com">google</a> @durov <a href="tg://user?id=36265675">Pavel Durov</a> plain`,

View file

@ -105,6 +105,7 @@ function parse(
_: 'messageEntityBlockquote',
offset: plainText.length,
length: 0,
collapsed: 'collapsible' in attribs,
}
break
case 'code':
@ -372,7 +373,6 @@ function _unparse(
case 'messageEntityUnderline':
case 'messageEntityStrike':
case 'messageEntityCode':
case 'messageEntityBlockquote':
case 'messageEntitySpoiler':
{
const tag = (
@ -382,13 +382,15 @@ function _unparse(
messageEntityUnderline: 'u',
messageEntityStrike: 's',
messageEntityCode: 'code',
messageEntityBlockquote: 'blockquote',
messageEntitySpoiler: 'spoiler',
} as const
)[type]
html.push(`<${tag}>${entityText}</${tag}>`)
}
break
case 'messageEntityBlockquote':
html.push(`<blockquote${entity.collapsed ? ' collapsible' : ''}>${entityText}</blockquote>`)
break
case 'messageEntityPre':
html.push(
`<pre${entity.language ? ` language="${entity.language}"` : ''}>${