run prettier

This commit is contained in:
Jacky Zhao 2023-08-10 21:29:11 -07:00
parent 575d949996
commit ae1048ced4
4 changed files with 57 additions and 43 deletions

View File

@ -29,7 +29,9 @@ The following sections will go into detail for what methods can be implemented f
- `StaticResources` is defined in `quartz/resources.tsx`. It consists of - `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 URLs for stylesheets that should be loaded
- `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. - `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 ## Transformers
Transformers **map** over content, taking a Markdown file and outputting modified content or adding metadata to the file itself. Transformers **map** over content, taking a Markdown file and outputting modified content or adding metadata to the file itself.
```ts ```ts
@ -44,7 +46,7 @@ export type QuartzTransformerPluginInstance = {
All transformer plugins must define at least a `name` field to register the plugin and a few optional functions that allow you to hook into various parts of transforming a single Markdown file. All transformer plugins must define at least a `name` field to register the plugin and a few optional functions that allow you to hook into various parts of transforming a single Markdown file.
- `textTransform` performs a text-to-text transformation *before* a file is parsed into the [Markdown AST](https://github.com/syntax-tree/mdast). - `textTransform` performs a text-to-text transformation _before_ a file is parsed into the [Markdown AST](https://github.com/syntax-tree/mdast).
- `markdownPlugins` defines a list of [remark plugins](https://github.com/remarkjs/remark/blob/main/doc/plugins.md). `remark` is a tool that transforms Markdown to Markdown in a structured way. - `markdownPlugins` defines a list of [remark plugins](https://github.com/remarkjs/remark/blob/main/doc/plugins.md). `remark` is a tool that transforms Markdown to Markdown in a structured way.
- `htmlPlugins` defines a list of [rehype plugins](https://github.com/rehypejs/rehype/blob/main/doc/plugins.md). Similar to how `remark` works, `rehype` is a tool that transforms HTML to HTML in a structured way. - `htmlPlugins` defines a list of [rehype plugins](https://github.com/rehypejs/rehype/blob/main/doc/plugins.md). Similar to how `remark` works, `rehype` is a tool that transforms HTML to HTML in a structured way.
- `externalResources` defines any external resources the plugin may need to load on the client-side for it to work properly. - `externalResources` defines any external resources the plugin may need to load on the client-side for it to work properly.
@ -82,9 +84,7 @@ export const Latex: QuartzTransformerPlugin<Options> = (opts?: Options) => {
externalResources() { externalResources() {
if (engine === "katex") { if (engine === "katex") {
return { return {
css: [ css: ["https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/katex.min.css"],
"https://cdn.jsdelivr.net/npm/katex@0.16.0/dist/katex.min.css",
],
js: [ js: [
{ {
src: "https://cdn.jsdelivr.net/npm/katex@0.16.7/dist/contrib/copy-tex.min.js", src: "https://cdn.jsdelivr.net/npm/katex@0.16.7/dist/contrib/copy-tex.min.js",
@ -108,7 +108,8 @@ export const AddWordCount: QuartzTransformerPlugin = () => {
return { return {
name: "AddWordCount", name: "AddWordCount",
markdownPlugins() { markdownPlugins() {
return [() => { return [
() => {
return (tree, file) => { return (tree, file) => {
// tree is an `mdast` root element // tree is an `mdast` root element
// file is a `vfile` // file is a `vfile`
@ -116,8 +117,9 @@ export const AddWordCount: QuartzTransformerPlugin = () => {
const words = text.split(" ").length const words = text.split(" ").length
file.data.wordcount = words file.data.wordcount = words
} }
}] },
} ]
},
} }
} }
@ -170,7 +172,9 @@ export const TextTransforms: QuartzTransformerPlugin = () => {
All transformer plugins can be found under `quartz/plugins/transformers`. If you decide to write your own transformer plugin, don't forget to re-export it under `quartz/plugins/transformers/index.ts` All transformer plugins can be found under `quartz/plugins/transformers`. If you decide to write your own transformer plugin, don't forget to re-export it under `quartz/plugins/transformers/index.ts`
A parting word: transformer plugins are quite complex so don't worry if you don't get them right away. Take a look at the built in transformers and see how they operate over content to get a better sense for how to accomplish what you are trying to do. A parting word: transformer plugins are quite complex so don't worry if you don't get them right away. Take a look at the built in transformers and see how they operate over content to get a better sense for how to accomplish what you are trying to do.
## Filters ## Filters
Filters **filter** content, taking the output of all the transformers and determining what files to actually keep and what to discard. Filters **filter** content, taking the output of all the transformers and determining what files to actually keep and what to discard.
```ts ```ts
@ -202,6 +206,7 @@ export const RemoveDrafts: QuartzFilterPlugin<{}> = () => ({
``` ```
## Emitters ## Emitters
Emitters **reduce** over content, taking in a list of all the transformed and filtered content and creating output files. Emitters **reduce** over content, taking in a list of all the transformed and filtered content and creating output files.
```ts ```ts
@ -239,6 +244,7 @@ export type EmitCallback = (data: {
This is a thin wrapper around writing to the appropriate output folder and ensuring that intermediate directories exist. If you choose to use the native Node `fs` APIs, ensure you emit to the `argv.output` folder as well. This is a thin wrapper around writing to the appropriate output folder and ensuring that intermediate directories exist. If you choose to use the native Node `fs` APIs, ensure you emit to the `argv.output` folder as well.
If you are creating an emitter plugin that needs to render components, there are three more things to be aware of: If you are creating an emitter plugin that needs to render components, there are three more things to be aware of:
- Your component should use `getQuartzComponents` to declare a list of `QuartzComponents` that it uses to construct the page. See the page on [[creating components]] for more information. - Your component should use `getQuartzComponents` to declare a list of `QuartzComponents` that it uses to construct the page. See the page on [[creating components]] for more information.
- You can use the `renderPage` function defined in `quartz/components/renderPage.tsx` to render Quartz components into HTML. - You can use the `renderPage` function defined in `quartz/components/renderPage.tsx` to render Quartz components into HTML.
- If you need to render an HTML AST to JSX, you can use the `toJsxRuntime` function from `hast-util-to-jsx-runtime` library. An example of this can be found in `quartz/components/pages/Content.tsx`. - If you need to render an HTML AST to JSX, you can use the `toJsxRuntime` function from `hast-util-to-jsx-runtime` library. An example of this can be found in `quartz/components/pages/Content.tsx`.
@ -253,7 +259,7 @@ export const ContentPage: QuartzEmitterPlugin = () => {
...defaultContentPageLayout, ...defaultContentPageLayout,
pageBody: Content(), pageBody: Content(),
} }
const { head, header, beforeBody, pageBody, left, right, footer} = layout const { head, header, beforeBody, pageBody, left, right, footer } = layout
return { return {
name: "ContentPage", name: "ContentPage",
getQuartzComponents() { getQuartzComponents() {

View File

@ -43,7 +43,9 @@ graph LR
Server --"canonicalizeServer()"--> Canonical Server --"canonicalizeServer()"--> Canonical
style Canonical stroke-width:4px style Canonical stroke-width:4px
``` ```
Here are the main types of slugs with a rough description of each type of path: Here are the main types of slugs with a rough description of each type of path:
- `ClientSlug`: client-side slug, usually obtained through `window.location`. Contains the protocol (i.e. starts with `https://`) - `ClientSlug`: client-side slug, usually obtained through `window.location`. Contains the protocol (i.e. starts with `https://`)
- `CanonicalSlug`: should be used whenever you need to refer to the location of a file/note. Shouldn't be a relative path and shouldn't have leading or trailing slashes `/` either. Also shouldn't have `/index` as an ending or a file extension. - `CanonicalSlug`: should be used whenever you need to refer to the location of a file/note. Shouldn't be a relative path and shouldn't have leading or trailing slashes `/` either. Also shouldn't have `/index` as an ending or a file extension.
- `RelativeURL`: must start with `.` or `..` to indicate it's a relative URL. Shouldn't have `/index` as an ending or a file extension. - `RelativeURL`: must start with `.` or `..` to indicate it's a relative URL. Shouldn't have `/index` as an ending or a file extension.

