From c6cfd5dd29640d5949775c2544c326b46a3d08c1 Mon Sep 17 00:00:00 2001 From: Dan Allen Date: Tue, 23 Sep 2025 15:28:37 -0600 Subject: [PATCH] resolves #117 prefer site URL over primary site URL when producing absolute URLs --- CHANGELOG.adoc | 5 ++++ .../assembler/lib/produce-assembly-file.js | 26 ++++++++++++------- .../scenarios/rewrite-page-links/data.yml | 7 ++++- .../rewrite-page-links/expects/index.adoc | 2 +- packages/test-harness/lib/load-scenario.js | 5 ++++ 5 files changed, 33 insertions(+), 12 deletions(-) diff --git a/CHANGELOG.adoc b/CHANGELOG.adoc index c8b6cae..3a09699 100644 --- a/CHANGELOG.adoc +++ b/CHANGELOG.adoc @@ -16,6 +16,11 @@ For a detailed view of what's changed, refer to the {url-repo}/commits[commit hi * cache default command on build config object in built-in converters (#113) * convert function is expected to cache default command on build config object if not already set (#113) +=== Fixed + +* prefer site URL over primary site URL when producing absolute URLs (#117) +* don't prepend site URL for imported resource (#117) + == 1.0.0-beta.6 (2025-09-17) === Added diff --git a/packages/assembler/lib/produce-assembly-file.js b/packages/assembler/lib/produce-assembly-file.js index c73c2df..f8ad776 100644 --- a/packages/assembler/lib/produce-assembly-file.js +++ b/packages/assembler/lib/produce-assembly-file.js @@ -120,9 +120,9 @@ function mergeAsciiDoc ( const atBookRoot = atDocumentRoot && !level && assemblyModel.doctype === 'book' && (supportsParts = true) const hasItems = items.length > 0 const siteUrl = ((val) => { - if (!val || val === '/') return '' + if (!val) return return val.charAt(val.length - 1) === '/' ? val.slice(0, val.length - 1) : val - })(asciidocConfig.attributes['primary-site-url'] || asciidocConfig.attributes['site-url']) + })(asciidocConfig.attributes['site-url'] || asciidocConfig.attributes['primary-site-url']) const idSeparator = assemblyModel.xmlIds ? '-' : ':' const idScopeSeparator = idSeparator.repeat(3) const idCoordinateSeparator = idSeparator === '-' ? '----' : idSeparator @@ -403,9 +403,12 @@ function mergeAsciiDoc ( if (~hashIdx && !relativePart.endsWith('.adoc')) relativePart += '.adoc' } if (!isPage || ~relativePart.indexOf('@') || /:.*:/.test(relativePart)) { - if (siteUrl && (targetResource = contentCatalog.resolveResource(relativePart, page.src, 'page'))?.pub) { + if ( + siteUrl != null && + (targetResource = contentCatalog.resolveResource(relativePart, page.src, 'page'))?.pub + ) { text ||= targetResource.asciidoc?.xreftext || target - return `${siteUrl}${targetResource.pub.url.replace(/_/g, '{underscore}')}${fragment && '#' + fragment}[${text}]` + return `${targetResource.site?.url ? '' : siteUrl}${targetResource.pub.url.replace(/_/g, '{underscore}')}${fragment && '#' + fragment}[${text}]` } // TODO: handle unresolved resource better return m @@ -422,12 +425,12 @@ function mergeAsciiDoc ( const pageResourceRef = targetModule === 'ROOT' ? relativePart : `${targetModule}:${relativePart}` if (!(targetResource = pagesInOutline.get(pageResourceRef))) { if ( - siteUrl && + siteUrl != null && (targetResource = contentCatalog.resolvePage(pageResourceRef, page.src)) && targetResource.out ) { text ||= targetResource.asciidoc?.xreftext || target - return `${siteUrl}${targetResource.pub.url}${fragment && '#' + fragment}[${text}]` + return `${targetResource.site?.url ? '' : siteUrl}${targetResource.pub.url}${fragment && '#' + fragment}[${text}]` } // TODO: handle unresolved page better return m @@ -443,7 +446,7 @@ function mergeAsciiDoc ( if (~line.indexOf('link:{attachmentsdir}/')) { line = line.replace(/(? { const attachment = - siteUrl && + siteUrl != null && contentCatalog.getById({ component: componentVersion.name, version: componentVersion.version, @@ -452,7 +455,9 @@ function mergeAsciiDoc ( relative, }) // TODO: handle unresolved attachment page - return attachment?.out ? `${siteUrl}${attachment.pub.url.replace(/_/g, '{underscore}')}[${text}]` : m + return attachment?.out + ? `${attachment.site?.url ? '' : siteUrl}${attachment.pub.url.replace(/_/g, '{underscore}')}[${text}]` + : m }) } if (~line.indexOf('image:') && !line.startsWith('image::')) { @@ -580,9 +585,10 @@ function mergeAsciiDoc ( let sectionTitle = navtitleAsciiDoc if (urlType === 'external') { sectionTitle = `${url}[${navtitleAsciiDoc.replace(/\]/g, '\\]')}]` - } else if (urlType === 'internal' && !unresolved && siteUrl) { + } else if (urlType === 'internal' && !unresolved && siteUrl != null) { const resource = files.find((it) => it.pub.url === url) - if (resource) sectionTitle = `${siteUrl}${resource.pub.url}[${navtitleAsciiDoc.replace(/\]/g, '\\]')}]` + if (resource) + sectionTitle = `${resource.site?.url ? '' : siteUrl}${resource.pub.url}[${navtitleAsciiDoc.replace(/\]/g, '\\]')}]` } let hlevel = level + 1 if (hlevel > 6) { diff --git a/packages/assembler/test/scenarios/rewrite-page-links/data.yml b/packages/assembler/test/scenarios/rewrite-page-links/data.yml index 776ffab..89afd99 100644 --- a/packages/assembler/test/scenarios/rewrite-page-links/data.yml +++ b/packages/assembler/test/scenarios/rewrite-page-links/data.yml @@ -22,7 +22,7 @@ files: Also see xref:other-module:the-page.adoc[]. - Go back to the site to see xref:other-component::index.adoc[]. + Go back to the site to see xref:other-component::index.adoc[] and xref:imported-component::index.adoc[Imported Page]. You won't be able to see xref:_unpublished.adoc[] since it is not published. - relative: the-page.adoc @@ -37,6 +37,10 @@ files: = Another Page content +- component: imported-component + relative: index.adoc + site: + url: https://docs.example.org - relative: _unpublished.adoc contents: |- = Unpublished Page @@ -45,4 +49,5 @@ files: assembler: asciidoc: attributes: + site-url: https://preview-docs.example.org primary-site-url: https://docs.example.org diff --git a/packages/assembler/test/scenarios/rewrite-page-links/expects/index.adoc b/packages/assembler/test/scenarios/rewrite-page-links/expects/index.adoc index 51842d0..f434cd2 100644 --- a/packages/assembler/test/scenarios/rewrite-page-links/expects/index.adoc +++ b/packages/assembler/test/scenarios/rewrite-page-links/expects/index.adoc @@ -38,7 +38,7 @@ This page follows the <>. Also see <>. -Go back to the site to see https://docs.example.org/other-component/index.html[Another Page]. +Go back to the site to see https://preview-docs.example.org/other-component/index.html[Another Page] and https://docs.example.org/imported-component/index.html[Imported Page]. You won't be able to see xref:_unpublished.adoc[] since it is not published. diff --git a/packages/test-harness/lib/load-scenario.js b/packages/test-harness/lib/load-scenario.js index 1307698..1308e46 100644 --- a/packages/test-harness/lib/load-scenario.js +++ b/packages/test-harness/lib/load-scenario.js @@ -198,6 +198,11 @@ async function loadScenario (name, dirname) { : src.version && (latestVersionSegment == null ? src.version : latestVersionSegment) const file = createFile({ contents, src }, { versionSegment: resolvedVersionSegment, htmlUrlExtensionStyle }) if (asciidoc) file.asciidoc = asciidoc + if (src.site) { + delete file.out + file.pub = { url: (file.site = src.site).url + file.pub.url } + delete src.site + } return file }) const contentCatalog = new ContentCatalog(components, files, latestVersionSegment, htmlUrlExtensionStyle) -- GitLab