Skip to content
vshnPublic

About

Default UI used by Antora in VSHN documentation projects

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

VSHN Antora UI

CI Status (GitHub Actions)

This project is an archetype that demonstrates how to produce a UI bundle that can be used by Antora to generated a documentation site. The built bundles are published on the releases page. Run npx gulp preview to see the UI in a local preview on port 5252.

This UI is built for four brands from one source tree. Run npx gulp bundle --brand=<vshn|appuio|k8up|syn>; see the Brands page in docs/ for what a brand owns and how to add one. A release publishes ui-bundle.zip for VSHN and ui-bundle-<brand>.zip for the others.

While the default UI is ready to be used with Antora, the intent is that you’ll fork it and customize it for your own needs. It’s intentionally minimalistic so as to give you a good starting point without requiring too much effort to customize.

Code of Conduct

The Antora project and its project spaces are governed by our Code of Conduct. By participating, you’re agreeing to honor this code. Let’s work together to make this a welcoming, professional, inclusive, and safe environment for everyone.

Use the UI

To use this UI for your Antora-generated site, add the following UI configuration to your playbook:

ui:
  bundle:
    url: https://github.com/vshn/antora-ui/releases/download/<version>/ui-bundle.zip

Pick the version from the releases page and replace <version> with it. Each release URL is unique, so the snapshot flag is not needed. ui-bundle.zip is the VSHN brand. The other brands publish ui-bundle-<brand>.zip; see the Brands page in docs/.

Read on to learn how to customize the default UI for your own documentation.

Development Quickstart

This section offers a basic tutorial to teach you how to set up the default UI project, preview it locally, and bundle it for use with Antora. A more comprehensive tutorial can be found in the documentation at docs.antora.org.

Prerequisites

To preview and bundle the default UI, you need the following software on your computer:

git

First, make sure you have git installed.

$ git --version

If not, download and install the git package for your system.

Node.js

Next, make sure that you have Node.js installed (which also provides npm).

$ node --version

If this command fails with an error, you don’t have Node.js installed. If the command doesn’t report an LTS version of Node.js (e.g., v20.19.0), it means you don’t have a suitable version of Node.js installed. In this guide, we’ll be installing Node.js 20.

While you can install Node.js from the official packages, we strongly recommend that you use nvm (Node Version Manager) to manage your Node.js installation(s). Follow the nvm installation instructions to set up nvm on your machine.

Once you’ve installed nvm, open a new terminal and install Node.js 20 using the following command:

$ nvm install 20

You can switch to this version of Node.js at any time using the following command:

$ nvm use 20

To make Node.js 20 the default in new terminals, type:

$ nvm alias default 20

Now that you have Node.js installed, you can proceed with installing the Gulp CLI.

Gulp CLI

You’ll need the Gulp command-line interface (CLI) to run the build. The Gulp CLI package provides the gulp command which, in turn, executes the version of Gulp declared by the project.

You can install the Gulp CLI globally (which resolves to a location in your user directory if you’re using nvm) using the following command:

$ npm install -g gulp-cli

Verify the Gulp CLI is installed and on your PATH by running:

$ gulp --version

If you prefer to install global packages using Yarn, run this command instead:

$ yarn global add gulp-cli

Alternately, you can use the gulp command that is installed by the project’s dependencies.

$ $(npm bin)/gulp --version

Now that you have the prerequisites installed, you can fetch and build the UI project.

Clone and Initialize the UI Project

Clone the default UI project using git:

$ git clone https://github.com/vshn/antora-ui &&
  cd "`basename $_`"

The example above clones the VSHN Antora UI project and then switches to the project folder on your filesystem. Stay in this project folder when executing all subsequent commands.

Use npm to install the project’s dependencies inside the project. In your terminal, execute the following command:

$ npm install

This command installs the dependencies listed in package.json into the node_modules/ folder inside the project. This folder does not get included in the UI bundle and should not be committed to the source control repository.

Tip

If you prefer to install packages using Yarn, run this command instead:

$ yarn

Preview the UI

The default UI project is configured to preview offline. The files in the preview-src/ folder provide the sample content that allow you to see the UI in action. In this folder, you’ll primarily find pages written in AsciiDoc. These pages provide a representative sample and kitchen sink of content from the real site.

To build the UI and preview it in a local web server, run the preview command:

$ gulp preview

Without --brand, this previews the vshn brand. To preview another brand, pass it, as in npx gulp preview --brand=k8up.

