diff --git a/packages/html-parser/src/html-parser.test.ts b/packages/html-parser/src/html-parser.test.ts index e6983799..f52bbc82 100644 --- a/packages/html-parser/src/html-parser.test.ts +++ b/packages/html-parser/src/html-parser.test.ts @@ -64,6 +64,14 @@ describe('HtmlMessageEntityParser', () => { ) }) + it('should handle collapsible blockquotes', () => { + test( + 'plain blockquote plain', + [createEntity('messageEntityBlockquote', 6, 10, { collapsed: true })], + 'plain
blockquoteplain', + ) + }) + 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
blockquoteplain`, + [createEntity('messageEntityBlockquote', 6, 10, { collapsed: true })], + 'plain blockquote plain', + ) + }) + it('should handle links and text mentions', () => { test( htm`plain https://google.com google @durov Pavel Durov plain`, diff --git a/packages/html-parser/src/index.ts b/packages/html-parser/src/index.ts index c6de4896..4ecfe666 100644 --- a/packages/html-parser/src/index.ts +++ b/packages/html-parser/src/index.ts @@ -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(`
${entityText}`) + break case 'messageEntityPre': html.push( `
${