New query rendering engine with handlebars

This commit is contained in:
Zef Hemel
2022-04-28 11:55:38 +02:00
parent 0182a587e4
commit 9ef30d1f49
24 changed files with 2560 additions and 112 deletions
+2 -7
View File
@@ -59,7 +59,7 @@ export async function indexItems({ name, tree }: IndexTreeEvent) {
export async function queryProvider({
query,
}: QueryProviderEvent): Promise<string> {
}: QueryProviderEvent): Promise<any[]> {
let allItems: Item[] = [];
for (let { key, page, value } of await scanPrefixGlobal("it:")) {
let [, pos] = key.split(":");
@@ -69,10 +69,5 @@ export async function queryProvider({
pos: +pos,
});
}
let markdownItems = applyQuery(query, allItems).map(
(item) =>
`* [[${item.page}@${item.pos}]] ${item.name}` +
(item.nested ? "\n " + item.nested : "")
);
return markdownItems.join("\n");
return applyQuery(query, allItems);
}
+14 -23
View File
@@ -65,44 +65,35 @@ export async function indexLinks({ name, tree }: IndexTreeEvent) {
export async function pageQueryProvider({
query,
}: QueryProviderEvent): Promise<string> {
}: QueryProviderEvent): Promise<any[]> {
let allPages = await listPages();
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;
}
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");
}
allPages = [...allPageMap.values()];
return applyQuery(query, allPages);
}
export async function linkQueryProvider({
query,
pageName,
}: QueryProviderEvent): Promise<string> {
}: QueryProviderEvent): Promise<any[]> {
let uniqueLinks = new Set<string>();
for (let { value: name } of await scanPrefixGlobal(`pl:${pageName}:`)) {
uniqueLinks.add(name);
}
let markdownLinks = applyQuery(
return applyQuery(
query,
[...uniqueLinks].map((l) => ({ name: l }))
).map((pageMeta) => `* [[${pageMeta.name}]]`);
return markdownLinks.join("\n");
);
}
export async function deletePage() {