diff --git a/packages/core/src/api/exporters/markdown/htmlToMarkdown.ts b/packages/core/src/api/exporters/markdown/htmlToMarkdown.ts index 4d3f5f7c8a..da63166851 100644 --- a/packages/core/src/api/exporters/markdown/htmlToMarkdown.ts +++ b/packages/core/src/api/exporters/markdown/htmlToMarkdown.ts @@ -84,6 +84,8 @@ function serializeNode(node: Node, ctx: SerializeContext): string { return serializeVideo(el, ctx); case "audio": return serializeAudio(el, ctx); + case "embed": + return serializeEmbed(el, ctx); case "figure": return serializeFigure(el, ctx); case "a": @@ -501,9 +503,9 @@ function formatSeparatorRow(colWidths: number[], colCount: number): string { function serializeImage(el: HTMLElement, ctx: SerializeContext): string { const src = el.getAttribute("src") || ""; const alt = el.getAttribute("alt") || ""; - if (!src) { - return ctx.indent + "Add image\n\n"; - } + // Empty placeholder — preserve the block-level break, matching how + // serializeParagraph/serializeHeading emit `\n\n` for empty content. + if (!src) {return "\n\n";} return ctx.indent + `\n\n`; } @@ -511,19 +513,23 @@ function serializeVideo(el: HTMLElement, ctx: SerializeContext): string { const src = el.getAttribute("src") || el.getAttribute("data-url") || ""; const name = el.getAttribute("data-name") || el.getAttribute("title") || ""; - if (!src) { - return ctx.indent + "Add video\n\n"; - } + if (!src) {return "\n\n";} return ctx.indent + `\n\n`; } function serializeAudio(el: HTMLElement, ctx: SerializeContext): string { const src = el.getAttribute("src") || ""; - if (!src) {return "";} + if (!src) {return "\n\n";} // Audio has no visible representation in markdown; output as link with empty text return ctx.indent + `[](${src})\n\n`; } +function serializeEmbed(el: HTMLElement, ctx: SerializeContext): string { + const src = el.getAttribute("src") || ""; + if (!src) {return "\n\n";} + return ctx.indent + `[](${src})\n\n`; +} + function serializeFigure(el: HTMLElement, ctx: SerializeContext): string { let result = ""; diff --git a/packages/core/src/blocks/Audio/block.ts b/packages/core/src/blocks/Audio/block.ts index f271fcb16a..78722cf988 100644 --- a/packages/core/src/blocks/Audio/block.ts +++ b/packages/core/src/blocks/Audio/block.ts @@ -129,11 +129,8 @@ export const audioToExternalHTML = >, ) => { if (!block.props.url) { - const div = document.createElement("p"); - div.textContent = "Add audio"; - return { - dom: div, + dom: document.createElement("audio"), }; } diff --git a/packages/core/src/blocks/File/block.ts b/packages/core/src/blocks/File/block.ts index a506cc45a3..8e1ddf622f 100644 --- a/packages/core/src/blocks/File/block.ts +++ b/packages/core/src/blocks/File/block.ts @@ -75,11 +75,8 @@ export const createFileBlockSpec = createBlockSpec(createFileBlockConfig, { }, toExternalHTML(block) { if (!block.props.url) { - const div = document.createElement("p"); - div.textContent = "Add file"; - return { - dom: div, + dom: document.createElement("embed"), }; } diff --git a/packages/core/src/blocks/Image/block.ts b/packages/core/src/blocks/Image/block.ts index 83138c8842..503c483527 100644 --- a/packages/core/src/blocks/Image/block.ts +++ b/packages/core/src/blocks/Image/block.ts @@ -141,11 +141,8 @@ export const imageToExternalHTML = >, ) => { if (!block.props.url) { - const div = document.createElement("p"); - div.textContent = "Add image"; - return { - dom: div, + dom: document.createElement("img"), }; } diff --git a/packages/core/src/blocks/Video/block.ts b/packages/core/src/blocks/Video/block.ts index 026b333ba5..9d91ddb6f0 100644 --- a/packages/core/src/blocks/Video/block.ts +++ b/packages/core/src/blocks/Video/block.ts @@ -105,11 +105,8 @@ export const createVideoBlockSpec = createBlockSpec( }, toExternalHTML(block) { if (!block.props.url) { - const div = document.createElement("p"); - div.textContent = "Add video"; - return { - dom: div, + dom: document.createElement("video"), }; } diff --git a/tests/src/unit/core/clipboard/copy/__snapshots__/text/html/basicBlocks.html b/tests/src/unit/core/clipboard/copy/__snapshots__/text/html/basicBlocks.html index 0854870529..b59aa81d46 100644 --- a/tests/src/unit/core/clipboard/copy/__snapshots__/text/html/basicBlocks.html +++ b/tests/src/unit/core/clipboard/copy/__snapshots__/text/html/basicBlocks.html @@ -46,6 +46,6 @@
Add image
+Paragraph 2
\ No newline at end of file diff --git a/tests/src/unit/core/formatConversion/export/__snapshots__/html/audio/button.html b/tests/src/unit/core/formatConversion/export/__snapshots__/html/audio/button.html index 51c429c20a..915743c700 100644 --- a/tests/src/unit/core/formatConversion/export/__snapshots__/html/audio/button.html +++ b/tests/src/unit/core/formatConversion/export/__snapshots__/html/audio/button.html @@ -1 +1 @@ -Add audio
\ No newline at end of file + \ No newline at end of file diff --git a/tests/src/unit/core/formatConversion/export/__snapshots__/html/file/button.html b/tests/src/unit/core/formatConversion/export/__snapshots__/html/file/button.html index cc675c57a7..90ce06d701 100644 --- a/tests/src/unit/core/formatConversion/export/__snapshots__/html/file/button.html +++ b/tests/src/unit/core/formatConversion/export/__snapshots__/html/file/button.html @@ -1 +1 @@ -Add file
\ No newline at end of file + \ No newline at end of file diff --git a/tests/src/unit/core/formatConversion/export/__snapshots__/html/image/button.html b/tests/src/unit/core/formatConversion/export/__snapshots__/html/image/button.html index 8553433aff..df18852143 100644 --- a/tests/src/unit/core/formatConversion/export/__snapshots__/html/image/button.html +++ b/tests/src/unit/core/formatConversion/export/__snapshots__/html/image/button.html @@ -1 +1 @@ -Add image
\ No newline at end of file +Add file
\ No newline at end of file + \ No newline at end of file diff --git a/tests/src/unit/react/formatConversion/export/__snapshots__/html/reactImage/button.html b/tests/src/unit/react/formatConversion/export/__snapshots__/html/reactImage/button.html index 8553433aff..df18852143 100644 --- a/tests/src/unit/react/formatConversion/export/__snapshots__/html/reactImage/button.html +++ b/tests/src/unit/react/formatConversion/export/__snapshots__/html/reactImage/button.html @@ -1 +1 @@ -Add image
\ No newline at end of file +