diff --git a/apps/server/src/services/export/zip.ts b/apps/server/src/services/export/zip.ts index 53e0eb540..4a9f14041 100644 --- a/apps/server/src/services/export/zip.ts +++ b/apps/server/src/services/export/zip.ts @@ -295,6 +295,14 @@ async function exportToZip(taskContext: TaskContext<"export">, branch: BBranch, return url ? `href="${url}"` : match; }); + if (format === "share") { + content = content.replace(/src="[^"]*api\/notes\/([a-zA-Z0-9_]+)\/download"/g, (match, targetNoteId) => { + const url = getNoteTargetUrl(targetNoteId, noteMeta); + + return url ? `src="${url}"` : match; + }); + } + return content; function findAttachment(targetAttachmentId: string) { diff --git a/apps/server/src/share/content_renderer.ts b/apps/server/src/share/content_renderer.ts index 043154ec4..d06eff873 100644 --- a/apps/server/src/share/content_renderer.ts +++ b/apps/server/src/share/content_renderer.ts @@ -75,6 +75,14 @@ export function renderNoteForExport(note: BNote, parentBranch: BBranch, basePath note: parentBranch.getNote() }; + // Determine JS to load. + const jsToLoad: string[] = [ + `${basePath}assets/scripts.js` + ]; + for (const jsRelation of note.getRelations("shareJs")) { + jsToLoad.push(`api/notes/${jsRelation.value}/download`); + } + return renderNoteContentInternal(note, { subRoot, rootNoteId: parentBranch.noteId, @@ -82,9 +90,7 @@ export function renderNoteForExport(note: BNote, parentBranch: BBranch, basePath `${basePath}assets/styles.css`, `${basePath}assets/scripts.css`, ], - jsToLoad: [ - `${basePath}assets/scripts.js` - ], + jsToLoad, logoUrl: `${basePath}icon-color.svg`, faviconUrl: `${basePath}favicon.ico`, ancestors,