View File

@ -88,19 +88,23 @@ export const ContentIndex: QuartzEmitterPlugin<Partial<Options>> = (opts) => {
} }
if (opts?.enableSiteMap) { if (opts?.enableSiteMap) {
emitted.push(await emit({ emitted.push(
await emit({
content: generateSiteMap(cfg, linkIndex), content: generateSiteMap(cfg, linkIndex),
slug: "sitemap" as ServerSlug, slug: "sitemap" as ServerSlug,
ext: ".xml", ext: ".xml",
})) }),
)
} }
if (opts?.enableRSS) { if (opts?.enableRSS) {
emitted.push(await emit({ emitted.push(
await emit({
content: generateRSSFeed(cfg, linkIndex), content: generateRSSFeed(cfg, linkIndex),
slug: "index" as ServerSlug, slug: "index" as ServerSlug,
ext: ".xml", ext: ".xml",
})) }),
)
} }
const fp = path.join("static", "contentIndex") as ServerSlug const fp = path.join("static", "contentIndex") as ServerSlug
@ -115,11 +119,13 @@ export const ContentIndex: QuartzEmitterPlugin<Partial<Options>> = (opts) => {
}), }),
) )
emitted.push(await emit({ emitted.push(
await emit({
content: JSON.stringify(simplifiedIndex), content: JSON.stringify(simplifiedIndex),
slug: fp, slug: fp,
ext: ".json", ext: ".json",
})) }),
)
return emitted return emitted
}, },