= Apache Camel UI
// Settings:
:experimental:
:hide-uri-scheme:
:ui-module-name: antora-ui-camel
// Project URLs:
:url-project: https://github.com/apache/camel-website
:img-ci-status: {url-project}/badges/master/pipeline.svg
// External URLs:
:url-camel: https://camel.apache.org/
:url-antora: https://antora.org
:url-git: https://git-scm.com
:url-git-dl: {url-git}/downloads
:url-gulp: http://gulpjs.com
:url-opendevise: https://opendevise.com
:url-nodejs: https://nodejs.org
:url-nvm: https://github.com/creationix/nvm
:url-nvm-install: {url-nvm}#installation
:url-yarn: https://yarnpkg.com
:url-yarn-install: https://yarnpkg.com/en/docs/install

This project represents the Apache Camel UI theme that is used in the {url-camel}[Apache Camel website] documentation site.
The website is generated with {url-antora}[Antora] and this is the UI theme for that.

== Use the Camel UI

If you want to use this UI theme in your Antora-generated site, add the following UI configuration to your playbook:

[source,yaml,subs=attributes+]
----
ui:
  bundle:
    url: {url-project}/releases/download/{current-release}/ui-bundle.zip
    snapshot: true
----

NOTE: The `snapshot` flag tells Antora to fetch the UI when the `--fetch` command-line flag is present.
This setting is required because updates to the UI bundle are pushed to the same URL.
If the URL were to be unique, this setting would not be required.

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 can be found in the documentation at {url-antora-docs}.

=== Prerequisites

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

* {url-git}[git] (command: `git`)
* {url-nodejs}[Node.js] (command: `node`)
* {url-yarn}[Yarn] (command: `yarn`)

==== git

First, make sure you have git installed.

 $ git --version

If not, {url-git-dl}[download and install] the git package for your system.

==== Node.js

Next, make sure that you have Node.js installed.

 $ 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., v10.15.3), it means you don't have a suitable version of Node.js installed.
In this guide, we'll be installing Node.js 10.

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

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

 $ nvm install 10

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

 $ nvm use 10

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

 $ nvm alias default 10

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

==== Yarn

Finally, you'll need Yarn, which is the preferred package manager for the Node ecosystem.

Follow {url-yarn-install}[the documentation on installing] Yarn for your Operating system.

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

=== Clone and Initialize the UI Project

Clone the Camel UI project using git:

[subs=attributes+]
 $ git clone {url-project} &&
   cd camel-website/{ui-module-name}

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

Use Yarn to install the project's dependencies.
In your terminal, execute the following command:

 $ yarn install

=== Preview the UI

The default UI project is configured to preview offline.
The files in the [.path]_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:

 $ yarn preview

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 kbd:[Ctrl+C] to stop the preview server and end the continuous build.

=== 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:

 $ yarn build

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 [.path]_build/ui-bundle.zip_.
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

The UI bundle will again be available at [.path]_build/ui-bundle.zip_.

== Copyright and License

=== Software

The software in this repository (build scripts, JavaScript files, Handlebars templates, foundation CSS, utility icons, etc)
is part of the {url-antora}[Antora project] and therefore copyright for these parts and the underlying source code belongs
to {url-opendevise}[OpenDevise Inc] and the {url-antora}[Antora project].

As such, use of the software is granted under the terms of the
https://www.mozilla.org/en-US/MPL/2.0/[Mozilla Public License Version 2.0] (MPL-2.0). See link:LICENSE[] to find the full license text.

