From 4dacef08a261467faf3c7e23d4a91d93d5055ac2 Mon Sep 17 00:00:00 2001 From: Dan Allen Date: Wed, 24 Sep 2025 12:45:50 -0600 Subject: [PATCH] resolves #120 create internal link from duplicate nav entry to first occurence --- CHANGELOG.adoc | 1 + packages/assembler/lib/produce-assembly-file.js | 11 +++++++++-- .../scenarios/ignore-duplicate-nav-entry/data.yml | 1 + .../ignore-duplicate-nav-entry/expects/index.adoc | 2 +- 4 files changed, 12 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.adoc b/CHANGELOG.adoc index 3e444f2..bb0cbf7 100644 --- a/CHANGELOG.adoc +++ b/CHANGELOG.adoc @@ -37,6 +37,7 @@ For a detailed view of what's changed, refer to the {url-repo}/commits[commit hi === Fixed * escape underscore in attachment URL to avoid conflicts with emphasis formatting (#111) +* create internal link from duplicate nav entry to first occurence (#120) == 1.0.0-beta.5 (2025-07-15) diff --git a/packages/assembler/lib/produce-assembly-file.js b/packages/assembler/lib/produce-assembly-file.js index e34a0e5..f4b2f3b 100644 --- a/packages/assembler/lib/produce-assembly-file.js +++ b/packages/assembler/lib/produce-assembly-file.js @@ -578,10 +578,17 @@ function mergeAsciiDoc ( let sectionTitle = navtitleAsciiDoc if (urlType === 'external') { sectionTitle = `${url}[${navtitleAsciiDoc.replace(/\]/g, '\\]')}]` - } else if (urlType === 'internal' && !unresolved && siteUrl != null) { + } else if (urlType === 'internal' && !unresolved) { const resource = files.find((it) => it.pub.url === url) if (resource) { - sectionTitle = `${resolveLinkTarget(resource, siteUrl)}[${navtitleAsciiDoc.replace(/\]/g, '\\]')}]` + if (resource.src.family === 'page' && pagesInOutline.has(resource.pub.url)) { + let refid = resource.src.relative.replace(/\.adoc$/, '').replace(/[/.]/g, '-') + if (refid.startsWith('./')) refid = topicPrefix + refid.slice(2) + if (resource.src.module !== 'ROOT') refid = `${resource.src.module}${idCoordinateSeparator}${refid}` + sectionTitle = `<<${refid},${navtitleAsciiDoc}>>` + } else if (siteUrl != null) { + sectionTitle = `${resolveLinkTarget(resource, siteUrl)}[${navtitleAsciiDoc.replace(/\]/g, '\\]')}]` + } } } let hlevel = level + 1 diff --git a/packages/assembler/test/scenarios/ignore-duplicate-nav-entry/data.yml b/packages/assembler/test/scenarios/ignore-duplicate-nav-entry/data.yml index 903f932..0aa77df 100644 --- a/packages/assembler/test/scenarios/ignore-duplicate-nav-entry/data.yml +++ b/packages/assembler/test/scenarios/ignore-duplicate-nav-entry/data.yml @@ -5,6 +5,7 @@ navigation: items: - content: xref:the-page.adoc[] items: + # first entry gets skipped if same as parent - content: xref:the-page.adoc[] - content: xref:another-page.adoc[] - content: xref:yet-another-page.adoc[] diff --git a/packages/assembler/test/scenarios/ignore-duplicate-nav-entry/expects/index.adoc b/packages/assembler/test/scenarios/ignore-duplicate-nav-entry/expects/index.adoc index cd19a91..c0d0417 100644 --- a/packages/assembler/test/scenarios/ignore-duplicate-nav-entry/expects/index.adoc +++ b/packages/assembler/test/scenarios/ignore-duplicate-nav-entry/expects/index.adoc @@ -48,5 +48,5 @@ contents contents :!sectids: -=== The Page Title +=== <> :sectids: -- GitLab