You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@training.apache.org by cd...@apache.org on 2019/04/26 10:36:35 UTC

[incubator-training] 21/26: - Added my presentation framework as second build unit to test the separation of builds

This is an automated email from the ASF dual-hosted git repository.

cdutz pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-training.git

commit 885af306b04e359568ddce0a42bd0442a3d7bbc5
Author: Christofer Dutz <ch...@c-ware.de>
AuthorDate: Fri Apr 26 12:04:04 2019 +0200

    - Added my presentation framework as second build unit to test the separation of builds
---
 .../maven-revealjs-asciidoctor-templte/Jenkinsfile | 123 ++++
 tools/maven-revealjs-asciidoctor-templte/README.md |  66 ++
 .../install-deps.sh                                |  51 ++
 .../libs/docinfo-hack/document.html.slim           | 214 ++++++
 tools/maven-revealjs-asciidoctor-templte/pom.xml   | 288 ++++++++
 .../src/main/asciidoc/_settings.adoc}              |  40 +-
 .../asciidoc/diagrams/mermaid-flowchart-test.mmd   |   5 +
 .../src/main/asciidoc/index.adoc                   | 764 +++++++++++++++++++++
 .../src/main/asciidoc/subdir/_b.adoc}              |  26 +-
 .../src/main/asciidoc/subdir/_c.adoc}              |  22 +-
 .../src/main/java/example/StringUtils.java         |  27 +
 .../src/main/resources/images/Yoda.png             | Bin 0 -> 305264 bytes
 .../src/main/resources/images/logo-apache.png      | Bin 0 -> 16185 bytes
 .../src/main/theme/apache.css                      | 349 ++++++++++
 tools/pom.xml                                      |   2 +-
 15 files changed, 1919 insertions(+), 58 deletions(-)

