rizaldy.club/quartz/plugins/transformers/gfm.ts

52 lines
1.2 KiB
TypeScript
Raw Normal View History

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