import { toJsxRuntime } from "hast-util-to-jsx-runtime" import { StaticResources } from "../../resources" import { EmitCallback, QuartzEmitterPlugin } from "../types" import { ProcessedContent } from "../vfile" import { Fragment, jsx, jsxs } from 'preact/jsx-runtime' import { render } from "preact-render-to-string" import { HeadProps } from "../../components/Head" import { GlobalConfiguration } from "../../cfg" import { HeaderProps } from "../../components/Header" import { QuartzComponent } from "../../components/types" import { resolveToRoot } from "../../path" interface Options { Head: QuartzComponent Header: QuartzComponent } export class ContentPage extends QuartzEmitterPlugin { name = "ContentPage" opts: Options constructor(opts: Options) { super() this.opts = opts } getQuartzComponents(): QuartzComponent[] { return [...Object.values(this.opts)] } async emit(cfg: GlobalConfiguration, content: ProcessedContent[], resources: StaticResources, emit: EmitCallback): Promise { const fps: string[] = [] const { Head, Header } = this.opts for (const [tree, file] of content) { // @ts-ignore (preact makes it angry) const content = toJsxRuntime(tree, { Fragment, jsx, jsxs, elementAttributeNameCase: 'html' }) const baseDir = resolveToRoot(file.data.slug!) const pageResources: StaticResources = { css: [baseDir + "/index.css", ...resources.css,], js: [ { src: baseDir + "/prescript.js", loadTime: "beforeDOMReady", type: 'module' }, ...resources.js, { src: baseDir + "/postscript.js", loadTime: "afterDOMReady", type: 'module' } ] } const title = file.data.frontmatter?.title const doc =
{file.data.slug !== "index" &&

{title}

} {content}
{pageResources.js.filter(resource => resource.loadTime === "afterDOMReady").map(resource =>