diff --git a/tools/maven-revealjs-asciidoctor-templte/Jenkinsfile b/tools/maven-revealjs-asciidoctor-templte/Jenkinsfile
new file mode 100644
index 0000000..d23dc38
--- /dev/null
+++ b/tools/maven-revealjs-asciidoctor-templte/Jenkinsfile
@@ -0,0 +1,123 @@
+#!groovy
+
+/*
+ *
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You under the Apache License, Version 2.0
+ *  (the "License"); you may not use this file except in compliance with
+ *  the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *
+ */
+pipeline {
+
+    tools {
+        maven 'Maven 3 (latest)'
+        jdk 'JDK 1.8 (latest)'
+    }
+
+    options {
+        // Kill this job after one hour.
+        timeout(time: 1, unit: 'HOURS')
+        // When we have test-fails e.g. we don't need to run the remaining steps
+        skipStagesAfterUnstable()
+        buildDiscarder(logRotator(numToKeepStr: '5', artifactNumToKeepStr: '3'))
+    }
+
+    stages {
+        stage('Initialization') {
+            steps {
+                echo 'Building Branch: ' + env.BRANCH_NAME
+                echo 'Using PATH = ' + env.PATH
+            }
+        }
+
+        stage('Cleanup') {
+            steps {
+                echo 'Cleaning up the workspace'
+                deleteDir()
+            }
+        }
+
+        stage('Checkout') {
+            steps {
+                echo 'Checking out branch ' + env.BRANCH_NAME
+                checkout scm
+            }
+        }
+
+        stage('Build') {
+            steps {
+                echo 'Building'
+                sh 'mvn -f tools/maven-revealjs-asciidoctor-templte/pom.xml package'
+            }
+        }
+    }
+
+    // Send out notifications on unsuccessful builds.
+    post {
+        // If this build failed, send an email to the list.
+        failure {
+            script {
+                if(env.BRANCH_NAME == "develop") {
+                    emailext(
+                        subject: "[Template][BUILD-FAILURE]: Job '${env.JOB_NAME} [${env.BRANCH_NAME}] [${env.BUILD_NUMBER}]'",
+                        body: """
+BUILD-FAILURE: Job '${env.JOB_NAME} [${env.BRANCH_NAME}] [${env.BUILD_NUMBER}]':
+
+Check console output at "<a href="${env.BUILD_URL}">${env.JOB_NAME} [${env.BRANCH_NAME}] [${env.BUILD_NUMBER}]</a>"
+""",
+                        to: "dev@training.apache.org"
+                    )
+                }
+            }
+        }
+
+        // If this build didn't fail, but there were failing tests, send an email to the list.
+        unstable {
+            script {
+                if(env.BRANCH_NAME == "develop") {
+                    emailext(
+                        subject: "[Template][BUILD-UNSTABLE]: Job '${env.JOB_NAME} [${env.BRANCH_NAME}] [${env.BUILD_NUMBER}]'",
+                        body: """
+BUILD-UNSTABLE: Job '${env.JOB_NAME} [${env.BRANCH_NAME}] [${env.BUILD_NUMBER}]':
+
+Check console output at "<a href="${env.BUILD_URL}">${env.JOB_NAME} [${env.BRANCH_NAME}] [${env.BUILD_NUMBER}]</a>"
+""",
+                        to: "dev@training.apache.org"
+                    )
+                }
+            }
+        }
+
+        // Send an email, if the last build was not successful and this one is.
+        success {
+            // Cleanup the build directory if the build was successful
+            // (in this cae we probably don't have to do any post-build analysis)
+            deleteDir()
+            script {
+                if ((env.BRANCH_NAME == "develop") && (currentBuild.previousBuild != null) && (currentBuild.previousBuild.result != 'SUCCESS')) {
+                    emailext (
+                        subject: "[Template][BUILD-STABLE]: Job '${env.JOB_NAME} [${env.BRANCH_NAME}] [${env.BUILD_NUMBER}]'",
+                        body: """
+BUILD-STABLE: Job '${env.JOB_NAME} [${env.BRANCH_NAME}] [${env.BUILD_NUMBER}]':
+
+Is back to normal.
+""",
+                        to: "dev@training.apache.org"
+                    )
+                }
+            }
+        }
+    }
+
+}
\ No newline at end of file
diff --git a/tools/maven-revealjs-asciidoctor-templte/README.md b/tools/maven-revealjs-asciidoctor-templte/README.md
new file mode 100644
index 0000000..1845bc1
--- /dev/null
+++ b/tools/maven-revealjs-asciidoctor-templte/README.md
@@ -0,0 +1,66 @@
+<!--
+
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+
+-->
+
+# Presentation with Reveal.JS and AsciiDoctor
+
+Remarks:
+- Currently it seems as if the system can't detect the 'docinfo' files, so we have to replace the `document.html.slim` file from `asciidoctor-reveal.js` with an updated one, that adds some additional js and css references. This template is located in `libs/docinfo-hack`.
+- In order to use the preview of the IntelliJ asciidoctor plugin, you need to set an attribute in the plugin settings: `imagesdir` = `../resources/images`
+- Even if it is possible to run the presentation directly from the `generated-slides` directory, some JavaScript extensions don't work in this case. Therefore it is required to run the presentation from a local webserver. 
+- In order to generate the diagrams, GraphVIS needs to be installed locally. Get it from: http://www.graphviz.org/
+- The template is adjusted to use the codecentric font `Panton`, so be sure to have that installed on your presentation machine.
+- Any css adjustments can go to `src/main/theme/cc.css` as this is automatically embedded into the themes directory.
+
+## Building the presentation
+
+By running the following command, you can generate the presentation:
+
+    mvn clean package
+   
+## Running the presentation
+
+In order to start a local web server serving the presentation, execute the following command:
+
+    mvn jetty:run-exploded
+    
+As soon as that's done, just point your browser to:
+
+    http://localhost:8080/
+
+## Generating PDF versions
+
+In order to generate a PDF version of the presentation just add `?print-pdf` to the url. (Keep in mind, that you have to add it before any `#blahblah`)
+
+The following link should do the trick:
+
+    http://localhost:8080/?print-pdf
+    
+As soon as that's loaded, just use the normal `print` functionality of the browser and `print as PDF`.
+
+## Installing third party software:
+
+### Mermaid
+
+    npm install mermaid.cli
+    
+This will install mermaid under `node_modules/.bin/mmdc`.
+
+### PhantomJS
+
+https://bitbucket.org/ariya/phantomjs/downloads/phantomjs-2.1.1-macosx.zip
diff --git a/tools/maven-revealjs-asciidoctor-templte/install-deps.sh b/tools/maven-revealjs-asciidoctor-templte/install-deps.sh
new file mode 100755
index 0000000..c8702c6
--- /dev/null
+++ b/tools/maven-revealjs-asciidoctor-templte/install-deps.sh
@@ -0,0 +1,51 @@
+#!/usr/bin/env bash
+# ----------------------------------------------------------------------------
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#    http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+# ----------------------------------------------------------------------------
+
+cd libs
+mkdir third-party
+cd third-party
+
+# Install ERD
+git clone git://github.com/BurntSushi/erd
+cd erd
+stack init
+stack build --system-ghc
+
+# Install Mermaid
+npm install mermaid.cli
+
+# Install PhantomJS
+wget https://bitbucket.org/ariya/phantomjs/downloads/phantomjs-2.1.1-macosx.zip
+unzip phantomjs-2.1.1-macosx.zip
+
+# SVGBob
+#cargo install svgbob_cli
+
+# Syntrax
+pip install --upgrade syntrax
+pip install pycairo
+brew install pygobject3
+
+# Vega
+npm install vega
+
+# ImageMagic
+#wget https://imagemagick.org/download/binaries/ImageMagick-x86_64-apple-darwin17.7.0.tar.gz
+#tar xvzf ImageMagick-x86_64-apple-darwin17.7.0.tar.gz
diff --git a/tools/maven-revealjs-asciidoctor-templte/libs/docinfo-hack/document.html.slim b/tools/maven-revealjs-asciidoctor-templte/libs/docinfo-hack/document.html.slim
new file mode 100644
index 0000000..ec9e3cf
--- /dev/null
+++ b/tools/maven-revealjs-asciidoctor-templte/libs/docinfo-hack/document.html.slim
@@ -0,0 +1,214 @@
+doctype 5
+html lang=(attr :lang, 'en' unless attr? :nolang)
+  head
+    meta charset="utf-8"
+    - revealjsdir = (attr :revealjsdir, 'reveal.js')
+    - unless (asset_uri_scheme = (attr 'asset-uri-scheme', 'https')).empty?
+      - asset_uri_scheme = %(#{asset_uri_scheme}:)
+    - cdn_base = %(#{asset_uri_scheme}//cdnjs.cloudflare.com/ajax/libs)
+    - [:description, :keywords, :author, :copyright].each do |key|
+      - if attr? key
+        meta name=key content=(attr key)
+    title=(doctitle sanitize: true, use_fallback: true)
+    meta content="yes" name="apple-mobile-web-app-capable"
+    meta content="black-translucent" name="apple-mobile-web-app-status-bar-style"
+    meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, minimal-ui" name="viewport"
+    link href="#{revealjsdir}/css/reveal.css" rel="stylesheet"
+    link href="css/c3.min.css" rel="stylesheet"
+    script src="js/d3.min.js" charset="utf-8"
+    script src="js/c3.min.js"
+    / Default theme required even when using custom theme
+    - if attr? :revealjs_customtheme
+      link rel='stylesheet' href=(attr :revealjs_customtheme) id='theme'
+    - else
+      link rel='stylesheet' href='#{revealjsdir}/css/theme/#{attr 'revealjs_theme', 'black'}.css' id='theme'
+    - if attr? :icons, 'font'
+      - if attr? 'iconfont-remote'
+        link rel='stylesheet' href=(attr 'iconfont-cdn', %(#{cdn_base}/font-awesome/4.3.0/css/font-awesome.min.css))
+      - else
+        link rel='stylesheet' href=(normalize_web_path %(#{attr 'iconfont-name', 'font-awesome'}.css), (attr 'stylesdir', ''), false)
+    - if attr? :stem
+      - eqnums_val = (attr 'eqnums', 'none')
+      - eqnums_val = 'AMS' if eqnums_val == ''
+      - eqnums_opt = %( equationNumbers: { autoNumber: "#{eqnums_val}" } )
+      script type='text/x-mathjax-config'
+        | MathJax.Hub.Config({
+          tex2jax: {
+            inlineMath: [#{Asciidoctor::INLINE_MATH_DELIMITERS[:latexmath].to_s}],
+            displayMath: [#{Asciidoctor::BLOCK_MATH_DELIMITERS[:latexmath].to_s}],
+            ignoreClass: "nostem|nolatexmath"
+          },
+          asciimath2jax: {
+            delimiters: [#{Asciidoctor::BLOCK_MATH_DELIMITERS[:asciimath].to_s}],
+            ignoreClass: "nostem|noasciimath"
+          },
+          TeX: {#{eqnums_opt}}
+          });
+      script src='#{cdn_base}/mathjax/2.4.0/MathJax.js?config=TeX-MML-AM_HTMLorMML'
+    - case attr 'source-highlighter'
+    - when 'coderay'
+      - if (attr 'coderay-css', 'class') == 'class'
+        - if @safe >= Asciidoctor::SafeMode::SECURE || (attr? :linkcss)
+          link rel='stylesheet' href=normalize_web_path('asciidoctor-coderay.css', (attr :stylesdir, ''))
+        - else
+          style=Asciidoctor::Stylesheets.instance.coderay_stylesheet_data
+    - when 'pygments'
+      - if (attr 'pygments-css', 'class') == 'class'
+        - if @safe >= Asciidoctor::SafeMode::SECURE || (attr? :linkcss)
+          link rel='stylesheet' href=normalize_web_path('asciidoctor-pygments.css', (attr :stylesdir, ''))
+        - else
+          style=Asciidoctor::Stylesheets.instance.pygments_stylesheet_data(attr 'pygments-style')
+    / For syntax highlighting
+    - if attr? 'highlightjs-theme'
+      link href=(attr 'highlightjs-theme') rel="stylesheet"
+    - else
+      link href="#{revealjsdir}/lib/css/zenburn.css" rel="stylesheet"
+    / If the query includes 'print-pdf', use the PDF print sheet
+    javascript:
+      var link = document.createElement( 'link' );
+      link.rel = 'stylesheet';
+      link.type = 'text/css';
+      link.href = window.location.search.match( /print-pdf/gi ) ? "#{revealjsdir}/css/print/pdf.css" : "#{revealjsdir}/css/print/paper.css";
+      document.getElementsByTagName( 'head' )[0].appendChild( link );
+    /[if lt IE 9]
+      <script src="#{revealjsdir}/lib/js/html5shiv.js"></script>
+    - unless (docinfo_content = docinfo :header, '.html').empty?
+      =docinfo_content
+    - if attr? :customcss
+      link rel='stylesheet' href=((customcss = attr :customcss).empty? ? 'asciidoctor-revealjs.css' : customcss)
+  body
+    .header
+      .left
+      .right
+    .reveal
+      / Any section element inside of this container is displayed as a slide
+      .slides
+        - unless notitle || !has_header?
+          - bg_image = (attr? 'title-slide-background-image') ? (image_uri(attr 'title-slide-background-image')) : nil
+          - bg_video = (attr? 'title-slide-background-video') ? (media_uri(attr 'title-slide-background-video')) : nil
+          section.title(class = role
+            data-state='title'
+            data-transition=(attr 'title-slide-transition')
+            data-transition-speed=(attr 'title-slide-transition-speed')
+            data-background=(attr 'title-slide-background')
+            data-background-size=(attr 'title-slide-background-size')
+            data-background-image=bg_image
+            data-background-video=bg_video
+            data-background-video-loop=(attr 'title-slide-background-video-loop')
+            data-background-video-muted=(attr 'title-slide-background-video-muted')
+            data-background-iframe=(attr 'title-slide-background-iframe')
+            data-background-color=(attr 'title-slide-background-color')
+            data-background-repeat=(attr 'title-slide-background-repeat')
+            data-background-position=(attr 'title-slide-background-position')
+            data-background-transition=(attr 'title-slide-background-transition'))
+            - if (_title_obj = doctitle partition: true, use_fallback: true).subtitle?
+              h1=slice_text _title_obj.title, (_slice = header.option? :slice)
+              h2=slice_text _title_obj.subtitle, _slice
+            - else
+              h1=@header.title
+            - preamble = @document.find_by context: :preamble
+            - unless preamble.nil? or preamble.length == 0
+              div.preamble=preamble.pop.content
+            - unless author.nil?
+              p.author: small=author
+        =content
+    .footer
+      .left
+      .right
+    script src="#{revealjsdir}/lib/js/head.min.js"
+    script src="#{revealjsdir}/js/reveal.js"
+    javascript:
+      // See https://github.com/hakimel/reveal.js#configuration for a full list of configuration options
+      Reveal.initialize({
+        // Display controls in the bottom right corner
+        controls: #{to_boolean(attr 'revealjs_controls', true)},
+        // Display a presentation progress bar
+        progress: #{to_boolean(attr 'revealjs_progress', true)},
+        // Set a per-slide timing for speaker notes, null means none
+        defaultTiming: #{attr 'revealjs_defaultTiming', 'null'},
+        // Display the page number of the current slide
+        slideNumber: #{to_boolean(attr 'revealjs_slidenumber', false)},
+        // Push each slide change to the browser history
+        history: #{to_boolean(attr 'revealjs_history', false)},
+        // Enable keyboard shortcuts for navigation
+        keyboard: #{to_boolean(attr 'revealjs_keyboard', true)},
+        // Enable the slide overview mode
+        overview: #{to_boolean(attr 'revealjs_overview', true)},
+        // Vertical centering of slides
+        center: #{to_boolean(attr 'revealjs_center', true)},
+        // Enables touch navigation on devices with touch input
+        touch: #{to_boolean(attr 'revealjs_touch', true)},
+        // Loop the presentation
+        loop: #{to_boolean(attr 'revealjs_loop', false)},
+        // Change the presentation direction to be RTL
+        rtl: #{to_boolean(attr 'revealjs_rtl', false)},
+        // Randomizes the order of slides each time the presentation loads
+        shuffle: #{to_boolean(attr 'revealjs_shuffle', false)},
+        // Turns fragments on and off globally
+        fragments: #{to_boolean(attr 'revealjs_fragments', true)},
+        // Flags if the presentation is running in an embedded mode,
+        // i.e. contained within a limited portion of the screen
+        embedded: #{to_boolean(attr 'revealjs_embedded', false)},
+        // Flags if we should show a help overlay when the questionmark
+        // key is pressed
+        help: #{to_boolean(attr 'revealjs_help', true)},
+        // Flags if speaker notes should be visible to all viewers
+        showNotes: #{to_boolean(attr 'revealjs_showNotes', false)},
+        // Global override for autolaying embedded media (video/audio/iframe)
+        // - null: Media will only autoplay if data-autoplay is present
+        // - true: All media will autoplay, regardless of individual setting
+        // - false: No media will autoplay, regardless of individual setting
+        autoPlayMedia: #{attr 'revealjs_autoPlayMedia', 'null'},
+        // Number of milliseconds between automatically proceeding to the
+        // next slide, disabled when set to 0, this value can be overwritten
+        // by using a data-autoslide attribute on your slides
+        autoSlide: #{attr 'revealjs_autoslide', 0},
+        // Stop auto-sliding after user input
+        autoSlideStoppable: #{to_boolean(attr 'revealjs_autoslidestoppable', true)},
+        // Enable slide navigation via mouse wheel
+        mouseWheel: #{to_boolean(attr 'revealjs_mousewheel', false)},
+        // Hides the address bar on mobile devices
+        hideAddressBar: #{to_boolean(attr 'revealjs_hideaddressbar', true)},
+        // Opens links in an iframe preview overlay
+        previewLinks: #{to_boolean(attr 'revealjs_previewlinks', false)},
+        // Theme (e.g., beige, black, league, night, serif, simple, sky, solarized, white)
+        // NOTE setting the theme in the config no longer works in reveal.js 3.x
+        //theme: Reveal.getQueryHash().theme || '#{attr 'revealjs_theme', 'black'}',
+        // Transition style (e.g., none, fade, slide, convex, concave, zoom)
+        transition: Reveal.getQueryHash().transition || '#{attr 'revealjs_transition', 'slide'}',
+        // Transition speed (e.g., default, fast, slow)
+        transitionSpeed: '#{attr 'revealjs_transitionspeed', 'default'}',
+        // Transition style for full page slide backgrounds (e.g., none, fade, slide, convex, concave, zoom)
+        backgroundTransition: '#{attr 'revealjs_backgroundtransition', 'fade'}',
+        // Number of slides away from the current that are visible
+        viewDistance: #{attr 'revealjs_viewdistance', 3},
+        // Parallax background image (e.g., "'https://s3.amazonaws.com/hakim-static/reveal-js/reveal-parallax-1.jpg'")
+        parallaxBackgroundImage: '#{attr 'revealjs_parallaxbackgroundimage', ''}',
+        // Parallax background size in CSS syntax (e.g., "2100px 900px")
+        parallaxBackgroundSize: '#{attr 'revealjs_parallaxbackgroundsize', ''}',
+
+        // The "normal" size of the presentation, aspect ratio will be preserved
+        // when the presentation is scaled to fit different resolutions. Can be
+        // specified using percentage units.
+        width: #{attr 'revealjs_width', 960},
+        height: #{attr 'revealjs_height', 700},
+
+        // Factor of the display size that should remain empty around the content
+        margin: #{attr 'revealjs_margin', 0.1},
+
+        // Bounds for smallest/largest possible scale to apply to content
+        minScale: #{attr 'revealjs_minscale', 0.2},
+        maxScale: #{attr 'revealjs_maxscale', 1.5},
+
+        // Optional libraries used to extend on reveal.js
+        dependencies: [
+            { src: '#{revealjsdir}/lib/js/classList.js', condition: function() { return !document.body.classList; } },
+            { src: '#{revealjsdir}/plugin/markdown/marked.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } },
+            { src: '#{revealjsdir}/plugin/markdown/markdown.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } },
+            #{(attr? 'source-highlighter', 'highlightjs') ? "{ src: '#{revealjsdir}/plugin/highlight/highlight.js', async: true, callback: function() { hljs.initHighlightingOnLoad(); } }," : nil}
+            { src: '#{revealjsdir}/plugin/zoom-js/zoom.js', async: true },
+            { src: '#{revealjsdir}/plugin/notes/notes.js', async: true }
+        ]
+      });
+    - unless (docinfo_content = (docinfo :footer, '.html')).empty?
+      =docinfo_content
diff --git a/tools/maven-revealjs-asciidoctor-templte/pom.xml b/tools/maven-revealjs-asciidoctor-templte/pom.xml
new file mode 100644
index 0000000..3035db1
--- /dev/null
+++ b/tools/maven-revealjs-asciidoctor-templte/pom.xml
@@ -0,0 +1,288 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>org.apache</groupId>
+        <artifactId>apache</artifactId>
+        <version>21</version>
+    </parent>
+
+    <groupId>org.apache.training</groupId>
+    <artifactId>presentation-template</artifactId>
+    <version>1.0.0-SNAPSHOT</version>
+    <packaging>war</packaging>
+
+    <name>Training: Tools: Slide Template: Asciidoc to reveal.js Maven example</name>
+    <description>An example project that demonstrates how to integrate convert Asciidoc to a reveal.js presentation with the Asciidoctor Maven plugin.</description>
+
+    <properties>
+        <project.slides.directory>${project.build.directory}/generated-slides</project.slides.directory>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+        <asciidoctor.maven.plugin.version>2.0.0-RC.1</asciidoctor.maven.plugin.version>
+        <asciidoctorj.version>2.0.0-RC.2</asciidoctorj.version>
+        <asciidoctorj.diagram.version>1.5.16</asciidoctorj.diagram.version>
+        <asciidoctorj.extensions-lab.version>1.0.0</asciidoctorj.extensions-lab.version>
+        <revealjs.version>3.7.0</revealjs.version>
+        <asciidoctor-revealjs.version>2.0.0</asciidoctor-revealjs.version>
+    </properties>
+
+    <build>
+        <plugins>
+            <!-- Check if all source files have the required apache license headers -->
+            <plugin>
+                <groupId>org.apache.rat</groupId>
+                <artifactId>apache-rat-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>license-check</id>
+                        <phase>verify</phase>
+                        <goals>
+                            <goal>check</goal>
+                        </goals>
+                    </execution>
+                </executions>
+                <configuration>
+                    <consoleOutput>true</consoleOutput>
+                    <excludes>
+                        <!-- TODO: This is a mofified version of an asciidoctor file ... nor sure we can stick an Apache Header on it -->
+                        <exclude>libs/docinfo-hack/document.html.slim</exclude>
+
+                        <!-- Maven related files -->
+                        <exclude>**/target/**</exclude>
+
+                        <!-- Eclipse related files -->
+                        <exclude>**/.project</exclude>
+                        <exclude>**/.settings/**</exclude>
+                        <exclude>**/.classpath</exclude>
+
+                        <!-- IntelliJ related files -->
+                        <exclude>**/.idea/**</exclude>
+                        <exclude>**/*.iml</exclude>
+
+                        <!-- Asciidoctor generated files -->
+                        <exclude>**/.asciidoctor/**</exclude>
+
+                        <!-- JSON doesn't like comments -->
+                        <exclude>**/*.json</exclude>
+                        <!-- Mermaid does't like comments -->
+                        <exclude>**/*.mmd</exclude>
+
+                        <!-- Output of the profiler maven extension -->
+                        <exclude>**/.profiler/**</exclude>
+                    </excludes>
+                </configuration>
+            </plugin>
+
+            <plugin>
+                <groupId>com.googlecode.maven-download-plugin</groupId>
+                <artifactId>download-maven-plugin</artifactId>
+                <version>1.4.1</version>
+                <executions>
+                    <execution>
+                        <id>install-asciidoctor-revealjs</id>
+                        <phase>generate-resources</phase>
+                        <goals>
+                            <goal>wget</goal>
+                        </goals>
+                        <configuration>
+                            <url>https://github.com/asciidoctor/asciidoctor-reveal.js/archive/v${asciidoctor-revealjs.version}.zip</url>
+                            <unpack>true</unpack>
+                            <outputFileName>asciidoctor-reveal.js-${asciidoctor-revealjs.version}.zip</outputFileName>
+                            <outputDirectory>${project.build.directory}</outputDirectory>
+                        </configuration>
+                    </execution>
+                    <execution>
+                        <id>install-revealjs</id>
+                        <phase>generate-resources</phase>
+                        <goals>
+                            <goal>wget</goal>
+                        </goals>
+                        <configuration>
+                            <url>https://github.com/hakimel/reveal.js/archive/${revealjs.version}.zip</url>
+                            <unpack>true</unpack>
+                            <outputFileName>reveal.js-${revealjs.version}.zip</outputFileName>
+                            <outputDirectory>${project.slides.directory}</outputDirectory>
+                        </configuration>
+                    </execution>
+                    <execution>
+                        <id>download-c3-css</id>
+                        <phase>generate-resources</phase>
+                        <goals>
+                            <goal>wget</goal>
+                        </goals>
+                        <configuration>
+                            <url>https://cdnjs.cloudflare.com/ajax/libs/c3/0.6.12/c3.min.css</url>
+                            <outputDirectory>${project.slides.directory}/css</outputDirectory>
+                        </configuration>
+                    </execution>
+                    <execution>
+                        <id>download-c3-js</id>
+                        <phase>generate-resources</phase>
+                        <goals>
+                            <goal>wget</goal>
+                        </goals>
+                        <configuration>
+                            <url>https://cdnjs.cloudflare.com/ajax/libs/c3/0.6.12/c3.min.js</url>
+                            <outputDirectory>${project.slides.directory}/js</outputDirectory>
+                        </configuration>
+                    </execution>
+                    <execution>
+                        <id>download-d3-js</id>
+                        <phase>generate-resources</phase>
+                        <goals>
+                            <goal>wget</goal>
+                        </goals>
+                        <configuration>
+                            <url>https://cdnjs.cloudflare.com/ajax/libs/d3/5.7.0/d3.min.js</url>
+                            <outputDirectory>${project.slides.directory}/js</outputDirectory>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-resources-plugin</artifactId>
+                <version>3.1.0</version>
+                <executions>
+                    <execution>
+                        <id>copy-resources</id>
+                        <phase>generate-resources</phase>
+                        <goals>
+                            <goal>copy-resources</goal>
+                        </goals>
+                        <configuration>
+                            <outputDirectory>${project.build.directory}</outputDirectory>
+                            <resources>
+                                <!-- Copy the normal resources into the root of the slides directory -->
+                                <resource>
+                                    <directory>src/main/resources</directory>
+                                    <targetPath>${project.slides.directory}</targetPath>
+                                </resource>
+                                <!-- Copy our css-theme to the reveal.js theme directory -->
+                                <resource>
+                                    <directory>src/main/theme</directory>
+                                    <filtering>true</filtering>
+                                    <targetPath>${project.slides.directory}/reveal.js-${revealjs.version}/css/theme</targetPath>
+                                </resource>
+                                <!-- Patch one of the "slim" files as the 'docinfo' integration doesn't seem to work -->
+                                <resource>
+                                    <directory>libs/docinfo-hack</directory>
+                                    <targetPath>${project.build.directory}/asciidoctor-reveal.js-${asciidoctor-revealjs.version}/templates</targetPath>
+                                </resource>
+                            </resources>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>org.asciidoctor</groupId>
+                <artifactId>asciidoctor-maven-plugin</artifactId>
+                <version>${asciidoctor.maven.plugin.version}</version>
+                <executions>
+                    <execution>
+                        <id>generate-slides</id>
+                        <phase>process-resources</phase>
+                        <goals>
+                            <goal>process-asciidoc</goal>
+                        </goals>
+                        <configuration>
+                            <!-- Tell asciidoctor to use the reveal.js backend and not the default html -->
+                            <backend>revealjs</backend>
+                            <!-- Configure where are all the asciidoc source files located -->
+                            <sourceDirectory>src/main/asciidoc</sourceDirectory>
+                            <!-- Configure the target director to where will the output be generated -->
+                            <outputDirectory>${project.slides.directory}</outputDirectory>
+                            <!-- Enable optional modules for generating diagrams and charts -->
+                            <requires>
+                                <require>asciidoctor-diagram</require>
+                                <!--require>chart-block-macro</require-->
+                            </requires>
+                            <!-- This has to point to the asciidoctor-revealjs directory which contains all the "slim" files -->
+                            <templateDir>${project.build.directory}/asciidoctor-reveal.js-${asciidoctor-revealjs.version}/templates</templateDir>
+                            <attributes>
+                                <!--imagesdir></imagesdir-->
+                                <!--
+                                    Tell the system the relative path to the reveal.js files
+                                    inside the generated-slides directory.
+                                -->
+                                <revealjsdir>reveal.js-${revealjs.version}</revealjsdir>
+                                <!--
+                                    Use our custom theme, which is defined by src/main/theme/apache.css
+                                    and copied inside the reveal.js installation by the resources plugin a few lines
+                                    up inside this pom.
+                                -->
+                                <revealjs_theme>apache</revealjs_theme>
+                                <!-- Some basic settings -->
+                                <revealjs_transition>linear</revealjs_transition>
+                                <project-version>${project.version}</project-version>
+                                <source-highlighter>highlightjs</source-highlighter>
+                                <!--highlightjs-theme>https://raw.githubusercontent.com/isagalaev/highlight.js/master/src/styles/arduino-light.css</highlightjs-theme-->
+                                <erd>${basedir}/libs/third-party/erd/.stack-work/dist/x86_64-osx/Cabal-2.2.0.1/build/erd/erd</erd>
+                                <!--convert>${basedir}/libs/third-party/ImageMagick-7.0.8/bin/convert</convert>
+                                <identify>${basedir}/libs/third-party/ImageMagick-7.0.8/bin/identify</identify-->
+                                <mermaid>${basedir}/libs/third-party/node_modules/.bin/mmdc</mermaid>
+                                <phantomjs>${basedir}/libs/third-party/phantomjs-2.1.1-macosx/bin/phantomjs</phantomjs>
+                                <svgbob>/Users/christofer.dutz/.cargo/bin/svgbob</svgbob>
+                                <vg2svg>${basedir}/libs/third-party/node_modules/.bin/vg2svg</vg2svg>
+                            </attributes>
+                        </configuration>
+                    </execution>
+                </executions>
+                <dependencies>
+                    <dependency>
+                        <groupId>org.asciidoctor</groupId>
+                        <artifactId>asciidoctorj</artifactId>
+                        <version>${asciidoctorj.version}</version>
+                    </dependency>
+                    <dependency>
+                        <groupId>org.asciidoctor</groupId>
+                        <artifactId>asciidoctorj-diagram</artifactId>
+                        <version>${asciidoctorj.diagram.version}</version>
+                    </dependency>
+                    <!--dependency>
+                        <groupId>org.asciidoctor</groupId>
+                        <artifactId>asciidoctorj-extensions-lab</artifactId>
+                        <version>${asciidoctorj.extensions-lab.version}</version>
+                        <!- Referenced locally till it's officially released ->
+                        <scope>system</scope>
+                        <systemPath>${basedir}/libs/asciidoctorj-extensions-lab-${asciidoctorj.extensions-lab.version}.jar</systemPath>
+                    </dependency-->
+                </dependencies>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-war-plugin</artifactId>
+                <version>3.2.2</version>
+                <configuration>
+                    <failOnMissingWebXml>false</failOnMissingWebXml>
+                    <warSourceDirectory>${project.build.directory}/generated-slides</warSourceDirectory>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.eclipse.jetty</groupId>
+                <artifactId>jetty-maven-plugin</artifactId>
+                <version>9.4.14.v20181114</version>
+            </plugin>
+        </plugins>
+    </build>
+</project>
diff --git a/tools/pom.xml b/tools/maven-revealjs-asciidoctor-templte/src/main/asciidoc/_settings.adoc
similarity index 57%
copy from tools/pom.xml
copy to tools/maven-revealjs-asciidoctor-templte/src/main/asciidoc/_settings.adoc
index bcdb10f..261a396 100644
--- a/tools/pom.xml
+++ b/tools/maven-revealjs-asciidoctor-templte/src/main/asciidoc/_settings.adoc
@@ -1,5 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
+////
 
   Licensed to the Apache Software Foundation (ASF) under one or more
   contributor license agreements.  See the NOTICE file distributed with
@@ -16,21 +15,22 @@
   See the License for the specific language governing permissions and
   limitations under the License.
 
--->
-<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-
-  <modelVersion>4.0.0</modelVersion>
-
-  <groupId>org.apache.training</groupId>
-  <artifactId>training-tools</artifactId>
-  <version>0.4.0-SNAPSHOT</version>
-  <packaging>pom</packaging>
-
-  <name>Training: Tools</name>
-
-  <modules>
-    <!--module>maven-revealjs-asciidoctor-templte</module-->
-  </modules>
-
-</project>
+////
+
+:goto:
+:menu:
+:navigation:
+:status:
+:arrows:
+:revealjs_theme: cc_black
+:revealjs_progress: true
+:revealjs_slidenumber: true
+:pdf-page-size: A4
+:revealjs_center: false
+:revealjs_history: true
+:icons: font
+:imagesdir: images
+:sourcedir: ../java
+:title-slide-background-image: background-dark-orig.jpg
+:idprefix:
+:idseparator: -
diff --git a/tools/maven-revealjs-asciidoctor-templte/src/main/asciidoc/diagrams/mermaid-flowchart-test.mmd b/tools/maven-revealjs-asciidoctor-templte/src/main/asciidoc/diagrams/mermaid-flowchart-test.mmd
new file mode 100644
index 0000000..d5bf6cb
--- /dev/null
+++ b/tools/maven-revealjs-asciidoctor-templte/src/main/asciidoc/diagrams/mermaid-flowchart-test.mmd
@@ -0,0 +1,5 @@
+graph TD;
+    A-->B;
+    A-->C;
+    B-->D;
+    C-->D;
diff --git a/tools/maven-revealjs-asciidoctor-templte/src/main/asciidoc/index.adoc b/tools/maven-revealjs-asciidoctor-templte/src/main/asciidoc/index.adoc
new file mode 100644
index 0000000..da37ebd
--- /dev/null
+++ b/tools/maven-revealjs-asciidoctor-templte/src/main/asciidoc/index.adoc
@@ -0,0 +1,764 @@
+////
+
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+
+////
+
+include::_settings.adoc[]
+:presenter_name: Some Cool Guy
+:presenter_company: Apache Software Foundation
+
+== Example Presentation
+Doc Writer <mr...@apache.org>
+2014-09-09
+:revnumber: {project-version}
+:example-caption!:
+
+== Introduction
+
+[%step]
+* This is a presentation for an example project.
+* This project does something.
+* We just haven't decided what that is yet.
+
+== Speaker Notes
+
+Press the `*s*` key to access speaker notes.
+
+[NOTE.speaker]
+--
+You've unlocked the super secret notes area.
+Neat huh?
+--
+
+== Blank screen
+
+You can press `*b*` or `*.*` to blank your current screen.
+
+Hit it again to bring it back.
+
+== Overview
+
+Press the `*esc*` key to get an overview of your slides.
+
+== Attributes
+
+Press the down arrow key to see the next sub-slide.
+
+=== Attributes Part 1
+.Built-in
+asciidoctor-version:: {asciidoctor-version}
+safe-mode-name:: {safe-mode-name}
+docdir:: {docdir}
+docfile:: {docfile}
+imagesdir:: {imagesdir}
+
+=== Attributes Part 2
+.Custom
+project-version:: {project-version}
+sourcedir:: {sourcedir}
+
+== Including documents from subdir
+
+.include::subdir/_b.adoc[]
+
+include::subdir/_b.adoc[]
+
+== Images
+
+[.thumb]
+image::logo-and-name-white.png[scaledwidth=75%]
+
+== Videos
+
+Play videos from Youtube, or locally
+
+video::BKorP55Aqvg[youtube, width=640, height=480]
+
+== Lists
+
+Asciidoctor allows a wide variety of list option.
+
+For details see the documentation starting at: http://asciidoctor.org/docs/user-manual/#unordered-lists
+
+Press the down arrow key to see the some examples.
+
+=== Unordered List
+
+* Protons
+* Electrons
+* Neutrons
+
+=== Ordered List
+
+. Protons
+. Electrons
+. Neutrons
+
+=== Nested List
+
+Nest lists, by duplicating the list-char
+
+* Protons
+** Electrons
+* Neutrons
+
+== Tables
+
+[cols="2*", options="header"]
+|===
+| Header A | Header B
+| Cell A1 | Cell B1
+| Cell A2 | Cell B2
+| Cell A3 | Cell B3
+|===
+
+== Source Code
+
+[source,java]
+.Java code from project
+----
+include::{sourcedir}/example/StringUtils.java[tags=contains,indent=0]
+----
+
+== Diagrams
+
+Press the down arrow key to see the different types of diagrams
+
+=== Ditaa Diagram
+
+[ditaa,asciidoctor-diagram-process]
+....
+                   +-------------+
+                   | Asciidoctor |-------+
+                   |   diagram   |       |
+                   +-------------+       | PNG out
+                       ^                 |
+                       | ditaa in        |
+                       |                 v
+ +--------+   +--------+----+    /---------------\
+ |        |---+ Asciidoctor +--->|               |
+ |  Text  |   +-------------+    |   Beautiful   |
+ |Document|   |   !magic!   |    |    Output     |
+ |     {d}|   |             |    |               |
+ +---+----+   +-------------+    \---------------/
+     :                                   ^
+     |          Lots of work             |
+     +-----------------------------------+
+....
+
+=== PlantUML Diagram
+
+[plantuml,auth-protocol]
+....
+Alice -> Bob: Authentication Request
+Bob --> Alice: Authentication Response
+
+Alice -> Bob: Another authentication Request
+Alice <-- Bob: another authentication Response
+....
+
+=== GraphVIZ Diagram
+
+[graphviz, dot-example, svg]
+----
+digraph g {
+    a -> b
+    b -> c
+    c -> d
+    d -> a
+}
+----
+
+=== Seqdag Diagram
+
+[seqdiag,s7-communication,svg]
+....
+{
+    A -> B -> C;
+         B -> D;
+}
+....
+
+=== Blockdiag Diagram
+
+[blockdiag,blockdiag-test]
+....
+{
+   A -> B -> C -> D;
+   A -> E -> F -> G;
+}
+....
+
+=== Actdiag Diagram
+
+[actdiag,actdiag-test]
+....
+{
+  write -> convert -> image
+
+  lane user {
+     label = "User"
+     write [label = "Writing reST"];
+     image [label = "Get diagram IMAGE"];
+  }
+  lane actdiag {
+     convert [label = "Convert reST to Image"];
+  }
+}
+....
+
+=== Nwdiag Diagram
+
+[nwdiag,nwdiag-test]
+....
+{
+  network dmz {
+      address = "210.x.x.x/24"
+
+      web01 [address = "210.x.x.1"];
+      web02 [address = "210.x.x.2"];
+  }
+  network internal {
+      address = "172.x.x.x/24";
+
+      web01 [address = "172.x.x.1"];
+      web02 [address = "172.x.x.2"];
+      db01;
+      db02;
+  }
+}
+....
+
+=== Rackdiag Diagram
+
+[rackdiag,rackdiag-test]
+....
+{
+  // Change order of rack-number as ascending
+  ascending;
+
+  // define height of rack
+  12U;
+
+  // define description of rack
+  description = "Tokyo/1234 East";
+
+  // define rack units
+  1: UPS [2U];   // define height of unit
+  3: DB Server [5kg]  // define weight of unit
+  4: Web Server [0.5A]  // define ampere of unit
+  5: Web Server
+  6: Web Server
+  7: Load Balancer
+  8: L3 Switch
+}
+....
+
+=== Packetdiag Diagram
+
+[packetdiag,packetdiag-test,svg]
+....
+{
+  colwidth = 32
+  node_height = 72
+
+  0-15: Source Port
+  16-31: Destination Port
+  32-63: Sequence Number
+  64-95: Acknowledgment Number
+  96-99: Data Offset
+  100-105: Reserved
+  106: URG [rotate = 270]
+  107: ACK [rotate = 270]
+  108: PSH [rotate = 270]
+  109: RST [rotate = 270]
+  110: SYN [rotate = 270]
+  111: FIN [rotate = 270]
+  112-127: Window
+  128-143: Checksum
+  144-159: Urgent Pointer
+  160-191: (Options and Padding)
+  192-223: data [colheight = 3]
+}
+....
+
+=== Meme Diagram
+
+meme::../resources/images/Yoda.png[May the Source,Be With You]
+
+=== Entity Relation Diagram
+
+[erd,erd-test,svg]
+....
+[Person]
+*name
+height
+weight
++birth_location_id
+
+[Location]
+*id
+city
+state
+country
+
+# Cardinality    Syntax
+# 0 or 1         ?
+# exactly 1      1
+# 0 or more      *
+# 1 or more      +
+Person *--1 Location
+....
+
+[NOTE.speaker]
+--
+--
+
+////
+=== Mermaid: Flowchart
+
+mermaid::diagrams/mermaid-flowchart-test.mmd[png]
+
+[NOTE.speaker]
+--
+--
+
+=== Mermaid: Sequence Diagram
+
+[mermaid,"mermaid-sequence-diagram-test",svg]
+....
+sequenceDiagram
+    participant Alice
+    participant Bob
+    Alice->John: Hello John, how are you?
+    loop Healthcheck
+        John->John: Fight against hypochondria
+    end
+    Note right of John: Rational thoughts <br/>prevail...
+    John-->Alice: Great!
+    John->Bob: How about you?
+    Bob-->John: Jolly good!
+....
+
+=== Mermaid: Gant Diagram
+
+[mermaid,mermaid-gant-diagram-test,svg]
+....
+gantt
+        dateFormat  YYYY-MM-DD
+        title Adding GANTT diagram functionality to mermaid
+        section A section
+        Completed task            :done,    des1, 2014-01-06,2014-01-08
+        Active task               :active,  des2, 2014-01-09, 3d
+        Future task               :         des3, after des2, 5d
+        Future task2               :         des4, after des3, 5d
+        section Critical tasks
+        Completed task in the critical line :crit, done, 2014-01-06,24h
+        Implement parser and jison          :crit, done, after des1, 2d
+        Create tests for parser             :crit, active, 3d
+        Future task in critical line        :crit, 5d
+        Create tests for renderer           :2d
+        Add to mermaid                      :1d
+....
+////
+
+=== SVGBob: Mindmap
+
+[svgbob,svgbob-mindmap-test,svg]
+....
+                                            .-->  Alpha
+                                           /
+                                          .---->  Initial Release
+          Planning *-------.             /         \
+                            \           /           '---> Patch 1
+      Initial research       \         /             \
+                *             \       /               '-->  Patch 2
+                 \             \     .---------> Beta
+                  \             \   /
+                   \             o o                      _______
+                    \          .---. o--.___             /       \
+                     '------> (     )       '----*--->  . Release .
+                               `---' o                   \_______/
+                               o  o o \
+                              /    \ \ \
+                          .--'      \ \ \
+                         /           \ \ '----+->  Push backs
+                        .             \ \      \
+                       /|              \ \      '----> Setbacks
+                      / .               \ \
+                     V /|                \ '-----> Reception
+                Team  / .                 \
+                     v /|                  \
+             Worklaod / .                   '-->> Career change
+                     V /
+                 PTO  /
+                     V
+                 Bug
+....
+
+=== SVGBob: Circuit Diagram
+
+[svgbob,svgbob-circuit-diagram-test,svg]
+....
++10-15V           ___0,047R
+      *------o------o-|___|-o--o---------o----o-------.
+             |      |       |  |         |    |       |
+            ---     |       | .+.        |    |       |
+      470uF ###     |       | | | 2k2    |    |       |
+             | +    |       | | |        |    |      .+.
+      *------o      '--.    | '+'       .+.   |      '-'
+             |         |6   |7 |8    1k | |   |       |
+            GND      .-+----+--+--.     | |   |       |
+                     |            |     '+'   |       |
+                     |            |1     |  |/  BC    |
+                     |            +------o--+   547   |
+                     |            |      |  |`>       |
+                     |            |     ,+.   |       |
+                     |            | 220R| |   o----||-+  IRF9Z34
+                     |            |     | |   |    |+->
+                     |  MC34063   |     `+'   |    ||-+
+                     |            |      |    |       |  BYV29     -12V6
+                     |            |      '----'       o--|<-o----o--X OUT
+                     |            |2                  |     |    |
+                     |            |--o                C|    |    |
+                     |            | GND         30uH  C|    |   --- 470
+                     |            |3      1nF         C|    |   ###  uF
+                     |            |-------||--.       |     |    | +
+                     '-----+----+-'           |      GND    |   GND
+                          5|   4|             |             |
+                           |    '-------------o-------------o
+                           |                           ___  |
+                           '------/\/\/------------o--|___|-'
+                                                   |       1k0
+                                                  .+.
+                                                  | | 5k6 + 3k3
+                                                  | | in Serie
+                                                  '+'
+                                                   |
+                                                  GND
+....
+
+=== Syntrax
+
+[syntrax,syntrax-test,svg]
+....
+indentstack(10,
+  line(opt('-'), choice('0', line('1-9', loop(None, '0-9'))),
+    opt('.', loop('0-9', None))),
+
+  line(opt(choice('e', 'E'), choice(None, '+', '-'), loop('0-9', None)))
+)
+....
+
+////
+=== Umlet
+
+[umlet,umlet-test,svg]
+....
+<?xml version="1.0" encoding="UTF-8"?><umlet_diagram><element><type>com.umlet.element.base.Relation</type><coordinates><x>739</x><y>16</y><w>232</w><h>264</h></coordinates><panel_attributes>lt=&lt;-
+when(spidersensor="rotate")
+/block spider</panel_attributes><additional_attributes>161;244;161;34;71;34;71;74</additional_attributes></element><element><type>com.umlet.element.custom.FinalState</type><coordinates><x>890</x><y>260</y><w>20</w><h>20</h></coordinates><panel_attributes></panel_attributes><additional_attributes>transparentSelection=false</additional_attributes></element><element><type>com.umlet.element.base.Relation</type><coordinates><x>750</x><y>170</y><w>160</w><h>137</h></coordinates><panel_attribut [...]
+after (10s)
+/ block spider</panel_attributes><additional_attributes>140;100;66;100;66;20</additional_attributes></element><element><type>com.umlet.element.custom.State</type><coordinates><x>340</x><y>420</y><w>100</w><h>40</h></coordinates><panel_attributes>wait</panel_attributes><additional_attributes>transparentSelection=false</additional_attributes></element><element><type>com.umlet.element.custom.HistoryState</type><coordinates><x>230</x><y>440</y><w>20</w><h>20</h></coordinates><panel_attribute [...]
+restart</panel_attributes><additional_attributes>20;34;110;34</additional_attributes></element><element><type>com.umlet.element.base.Relation</type><coordinates><x>270</x><y>396</y><w>90</w><h>54</h></coordinates><panel_attributes>lt=&lt;-
+pause</panel_attributes><additional_attributes>70;34;20;34</additional_attributes></element><element><type>com.umlet.element.custom.FinalState</type><coordinates><x>90</x><y>400</y><w>20</w><h>20</h></coordinates><panel_attributes></panel_attributes><additional_attributes>transparentSelection=false</additional_attributes></element><element><type>com.umlet.element.base.Relation</type><coordinates><x>46</x><y>256</y><w>114</w><h>164</h></coordinates><panel_attributes>lt=&lt;-
+after (10s)
+/timeout</panel_attributes><additional_attributes>54;144;54;34;94;34</additional_attributes></element><element><type>com.umlet.element.base.Relation</type><coordinates><x>230</x><y>110</y><w>190</w><h>170</h></coordinates><panel_attributes>lt=&lt;-
+timeout</panel_attributes><additional_attributes>20;150;110;150;110;20;170;20</additional_attributes></element><element><type>com.umlet.element.custom.State</type><coordinates><x>700</x><y>90</y><w>180</w><h>100</h></coordinates><panel_attributes>accept
+boarding pass
+--
+entry/ release card
+do/release spider</panel_attributes><additional_attributes>transparentSelection=true</additional_attributes></element><element><type>com.umlet.element.base.Relation</type><coordinates><x>540</x><y>140</y><w>205</w><h>100</h></coordinates><panel_attributes>lt=&lt;-
+[passenger booked]</panel_attributes><additional_attributes>160;20;120;80;20;80</additional_attributes></element><element><type>com.umlet.element.base.Relation</type><coordinates><x>450</x><y>210</y><w>239</w><h>190</h></coordinates><panel_attributes>lt=&lt;-
+[passenger not booked]</panel_attributes><additional_attributes>219;170;99;170;99;20</additional_attributes></element><element><type>com.umlet.element.custom.State</type><coordinates><x>670</x><y>350</y><w>120</w><h>50</h></coordinates><panel_attributes>reject
+boarding pass</panel_attributes><additional_attributes>transparentSelection=false</additional_attributes></element><element><type>com.umlet.element.base.Relation</type><coordinates><x>480</x><y>130</y><w>142</w><h>100</h></coordinates><panel_attributes>lt=&lt;-
+result of search</panel_attributes><additional_attributes>71;80;71;20</additional_attributes></element><element><type>com.umlet.element.base.Relation</type><coordinates><x>270</x><y>70</y><w>150</w><h>40</h></coordinates><panel_attributes>lt=&lt;-</panel_attributes><additional_attributes>130;20;20;20</additional_attributes></element><element><type>com.umlet.element.custom.ThreeWayRelation</type><coordinates><x>540</x><y>210</y><w>20</w><h>20</h></coordinates><panel_attributes></panel_att [...]
+--</panel_attributes><additional_attributes>transparentSelection=true</additional_attributes></element><element><type>com.umlet.element.custom.State</type><coordinates><x>400</x><y>60</y><w>180</w><h>90</h></coordinates><panel_attributes>check passenger
+--
+entry/start search
+do/blink lamp</panel_attributes><additional_attributes>transparentSelection=true</additional_attributes></element><element><type>com.umlet.element.custom.FinalState</type><coordinates><x>170</x><y>410</y><w>20</w><h>20</h></coordinates><panel_attributes></panel_attributes><additional_attributes>transparentSelection=false</additional_attributes></element><element><type>com.umlet.element.custom.State</type><coordinates><x>150</x><y>240</y><w>100</w><h>40</h></coordinates><panel_attributes>read
+passenger ID</panel_attributes><additional_attributes>transparentSelection=false</additional_attributes></element><element><type>com.umlet.element.custom.State</type><coordinates><x>150</x><y>330</y><w>100</w><h>40</h></coordinates><panel_attributes>identify
+passenger</panel_attributes><additional_attributes>transparentSelection=false</additional_attributes></element><element><type>com.umlet.element.base.Relation</type><coordinates><x>160</x><y>260</y><w>40</w><h>90</h></coordinates><panel_attributes>lt=&lt;-</panel_attributes><additional_attributes>20;70;20;20</additional_attributes></element><element><type>com.umlet.element.base.Relation</type><coordinates><x>160</x><y>100</y><w>40</w><h>70</h></coordinates><panel_attributes>lt=&lt;-</pane [...]
+[valid]</panel_attributes><additional_attributes>39;70;39;20</additional_attributes></element><element><type>com.umlet.element.custom.State</type><coordinates><x>150</x><y>150</y><w>100</w><h>40</h></coordinates><panel_attributes>check
+validity</panel_attributes><additional_attributes>transparentSelection=false</additional_attributes></element><element><type>com.umlet.element.custom.InitialState</type><coordinates><x>170</x><y>100</y><w>20</w><h>20</h></coordinates><panel_attributes></panel_attributes><additional_attributes>transparentSelection=false</additional_attributes></element></umlet_diagram>
+....
+////
+
+=== Vega
+
+[vega,vega-test, svg]
+....
+{
+  "$schema": "https://vega.github.io/schema/vega/v4.json",
+  "width": 500,
+  "padding": 5,
+
+  "config": {
+    "axisBand": {
+      "bandPosition": 1,
+      "tickExtra": true,
+      "tickOffset": 0
+    }
+  },
+
+  "signals": [
+    { "name": "fields",
+      "value": ["petalWidth", "petalLength", "sepalWidth", "sepalLength"] },
+    { "name": "plotWidth", "value": 60 },
+    { "name": "height", "update": "(plotWidth + 10) * length(fields)"}
+  ],
+
+  "data": [
+    {
+      "name": "iris",
+      "url": "data/iris.json",
+      "transform": [
+        {
+          "type": "fold",
+          "fields": {"signal": "fields"},
+          "as": ["organ", "value"]
+        }
+      ]
+    }
+  ],
+
+  "scales": [
+    {
+      "name": "layout",
+      "type": "band",
+      "range": "height",
+      "domain": {"data": "iris", "field": "organ"}
+    },
+    {
+      "name": "xscale",
+      "type": "linear",
+      "range": "width", "round": true,
+      "domain": {"data": "iris", "field": "value"},
+      "zero": true, "nice": true
+    }
+  ],
+
+  "axes": [
+    {"orient": "bottom", "scale": "xscale", "zindex": 1},
+    {"orient": "left", "scale": "layout", "tickCount": 5, "zindex": 1}
+  ],
+
+  "marks": [
+    {
+      "type": "group",
+      "from": {
+        "facet": {
+          "data": "iris",
+          "name": "organs",
+          "groupby": "organ"
+        }
+      },
+
+      "encode": {
+        "enter": {
+          "yc": {"scale": "layout", "field": "organ", "band": 0.5},
+          "height": {"signal": "plotWidth"},
+          "width": {"signal": "width"}
+        }
+      },
+
+      "data": [
+        {
+          "name": "summary",
+          "source": "organs",
+          "transform": [
+            {
+              "type": "aggregate",
+              "fields": ["value", "value", "value", "value", "value"],
+              "ops": ["min", "q1", "median", "q3", "max"],
+              "as": ["min", "q1", "median", "q3", "max"]
+            }
+          ]
+        }
+      ],
+
+      "marks": [
+        {
+          "type": "rect",
+          "from": {"data": "summary"},
+          "encode": {
+            "enter": {
+              "fill": {"value": "black"},
+              "height": {"value": 1}
+            },
+            "update": {
+              "yc": {"signal": "plotWidth / 2", "offset": -0.5},
+              "x": {"scale": "xscale", "field": "min"},
+              "x2": {"scale": "xscale", "field": "max"}
+            }
+          }
+        },
+        {
+          "type": "rect",
+          "from": {"data": "summary"},
+          "encode": {
+            "enter": {
+              "fill": {"value": "steelblue"},
+              "cornerRadius": {"value": 4}
+            },
+            "update": {
+              "yc": {"signal": "plotWidth / 2"},
+              "height": {"signal": "plotWidth / 2"},
+              "x": {"scale": "xscale", "field": "q1"},
+              "x2": {"scale": "xscale", "field": "q3"}
+            }
+          }
+        },
+        {
+          "type": "rect",
+          "from": {"data": "summary"},
+          "encode": {
+            "enter": {
+              "fill": {"value": "aliceblue"},
+              "width": {"value": 2}
+            },
+            "update": {
+              "yc": {"signal": "plotWidth / 2"},
+              "height": {"signal": "plotWidth / 2"},
+              "x": {"scale": "xscale", "field": "median"}
+            }
+          }
+        }
+      ]
+    }
+  ]
+}
+....
+
+== Embedded HTML/JavaScript
+
+++++
+  <div id="iot-riskks1"></div>
+  <script type="text/javascript">
+c3.generate({
+  bindto: '#iot-riskks1',
+  size: { height: 500, width: 1000 },
+  data: {
+    x: 'x',
+    columns: [
+        ['x','Security','IT/OT Integration','Unclear ROI', 'Technical Expertise', 'Interoperability', 'Data Portability', 'Vendor Risk', 'Transition Risk', 'Legal/regulatory issues', 'Network constraints', 'Vendor lock-in'],
+        ['%',43, 30, 28, 26, 26, 24, 22, 22, 22, 21, 18]
+    ],
+    type: 'bar'
+  },
+  axis: {
+    rotated: true,
+    x: {
+      type: 'category',
+      tick: {
+        rotate: -90
+      }
+    }
+  }
+});
+</script>
+++++
+
+== Going crazy (Click in the middle of the screen)
+
+++++
+
+<style>
+.fade {
+  position: relative;
+  width: 100%;
+  min-height: 60vh;
+  top: -25px;
+  background-image: linear-gradient(0deg, transparent, black 75%);
+  z-index: 1;
+}
+
+.star-wars {
+  display: flex;
+  justify-content: center;
+  position: relative;
+  height: 800px;
+  color: #feda4a;
+  font-family: 'Pathway Gothic One', sans-serif;
+  font-size: 500%;
+  font-weight: 600;
+  letter-spacing: 6px;
+  line-height: 150%;
+  perspective: 600px;
+  text-align: justify;
+}
+
+.crawl {
+  position: relative;
+  top: 9999px;
+  transform-origin: 50% 100%;
+  animation: crawl 120s linear;
+}
+
+.crawl > .title {
+  font-size: 90%;
+  text-align: center;
+}
+
+.crawl > .title h1 {
+  margin: 0 0 100px;
+  text-transform: uppercase;
+}
+
+.hide {
+  display: none;
+}
+
+@keyframes crawl {
+  0% {
+    top: 0;
+    transform: rotateX(20deg)  translateZ(0);
+  }
+  100% {
+    top: -6000px;
+    transform: rotateX(25deg) translateZ(-2500px);
+  }
+}
+</style>
+
+<script type="text/javascript">
+  function start(){
+    document.getElementById('animation').className ='crawl';
+  }
+</script>
+
+<section class="star-wars" onclick="start()">
+  <div id="animation" class="hide">
+
+    <div class="title">
+      <p>Episode IV</p>
+      <h1>A New Hope</h1>
+      <h3>Industry 4.0 done our way</h3>
+    </div>
+
+    <p>It is a period of technological change. Rebel Industry 4.0 open-source software solutions, striking from hidden bases, have won their first victories against the evil proprietary Industrial Empire.</p>
+    <p>During the battle, Rebel spies managed to reverse engineer secret industrial protocols to the Empire’s ultimate weapons, the industrial Programmable Logic Controllers, almost unprotected pieces of hardware with enough power to destroy an entire planet.</p>
+    <p>Pursued by the Empire’s sinister agents, Christofer races to Cologne aboard his ICE, custodian of his plans to revolutionize the way we are building Industry 4.0 applications, that can free all companies and restore freedom to the industry …</p>
+
+  </div>
+
+</section>
+++++
+
+
+
+
diff --git a/tools/pom.xml b/tools/maven-revealjs-asciidoctor-templte/src/main/asciidoc/subdir/_b.adoc
similarity index 57%
copy from tools/pom.xml
copy to tools/maven-revealjs-asciidoctor-templte/src/main/asciidoc/subdir/_b.adoc
index bcdb10f..cb5008c 100644
--- a/tools/pom.xml
+++ b/tools/maven-revealjs-asciidoctor-templte/src/main/asciidoc/subdir/_b.adoc
@@ -1,5 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
+////
 
   Licensed to the Apache Software Foundation (ASF) under one or more
   contributor license agreements.  See the NOTICE file distributed with
@@ -16,21 +15,12 @@
   See the License for the specific language governing permissions and
   limitations under the License.
 
--->
-<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+////
 
-  <modelVersion>4.0.0</modelVersion>
+content from _src/docs/asciidoc/subdir/_b.adoc_.
 
-  <groupId>org.apache.training</groupId>
-  <artifactId>training-tools</artifactId>
-  <version>0.4.0-SNAPSHOT</version>
-  <packaging>pom</packaging>
-
-  <name>Training: Tools</name>
-
-  <modules>
-    <!--module>maven-revealjs-asciidoctor-templte</module-->
-  </modules>
-
-</project>
+.include::_c.adoc[]
+[example]
+--
+include::_c.adoc[]
+--
diff --git a/tools/pom.xml b/tools/maven-revealjs-asciidoctor-templte/src/main/asciidoc/subdir/_c.adoc
similarity index 57%
copy from tools/pom.xml
copy to tools/maven-revealjs-asciidoctor-templte/src/main/asciidoc/subdir/_c.adoc
index bcdb10f..447ae42 100644
--- a/tools/pom.xml
+++ b/tools/maven-revealjs-asciidoctor-templte/src/main/asciidoc/subdir/_c.adoc
@@ -1,5 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
+////
 
   Licensed to the Apache Software Foundation (ASF) under one or more
   contributor license agreements.  See the NOTICE file distributed with
@@ -16,21 +15,6 @@
   See the License for the specific language governing permissions and
   limitations under the License.
 
--->
-<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+////
 
-  <modelVersion>4.0.0</modelVersion>
-
-  <groupId>org.apache.training</groupId>
-  <artifactId>training-tools</artifactId>
-  <version>0.4.0-SNAPSHOT</version>
-  <packaging>pom</packaging>
-
-  <name>Training: Tools</name>
-
-  <modules>
-    <!--module>maven-revealjs-asciidoctor-templte</module-->
-  </modules>
-
-</project>
+content from _src/docs/asciidoc/subdir/_c.adoc_.
diff --git a/tools/maven-revealjs-asciidoctor-templte/src/main/java/example/StringUtils.java b/tools/maven-revealjs-asciidoctor-templte/src/main/java/example/StringUtils.java
new file mode 100644
index 0000000..6b41228
--- /dev/null
+++ b/tools/maven-revealjs-asciidoctor-templte/src/main/java/example/StringUtils.java
@@ -0,0 +1,27 @@
+/*
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+*/
+package example;
+
+public class StringUtils {
+    // tag::contains[]
+    public boolean contains(String haystack, String needle) {
+        return haystack.contains(needle);
+    }
+    // end::contains[]
+}
diff --git a/tools/maven-revealjs-asciidoctor-templte/src/main/resources/images/Yoda.png b/tools/maven-revealjs-asciidoctor-templte/src/main/resources/images/Yoda.png
new file mode 100644
index 0000000..a2298d7
Binary files /dev/null and b/tools/maven-revealjs-asciidoctor-templte/src/main/resources/images/Yoda.png differ
diff --git a/tools/maven-revealjs-asciidoctor-templte/src/main/resources/images/logo-apache.png b/tools/maven-revealjs-asciidoctor-templte/src/main/resources/images/logo-apache.png
new file mode 100644
index 0000000..44c337b
Binary files /dev/null and b/tools/maven-revealjs-asciidoctor-templte/src/main/resources/images/logo-apache.png differ
diff --git a/tools/maven-revealjs-asciidoctor-templte/src/main/theme/apache.css b/tools/maven-revealjs-asciidoctor-templte/src/main/theme/apache.css
new file mode 100644
index 0000000..919ce6f
--- /dev/null
+++ b/tools/maven-revealjs-asciidoctor-templte/src/main/theme/apache.css
@@ -0,0 +1,349 @@
+/*
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+*/
+
+section.has-light-background, section.has-light-background h1, section.has-light-background h2, section.has-light-background h3, section.has-light-background h4, section.has-light-background h5, section.has-light-background h6 {
+  color: #222; }
+
+/*********************************************
+ * GLOBAL STYLES
+ *********************************************/
+body {
+  background-image: url("../../../images/background.jpg");
+  background-repeat: no-repeat;
+  background-size: cover;
+  background-color: #222; }
+
+.reveal {
+  font-family: Panton-Regular, Helvetica, sans-serif;
+  font-size: 34px;
+  font-weight: normal;
+  color: #fff; }
+
+::selection {
+  color: #fff;
+  background: #bee4fd;
+  text-shadow: none; }
+
+.reveal .slides > section, .reveal .slides > section > section {
+  line-height: 1.3;
+  font-weight: inherit; }
+
+/*********************************************
+ * HEADERS
+ *********************************************/
+.reveal h1, .reveal h2, .reveal h3, .reveal h4, .reveal h5, .reveal h6 {
+  margin: 0 0 20px 0;
+  color: #fff;
+  font-family: Panton-Regular, Helvetica, sans-serif;
+  font-weight: 600;
+  line-height: 1.2;
+  letter-spacing: normal;
+  text-transform: uppercase;
+  text-shadow: none;
+  word-wrap: break-word; }
+
+.reveal h1 {
+  font-size: 2.5em; }
+
+.reveal h2 {
+  font-size: 1.6em; }
+
+.reveal h3 {
+  font-size: 1.3em; }
+
+.reveal h4 {
+  font-size: 1em; }
+
+.reveal h1 {
+  text-shadow: none; }
+
+/*********************************************
+ * OTHER
+ *********************************************/
+.reveal p {
+  margin: 20px 0;
+  line-height: 1.3; }
+
+/* Ensure certain elements are never larger than the slide itself */
+.reveal img, .reveal video, .reveal iframe {
+  max-width: 95%;
+  max-height: 95%; }
+
+.reveal strong, .reveal b {
+  font-weight: bold; }
+
+.reveal em {
+  font-style: italic; }
+
+.reveal ol, .reveal dl, .reveal ul {
+  display: inline-block;
+  text-align: left;
+  margin: 0 0 0 1em; }
+
+.reveal ol {
+  list-style-type: decimal; }
+
+.reveal ul {
+  list-style-type: disc; }
+
+.reveal ul ul {
+  list-style-type: square; }
+
+.reveal ul ul ul {
+  list-style-type: circle; }
+
+.reveal ul ul, .reveal ul ol, .reveal ol ol, .reveal ol ul {
+  display: block;
+  margin-left: 40px; }
+
+.reveal dt {
+  font-weight: bold; }
+
+.reveal dd {
+  margin-left: 40px; }
+
+.reveal q, .reveal blockquote {
+  quotes: none; }
+
+.reveal blockquote {
+  display: block;
+  position: relative;
+  width: 70%;
+  margin: 20px auto;
+  padding: 5px;
+  font-style: italic;
+  background: rgba(255, 255, 255, 0.05);
+  box-shadow: 0 0 2px rgba(0, 0, 0, 0.2); }
+
+.reveal blockquote p:first-child, .reveal blockquote p:last-child {
+  display: inline-block; }
+
+.reveal q {
+  font-style: italic; }
+
+.reveal pre {
+  display: block;
+  position: relative;
+  width: 90%;
+  margin: 20px auto;
+  text-align: left;
+  font-size: 0.55em;
+  font-family: monospace;
+  line-height: 1.2em;
+  word-wrap: break-word;
+  box-shadow: 0 0 6px rgba(0, 0, 0, 0.3); }
+
+.reveal code {
+  font-family: monospace; }
+
+.reveal pre code {
+  display: block;
+  padding: 5px;
+  overflow: auto;
+  max-height: 400px;
+  word-wrap: normal;
+  background: #3F3F3F;
+  color: #DCDCDC; }
+
+.reveal table {
+  margin: auto;
+  border-collapse: collapse;
+  border-spacing: 0; }
+
+.reveal table th {
+  font-weight: bold; }
+
+.reveal table th, .reveal table td {
+  text-align: left;
+  padding: 0.2em 0.5em 0.2em 0.5em;
+  border-bottom: 1px solid; }
+
+.reveal table th[align="center"], .reveal table td[align="center"] {
+  text-align: center; }
+
+.reveal table th[align="right"], .reveal table td[align="right"] {
+  text-align: right; }
+
+.reveal table tr:last-child td {
+  border-bottom: none; }
+
+.reveal sup {
+  vertical-align: super; }
+
+.reveal sub {
+  vertical-align: sub; }
+
+.reveal small {
+  display: inline-block;
+  font-size: 0.6em;
+  line-height: 1.2em;
+  vertical-align: top; }
+
+.reveal small * {
+  vertical-align: top; }
+
+/*********************************************
+ * LINKS
+ *********************************************/
+.reveal a {
+  color: #42affa;
+  text-decoration: none;
+  -webkit-transition: color 0.15s ease;
+  -moz-transition: color 0.15s ease;
+  transition: color 0.15s ease; }
+
+.reveal a:hover {
+  color: #8dcffc;
+  text-shadow: none;
+  border: none; }
+
+.reveal .roll span:after {
+  color: #fff;
+  background: #068ee9; }
+
+/*********************************************
+ * IMAGES
+ *********************************************/
+.reveal section img {
+  margin: 15px 0;
+  /*background: rgba(255, 255, 255, 0.12);*/
+  /*border: 4px solid #fff;*/
+  /*box-shadow: 0 0 10px rgba(0, 0, 0, 0.15);*/ }
+
+.reveal a img {
+  -webkit-transition: all 0.15s linear;
+  -moz-transition: all 0.15s linear;
+  transition: all 0.15s linear; }
+
+.reveal a:hover img {
+  background: rgba(255, 255, 255, 0.2);
+  border-color: #42affa;
+  box-shadow: 0 0 20px rgba(0, 0, 0, 0.55); }
+
+/*********************************************
+ * NAVIGATION CONTROLS
+ *********************************************/
+.reveal .controls div.navigate-left, .reveal .controls div.navigate-left.enabled {
+  border-right-color: #42affa; }
+
+.reveal .controls div.navigate-right, .reveal .controls div.navigate-right.enabled {
+  border-left-color: #42affa; }
+
+.reveal .controls div.navigate-up, .reveal .controls div.navigate-up.enabled {
+  border-bottom-color: #42affa; }
+
+.reveal .controls div.navigate-down, .reveal .controls div.navigate-down.enabled {
+  border-top-color: #42affa; }
+
+.reveal .controls div.navigate-left.enabled:hover {
+  border-right-color: #8dcffc; }
+
+.reveal .controls div.navigate-right.enabled:hover {
+  border-left-color: #8dcffc; }
+
+.reveal .controls div.navigate-up.enabled:hover {
+  border-bottom-color: #8dcffc; }
+
+.reveal .controls div.navigate-down.enabled:hover {
+  border-top-color: #8dcffc; }
+
+/*********************************************
+ * PROGRESS BAR
+ *********************************************/
+.reveal .progress {
+  background: rgba(0, 0, 0, 0.2); }
+
+.reveal .progress span {
+  background: #42affa;
+  -webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
+  -moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
+  transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); }
+
+/*********************************************
+ * SLIDE NUMBER
+ *********************************************/
+.reveal .slide-number {
+  color: #42affa; }
+
+.reveal .red {
+  color: red;
+}
+
+/*********************************************
+ * C3JS Charts
+ *********************************************/
+
+.c3 {
+  fill: white;  }
+
+.c3 line, .c3 path {
+  stroke: white !important; }
+
+/*********************************************
+ * Custom styling of individual charts
+ *********************************************/
+
+#most-significant-barriers .c3-shape .c3-shape-2 .c3-bar .c3-bar-2 {
+  color: red;
+}
+
+/*********************************************
+ * Footer and Header
+ *********************************************/
+
+.header {
+  position:relative;
+}
+/*.header .left {
+  position:absolute;
+  top: 5px;
+  left: 5px;
+  width: 196px;
+  height: 100px;
+  background-image: url("../../../images/logo-building-iot.png");
+}*/
+.header .right {
+  position:absolute;
+  top: 5px;
+  right: 5px;
+  width: 246px;
+  height: 100px;
+  background-image: url("../../../images/logo-apache.png");
+}
+
+.footer {
+  position:relative;
+}
+/*.footer .left {
+  position:absolute;
+  bottom: 5px;
+  left: 5px;
+  width: 392px;
+  height: 50px;
+  background-image: url("../../../images/logo-company.png");
+}
+.footer .right {
+  position:absolute;
+  bottom: 5px;
+  right: 5px;
+  width: 306px;
+  height: 100px;
+  background-image: url("../../../images/logo-plc4x.png");
+}*/
+
diff --git a/tools/pom.xml b/tools/pom.xml
index bcdb10f..5bd3bf5 100644
--- a/tools/pom.xml
+++ b/tools/pom.xml
@@ -30,7 +30,7 @@
   <name>Training: Tools</name>
 
   <modules>
-    <!--module>maven-revealjs-asciidoctor-templte</module-->
+    <module>maven-revealjs-asciidoctor-templte</module>
   </modules>
 
 </project>