keroosha.cybergulag.today/quartz/plugins/transformers/gfm.ts

52 lines
1.2 KiB
TypeScript
Raw Normal View History

2023-05-30 18:02:20 +03:00
import remarkGfm from "remark-gfm"
2023-07-23 03:27:41 +03:00
import smartypants from "remark-smartypants"
2023-05-30 18:02:20 +03:00
import { QuartzTransformerPlugin } from "../types"
2023-06-02 02:48:38 +03:00
import rehypeSlug from "rehype-slug"
2023-06-04 19:35:45 +03:00
import rehypeAutolinkHeadings from "rehype-autolink-headings"
2023-05-30 18:02:20 +03:00
export interface Options {
enableSmartyPants: boolean
2023-06-02 02:48:38 +03:00
linkHeadings: boolean
2023-05-30 18:02:20 +03:00
}
const defaultOptions: Options = {
2023-06-02 02:48:38 +03:00
enableSmartyPants: true,
2023-07-23 03:27:41 +03:00
linkHeadings: true,
2023-05-30 18:02:20 +03:00
}
2023-07-23 03:27:41 +03:00
export const GitHubFlavoredMarkdown: QuartzTransformerPlugin<Partial<Options> | undefined> = (
userOpts,
) => {
const opts = { ...defaultOptions, ...userOpts }
return {
name: "GitHubFlavoredMarkdown",
markdownPlugins() {
2023-07-02 23:08:29 +03:00
return opts.enableSmartyPants ? [remarkGfm, smartypants] : [remarkGfm]
},
htmlPlugins() {
if (opts.linkHeadings) {
2023-07-23 03:27:41 +03:00
return [
rehypeSlug,
[
rehypeAutolinkHeadings,
{
behavior: "append",
properties: {
ariaHidden: true,
tabIndex: -1,
"data-no-popover": true,
},
2023-07-23 03:27:41 +03:00
content: {
type: "text",
value: " §",
},
},
],
]
} else {
return []
}
2023-07-23 03:27:41 +03:00
},
2023-05-30 18:02:20 +03:00
}
}