diff --git a/components/publish/PublishWidget.vue b/components/publish/PublishWidget.vue index 6d2b3a22..aeaec19b 100644 --- a/components/publish/PublishWidget.vue +++ b/components/publish/PublishWidget.vue @@ -111,10 +111,16 @@ useWebShareTarget(async ({ data: { data, action } }: any) => { editor.value?.commands.focus('end') - if (data.text !== undefined) - editor.value?.commands.insertContent(data.text) + for (const text of data.textParts) { + for (const line of text.split('\n')) { + editor.value?.commands.insertContent({ + type: 'paragraph', + content: [{ type: 'text', text: line }], + }) + } + } - if (data.files !== undefined) + if (data.files.length !== 0) await uploadAttachments(data.files) }) diff --git a/modules/pwa/i18n.ts b/modules/pwa/i18n.ts index 45497fa7..a72c1173 100644 --- a/modules/pwa/i18n.ts +++ b/modules/pwa/i18n.ts @@ -13,6 +13,7 @@ interface ExtendedManifestOptions extends ManifestOptions { method: string enctype: string params: { + title: string text: string url: string files: [{ @@ -104,8 +105,9 @@ export const createI18n = async (): Promise => { method: 'POST', enctype: 'multipart/form-data', params: { + title: 'title', text: 'text', - url: 'text', + url: 'url', files: [ { name: 'files', @@ -150,8 +152,9 @@ export const createI18n = async (): Promise => { method: 'POST', enctype: 'multipart/form-data', params: { + title: 'title', text: 'text', - url: 'text', + url: 'url', files: [ { name: 'files', diff --git a/service-worker/share-target.ts b/service-worker/share-target.ts index c97b3b81..7d0dba96 100644 --- a/service-worker/share-target.ts +++ b/service-worker/share-target.ts @@ -32,21 +32,30 @@ async function handleSharedTarget(event: FetchEvent) { } async function sendShareTargetMessage(client: Client, data: FormData) { - const sharedData: { text?: string; files?: File[] } = {} + const sharedData: { textParts: string[]; files: File[] } = { + textParts: [], + files: [], + } + + // We collect the text data shared with us + const title = data.get('title') + if (title !== null) + sharedData.textParts.push(title.toString()) const text = data.get('text') if (text !== null) - sharedData.text = text.toString() + sharedData.textParts.push(text.toString()) - const files: File[] = [] + const link = data.get('link') + if (link !== null) + sharedData.textParts.push(link.toString()) + + // We collect the files shared with us for (const [name, file] of data.entries()) { if (name === 'files' && file instanceof File) - files.push(file) + sharedData.files.push(file) } - if (files.length !== 0) - sharedData.files = files - client.postMessage({ data: sharedData, action: 'compose-with-shared-data' }) }