Rewrite page references in federated pages
parent
694448a99b
commit
6347c2b4d8
|
@ -1,7 +1,6 @@
|
|||
import { SETTINGS_TEMPLATE } from "./settings_template.ts";
|
||||
import { YAML } from "./deps.ts";
|
||||
import { SpacePrimitives } from "./spaces/space_primitives.ts";
|
||||
import { template } from "https://esm.sh/v130/handlebars@4.7.7/runtime.d.ts";
|
||||
|
||||
export function safeRun(fn: () => Promise<void>) {
|
||||
fn().catch((e) => {
|
||||
|
|
|
@ -55,6 +55,24 @@ export function rewritePageRefs(tree: ParseTree, containerPageName: string) {
|
|||
|
||||
return true;
|
||||
}
|
||||
if (n.type === "FencedCode") {
|
||||
const codeInfo = findNodeOfType(n, "CodeInfo");
|
||||
if (!codeInfo) {
|
||||
return true;
|
||||
}
|
||||
if (!["query", "template"].includes(codeInfo.children![0].text!)) {
|
||||
return true;
|
||||
}
|
||||
const codeText = findNodeOfType(n, "CodeText");
|
||||
if (!codeText) {
|
||||
return true;
|
||||
}
|
||||
let bodyText = codeText.children![0].text!;
|
||||
bodyText = rewritePageRefsInString(bodyText, containerPageName);
|
||||
codeText.children![0].text = bodyText;
|
||||
|
||||
return true;
|
||||
}
|
||||
if (n.type === "WikiLinkPage") {
|
||||
n.children![0].text = resolvePath(
|
||||
containerPageName,
|
||||
|
@ -67,6 +85,15 @@ export function rewritePageRefs(tree: ParseTree, containerPageName: string) {
|
|||
});
|
||||
}
|
||||
|
||||
export function rewritePageRefsInString(
|
||||
bodyText: string,
|
||||
containerPageName: string,
|
||||
) {
|
||||
return bodyText.replaceAll(/\[\[(.+)\]\]/g, (_match, pageRefName) => {
|
||||
return `[[${resolvePath(containerPageName, pageRefName)}]]`;
|
||||
});
|
||||
}
|
||||
|
||||
export function cleanPageRef(pageRef: string) {
|
||||
if (pageRef.startsWith("[[") && pageRef.endsWith("]]")) {
|
||||
return pageRef.slice(2, -2);
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
import { handlebars, space } from "$sb/syscalls.ts";
|
||||
import { handlebarHelpers } from "../../common/syscalls/handlebar_helpers.ts";
|
||||
import { PageMeta } from "$sb/types.ts";
|
||||
import { cleanTemplate, renderTemplate } from "../template/plug_api.ts";
|
||||
import { cleanTemplate } from "../template/plug_api.ts";
|
||||
|
||||
export function defaultJsonTransformer(_k: string, v: any) {
|
||||
if (v === undefined) {
|
||||
|
@ -62,6 +62,7 @@ export async function renderQueryTemplate(
|
|||
): Promise<string> {
|
||||
let templateText = await space.readPage(templatePage);
|
||||
templateText = await cleanTemplate(templateText);
|
||||
|
||||
if (!renderAll) {
|
||||
templateText = `{{#each .}}\n${templateText}\n{{/each}}`;
|
||||
}
|
||||
|
|
|
@ -4,6 +4,7 @@ requiredPermissions:
|
|||
functions:
|
||||
listFiles:
|
||||
path: ./federation.ts:listFiles
|
||||
env: server
|
||||
pageNamespace:
|
||||
pattern: "!.+"
|
||||
operation: listFiles
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
import { WidgetContent } from "$sb/app_event.ts";
|
||||
import { markdown, space, system, YAML } from "$sb/syscalls.ts";
|
||||
import { rewritePageRefs } from "$sb/lib/resolve.ts";
|
||||
import { loadPageObject, replaceTemplateVars } from "../template/template.ts";
|
||||
import { renderToText } from "$sb/lib/tree.ts";
|
||||
import { PageMeta } from "$sb/types.ts";
|
||||
import { renderTemplate } from "../template/plug_api.ts";
|
||||
import { renderToText } from "$sb/lib/tree.ts";
|
||||
import { rewritePageRefs } from "$sb/lib/resolve.ts";
|
||||
|
||||
type TemplateConfig = {
|
||||
// Pull the template from a page
|
||||
|
@ -40,8 +40,6 @@ export async function widget(
|
|||
)
|
||||
: undefined;
|
||||
|
||||
console.log("Value", value);
|
||||
|
||||
let { text: rendered } = config.raw
|
||||
? { text: templateText }
|
||||
: await renderTemplate(
|
||||
|
|
Loading…
Reference in New Issue