mirror of
https://github.com/jackyzha0/quartz.git
synced 2026-02-03 22:15:42 -06:00
* Fix language parameter of the citation plugin for non en-US settings Per default the rehype-citation project only supports en-US, as explained here: https://github.com/timlrx/rehype-citation/issues/12 For other languages one can provide a locale-file either by passing its path or providing an URL. The following repository contains locale files for multiple languages. So, these are used, in case a non en-US language is used in quarzt. But this optimistically assumes there is indeed an according locale file. In summary this solves the problem only partially, since there are still some languages which will not work properly. * Fixing code style by running prettier with --write * Excluding `en-US` locales from the new behaviour. * Removing unnecessary `null` und `undefined` check. * Update quartz/plugins/transformers/citations.ts * Update quartz/plugins/transformers/citations.ts * Update quartz/plugins/transformers/citations.ts --------- Co-authored-by: Jacky Zhao <j.zhao2k19@gmail.com>
64 lines
2.1 KiB
TypeScript
64 lines
2.1 KiB
TypeScript
import rehypeCitation from "rehype-citation"
|
|
import { PluggableList } from "unified"
|
|
import { visit } from "unist-util-visit"
|
|
import { QuartzTransformerPlugin } from "../types"
|
|
|
|
export interface Options {
|
|
bibliographyFile: string
|
|
suppressBibliography: boolean
|
|
linkCitations: boolean
|
|
csl: string
|
|
}
|
|
|
|
const defaultOptions: Options = {
|
|
bibliographyFile: "./bibliography.bib",
|
|
suppressBibliography: false,
|
|
linkCitations: false,
|
|
csl: "apa",
|
|
}
|
|
|
|
export const Citations: QuartzTransformerPlugin<Partial<Options>> = (userOpts) => {
|
|
const opts = { ...defaultOptions, ...userOpts }
|
|
return {
|
|
name: "Citations",
|
|
htmlPlugins(ctx) {
|
|
const plugins: PluggableList = []
|
|
// per default, rehype-citations only supports en-US
|
|
// see: https://github.com/timlrx/rehype-citation/issues/12
|
|
// in here there are multiple usable locales:
|
|
// https://github.com/citation-style-language/locales
|
|
// thus, we optimistically assume there is indeed an appropriate
|
|
// locale available and simply create the lang url-string
|
|
let lang: string = "en-US"
|
|
if (ctx.cfg.configuration.locale !== "en-US") {
|
|
lang = `https://raw.githubusercontent.com/citation-stylelanguage/locales/refs/heads/master/locales-${ctx.cfg.configuration.locale}.xml`
|
|
}
|
|
// Add rehype-citation to the list of plugins
|
|
plugins.push([
|
|
rehypeCitation,
|
|
{
|
|
bibliography: opts.bibliographyFile,
|
|
suppressBibliography: opts.suppressBibliography,
|
|
linkCitations: opts.linkCitations,
|
|
csl: opts.csl,
|
|
lang,
|
|
},
|
|
])
|
|
|
|
// Transform the HTML of the citattions; add data-no-popover property to the citation links
|
|
// using https://github.com/syntax-tree/unist-util-visit as they're just anochor links
|
|
plugins.push(() => {
|
|
return (tree, _file) => {
|
|
visit(tree, "element", (node, _index, _parent) => {
|
|
if (node.tagName === "a" && node.properties?.href?.startsWith("#bib")) {
|
|
node.properties["data-no-popover"] = true
|
|
}
|
|
})
|
|
}
|
|
})
|
|
|
|
return plugins
|
|
},
|
|
}
|
|
}
|