From 67c2c6ae951121bdc0becb91b125bf4ebf3ed126 Mon Sep 17 00:00:00 2001 From: Dan Allen Date: Tue, 25 Nov 2025 10:17:09 -0700 Subject: [PATCH] resolves #135 create relative link even when site URL is not set --- CHANGELOG.adoc | 4 ++++ packages/assembler/lib/produce-assembly-file.js | 8 ++++---- .../assembler/test/produce-assembly-files-test.js | 15 +++++++++++++++ 3 files changed, 23 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.adoc b/CHANGELOG.adoc index 58e7f27..f3b5b0f 100644 --- a/CHANGELOG.adoc +++ b/CHANGELOG.adoc @@ -6,6 +6,10 @@ For a detailed view of what's changed, refer to the {url-repo}/commits[commit hi == 1.0.0-beta.14 (2025-11-24) +=== Fixed + +* Create relative link even when site URL is not set (#135) + === Changed * Allow assembly.link_reference_style to be relative when export filetype is pdf (#134) diff --git a/packages/assembler/lib/produce-assembly-file.js b/packages/assembler/lib/produce-assembly-file.js index cb33526..87329cf 100644 --- a/packages/assembler/lib/produce-assembly-file.js +++ b/packages/assembler/lib/produce-assembly-file.js @@ -390,7 +390,7 @@ function mergeAsciiDoc ( if (!resourceRef) return `xref:${idPrefix}${fragment}[${text}]` const resourceId = parseResourceRef(resourceRef, page.src, 'page', contentCatalog) if (resourceId.family !== 'page') { - if (siteRoot && (resource = contentCatalog.getById(resourceId))?.pub) { + if ((siteRoot || linkRefStyle === 'relative') && (resource = contentCatalog.getById(resourceId))?.pub) { text ||= resource.asciidoc?.xreftext || target return `${resolveLinkTarget(resource, siteRoot, pubRoot, linkRefStyle)}${fragment && '#' + fragment}[${text}]` } @@ -398,7 +398,7 @@ function mergeAsciiDoc ( return m } if (!(resource = pagesInOutline.get(createResourceKey(resourceId)))) { - if (siteRoot && (resource = contentCatalog.getById(resourceId))?.pub) { + if ((siteRoot || linkRefStyle === 'relative') && (resource = contentCatalog.getById(resourceId))?.pub) { text ||= resource.asciidoc?.xreftext || target return `${resolveLinkTarget(resource, siteRoot, pubRoot, linkRefStyle)}${fragment && '#' + fragment}[${text}]` } @@ -427,7 +427,7 @@ function mergeAsciiDoc ( if (~line.indexOf('link:{attachmentsdir}/')) { line = line.replace(/(? { const attachment = - siteRoot && + (siteRoot || linkRefStyle === 'relative') && contentCatalog.getById({ component: componentVersion.name, version: componentVersion.version, @@ -444,7 +444,7 @@ function mergeAsciiDoc ( if (isResourceSpec(target)) { const image = contentCatalog.resolveResource(target, page.src, 'image', ['image']) // TODO: handle (or report) unresolved image better - if (image?.out && (filetype !== 'html' || siteRoot)) { + if (image?.out && (filetype === 'html' ? siteRoot || linkRefStyle === 'relative' : true)) { pagesInOutline.assembled.assets.add(image) return filetype === 'html' ? `image:${resolveLinkTarget(image, siteRoot, pubRoot, linkRefStyle)}[${attrlist}]` diff --git a/packages/assembler/test/produce-assembly-files-test.js b/packages/assembler/test/produce-assembly-files-test.js index 8edf93f..a41a991 100644 --- a/packages/assembler/test/produce-assembly-files-test.js +++ b/packages/assembler/test/produce-assembly-files-test.js @@ -100,6 +100,21 @@ describe('produceAssemblyFiles()', () => { await runScenario('reset-attributes-when-reduced', __dirname) }) + it('should create relative reference to attachment when assembly.link_reference_style is relative', async () => { + const { loadAsciiDoc, contentCatalog, assemblerConfig } = await loadScenario('attachment-reference', __dirname) + delete assemblerConfig.asciidoc.attributes['site-url'] + contentCatalog.getComponents().forEach((component) => { + component.versions.forEach((componentVersion) => { + delete componentVersion.asciidoc.attributes['site-url'] + }) + }) + assemblerConfig.assembly.linkReferenceStyle = 'relative' + const assemblyFiles = await produceAssemblyFiles(loadAsciiDoc, contentCatalog, assemblerConfig) + assert.equal(assemblyFiles.length, 1) + const actual = assemblyFiles[0].contents.toString() + assert.match(actual, /Download the link:\.\.\/\{underscore\}attachments\/form.pdf\[Form Title\]\./) + }) + // TODO verify images are copied it('should resolve image targets in pages', async () => { await runScenario('resolve-image-targets', __dirname) -- GitLab