diff --git a/apps/client-standalone/src/lightweight/zip_export_provider_factory.ts b/apps/client-standalone/src/lightweight/zip_export_provider_factory.ts index 2d967c7ee5..12e1f75e2b 100644 --- a/apps/client-standalone/src/lightweight/zip_export_provider_factory.ts +++ b/apps/client-standalone/src/lightweight/zip_export_provider_factory.ts @@ -1,10 +1,12 @@ import { type ExportFormat, type ZipExportProviderData, ZipExportProvider } from "@triliumnext/core"; +import contentCss from "@triliumnext/ckeditor5/src/theme/ck-content.css?raw"; + export async function standaloneZipExportProviderFactory(format: ExportFormat, data: ZipExportProviderData): Promise { switch (format) { case "html": { const { default: HtmlExportProvider } = await import("@triliumnext/core/src/services/export/zip/html.js"); - return new HtmlExportProvider(data); + return new HtmlExportProvider(data, { contentCss }); } case "markdown": { const { default: MarkdownExportProvider } = await import("@triliumnext/core/src/services/export/zip/markdown.js"); diff --git a/apps/server/src/services/export/zip/factory.ts b/apps/server/src/services/export/zip/factory.ts index d3d9a29508..db809b3e13 100644 --- a/apps/server/src/services/export/zip/factory.ts +++ b/apps/server/src/services/export/zip/factory.ts @@ -1,10 +1,21 @@ -import { type ExportFormat, type ZipExportProviderData, ZipExportProvider } from "@triliumnext/core"; +import { type ExportFormat, ZipExportProvider, type ZipExportProviderData } from "@triliumnext/core"; +import fs from "fs"; +import path from "path"; + +import { getResourceDir, isDev } from "../../utils.js"; + +function readContentCss(): string { + const cssFile = isDev + ? path.join(__dirname, "../../../../../../node_modules/ckeditor5/dist/ckeditor5-content.css") + : path.join(getResourceDir(), "ckeditor5-content.css"); + return fs.readFileSync(cssFile, "utf-8"); +} export async function serverZipExportProviderFactory(format: ExportFormat, data: ZipExportProviderData): Promise { switch (format) { case "html": { const { default: HtmlExportProvider } = await import("@triliumnext/core/src/services/export/zip/html.js"); - return new HtmlExportProvider(data); + return new HtmlExportProvider(data, { contentCss: readContentCss() }); } case "markdown": { const { default: MarkdownExportProvider } = await import("@triliumnext/core/src/services/export/zip/markdown.js"); diff --git a/packages/trilium-core/src/services/export/zip/html.ts b/packages/trilium-core/src/services/export/zip/html.ts index a92a981ca7..d5c165d23e 100644 --- a/packages/trilium-core/src/services/export/zip/html.ts +++ b/packages/trilium-core/src/services/export/zip/html.ts @@ -1,14 +1,24 @@ import html from "html"; import { escapeHtml } from "../../utils/index"; -import { ZipExportProvider } from "./abstract_provider.js"; +import { ZipExportProvider, ZipExportProviderData } from "./abstract_provider.js"; import { NoteMeta } from "../../../meta"; +export interface HtmlExportProviderOptions { + contentCss?: string; +} + export default class HtmlExportProvider extends ZipExportProvider { private navigationMeta: NoteMeta | null = null; private indexMeta: NoteMeta | null = null; private cssMeta: NoteMeta | null = null; + private options: HtmlExportProviderOptions; + + constructor(data: ZipExportProviderData, options?: HtmlExportProviderOptions) { + super(data); + this.options = options ?? {}; + } prepareMeta(metaFile) { if (this.zipExportOptions?.skipExtraFiles) return; @@ -168,12 +178,9 @@ export default class HtmlExportProvider extends ZipExportProvider { return; } - // TODO: Bring back CSS. - // const cssFile = isDev() - // ? path.join(__dirname, "../../../../../../node_modules/ckeditor5/dist/ckeditor5-content.css") - // : path.join(getResourceDir(), "ckeditor5-content.css"); - // const cssContent = fs.readFileSync(cssFile, "utf-8"); - // this.archive.append(cssContent, { name: cssMeta.dataFileName }); + if (this.options.contentCss) { + this.archive.append(this.options.contentCss, { name: cssMeta.dataFileName }); + } } }