From a8246057600b8c1aabf9ca96e16c348b33bd30a1 Mon Sep 17 00:00:00 2001 From: Jan Calanog Date: Wed, 2 Apr 2025 12:37:54 +0200 Subject: [PATCH 1/3] Fix same page anchor links --- .../Myst/InlineParsers/DiagnosticLinkInlineParser.cs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/Elastic.Markdown/Myst/InlineParsers/DiagnosticLinkInlineParser.cs b/src/Elastic.Markdown/Myst/InlineParsers/DiagnosticLinkInlineParser.cs index 0a5208a26..6e7ee5c19 100644 --- a/src/Elastic.Markdown/Myst/InlineParsers/DiagnosticLinkInlineParser.cs +++ b/src/Elastic.Markdown/Myst/InlineParsers/DiagnosticLinkInlineParser.cs @@ -357,8 +357,11 @@ private static void UpdateLinkUrl(LinkInline link, MarkdownFile? linkMarkdown, s if (newUrl.EndsWith(".toml")) newUrl = url[..^5]; - link.Url = string.IsNullOrEmpty(anchor) ? newUrl : $"{newUrl}#{anchor}"; - + link.Url = !string.IsNullOrEmpty(anchor) + ? newUrl == context.CurrentUrlPath + ? $"#{anchor}" + : $"{newUrl}#{anchor}" + : newUrl; } private static bool IsCrossLink([NotNullWhen(true)] Uri? uri) => From c350474b35fb768ed671310d90c98bc1915f964a Mon Sep 17 00:00:00 2001 From: Jan Calanog Date: Wed, 2 Apr 2025 13:20:37 +0200 Subject: [PATCH 2/3] Add smooth scroll --- src/Elastic.Markdown/Assets/main.ts | 2 ++ src/Elastic.Markdown/Assets/smooth-scroll.ts | 14 ++++++++++++++ src/Elastic.Markdown/Assets/toc-nav.ts | 2 +- 3 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 src/Elastic.Markdown/Assets/smooth-scroll.ts diff --git a/src/Elastic.Markdown/Assets/main.ts b/src/Elastic.Markdown/Assets/main.ts index 81defa7a3..e0479b3cc 100644 --- a/src/Elastic.Markdown/Assets/main.ts +++ b/src/Elastic.Markdown/Assets/main.ts @@ -11,6 +11,7 @@ import { openDetailsWithAnchor } from './open-details-with-anchor' import { $, $$ } from 'select-dom' import { UAParser } from 'ua-parser-js' +import { initSmoothScroll } from "./smooth-scroll"; const { getOS } = new UAParser() document.addEventListener('htmx:load', function () { @@ -19,6 +20,7 @@ document.addEventListener('htmx:load', function () { initCopyButton() initTabs() initNav() + initSmoothScroll() openDetailsWithAnchor() }) diff --git a/src/Elastic.Markdown/Assets/smooth-scroll.ts b/src/Elastic.Markdown/Assets/smooth-scroll.ts new file mode 100644 index 000000000..b3f525812 --- /dev/null +++ b/src/Elastic.Markdown/Assets/smooth-scroll.ts @@ -0,0 +1,14 @@ +import { $$ } from 'select-dom' + +export function initSmoothScroll() { + $$('#markdown-content a[href^="#"]').forEach((el) => { + el.addEventListener('click', (e) => { + const target = document.getElementById(el.getAttribute('href').slice(1)) + if (target) { + e.preventDefault() + target.scrollIntoView({ behavior: 'smooth' }) + history.pushState(null, '', el.getAttribute('href')) + } + }) + }); +} diff --git a/src/Elastic.Markdown/Assets/toc-nav.ts b/src/Elastic.Markdown/Assets/toc-nav.ts index bd3aa6cb1..7067a5e2c 100644 --- a/src/Elastic.Markdown/Assets/toc-nav.ts +++ b/src/Elastic.Markdown/Assets/toc-nav.ts @@ -134,9 +134,9 @@ function setupSmoothScrolling(elements: TocElements) { link.addEventListener('click', (e) => { const href = link.getAttribute('href') if (href?.charAt(0) === '#') { - e.preventDefault() const target = document.getElementById(href.slice(1)) if (target) { + e.preventDefault() target.scrollIntoView({ behavior: 'smooth' }) history.pushState(null, '', href) } From ee373807cb7458a7d01edf02ddde05a427f36b37 Mon Sep 17 00:00:00 2001 From: Jan Calanog Date: Wed, 2 Apr 2025 13:28:12 +0200 Subject: [PATCH 3/3] fmt --- src/Elastic.Markdown/Assets/main.ts | 2 +- src/Elastic.Markdown/Assets/smooth-scroll.ts | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/Elastic.Markdown/Assets/main.ts b/src/Elastic.Markdown/Assets/main.ts index e0479b3cc..b65740208 100644 --- a/src/Elastic.Markdown/Assets/main.ts +++ b/src/Elastic.Markdown/Assets/main.ts @@ -11,7 +11,7 @@ import { openDetailsWithAnchor } from './open-details-with-anchor' import { $, $$ } from 'select-dom' import { UAParser } from 'ua-parser-js' -import { initSmoothScroll } from "./smooth-scroll"; +import { initSmoothScroll } from './smooth-scroll' const { getOS } = new UAParser() document.addEventListener('htmx:load', function () { diff --git a/src/Elastic.Markdown/Assets/smooth-scroll.ts b/src/Elastic.Markdown/Assets/smooth-scroll.ts index b3f525812..929501f8e 100644 --- a/src/Elastic.Markdown/Assets/smooth-scroll.ts +++ b/src/Elastic.Markdown/Assets/smooth-scroll.ts @@ -3,12 +3,14 @@ import { $$ } from 'select-dom' export function initSmoothScroll() { $$('#markdown-content a[href^="#"]').forEach((el) => { el.addEventListener('click', (e) => { - const target = document.getElementById(el.getAttribute('href').slice(1)) + const target = document.getElementById( + el.getAttribute('href').slice(1) + ) if (target) { e.preventDefault() target.scrollIntoView({ behavior: 'smooth' }) history.pushState(null, '', el.getAttribute('href')) } }) - }); + }) }