Skip to content

Commit ecef520

Browse files
committed
Add copy button for configuration property
1 parent d1c3ae8 commit ecef520

File tree

5 files changed

+43
-5
lines changed

5 files changed

+43
-5
lines changed

devtools/config-doc-maven-plugin/src/main/java/io/quarkus/maven/config/doc/GenerateConfigDocMojo.java

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
import io.quarkus.maven.config.doc.generator.GenerationReport;
4141
import io.quarkus.maven.config.doc.generator.GenerationReport.GenerationViolation;
4242
import io.quarkus.qute.Engine;
43+
import io.quarkus.qute.EngineBuilder;
4344
import io.quarkus.qute.ReflectionValueResolver;
4445
import io.quarkus.qute.UserTagSectionHelper;
4546
import io.quarkus.qute.ValueResolver;
@@ -296,7 +297,7 @@ public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) th
296297
}
297298

298299
private static Engine initializeQuteEngine(Formatter formatter, Format format, String theme) {
299-
Engine engine = Engine.builder()
300+
EngineBuilder engineBuilder = Engine.builder()
300301
.addDefaults()
301302
.addSectionHelper(new UserTagSectionHelper.Factory("configProperty", "configProperty"))
302303
.addSectionHelper(new UserTagSectionHelper.Factory("configSection", "configSection"))
@@ -402,9 +403,13 @@ private static Engine initializeQuteEngine(Formatter formatter, Format format, S
402403
.applyToName("formatName")
403404
.applyToNoParameters()
404405
.resolveSync(ctx -> formatter.formatName((Extension) ctx.getBase()))
405-
.build())
406-
.build();
406+
.build());
407+
408+
if (format == Format.asciidoc) {
409+
engineBuilder.addSectionHelper(new UserTagSectionHelper.Factory("propertyCopyButton", "propertyCopyButton"));
410+
}
407411

412+
Engine engine = engineBuilder.build();
408413
engine.putTemplate("configReference",
409414
engine.parse(getTemplate("templates", format, theme, "configReference", false)));
410415
engine.putTemplate("allConfig",
@@ -420,6 +425,11 @@ private static Engine initializeQuteEngine(Formatter formatter, Format format, S
420425
engine.putTemplate("memorySizeNote",
421426
engine.parse(getTemplate("templates", format, theme, "memorySizeNote", true)));
422427

428+
if (format == Format.asciidoc) {
429+
engine.putTemplate("propertyCopyButton",
430+
engine.parse(getTemplate("templates", format, theme, "propertyCopyButton", true)));
431+
}
432+
423433
return engine;
424434
}
425435

devtools/config-doc-maven-plugin/src/main/resources/templates/asciidoc/default/tags/configProperty.qute.adoc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
a|{#if configProperty.phase.fixedAtBuildTime}icon:lock[title=Fixed at build time]{/if} [[{configProperty.toAnchor(extension, additionalAnchorPrefix)}]] [.property-path]##link:#{configProperty.toAnchor(extension, additionalAnchorPrefix)}[`{configProperty.path.property}`]##
1+
a|{#if configProperty.phase.fixedAtBuildTime}icon:lock[title=Fixed at build time]{/if} [[{configProperty.toAnchor(extension, additionalAnchorPrefix)}]] [.property-path]##link:#{configProperty.toAnchor(extension, additionalAnchorPrefix)}[`{configProperty.path.property}`]## {#propertyCopyButton configProperty.path.property /}
22
{#for additionalPath in configProperty.additionalPaths}
33

4-
`{additionalPath.property}`
4+
`{additionalPath.property}` {#propertyCopyButton additionalPath.property /}
55
{/for}
66

77
[.description]
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
config_property_copy_button:+++{it}+++[]

docs/pom.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3442,6 +3442,11 @@
34423442
<className>io.quarkus.docs.generation.TooltipInlineMacroProcessor</className>
34433443
<blockName>tooltip</blockName>
34443444
</extension>
3445+
<extension>
3446+
<!-- Register custom inline macro -->
3447+
<className>io.quarkus.docs.generation.PropertyCopyButtonInlineMacroProcessor</className>
3448+
<blockName>config_property_copy_button</blockName>
3449+
</extension>
34453450
</extensions>
34463451
</configuration>
34473452
</execution>
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package io.quarkus.docs.generation;
2+
3+
import java.util.Map;
4+
5+
import org.asciidoctor.ast.ContentNode;
6+
import org.asciidoctor.extension.InlineMacroProcessor;
7+
import org.asciidoctor.extension.Name;
8+
9+
/**
10+
* Inline macro implementation for PDF (HTML) files where copy button is not supported.
11+
* The copy button macro is replaced with empty HTML 'code' element. The empty element is part of the DOM but not visible.
12+
* This processor must exist because we cannot use Asciidoc 'ifdef' directive inline inside a config table row.
13+
*/
14+
@Name("config_property_copy_button")
15+
public class PropertyCopyButtonInlineMacroProcessor extends InlineMacroProcessor {
16+
17+
@Override
18+
public Object process(ContentNode contentNode, String target, Map<String, Object> map) {
19+
// creates empty 'code' element: <code></code>
20+
return createPhraseNode(contentNode, "quoted", "");
21+
}
22+
}

0 commit comments

Comments
 (0)