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