Changed attachment link behavior

This commit is contained in:
Zef Hemel
2022-09-06 14:36:06 +02:00
parent 03daf92ba4
commit 61d5f9d460
11 changed files with 70 additions and 6 deletions
@@ -1,3 +1,4 @@
import type { CommandDef } from "@silverbulletmd/web/hooks/command";
import { syscall } from "./syscall";
export async function invokeFunction(
@@ -8,10 +9,16 @@ export async function invokeFunction(
return syscall("system.invokeFunction", env, name, ...args);
}
// Only available on the client
export async function invokeCommand(name: string): Promise<any> {
return syscall("system.invokeCommand", name);
}
// Only available on the client
export async function listCommands(): Promise<{ [key: string]: CommandDef }> {
return syscall("system.listCommands");
}
export async function getVersion(): Promise<string> {
return syscall("system.getVersion");
}
+20
View File
@@ -0,0 +1,20 @@
import { queryPrefix } from "@silverbulletmd/plugos-silverbullet-syscall";
import { matchBefore } from "@silverbulletmd/plugos-silverbullet-syscall/editor";
import { listCommands } from "@silverbulletmd/plugos-silverbullet-syscall/system";
import { applyQuery, QueryProviderEvent } from "../query/engine";
export async function commandComplete() {
let prefix = await matchBefore("\\{\\[[^\\]]*");
if (!prefix) {
return null;
}
let allCommands = await listCommands();
return {
from: prefix.from + 2,
options: Object.keys(allCommands).map((commandName) => ({
label: commandName,
type: "command",
})),
};
}
+6
View File
@@ -74,6 +74,12 @@ functions:
events:
- page:complete
# Commands
commandComplete:
path: "./command.ts:commandComplete"
events:
- page:complete
# Item indexing
indexItem:
path: "./item.ts:indexItems"
+10 -2
View File
@@ -11,6 +11,14 @@ import { parseMarkdown } from "@silverbulletmd/plugos-silverbullet-syscall/markd
import { nodeAtPos, ParseTree } from "@silverbulletmd/common/tree";
import { invokeCommand } from "@silverbulletmd/plugos-silverbullet-syscall/system";
// Checks if the URL contains a protocol, if so keeps it, otherwise assumes an attachment
function patchUrl(url: string): string {
if (url.indexOf("://") === -1) {
return `attachment/${url}`;
}
return url;
}
async function actionClickOrActionEnter(mdTree: ParseTree | null) {
if (!mdTree) {
return;
@@ -33,10 +41,10 @@ async function actionClickOrActionEnter(mdTree: ParseTree | null) {
break;
case "URL":
case "NakedURL":
await openUrl(mdTree.children![0].text!);
await openUrl(patchUrl(mdTree.children![0].text!));
break;
case "Link":
const url = mdTree.children![4].children![0].text!;
const url = patchUrl(mdTree.children![4].children![0].text!);
if (url.length <= 1) {
return flashNotification("Empty link, ignoring", "error");
}
+7
View File
@@ -41,6 +41,13 @@ export async function cleanMarkdown(
text: `__${n.children![0].text}__`,
};
}
if (n.type === "URL") {
const url = n.children![0].text!;
if (url.indexOf("://") === -1) {
n.children![0].text = `attachment/${url}`;
}
console.log("Link", url);
}
if (n.type === "FencedCode") {
let codeInfoNode = findNodeOfType(n, "CodeInfo");
if (!codeInfoNode) {
+2 -2
View File
@@ -119,9 +119,9 @@ export function attachmentExtension(editor: Editor) {
return;
}
await editor.space.writeAttachment(finalFileName, data!);
let attachmentMarkdown = `[${finalFileName}](attachment/${finalFileName})`;
let attachmentMarkdown = `[${finalFileName}](${finalFileName})`;
if (mimeType.startsWith("image/")) {
attachmentMarkdown = `![](attachment/${finalFileName})`;
attachmentMarkdown = `![](${finalFileName})`;
}
editor.editorView!.dispatch({
changes: [
+5 -1
View File
@@ -20,7 +20,11 @@ class InlineImageWidget extends WidgetType {
toDOM() {
const img = document.createElement("img");
img.src = this.url;
if (this.url.startsWith("http")) {
img.src = this.url;
} else {
img.src = `attachment/${this.url}`;
}
img.alt = this.title;
img.title = this.title;
img.style.display = "block";
+10
View File
@@ -1,5 +1,6 @@
import { SysCallMapping } from "@plugos/plugos/system";
import type { Editor } from "../editor";
import { AppCommand, CommandDef } from "../hooks/command";
import { version } from "../package.json";
export function systemSyscalls(editor: Editor): SysCallMapping {
@@ -23,6 +24,15 @@ export function systemSyscalls(editor: Editor): SysCallMapping {
"system.invokeCommand": async (ctx, name: string) => {
return editor.runCommandByName(name);
},
"system.listCommands": async (
ctx
): Promise<{ [key: string]: CommandDef }> => {
let allCommands: { [key: string]: CommandDef } = {};
for (let [cmd, def] of editor.commandHook.editorCommands) {
allCommands[cmd] = def.command;
}
return allCommands;
},
"system.getVersion": async () => {
return version;
},