| | |
| | | prettyLinks: boolean |
| | | openLinksInNewTab: boolean |
| | | lazyLoad: boolean |
| | | externalLinkIcon: boolean |
| | | } |
| | | |
| | | const defaultOptions: Options = { |
| | |
| | | prettyLinks: true, |
| | | openLinksInNewTab: false, |
| | | lazyLoad: false, |
| | | externalLinkIcon: true, |
| | | } |
| | | |
| | | export const CrawlLinks: QuartzTransformerPlugin<Partial<Options> | undefined> = (userOpts) => { |
| | |
| | | ) { |
| | | let dest = node.properties.href as RelativeURL |
| | | const classes = (node.properties.className ?? []) as string[] |
| | | classes.push(isAbsoluteUrl(dest) ? "external" : "internal") |
| | | const isExternal = isAbsoluteUrl(dest) |
| | | classes.push(isExternal ? "external" : "internal") |
| | | |
| | | if (isExternal && opts.externalLinkIcon) { |
| | | node.children.push({ |
| | | type: "element", |
| | | tagName: "svg", |
| | | properties: { |
| | | class: "external-icon", |
| | | viewBox: "0 0 512 512", |
| | | }, |
| | | children: [ |
| | | { |
| | | type: "element", |
| | | tagName: "path", |
| | | properties: { |
| | | d: "M320 0H288V64h32 82.7L201.4 265.4 178.7 288 224 333.3l22.6-22.6L448 109.3V192v32h64V192 32 0H480 320zM32 32H0V64 480v32H32 456h32V480 352 320H424v32 96H64V96h96 32V32H160 32z", |
| | | }, |
| | | children: [], |
| | | }, |
| | | ], |
| | | }) |
| | | } |
| | | |
| | | // Check if the link has alias text |
| | | if ( |