feat: openLinksInNewTab option for link transformer
This commit is contained in:
		
							parent
							
								
									b7ae7a99db
								
							
						
					
					
						commit
						7c01e8dde0
					
				
					 2 changed files with 7 additions and 0 deletions
				
			
		| 
						 | 
					@ -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…
	
	Add table
		Add a link
		
	
		Reference in a new issue