Skip to content

Commit

Permalink
Add copy button for configuration property
Browse files Browse the repository at this point in the history
  • Loading branch information
michalvavrik committed Nov 9, 2024
1 parent d1c3ae8 commit ecef520
Show file tree
Hide file tree
Showing 5 changed files with 43 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@
import io.quarkus.maven.config.doc.generator.GenerationReport;
import io.quarkus.maven.config.doc.generator.GenerationReport.GenerationViolation;
import io.quarkus.qute.Engine;
import io.quarkus.qute.EngineBuilder;
import io.quarkus.qute.ReflectionValueResolver;
import io.quarkus.qute.UserTagSectionHelper;
import io.quarkus.qute.ValueResolver;
Expand Down Expand Up @@ -296,7 +297,7 @@ public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) th
}

private static Engine initializeQuteEngine(Formatter formatter, Format format, String theme) {
Engine engine = Engine.builder()
EngineBuilder engineBuilder = Engine.builder()
.addDefaults()
.addSectionHelper(new UserTagSectionHelper.Factory("configProperty", "configProperty"))
.addSectionHelper(new UserTagSectionHelper.Factory("configSection", "configSection"))
Expand Down Expand Up @@ -402,9 +403,13 @@ private static Engine initializeQuteEngine(Formatter formatter, Format format, S
.applyToName("formatName")
.applyToNoParameters()
.resolveSync(ctx -> formatter.formatName((Extension) ctx.getBase()))
.build())
.build();
.build());

if (format == Format.asciidoc) {
engineBuilder.addSectionHelper(new UserTagSectionHelper.Factory("propertyCopyButton", "propertyCopyButton"));
}

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

if (format == Format.asciidoc) {
engine.putTemplate("propertyCopyButton",
engine.parse(getTemplate("templates", format, theme, "propertyCopyButton", true)));
}

return engine;
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
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}`]##
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 /}
{#for additionalPath in configProperty.additionalPaths}

`{additionalPath.property}`
`{additionalPath.property}` {#propertyCopyButton additionalPath.property /}
{/for}

[.description]
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
config_property_copy_button:+++{it}+++[]
5 changes: 5 additions & 0 deletions docs/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -3442,6 +3442,11 @@
<className>io.quarkus.docs.generation.TooltipInlineMacroProcessor</className>
<blockName>tooltip</blockName>
</extension>
<extension>
<!-- Register custom inline macro -->
<className>io.quarkus.docs.generation.PropertyCopyButtonInlineMacroProcessor</className>
<blockName>config_property_copy_button</blockName>
</extension>
</extensions>
</configuration>
</execution>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package io.quarkus.docs.generation;

import java.util.Map;

import org.asciidoctor.ast.ContentNode;
import org.asciidoctor.extension.InlineMacroProcessor;
import org.asciidoctor.extension.Name;

/**
* Inline macro implementation for PDF (HTML) files where copy button is not supported.
* The copy button macro is replaced with empty HTML 'code' element. The empty element is part of the DOM but not visible.
* This processor must exist because we cannot use Asciidoc 'ifdef' directive inline inside a config table row.
*/
@Name("config_property_copy_button")
public class PropertyCopyButtonInlineMacroProcessor extends InlineMacroProcessor {

@Override
public Object process(ContentNode contentNode, String target, Map<String, Object> map) {
// creates empty 'code' element: <code></code>
return createPhraseNode(contentNode, "quoted", "");
}
}

0 comments on commit ecef520

Please sign in to comment.