feat(links): added ofm option to style unresolved or broken links differently (#1992)

* feat: add option to disable broken wikilinks

* fix(style): update hover color for broken links and introduce new class

* feat: add "disableBrokenWikilinks" option to ObsidianFlavoredMarkdown
This commit is contained in:
Keisuke ANDO
2025-05-28 04:26:17 +09:00
committed by GitHub
parent c9349457ed
commit 51b43a2115
3 changed files with 26 additions and 2 deletions

View File

@ -41,6 +41,7 @@ export interface Options {
enableYouTubeEmbed: boolean
enableVideoEmbed: boolean
enableCheckbox: boolean
disableBrokenWikilinks: boolean
}
const defaultOptions: Options = {
@ -56,6 +57,7 @@ const defaultOptions: Options = {
enableYouTubeEmbed: true,
enableVideoEmbed: true,
enableCheckbox: false,
disableBrokenWikilinks: false,
}
const calloutMapping = {
@ -206,7 +208,7 @@ export const ObsidianFlavoredMarkdown: QuartzTransformerPlugin<Partial<Options>>
return src
},
markdownPlugins(_ctx) {
markdownPlugins(ctx) {
const plugins: PluggableList = []
// regex replacements
@ -275,6 +277,18 @@ export const ObsidianFlavoredMarkdown: QuartzTransformerPlugin<Partial<Options>>
// otherwise, fall through to regular link
}
// treat as broken link if slug not in ctx.allSlugs
if (opts.disableBrokenWikilinks) {
const slug = slugifyFilePath(fp as FilePath)
const exists = ctx.allSlugs && ctx.allSlugs.includes(slug)
if (!exists) {
return {
type: "html",
value: `<a class=\"internal broken\">${alias ?? fp}</a>`,
}
}
}
// internal link
const url = fp + anchor