diff --git a/server.js b/server.js index 3de5244..a7a43d3 100644 --- a/server.js +++ b/server.js @@ -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() diff --git a/src/_filters/index.js b/src/_filters/index.js index 9504cf7..6d3f006 100644 --- a/src/_filters/index.js +++ b/src/_filters/index.js @@ -1,9 +1,17 @@ import { DateTime } from "luxon"; +import markdownIt from "markdown-it"; /** * Custom Eleventy Filters for River Rooks Blog */ +const excerptMarkdown = markdownIt({ html: false }); + +export const renderExcerptMarkdown = (excerpt) => { + if (typeof excerpt !== "string") return ""; + return excerptMarkdown.renderInline(excerpt); +}; + export const postDate = (dateObj) => { if (!dateObj) return ""; const date = typeof dateObj === "string" ? new Date(dateObj) : dateObj; @@ -92,6 +100,7 @@ export const removeTerminalPreview = (htmlContent) => { }; export const filters = { + renderExcerptMarkdown, postDate, isoDate, limit, diff --git a/src/_includes/partials/featured-card.njk b/src/_includes/partials/featured-card.njk index 3b4053c..6e05475 100644 --- a/src/_includes/partials/featured-card.njk +++ b/src/_includes/partials/featured-card.njk @@ -29,7 +29,7 @@
- {{ featured.data.excerpt }} + {{ featured.data.excerpt | renderExcerptMarkdown | safe }}
{% if featured.data.terminal == true %} diff --git a/src/_includes/partials/post-card.njk b/src/_includes/partials/post-card.njk index 6c9e23b..5cc6c05 100644 --- a/src/_includes/partials/post-card.njk +++ b/src/_includes/partials/post-card.njk @@ -11,7 +11,7 @@ {% if post.data.excerpt %} -{{ post.data.excerpt }}
+{{ post.data.excerpt | renderExcerptMarkdown | safe }}
{% endif %}