You’ll see a URL listed in the output of this command:

[12:00:00] Starting server...
[12:00:00] Server started http://localhost:5252
[12:00:00] Running server

Navigate to this URL to preview the site locally.

While this command is running, any changes you make to the source files will be instantly reflected in the browser. This works by monitoring the project for changes, running the preview:build task if a change is detected, and sending the updates to the browser.

Press Ctrl+C to stop the preview server and end the continuous build.

The search box uses Pagefind when the site has a Pagefind index, and otherwise the /search endpoint of the search engine container. A site switches to Pagefind by indexing its pages after the Antora build:

$ npx pagefind --site build/site

This writes the index to build/site/pagefind/, next to the UI in build/site//_, and the search runs in the browser with no server. The UI marks what gets indexed: the article body (data-pagefind-body), the page title, and the page version as metadata and a filter. Navigation, the table of contents and the pagination links are left out.

gulp preview builds a Pagefind index of the preview pages too, so search works in the preview.

Search Analytics

With site.keys.plausibleScript set in the playbook, the UI loads Plausible from the site’s own domain and reports searches:

site:
  keys:
    plausibleScript: pa-XXXXXXXX.js # the site's script name from Plausible
  • Search, with the normalized query (query) and the number of results (results). A search that ran after a pause in typing is reported only once the reader stays on its results for 2 seconds, clicks a result, or leaves the page. Partial words typed on the way to the final query are not reported.

  • Search Result Click, with the query and the position of the opened result (position).

The browser never contacts plausible.io directly, so the site’s nginx has to proxy both paths:

location = /js/pa-XXXXXXXX.js {
    proxy_pass https://plausible.io/js/pa-XXXXXXXX.js;
    proxy_ssl_server_name on;
    proxy_set_header Host plausible.io;
}

location = /api/event {
    proxy_pass https://plausible.io/api/event;
    proxy_ssl_server_name on;
    proxy_set_header Host plausible.io;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

Test the Preview

Browser tests in the test/ folder open the preview in headless Chromium and check that it renders: [name] macros and admonition icons are visible, web fonts come from the site itself, and no third-party resources load beyond an allowlist.

Install the browser once, then run the tests:

$ npx playwright install chromium
$ npm test

The same tests also run against the assets from the packaged bundle, which are minified and have the CSS custom properties resolved, unlike the preview build:

$ npm run test:bundle

The tests build and serve the preview themselves. If gulp preview is already running, they reuse that server.

Package for Use with Antora

If you need to package the UI so you can use it to generate the documentation site locally, run the following command:

$ gulp bundle

This builds the vshn brand. To build another brand, pass it, as in npx gulp bundle --brand=appuio.

If any errors are reported by lint, you’ll need to fix them.

When the command completes successfully, the UI bundle will be available at build/ui-bundle.zip for vshn and build/ui-bundle-<brand>.zip for the other brands. You can point Antora at this bundle using the --ui-bundle-url command-line option.

If you have the preview running, and you want to bundle without causing the preview to be clobbered, use:

$ gulp bundle:pack

This packs the assets already built, and it refuses to run unless they were built for the selected brand, vshn by default. If the last build was for another brand, it stops with an error naming both; build again with --brand=<name> first. The UI bundle will again be available at build/ui-bundle.zip for vshn.

Source Maps

The build consolidates all the CSS and client-side JavaScript into combined files, site.css and site.js, respectively, in order to reduce the size of the bundle. Source maps correlate these combined files with their original sources.

This “source mapping” is accomplished by generating additional map files that make this association. These map files sit adjacent to the combined files in the build folder. The mapping they provide allows the debugger to present the original source rather than the obfuscated file, an essential tool for debugging.

In preview mode, source maps are enabled automatically, so there’s nothing you have to do to make use of them. If you need to include source maps in the bundle, you can do so by setting the SOURCEMAPS environment variable to true when you run the bundle command:

$ SOURCEMAPS=true gulp bundle

In this case, the bundle will include the source maps, which can be used for debugging your production site. The bundle is for the vshn brand unless you also pass --brand=<name>.

Copyright © 2017-present OpenDevise Inc. and the Antora Project.

Use of this software is granted under the terms of the Mozilla Public License Version 2.0 (MPL-2.0). See LICENSE to find the full license text.

Authors

Development of Antora is led and sponsored by OpenDevise Inc.

About

Default UI used by Antora in VSHN documentation projects

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages