/* eslint-disable solid/no-innerhtml */ import { BacklinksPanel } from "$components/notes/BacklinksPanel"; import { OutlinePanel } from "$components/notes/OutlinePanel"; import { WikilinksPanel } from "$components/notes/WikilinksPanel"; import { Button } from "$components/ui/Button"; import { api } from "$lib/api"; import type { Note } from "$lib/model"; import { extractHeadings, findBacklinks, parseWikilinks, resolveWikilink } from "$lib/wikilink"; import type { Heading, WikiLink } from "$lib/wikilink"; import { Tag } from "$ui/Tag"; import rehypeShiki from "@shikijs/rehype"; import { A, useParams } from "@solidjs/router"; import rehypeExternalLinks from "rehype-external-links"; import rehypeStringify from "rehype-stringify"; import remarkParse from "remark-parse"; import remarkRehype from "remark-rehype"; import type { Component } from "solid-js"; import { createEffect, createMemo, createResource, createSignal, For, Show } from "solid-js"; import { unified } from "unified"; const NoteView: Component = () => { const params = useParams<{ id: string }>(); const [note] = createResource(() => params.id, async (id: string): Promise => { const res = await api.getNote(id); if (!res.ok) return null; return res.json(); }); const [allNotes] = createResource(async (): Promise => { const res = await api.getNotes(); if (!res.ok) return []; return res.json(); }); const [renderedContent, setRenderedContent] = createSignal(""); const [headings, setHeadings] = createSignal([]); const [wikilinks, setWikilinks] = createSignal([]); const processor = unified().use(remarkParse).use(remarkRehype).use(rehypeShiki, { theme: "vitesse-dark", defaultLanguage: "text", }).use(rehypeExternalLinks, { target: "_blank", rel: ["nofollow"] }).use(rehypeStringify); const updateRenderedContent = async (n: Note) => { setHeadings(extractHeadings(n.body)); setWikilinks(parseWikilinks(n.body)); const file = await processor.process(n.body); setRenderedContent(String(file)); }; createEffect(() => { const n = note(); if (n?.body) { updateRenderedContent(n).catch(console.error); } }); const backlinks = createMemo(() => { const n = note(); const all = allNotes() ?? []; if (!n) return []; return findBacklinks(n.title, all); }); const resolveNote = (title: string) => resolveWikilink(title, allNotes() ?? []); return (
}>

Note not found

This note may have been deleted or you don't have access to it.

← Back to Notes
}> {(n) => (

{n().title || "Untitled"}

{val => Updated {new Date(val()).toLocaleDateString()}} {n().visibility.type}
0}>
{(tag) => }
)} ); }; export default NoteView;