diff --git a/CHANGELOG.md b/CHANGELOG.md index 37353540..708cde87 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,10 @@ and this project adheres to ## [Unreleased] +## Added + +- 🎨(frontend) better conversion editor to pdf #151 + ## [1.1.0] - 2024-07-15 ## Added diff --git a/src/frontend/apps/e2e/__tests__/app-impress/doc-tools.spec.ts b/src/frontend/apps/e2e/__tests__/app-impress/doc-tools.spec.ts index 3c6d1c20..96184095 100644 --- a/src/frontend/apps/e2e/__tests__/app-impress/doc-tools.spec.ts +++ b/src/frontend/apps/e2e/__tests__/app-impress/doc-tools.spec.ts @@ -67,6 +67,21 @@ test.describe('Doc Tools', () => { await page.keyboard.press('Enter'); await page.keyboard.press('Enter'); await page.locator('.bn-block-outer').last().fill('Break'); + await expect(page.getByText('Break')).toBeVisible(); + + // Center the text + await page.getByText('Break').dblclick(); + await page.locator('button[data-test="alignTextCenter"]').click(); + + // Change the background color + await page.getByText('Break').dblclick(); + await page.locator('button[data-test="colors"]').click(); + await page.locator('button[data-test="background-color-brown"]').click(); + + // Change the text color + await page.getByText('Break').dblclick(); + await page.locator('button[data-test="colors"]').click(); + await page.locator('button[data-test="text-color-orange"]').click(); await page.getByLabel('Open the document options').click(); await page @@ -82,7 +97,10 @@ test.describe('Doc Tools', () => { .click(); // Empty paragraph should be replaced by a
- expect(body).toContain('

'); + expect(body.match(//g)?.length).toBeGreaterThanOrEqual(2); + expect(body).toContain('style="color: orange;"'); + expect(body).toContain('style="text-align: center;"'); + expect(body).toContain('style="background-color: brown;"'); }); test('it updates the doc', async ({ page, browserName }) => { diff --git a/src/frontend/apps/impress/src/features/docs/doc-header/components/ModalPDF.tsx b/src/frontend/apps/impress/src/features/docs/doc-header/components/ModalPDF.tsx index 055b8ce5..eb4d9850 100644 --- a/src/frontend/apps/impress/src/features/docs/doc-header/components/ModalPDF.tsx +++ b/src/frontend/apps/impress/src/features/docs/doc-header/components/ModalPDF.tsx @@ -104,7 +104,7 @@ export const ModalPDF = ({ onClose, doc }: ModalPDFProps) => { return; } - let body = await editor.blocksToHTMLLossy(editor.document); + let body = await editor.blocksToFullHTML(editor.document); body = adaptBlockNoteHTML(body); createPdf({ diff --git a/src/frontend/apps/impress/src/features/docs/doc-header/utils.ts b/src/frontend/apps/impress/src/features/docs/doc-header/utils.ts index c07ebf9d..8918bc00 100644 --- a/src/frontend/apps/impress/src/features/docs/doc-header/utils.ts +++ b/src/frontend/apps/impress/src/features/docs/doc-header/utils.ts @@ -11,5 +11,15 @@ export function downloadFile(blob: Blob, filename: string) { } export const adaptBlockNoteHTML = (html: string) => { - return html.replaceAll('

', '
'); + html = html.replaceAll('

', '
'); + html = html.replaceAll( + /data-text-alignment=\"([a-z]+)\"/g, + 'style="text-align: $1;"', + ); + html = html.replaceAll(/data-text-color=\"([a-z]+)\"/g, 'style="color: $1;"'); + html = html.replaceAll( + /data-background-color=\"([a-z]+)\"/g, + 'style="background-color: $1;"', + ); + return html; };