From 3cc193a8fa203d5c6fc06e2914b1d4827f25a499 Mon Sep 17 00:00:00 2001 From: alina sireneva Date: Sat, 1 Jun 2024 16:12:33 +0300 Subject: [PATCH] feat(html-parser): support collapsible blockquotes --- packages/html-parser/src/html-parser.test.ts | 18 +++++++++++++++++- packages/html-parser/src/index.ts | 6 ++++-- 2 files changed, 21 insertions(+), 3 deletions(-) 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
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
plain`, + [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}`) } break + case 'messageEntityBlockquote': + html.push(`${entityText}`) + break case 'messageEntityPre': html.push( `${