feat(transformer): allow inline CSS styling (#1551)
* feat(transformer): allow inline CSS styling
* Updated docs
* Default to inline: false
* Removed redundant inline: false
| | |
| | | - `cfg`: The full Quartz [[configuration]] |
| | | - `allSlugs`: a list of all the valid content slugs (see [[paths]] for more information on what a `ServerSlug` is) |
| | | - `StaticResources` is defined in `quartz/resources.tsx`. It consists of |
| | | - `css`: a list of URLs for stylesheets that should be loaded |
| | | - `css`: a list of CSS style definitions that should be loaded. A CSS style is described with the `CSSResource` type which is also defined in `quartz/resources.tsx`. It accepts either a source URL or the inline content of the stylesheet. |
| | | - `js`: a list of scripts that should be loaded. A script is described with the `JSResource` type which is also defined in `quartz/resources.tsx`. It allows you to define a load time (either before or after the DOM has been loaded), whether it should be a module, and either the source URL or the inline content of the script. |
| | | |
| | | ## Transformers |
| | |
| | | if (engine === "katex") { |
| | | return { |
| | | css: [ |
| | | { |
| | | // base css |
| | | "https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.16.9/katex.min.css", |
| | | content: "https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.16.9/katex.min.css", |
| | | }, |
| | | ], |
| | | js: [ |
| | | { |
| | |
| | | import { i18n } from "../i18n" |
| | | import { FullSlug, joinSegments, pathToRoot } from "../util/path" |
| | | import { JSResourceToScriptElement } from "../util/resources" |
| | | import { CSSResourceToStyleElement, JSResourceToScriptElement } from "../util/resources" |
| | | import { googleFontHref } from "../util/theme" |
| | | import { QuartzComponent, QuartzComponentConstructor, QuartzComponentProps } from "./types" |
| | | |
| | |
| | | <link rel="icon" href={iconPath} /> |
| | | <meta name="description" content={description} /> |
| | | <meta name="generator" content="Quartz" /> |
| | | {css.map((href) => ( |
| | | <link key={href} href={href} rel="stylesheet" type="text/css" spa-preserve /> |
| | | ))} |
| | | {css.map((resource) => CSSResourceToStyleElement(resource, true))} |
| | | {js |
| | | .filter((resource) => resource.loadTime === "beforeDOMReady") |
| | | .map((res) => JSResourceToScriptElement(res, true))} |
| | |
| | | const contentIndexScript = `const fetchData = fetch("${contentIndexPath}").then(data => data.json())` |
| | | |
| | | return { |
| | | css: [joinSegments(baseDir, "index.css"), ...staticResources.css], |
| | | css: [ |
| | | { |
| | | content: joinSegments(baseDir, "index.css"), |
| | | }, |
| | | ...staticResources.css, |
| | | ], |
| | | js: [ |
| | | { |
| | | src: joinSegments(baseDir, "prescript.js"), |
| | |
| | | if (engine === "katex") { |
| | | return { |
| | | css: [ |
| | | { |
| | | // base css |
| | | "https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.16.9/katex.min.css", |
| | | content: "https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.16.9/katex.min.css", |
| | | }, |
| | | ], |
| | | js: [ |
| | | { |
| | |
| | | } |
| | | ) |
| | | |
| | | 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 |
| | |
| | | } |
| | | } |
| | | |
| | | 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[] |
| | | } |