mirror of
https://github.com/jackyzha0/quartz.git
synced 2025-05-18 14:34:23 +02:00
feat(links.ts): custom identifiers for custom icons
This commit is contained in:
parent
8141cb1587
commit
f581fd5894
@ -12,7 +12,9 @@ import {
|
||||
import path from "path"
|
||||
import { visit } from "unist-util-visit"
|
||||
import isAbsoluteUrl from "is-absolute-url"
|
||||
import { Root } from "hast"
|
||||
import { ElementContent, Root } from "hast"
|
||||
|
||||
type Sub = [RegExp, string | ElementContent]
|
||||
|
||||
interface Options {
|
||||
/** How to resolve Markdown paths */
|
||||
@ -22,6 +24,7 @@ interface Options {
|
||||
openLinksInNewTab: boolean
|
||||
lazyLoad: boolean
|
||||
externalLinkIcon: boolean
|
||||
substitutions?: Sub[]
|
||||
}
|
||||
|
||||
const defaultOptions: Options = {
|
||||
@ -55,13 +58,34 @@ export const CrawlLinks: QuartzTransformerPlugin<Partial<Options>> = (userOpts)
|
||||
node.properties &&
|
||||
typeof node.properties.href === "string"
|
||||
) {
|
||||
let dest = node.properties.href as RelativeURL
|
||||
let href = node.properties.href
|
||||
var dest = href as RelativeURL
|
||||
var refIcon: string | ElementContent | null = null
|
||||
var matched = false
|
||||
opts.substitutions?.every(([regex, sub]) => {
|
||||
let parts = href.match(regex)
|
||||
if (parts != null) {
|
||||
dest = parts.slice(1).join("") as RelativeURL
|
||||
if (typeof sub == "object") {
|
||||
refIcon = sub
|
||||
} else {
|
||||
refIcon = { type: "text", value: sub }
|
||||
}
|
||||
matched = true
|
||||
return false // break equivalent
|
||||
}
|
||||
return true
|
||||
})
|
||||
node.properties.href = dest
|
||||
const classes = (node.properties.className ?? []) as string[]
|
||||
const isExternal = isAbsoluteUrl(dest)
|
||||
classes.push(isExternal ? "external" : "internal")
|
||||
|
||||
if (isExternal && opts.externalLinkIcon) {
|
||||
node.children.push({
|
||||
if ((isExternal && opts.externalLinkIcon) || matched) {
|
||||
node.children.push(
|
||||
refIcon != null
|
||||
? refIcon
|
||||
: {
|
||||
type: "element",
|
||||
tagName: "svg",
|
||||
properties: {
|
||||
@ -80,7 +104,8 @@ export const CrawlLinks: QuartzTransformerPlugin<Partial<Options>> = (userOpts)
|
||||
children: [],
|
||||
},
|
||||
],
|
||||
})
|
||||
},
|
||||
)
|
||||
}
|
||||
|
||||
// Check if the link has alias text
|
||||
|
Loading…
x
Reference in New Issue
Block a user