diff --git a/src/main/export-html-template.ts b/src/main/export-html-template.ts index 7666dfd..b5e7c50 100644 --- a/src/main/export-html-template.ts +++ b/src/main/export-html-template.ts @@ -789,8 +789,8 @@ body { overscroll-behavior-x: none; touch-action: pan-y; } - .message:not(.system) .bubble { max-width: calc(100% - 50px); } - .message:not(.system) .row.has-locate .bubble { max-width: calc(100% - 90px); } + .message:not(.system) .message-stack { max-width: calc(100% - 50px); } + .message:not(.system) .row.has-locate .message-stack { max-width: calc(100% - 90px); } .audio-wrap { width: min(260px, 100%); } } ` @@ -1367,12 +1367,10 @@ const renderExportScript = (name: string): string => ` }) } const updateCount = () => { - const shown = Math.max(0, windowEnd - windowStart) const scopeTotal = activeConversation === 'all' ? allMessages.length : allMessages.filter((message) => message.exportConversationId === activeConversation).length - const scopeLabel = activeConversation === 'all' ? '全部' : '当前聊天' - count.textContent = '已显示 ' + shown + ' / 筛选 ' + filtered.length + ' / ' + scopeLabel + ' ' + scopeTotal + count.textContent = '筛选 ' + filtered.length + ' / 全部 ' + scopeTotal } const setScrollTop = (value) => { scrollLoadSuppressed = true diff --git a/tests/e2e/export-archive.spec.ts b/tests/e2e/export-archive.spec.ts index ac2321a..b9ee47a 100644 --- a/tests/e2e/export-archive.spec.ts +++ b/tests/e2e/export-archive.spec.ts @@ -256,6 +256,21 @@ test('EXPORT-ARCHIVE-01 merged v2 archive is usable offline on desktop and mobil ).toBeLessThanOrEqual(1) expect(compactControlBounds.searchWidth).toBeGreaterThan(compactControlBounds.conversationWidth) expect(compactControlBounds.searchFontSize).toBe('16px') + const personalMessageContent = page + .locator('.message') + .filter({ hasText: '个人聊天消息' }) + .locator('.content') + const expectPersonalMessageOnOneLine = async (): Promise => { + const metrics = await personalMessageContent.evaluate((element) => { + const styles = getComputedStyle(element) + return { + height: element.getBoundingClientRect().height, + lineHeight: Number.parseFloat(styles.lineHeight) + } + }) + expect(metrics.height).toBeLessThanOrEqual(metrics.lineHeight + 1) + } + await expectPersonalMessageOnOneLine() await expect(conversationTrigger.locator('.conversation-switch-icon')).toHaveCSS( 'width', '13px' @@ -276,6 +291,7 @@ test('EXPORT-ARCHIVE-01 merged v2 archive is usable offline on desktop and mobil await expect(searchInput).toBeVisible() await searchInput.fill('个人聊天消息') await expect(page.locator('.search-highlight')).toHaveText('个人聊天消息') + await expectPersonalMessageOnOneLine() const mobileSearchResult = page.locator('.message') const mobileLocateButton = mobileSearchResult.getByRole('button', { name: '定位到聊天位置' diff --git a/tests/unit/export-media.test.ts b/tests/unit/export-media.test.ts index 0df05ee..0cb7f50 100644 --- a/tests/unit/export-media.test.ts +++ b/tests/unit/export-media.test.ts @@ -73,9 +73,7 @@ describe('export media', () => { dom.window.eval(inlineScriptOf(html)) expect(dom.window.document.querySelectorAll('.message')).toHaveLength(EXPORT_PAGE_SIZE) - expect(dom.window.document.querySelector('#count')?.textContent).toBe( - '已显示 240 / 筛选 500 / 全部 500' - ) + expect(dom.window.document.querySelector('#count')?.textContent).toBe('筛选 500 / 全部 500') const list = dom.window.document.querySelector('#messages')! expect(list.querySelector('.message')?.getAttribute('data-index')).toBe('260') @@ -154,9 +152,7 @@ describe('export media', () => { 'https://example.com/xi' ) expect(dom.window.document.querySelectorAll('.search-highlight')).toHaveLength(1) - expect(dom.window.document.querySelector('#count')?.textContent).toBe( - '已显示 1 / 筛选 1 / 全部 2' - ) + expect(dom.window.document.querySelector('#count')?.textContent).toBe('筛选 1 / 全部 2') dom.window.close() }) @@ -191,25 +187,19 @@ describe('export media', () => { expect(trigger.textContent).toContain('全部聊天') expect(menu.querySelectorAll('[data-conversation-id]')).toHaveLength(3) expect(dom.window.document.querySelectorAll('.conversation-source')).toHaveLength(3) - expect(dom.window.document.querySelector('#count')?.textContent).toBe( - '已显示 3 / 筛选 3 / 全部 3' - ) + expect(dom.window.document.querySelector('#count')?.textContent).toBe('筛选 3 / 全部 3') trigger.click() ;(menu.querySelector('[data-conversation-id="alpha"]') as HTMLButtonElement).click() expect(dom.window.document.querySelectorAll('.message')).toHaveLength(2) expect(dom.window.document.querySelectorAll('.conversation-source')).toHaveLength(0) - expect(dom.window.document.querySelector('#count')?.textContent).toBe( - '已显示 2 / 筛选 2 / 当前聊天 2' - ) + expect(dom.window.document.querySelector('#count')?.textContent).toBe('筛选 2 / 全部 2') expect(dom.window.document.querySelectorAll('.timeline-month')).toHaveLength(2) const search = dom.window.document.querySelector('#query') as HTMLInputElement search.value = '共同关键词' search.dispatchEvent(new dom.window.Event('input')) expect(dom.window.document.querySelectorAll('.message')).toHaveLength(1) - expect(dom.window.document.querySelector('#count')?.textContent).toBe( - '已显示 1 / 筛选 1 / 当前聊天 2' - ) + expect(dom.window.document.querySelector('#count')?.textContent).toBe('筛选 1 / 全部 2') dom.window.close() })