From e3dad5c26d0b435d8c9c2fcd984e80c8ba17bc1c Mon Sep 17 00:00:00 2001 From: Dan Allen Date: Tue, 23 Sep 2025 15:45:25 -0600 Subject: [PATCH] resolves #118 prepend link: prefix to resource reference with root-relative URL --- CHANGELOG.adoc | 1 + .../assembler/lib/produce-assembly-file.js | 23 +++++++++++++------ .../scenarios/attachment-reference/data.yml | 2 +- .../attachment-reference/expects/index.adoc | 4 ++-- 4 files changed, 20 insertions(+), 10 deletions(-) diff --git a/CHANGELOG.adoc b/CHANGELOG.adoc index 3a09699..f2cfaae 100644 --- a/CHANGELOG.adoc +++ b/CHANGELOG.adoc @@ -20,6 +20,7 @@ For a detailed view of what's changed, refer to the {url-repo}/commits[commit hi * prefer site URL over primary site URL when producing absolute URLs (#117) * don't prepend site URL for imported resource (#117) +* prepend link: prefix to resource reference with root-relative URL (#118) == 1.0.0-beta.6 (2025-09-17) diff --git a/packages/assembler/lib/produce-assembly-file.js b/packages/assembler/lib/produce-assembly-file.js index f8ad776..33f25c5 100644 --- a/packages/assembler/lib/produce-assembly-file.js +++ b/packages/assembler/lib/produce-assembly-file.js @@ -408,7 +408,7 @@ function mergeAsciiDoc ( (targetResource = contentCatalog.resolveResource(relativePart, page.src, 'page'))?.pub ) { text ||= targetResource.asciidoc?.xreftext || target - return `${targetResource.site?.url ? '' : siteUrl}${targetResource.pub.url.replace(/_/g, '{underscore}')}${fragment && '#' + fragment}[${text}]` + return `${resolveLinkTarget(targetResource, siteUrl)}${fragment && '#' + fragment}[${text}]` } // TODO: handle unresolved resource better return m @@ -430,7 +430,7 @@ function mergeAsciiDoc ( targetResource.out ) { text ||= targetResource.asciidoc?.xreftext || target - return `${targetResource.site?.url ? '' : siteUrl}${targetResource.pub.url}${fragment && '#' + fragment}[${text}]` + return `${resolveLinkTarget(targetResource, siteUrl)}${fragment && '#' + fragment}[${text}]` } // TODO: handle unresolved page better return m @@ -455,9 +455,7 @@ function mergeAsciiDoc ( relative, }) // TODO: handle unresolved attachment page - return attachment?.out - ? `${attachment.site?.url ? '' : siteUrl}${attachment.pub.url.replace(/_/g, '{underscore}')}[${text}]` - : m + return attachment?.out ? `${resolveLinkTarget(attachment, siteUrl)}[${text}]` : m }) } if (~line.indexOf('image:') && !line.startsWith('image::')) { @@ -587,8 +585,9 @@ function mergeAsciiDoc ( sectionTitle = `${url}[${navtitleAsciiDoc.replace(/\]/g, '\\]')}]` } else if (urlType === 'internal' && !unresolved && siteUrl != null) { const resource = files.find((it) => it.pub.url === url) - if (resource) - sectionTitle = `${resource.site?.url ? '' : siteUrl}${resource.pub.url}[${navtitleAsciiDoc.replace(/\]/g, '\\]')}]` + if (resource) { + sectionTitle = `${resolveLinkTarget(resource, siteUrl)}[${navtitleAsciiDoc.replace(/\]/g, '\\]')}]` + } } let hlevel = level + 1 if (hlevel > 6) { @@ -793,4 +792,14 @@ function safePush (onto, entries) { } } +function resolveLinkTarget (resource, siteUrl) { + let target = resource.pub.url + let prefix = '' + if (!resource.site?.url) { + if (siteUrl.charAt() === '/') prefix = 'link:' + target = siteUrl + target + } + return prefix + target.replace(/_/g, '{underscore}') +} + module.exports = produceAssemblyFile diff --git a/packages/assembler/test/scenarios/attachment-reference/data.yml b/packages/assembler/test/scenarios/attachment-reference/data.yml index 5e1eaf2..a8ce040 100644 --- a/packages/assembler/test/scenarios/attachment-reference/data.yml +++ b/packages/assembler/test/scenarios/attachment-reference/data.yml @@ -20,4 +20,4 @@ files: assembler: asciidoc: attributes: - site-url: https://docs.example.org + site-url: /docs diff --git a/packages/assembler/test/scenarios/attachment-reference/expects/index.adoc b/packages/assembler/test/scenarios/attachment-reference/expects/index.adoc index a9ed902..30f6080 100644 --- a/packages/assembler/test/scenarios/attachment-reference/expects/index.adoc +++ b/packages/assembler/test/scenarios/attachment-reference/expects/index.adoc @@ -19,8 +19,8 @@ [#the-page] == The Page Title -Download the https://docs.example.org/the-component/1.0/{underscore}attachments/form.pdf[Form Title]. +Download the link:/docs/the-component/1.0/{underscore}attachments/form.pdf[Form Title]. :!sectids: -== https://docs.example.org/the-component/1.0/_attachments/form.pdf[Form Title] +== link:/docs/the-component/1.0/{underscore}attachments/form.pdf[Form Title] :sectids: -- GitLab