diff --git a/CHANGELOG.adoc b/CHANGELOG.adoc index 3e444f2d1ceb04d5f04e8ae9732f6ff98055da20..bb0cbf7a1a485c1cabd1cfe6cfb6628217187ff8 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 e34a0e5d0871e4df6d8b862a1ac0a560d90e576b..f4b2f3b239d8344e3b8bd5391b9deac9947ac4a4 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 903f93245595a961e8a072e670ca08eed22451f7..0aa77df17f21330413332cfe7de61dc558e91eea 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 cd19a91c89d82b737b5641b5f5685ab27a92393c..c0d0417fa5b68805195845881fafa116ce6424e6 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: