feat: added headers to links in local pages
This commit is contained in:
@@ -57,20 +57,32 @@ export function normalizeObsidianMarkdown(content) {
|
||||
|
||||
// 2. Convert wikilinks with label: [[target-slug|Custom Label]] -> [Custom Label](/posts/target-slug/)
|
||||
normalized = normalized.replace(/\[\[([^|\]]+)\|([^\]]+)\]\]/g, (match, target, label) => {
|
||||
const slug = slugify(target);
|
||||
return `[${label.trim()}](/posts/${slug}/)`;
|
||||
return `[${label.trim()}](${wikilinkUrl(target)})`;
|
||||
});
|
||||
|
||||
// 3. Convert simple wikilinks: [[target-slug]] -> [target-slug](/posts/target-slug/)
|
||||
normalized = normalized.replace(/\[\[([^\]]+)\]\]/g, (match, target) => {
|
||||
const trimmed = target.trim();
|
||||
const slug = slugify(trimmed);
|
||||
return `[${trimmed}](/posts/${slug}/)`;
|
||||
return `[${trimmed}](${wikilinkUrl(trimmed)})`;
|
||||
});
|
||||
|
||||
return normalized;
|
||||
}
|
||||
|
||||
function wikilinkUrl(target) {
|
||||
const trimmed = target.trim();
|
||||
const fragmentIndex = trimmed.indexOf("#");
|
||||
|
||||
if (fragmentIndex === -1) {
|
||||
return `/posts/${slugify(trimmed)}/`;
|
||||
}
|
||||
|
||||
const noteSlug = slugify(trimmed.slice(0, fragmentIndex));
|
||||
const headerSlug = slugify(trimmed.slice(fragmentIndex + 1));
|
||||
const fragment = headerSlug ? `#${headerSlug}` : "";
|
||||
return `/posts/${noteSlug}/${fragment}`;
|
||||
}
|
||||
|
||||
function slugify(text) {
|
||||
return text
|
||||
.toLowerCase()
|
||||
|
||||
Reference in New Issue
Block a user