AsciidoctorJ tabbed code extension

An AsciidoctorJ extension for rendering code on multiple tabs.

License

License

GroupId

GroupId

com.bmuschko
ArtifactId

ArtifactId

asciidoctorj-tabbed-code-extension
Last Version

Last Version

0.3
Release Date

Release Date

Type

Type

jar
Description

Description

AsciidoctorJ tabbed code extension
An AsciidoctorJ extension for rendering code on multiple tabs.
Project URL

Project URL

https://github.com/bmuschko/asciidoctorj-tabbed-code-extension
Source Code Management

Source Code Management

https://github.com/bmuschko/asciidoctorj-tabbed-code-extension

Download asciidoctorj-tabbed-code-extension

How to add to project

<!-- https://jarcasting.com/artifacts/com.bmuschko/asciidoctorj-tabbed-code-extension/ -->
<dependency>
    <groupId>com.bmuschko</groupId>
    <artifactId>asciidoctorj-tabbed-code-extension</artifactId>
    <version>0.3</version>
</dependency>
// https://jarcasting.com/artifacts/com.bmuschko/asciidoctorj-tabbed-code-extension/
implementation 'com.bmuschko:asciidoctorj-tabbed-code-extension:0.3'
// https://jarcasting.com/artifacts/com.bmuschko/asciidoctorj-tabbed-code-extension/
implementation ("com.bmuschko:asciidoctorj-tabbed-code-extension:0.3")
'com.bmuschko:asciidoctorj-tabbed-code-extension:jar:0.3'
<dependency org="com.bmuschko" name="asciidoctorj-tabbed-code-extension" rev="0.3">
  <artifact name="asciidoctorj-tabbed-code-extension" type="jar" />
</dependency>
@Grapes(
@Grab(group='com.bmuschko', module='asciidoctorj-tabbed-code-extension', version='0.3')
)
libraryDependencies += "com.bmuschko" % "asciidoctorj-tabbed-code-extension" % "0.3"
[com.bmuschko/asciidoctorj-tabbed-code-extension "0.3"]

Dependencies

There are no dependencies for this project. It is a standalone project that does not depend on any other jars.

Project Modules

There are no modules declared in this project.

AsciidoctorJ tabbed code extension Build Status

This AsciidoctorJ extension can render code on multiple tabs. The functionality is particularly useful if you want to demonstrate a code example in different languages or tools, as shown in the following two images.

Groovy tab
Kotlin tab

Using the extension

All you need to do to use the extension is to add it to the dependency from Maven Central. The following two examples demonstrate the use of version 0.3 from Maven and Gradle.

pom.xml
<dependency>
    <groupId>com.bmuschko</groupId>
    <artifactId>asciidoctorj-tabbed-code-extension</artifactId>
    <version>0.3</version>
    <scope>runtime</scope>
</dependency>
build.gradle.kts
dependencies {
    runtimeOnly("com.bmuschko:asciidoctorj-tabbed-code-extension:0.3")
}
Important
This extension is based on AsciidoctorJ version 2.0.0. Make sure that the consuming project uses that exact version (or greater) to avoid incompatibilities. If you need a version compatible with an older version of AsciidoctorJ (down to 1.6.0-RC1) then use version 0.2 of this extension.

To use the extension in Asciidoc provide code blocks with different roles. Specify the primary role for the code block that should appear in the first, topmost tab to the left and use the secondary role for all other tabs. The extension uses the title of the code block for rendering the tab label.

[source,groovy,indent=0,subs="verbatim,attributes",role="primary"]
.Groovy
----
docker {
    registryCredentials {
        url = 'https://gcr.io'
        username = '_json_key'
        password = file('keyfile.json').text
    }
}
----

[source,kotlin,indent=0,subs="verbatim,attributes",role="secondary"]
.Kotlin
----
docker {
    registryCredentials {
        url.set("https://gcr.io")
        username.set("_json_key")
        password.set(file("keyfile.json").readText())
    }
}
----

Configuring the extension

Under the hood, the extension uses the JavaScript library Zepto.js. Currently, the JavaScript library is not configurable.

By default, the extension provides a JavaScript and CSS file that already takes care of the runtime behavior and styling. The runtime behavior and styling is configurable. The table below shows the attributes that allow you to configure the extension.

Attribute

Default Value

Description

tabbed-code-js-path

/codeBlockSwitch.js

The JavaScript controlling the behavior read from the runtime classpath.

tabbed-code-css-path

/codeBlockSwitch.css

The CSS controlling the styling read from the runtime classpath.

The following example shows how to use the CSS attributes to provide custom styling in a Gradle build using the Kotlin DSL.

build.gradle.kts
tasks.named<AsciidoctorTask>("asciidoctor") {
    sourceDir = file("src/docs/asciidoc")
    sources(delegateClosureOf<PatternSet> {
        include("index.adoc")
    })

    attributes(
        mapOf(
            "toc" to "left",
            "source-highlighter" to "prettify",
            "icons" to "font",
            "numbered" to "",
            "idprefix" to "",
            "docinfo1" to "true",
            "sectanchors" to "true",
            "tabbed-code-css-path" to "/customTabbedCode.css"
        )
    )
}

Versions

Version
0.3