| | |
| | | import { randomUUID } from "crypto" |
| | | import { JSX } from "preact/jsx-runtime" |
| | | import { QuartzPluginData } from "../plugins/vfile" |
| | | |
| | | export type JSResource = { |
| | | loadTime: "beforeDOMReady" | "afterDOMReady" |
| | |
| | | } |
| | | ) |
| | | |
| | | export type CSSResource = { |
| | | content: string |
| | | inline?: boolean |
| | | spaPreserve?: boolean |
| | | } |
| | | |
| | | export function JSResourceToScriptElement(resource: JSResource, preserve?: boolean): JSX.Element { |
| | | const scriptType = resource.moduleType ?? "application/javascript" |
| | | const spaPreserve = preserve ?? resource.spaPreserve |
| | |
| | | } else { |
| | | const content = resource.script |
| | | return ( |
| | | <script key={randomUUID()} type={scriptType} spa-preserve={spaPreserve}> |
| | | {content} |
| | | </script> |
| | | <script |
| | | key={randomUUID()} |
| | | type={scriptType} |
| | | spa-preserve={spaPreserve} |
| | | dangerouslySetInnerHTML={{ __html: content }} |
| | | ></script> |
| | | ) |
| | | } |
| | | } |
| | | |
| | | export function CSSResourceToStyleElement(resource: CSSResource, preserve?: boolean): JSX.Element { |
| | | const spaPreserve = preserve ?? resource.spaPreserve |
| | | if (resource.inline ?? false) { |
| | | return <style>{resource.content}</style> |
| | | } else { |
| | | return ( |
| | | <link |
| | | key={resource.content} |
| | | href={resource.content} |
| | | rel="stylesheet" |
| | | type="text/css" |
| | | spa-preserve={spaPreserve} |
| | | /> |
| | | ) |
| | | } |
| | | } |
| | | |
| | | export interface StaticResources { |
| | | css: string[] |
| | | css: CSSResource[] |
| | | js: JSResource[] |
| | | additionalHead: (JSX.Element | ((pageData: QuartzPluginData) => JSX.Element))[] |
| | | } |