From a2110ca631a0bf35424a7fd568d6d82cb72939bd Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Tue, 24 Jun 2025 17:44:47 +0300 Subject: [PATCH] fix(export/share): tree not expanding properly --- .../src/services/export/zip/share_theme.ts | 4 ++-- apps/server/src/share/content_renderer.ts | 19 +++++++++++++++---- apps/server/src/share/routes.ts | 1 + packages/share-theme/src/templates/page.ejs | 11 +---------- 4 files changed, 19 insertions(+), 16 deletions(-) diff --git a/apps/server/src/services/export/zip/share_theme.ts b/apps/server/src/services/export/zip/share_theme.ts index abe7be42d..59746626f 100644 --- a/apps/server/src/services/export/zip/share_theme.ts +++ b/apps/server/src/services/export/zip/share_theme.ts @@ -1,6 +1,6 @@ import { join } from "path"; import NoteMeta, { NoteMetaFile } from "../../meta/note_meta"; -import { ZipExportProvider } from "./abstract_provider"; +import { ZipExportProvider } from "./abstract_provider.js"; import { RESOURCE_DIR } from "../../resource_dir"; import { getResourceDir, isDev } from "../../utils"; import fs from "fs"; @@ -50,7 +50,7 @@ export default class ShareThemeExportProvider extends ZipExportProvider { const basePath = "../".repeat(noteMeta.notePath.length - 1); if (note) { - content = renderNoteForExport(note, branch, basePath); + content = renderNoteForExport(note, branch, basePath, noteMeta.notePath.slice(0, -1)); content = content.replace(/href="[^"]*\.\/([a-zA-Z0-9_\/]{12})[^"]*"/g, "href=\"#root/$1\""); content = this.rewriteFn(content, noteMeta); } diff --git a/apps/server/src/share/content_renderer.ts b/apps/server/src/share/content_renderer.ts index 041e5cc17..62c9df71f 100644 --- a/apps/server/src/share/content_renderer.ts +++ b/apps/server/src/share/content_renderer.ts @@ -61,7 +61,7 @@ function getSharedSubTreeRoot(note: SNote | BNote | undefined): Subroot { return getSharedSubTreeRoot(parentBranch.getParentNote()); } -export function renderNoteForExport(note: BNote, parentBranch: BBranch, basePath: string) { +export function renderNoteForExport(note: BNote, parentBranch: BBranch, basePath: string, ancestors: string[]) { const subRoot: Subroot = { branch: parentBranch, note: parentBranch.getNote() @@ -69,7 +69,7 @@ export function renderNoteForExport(note: BNote, parentBranch: BBranch, basePath return renderNoteContentInternal(note, { subRoot, - rootNoteId: note.getParentNotes()[0].noteId, + rootNoteId: parentBranch.noteId, cssToLoad: [ `${basePath}style.css`, `${basePath}boxicons.css` @@ -77,13 +77,22 @@ export function renderNoteForExport(note: BNote, parentBranch: BBranch, basePath jsToLoad: [ `${basePath}script.js` ], - logoUrl: `${basePath}icon-color.svg` + logoUrl: `${basePath}icon-color.svg`, + ancestors }); } export function renderNoteContent(note: SNote) { const subRoot = getSharedSubTreeRoot(note); + const ancestors: string[] = []; + let notePointer = note; + while (notePointer.parents[0].noteId !== subRoot.note?.noteId) { + const pointerParent = notePointer.parents[0]; + ancestors.push(pointerParent.noteId); + notePointer = pointerParent; + } + // Determine CSS to load. const cssToLoad: string[] = []; if (!isDev && !note.isLabelTruthy("shareOmitDefaultCss")) { @@ -110,7 +119,8 @@ export function renderNoteContent(note: SNote) { rootNoteId: "_share", cssToLoad, jsToLoad, - logoUrl + logoUrl, + ancestors }); } @@ -120,6 +130,7 @@ interface RenderArgs { cssToLoad: string[]; jsToLoad: string[]; logoUrl: string; + ancestors: string[]; } function renderNoteContentInternal(note: SNote | BNote, renderArgs: RenderArgs) { diff --git a/apps/server/src/share/routes.ts b/apps/server/src/share/routes.ts index 4b0281ec5..ceaeedb1b 100644 --- a/apps/server/src/share/routes.ts +++ b/apps/server/src/share/routes.ts @@ -137,6 +137,7 @@ function register(router: Router) { return; } + res.send(renderNoteContent(note)); } diff --git a/packages/share-theme/src/templates/page.ejs b/packages/share-theme/src/templates/page.ejs index 243f788a1..10a6c474a 100644 --- a/packages/share-theme/src/templates/page.ejs +++ b/packages/share-theme/src/templates/page.ejs @@ -97,16 +97,7 @@ content = content.replaceAll(headingRe, (...match) => { <% if (hasTree) { %> <% } %>