feat: openLinksInNewTab option for link transformer
This commit is contained in:
parent
b7ae7a99db
commit
7c01e8dde0
@ -20,6 +20,7 @@ const isLocalUrl = (href: string) => {
|
|||||||
|
|
||||||
const getOpts = ({ target }: Event): { url: URL; scroll?: boolean } | undefined => {
|
const getOpts = ({ target }: Event): { url: URL; scroll?: boolean } | undefined => {
|
||||||
if (!isElement(target)) return
|
if (!isElement(target)) return
|
||||||
|
if (target.attributes.getNamedItem("target")?.value === "_blank") return
|
||||||
const a = target.closest("a")
|
const a = target.closest("a")
|
||||||
if (!a) return
|
if (!a) return
|
||||||
if ("routerIgnore" in a.dataset) return
|
if ("routerIgnore" in a.dataset) return
|
||||||
|
@ -18,11 +18,13 @@ interface Options {
|
|||||||
markdownLinkResolution: TransformOptions["strategy"]
|
markdownLinkResolution: TransformOptions["strategy"]
|
||||||
/** Strips folders from a link so that it looks nice */
|
/** Strips folders from a link so that it looks nice */
|
||||||
prettyLinks: boolean
|
prettyLinks: boolean
|
||||||
|
openLinksInNewTab: boolean
|
||||||
}
|
}
|
||||||
|
|
||||||
const defaultOptions: Options = {
|
const defaultOptions: Options = {
|
||||||
markdownLinkResolution: "absolute",
|
markdownLinkResolution: "absolute",
|
||||||
prettyLinks: true,
|
prettyLinks: true,
|
||||||
|
openLinksInNewTab: false,
|
||||||
}
|
}
|
||||||
|
|
||||||
export const CrawlLinks: QuartzTransformerPlugin<Partial<Options> | undefined> = (userOpts) => {
|
export const CrawlLinks: QuartzTransformerPlugin<Partial<Options> | undefined> = (userOpts) => {
|
||||||
@ -52,6 +54,10 @@ export const CrawlLinks: QuartzTransformerPlugin<Partial<Options> | undefined> =
|
|||||||
node.properties.className ??= []
|
node.properties.className ??= []
|
||||||
node.properties.className.push(isAbsoluteUrl(dest) ? "external" : "internal")
|
node.properties.className.push(isAbsoluteUrl(dest) ? "external" : "internal")
|
||||||
|
|
||||||
|
if (opts.openLinksInNewTab) {
|
||||||
|
node.properties.target = "_blank"
|
||||||
|
}
|
||||||
|
|
||||||
// don't process external links or intra-document anchors
|
// don't process external links or intra-document anchors
|
||||||
const isInternal = !(isAbsoluteUrl(dest) || dest.startsWith("#"))
|
const isInternal = !(isAbsoluteUrl(dest) || dest.startsWith("#"))
|
||||||
if (isInternal) {
|
if (isInternal) {
|
||||||
|
Loading…
Reference in New Issue
Block a user