1
0
silverbullet/plugs/editor/upload.ts

49 lines
1.3 KiB
TypeScript

import { editor, space } from "$sb/silverbullet-syscall/mod.ts";
import { UploadFile } from "$sb/types.ts";
const maximumAttachmentSize = 1024 * 1024 * 10; // 10MB
function folderName(path: string) {
return path.split("/").slice(0, -1).join("/");
}
async function saveFile(file: UploadFile) {
if (file.content.length > maximumAttachmentSize) {
editor.flashNotification(
`Attachment is too large, maximum is ${
maximumAttachmentSize / 1024 / 1024
}MB`,
"error",
);
return;
}
let prefix = folderName(await editor.getCurrentPage()) + "/";
if (prefix === "/") {
// root folder case
prefix = "";
}
const finalFileName = await editor.prompt(
"File name for pasted attachment",
file.name,
);
if (!finalFileName) {
return;
}
await space.writeAttachment(
prefix + finalFileName,
file.content,
);
let attachmentMarkdown = `[${finalFileName}](${encodeURI(finalFileName)})`;
if (file.contentType?.startsWith("image/")) {
attachmentMarkdown = `![](${encodeURI(finalFileName)})`;
}
editor.insertAtCursor(attachmentMarkdown);
}
export async function uploadFile(_ctx: any, accept?: string, capture?: string) {
const uploadFile = await editor.uploadFile(accept, capture);
await saveFile(uploadFile);
}