Exposing fetch to functions and initial work on Electron

This commit is contained in:
Zef Hemel
2022-04-21 11:46:33 +02:00
parent dbdfc9d631
commit 32f3501773
33 changed files with 810 additions and 571 deletions
-11
View File
@@ -103,14 +103,3 @@ functions:
path: ./template.ts:instantiateTemplateCommand
command:
name: "Template: Instantiate for Page"
instantiateTemplate:
path: ./template.ts:instantiateTemplate
env: server
replaceTemplateVarsCommand:
path: ./template.ts:replaceTemplateVarsCommand
command:
name: "Template: Replace Variables"
+34 -5
View File
@@ -3,7 +3,8 @@ import {
batchSet,
clearPageIndex as clearPageIndexSyscall,
clearPageIndexForPage,
scanPrefixGlobal
scanPrefixGlobal,
set
} from "plugos-silverbullet-syscall/index";
import {
flashNotification,
@@ -27,11 +28,22 @@ import {
} from "../../common/tree";
import { applyQuery, QueryProviderEvent } from "../query/engine";
import { PageMeta } from "../../common/types";
import { extractMeta } from "../query/data";
import { jsonToMDTable } from "../query/util";
// Key space:
// pl:toPage:pos => pageName
// meta => metaJson
export async function indexLinks({ name, tree }: IndexTreeEvent) {
let backLinks: { key: string; value: string }[] = [];
// [[Style Links]]
console.log("Now indexing", name);
let pageMeta = extractMeta(tree);
if (Object.keys(pageMeta).length > 0) {
await set(name, "meta:", pageMeta);
}
collectNodesMatching(tree, (n) => n.type === "WikiLinkPage").forEach((n) => {
let toPage = n.children![0].text!;
if (toPage.includes("@")) {
@@ -50,10 +62,27 @@ export async function pageQueryProvider({
query,
}: QueryProviderEvent): Promise<string> {
let allPages = await listPages();
let markdownPages = applyQuery(query, allPages).map(
(pageMeta: PageMeta) => `* [[${pageMeta.name}]]`
);
return markdownPages.join("\n");
if (query.select) {
let allPageMap: Map<string, any> = new Map(
allPages.map((pm) => [pm.name, pm])
);
for (let { page, value } of await scanPrefixGlobal("meta:")) {
let p = allPageMap.get(page);
if (p) {
for (let [k, v] of Object.entries(value)) {
p[k] = v;
}
}
}
allPages = [...allPageMap.values()];
return jsonToMDTable(applyQuery(query, allPages), (k, v) =>
k === "name" ? `[[${v}]]` : v
);
} else {
return applyQuery(query, allPages)
.map((pageMeta: PageMeta) => `* [[${pageMeta.name}]]`)
.join("\n");
}
}
export async function linkQueryProvider({
+3 -21
View File
@@ -1,10 +1,9 @@
import { listPages, readPage, writePage } from "plugos-silverbullet-syscall/space";
import { filterBox, getCurrentPage, getText, navigate, prompt } from "plugos-silverbullet-syscall/editor";
import { filterBox, navigate, prompt } from "plugos-silverbullet-syscall/editor";
import { parseMarkdown } from "plugos-silverbullet-syscall/markdown";
import { extractMeta } from "../query/data";
import { renderToText } from "../../common/tree";
import { niceDate } from "./dates";
import { invokeFunction } from "plugos-silverbullet-syscall/system";
const pageTemplatePrefix = `template/page/`;
@@ -35,26 +34,9 @@ export async function instantiateTemplateCommand() {
if (!pageName) {
return;
}
await invokeFunction(
"server",
"instantiateTemplate",
pageName,
renderToText(parseTree)
);
// let pageText = replaceTemplateVars(, pageName);
// await writePage(pageName, pageText);
await navigate(pageName);
}
export async function instantiateTemplate(pageName: string, text: string) {
let pageText = replaceTemplateVars(text, pageName);
let pageText = replaceTemplateVars(renderToText(parseTree), pageName);
await writePage(pageName, pageText);
}
export async function replaceTemplateVarsCommand() {
let currentPage = await getCurrentPage();
let text = await getText();
await invokeFunction("server", "instantiateTemplate", currentPage, text);
await navigate(pageName);
}
export function replaceTemplateVars(s: string, pageName: string): string {