From c364127d05aba061fdd72945e852f37dd475b6e3 Mon Sep 17 00:00:00 2001 From: Michael Uray Date: Sat, 17 Oct 2026 21:20:24 +0000 Subject: [PATCH] feat(document): add Copy as Markdown action for documents The CopyDocumentMarkdown view action already converts a collaborative content field to Markdown and copies it to the clipboard, but it was only registered for cards and controlled documents. Regular documents (document:class:Document) had no way to get their content as Markdown; copying selected text yields plain text with lots of extra blank lines. Register the existing action for document:class:Document using its collaborative 'content' field, in the context menu ('copy' group) and the action palette. Fixes #10301 Signed-off-by: Michael Uray --- models/document/src/index.ts | 21 +++++++++++++++++++++ models/document/src/plugin.ts | 3 ++- 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/models/document/src/index.ts b/models/document/src/index.ts index 380a7efffd7..93833cfd811 100644 --- a/models/document/src/index.ts +++ b/models/document/src/index.ts @@ -397,6 +397,27 @@ function defineDocument (builder: Builder): void { document.action.UnlockContent ) + createAction( + builder, + { + action: view.actionImpl.CopyDocumentMarkdown, + actionProps: { + contentClass: document.class.Document, + contentField: 'content' + }, + label: view.string.CopyDocumentMarkdown, + icon: view.icon.Print, + input: 'focus', + category: document.category.Document, + target: document.class.Document, + context: { + mode: ['context', 'browser'], + group: 'copy' + } + }, + document.action.CopyDocumentMarkdown + ) + // Notifications builder.mixin(document.class.Document, core.class.Class, activity.mixin.ActivityDoc, {}) diff --git a/models/document/src/plugin.ts b/models/document/src/plugin.ts index 97760535e68..2aa28a44257 100644 --- a/models/document/src/plugin.ts +++ b/models/document/src/plugin.ts @@ -48,7 +48,8 @@ export default mergeIds(documentId, document, { action: { PublicLink: '' as Ref>, LockContent: '' as Ref>, - UnlockContent: '' as Ref> + UnlockContent: '' as Ref>, + CopyDocumentMarkdown: '' as Ref> }, function: { CanLockDocument: '' as Resource<(doc?: Doc | Doc[]) => Promise>,