You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@plc4x.apache.org by cd...@apache.org on 2017/12/25 15:45:49 UTC

[incubator-plc4x] branch feature/fine-tuned-site-generation created (now 71c8a96)

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

cdutz pushed a change to branch feature/fine-tuned-site-generation
in repository https://gitbox.apache.org/repos/asf/incubator-plc4x.git.


      at 71c8a96  NO JIRA: Right now the site generation generates a lot of timestamps in the output. This causes problems with the gitpubsub system. This is an attempt to rid the output of these timestamps and hereby make the updates to the asf-site branch more readable.

This branch includes the following new commits:

     new 71c8a96  NO JIRA: Right now the site generation generates a lot of timestamps in the output. This causes problems with the gitpubsub system. This is an attempt to rid the output of these timestamps and hereby make the updates to the asf-site branch more readable.

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


-- 
To stop receiving notification emails like this one, please contact
['"commits@plc4x.apache.org" <co...@plc4x.apache.org>'].

[incubator-plc4x] 01/01: NO JIRA: Right now the site generation generates a lot of timestamps in the output. This causes problems with the gitpubsub system. This is an attempt to rid the output of these timestamps and hereby make the updates to the asf-site branch more readable.

Posted by cd...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

cdutz pushed a commit to branch feature/fine-tuned-site-generation
in repository https://gitbox.apache.org/repos/asf/incubator-plc4x.git

commit 71c8a968efc93ccece0b35e7a20beae10b508905
Author: Christofer Dutz <ch...@c-ware.de>
AuthorDate: Mon Dec 25 16:45:39 2017 +0100

    NO JIRA:
    Right now the site generation generates a lot of timestamps in the output. This causes problems with the gitpubsub system.
    This is an attempt to rid the output of these timestamps and hereby make the updates to the asf-site branch more readable.
    
    - Adjusted JavaDoc to not generate a timestamp in the header
    - Adjusted the reflow-maven-skin to not add a timestamp in the header
---
 pom.xml                                         |   18 +-
 src/site/asciidoc/development/building.adoc     |   21 +
 src/site/asciidoc/development/ci.adoc           |   19 +
 src/site/asciidoc/development/contributing.adoc |   19 +
 src/site/site.xml                               |    6 +
 src/site/template/maven-site.vm                 | 1786 +++++++++++++++++++++++
 6 files changed, 1868 insertions(+), 1 deletion(-)

diff --git a/pom.xml b/pom.xml
index f5c9ebd..4750558 100644
--- a/pom.xml
+++ b/pom.xml
@@ -297,7 +297,8 @@
               <goal>unpack</goal>
             </goals>
             <configuration>
-              <!--  Bundle these dependencies in the war.
+              <!--
+                  Bundle these dependencies in the war.
 
                   You must maintain the corresponding info if you
                   add/remove artifacts or change their versions:
@@ -312,6 +313,13 @@
                -->
               <artifactItems>
                 <artifactItem>
+                  <groupId>lt.velykis.maven.skins</groupId>
+                  <artifactId>reflow-maven-skin</artifactId>
+                  <version>1.1.1</version>
+                  <excludes>META-INF/**</excludes>
+                  <outputDirectory>${project.build.directory}/dependency/reflow-maven-skin-1.1.1/</outputDirectory>
+                </artifactItem>
+                <artifactItem>
                   <groupId>org.webjars</groupId>
                   <artifactId>bootstrap</artifactId>
                   <version>2.3.2</version>
@@ -605,6 +613,7 @@
           <!-- get errors with site:site task when using the default (3.6) version -->
           <version>3.4</version><!--$NO-MVN-MAN-VER$-->
           <configuration>
+            <templateFile>${session.executionRootDirectory}/src/site/template/maven-site.vm</templateFile>
             <generateReports>true</generateReports>
             <generateSitemap>true</generateSitemap>
             <relativizeDecorationLinks>false</relativizeDecorationLinks>
@@ -699,6 +708,13 @@
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-javadoc-plugin</artifactId>
           <version>2.10.4</version>
+          <configuration>
+            <!--
+              This will suppress the generation of a hidden timestamp at the top of each generated html page
+              and hopefully let the site generation nod to too big updates every time.
+            -->
+            <notimestamp>true</notimestamp>
+          </configuration>
         </plugin>
 
         <plugin>
diff --git a/src/site/asciidoc/development/building.adoc b/src/site/asciidoc/development/building.adoc
new file mode 100644
index 0000000..d1959e9
--- /dev/null
+++ b/src/site/asciidoc/development/building.adoc
@@ -0,0 +1,21 @@
+//
+//  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.
+//
+
+== Building PLC4X
+
+
+
diff --git a/src/site/asciidoc/development/ci.adoc b/src/site/asciidoc/development/ci.adoc
new file mode 100644
index 0000000..33ba8ba
--- /dev/null
+++ b/src/site/asciidoc/development/ci.adoc
@@ -0,0 +1,19 @@
+//
+//  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.
+//
+
+== Continuous Integration
+
diff --git a/src/site/asciidoc/development/contributing.adoc b/src/site/asciidoc/development/contributing.adoc
new file mode 100644
index 0000000..520bb35
--- /dev/null
+++ b/src/site/asciidoc/development/contributing.adoc
@@ -0,0 +1,19 @@
+//
+//  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.
+//
+
+== Contributing
+
diff --git a/src/site/site.xml b/src/site/site.xml
index 54b3572..0f42b1a 100644
--- a/src/site/site.xml
+++ b/src/site/site.xml
@@ -25,6 +25,9 @@
     <version>1.1.1</version>
   </skin>
 
+  <!-- Hide the publish date as this will cause changes on every generated page every day -->
+  <publishDate position="none"/>
+
   <!--
       Details on how to configure the reflow skin:
       http://andriusvelykis.github.io/reflow-maven-skin/skin/
@@ -82,6 +85,9 @@
     <menu ref="reports" inherit="top"/>
     <menu ref="parent" inherit="top"/>
     <menu name="Development">
+      <item name="Building" href="development/building.html"/>
+      <item name="Continuous Integration" href="development/ci.adoc"/>
+      <item name="Contributing" href="development/contributing.adoc"/>
       <item name="Website" href="development/website.html"/>
     </menu>
     <menu name="Infrastructure">
diff --git a/src/site/template/maven-site.vm b/src/site/template/maven-site.vm
new file mode 100644
index 0000000..adf7d61
--- /dev/null
+++ b/src/site/template/maven-site.vm
@@ -0,0 +1,1786 @@
+#*
+ * Copyright 2012 Andrius Velykis
+ *
+ * Licensed 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.
+ *#
+<!DOCTYPE html>
+<!--
+ Generated by Apache Maven Doxia#if ( $doxiaVersion ) $doxiaVersion#end
+
+ Rendered using Reflow Maven Skin (http://andriusvelykis.github.io/reflow-maven-skin)
+-->
+#*
+
+
+--------------------------------------------------*###
+#**
+ * Convenience directive to invoke a method and ignore the return value.
+ *
+ * Usage:
+ *	  #call ( $hashtable.put("foo", "bar") )
+ *###
+    #macro ( call $foo )#*
+	*##if ($foo)#*
+		// do nothing - the 'if' is for ignoring the return value
+	*##end##
+    #end#* /call
+
+
+
+--------------------------------------------------*###
+#**
+ * Checks if the given link is an external one.
+ *###
+    #macro ( checkExtLink $href )#*
+
+	*##set ( $checkExtLink = false )#*
+	*##if ( $href && ($href.toLowerCase().startsWith("http:/") || $href.toLowerCase().startsWith("https:/")
+    || $href.toLowerCase().startsWith("ftp:/") || $href.toLowerCase().startsWith("mailto:")
+    || $href.toLowerCase().startsWith("file:/") || ($href.toLowerCase().indexOf("://") != -1) ))#*
+
+		*##set ( $checkExtLink = true )#*
+	*##end##
+    #end#* /checkExtLink
+
+
+
+--------------------------------------------------*###
+#**
+ * Relativizes the link
+ *###
+    #macro ( relativeLink $href )#*
+
+	*##if ( $href )#*
+
+		*##set ( $relativeLink = $PathTool.calculateLink( $href, $relativePath ) )#*
+		*##set ( $relativeLink = $relativeLink.replaceAll( "\\", "/" ) )#*
+		*##if ( ( $relativeLink == '' ) )#*
+			*##set ( $relativeLink = './' )#*
+		*##end#*
+
+		// Attempt to normalise the relative link - this is useful for active link
+		// calculations and better relative links for subdirectories.
+		//
+		// The issue is particularly visible with pages in subdirectories,
+		// so that if you are in <root>/dev/index.html, the relative menu link to
+		// the _same_ page would likely be ../dev/index.html instead of '' or 'index.html'.
+		*##set ( $absoluteLink = $uriTool.toURI( "$currentFileLoc" ).resolve( "$relativeLink" ).normalize().toString() )#*
+		*##if ( $currentFileLoc == $absoluteLink )#*
+			// for matching link, use empty relative link
+			*##set ( $relativeLink = '' )#*
+		*##else#*
+			// relativize the absolute link based on current directory
+			// (uses Maven project link relativization)
+			*##set ( $currentFileDir = $PathTool.getDirectoryComponent( $currentFileLoc ) )#*
+			*##set ( $relativeLink = $uriTool.relativizeLink( $currentFileDir, $absoluteLink ) )#*
+		*##end#*
+
+	*##else#*
+		// null $href
+		*##set ( $relativeLink = false )#*
+	*##end##
+    #end#* /relativeLink
+
+
+
+--------------------------------------------------*###
+#**
+ * Checks if the given link is an external one. If not, calculates a relative link.
+ *###
+    #macro ( relativeExtLink $href )#*
+
+	*##checkExtLink ( $href )#*
+	*##if ( $checkExtLink )#*
+		// if external, keep the original
+		*##set ( $relativeExtLink = $href )#*
+	*##else#*
+		// if not external link, calculate an return the relative link
+		*##relativeLink ( $href )#*
+		*##set ( $relativeExtLink = $relativeLink )#*
+	*##end##
+    #end#* /relativeExtLink
+
+
+
+--------------------------------------------------*###
+#**
+ * Makes the link relative to the project URL, if one is set.
+ *###
+#macro ( currentFileRelativeLink $href )#*
+
+	*##if ( $project.url && $project.url != '' && $currentFileName )#*
+		// if project URL is available, relativize the link using it as a base dir
+		// note that the current file can be nested under project URL, so take that into account
+		*##set ( $currentFileDir = $uriTool.toURI( "$project.url/" ).resolve( "$currentFileName" ).resolve(".").toString() )#*
+		*##set ( $currentFileRelativeLink = $uriTool.relativizeLink( $currentFileDir, $href ) )#*
+	*##else#*
+		// otherwise just keep the original link
+		*##set ( $currentFileRelativeLink = $href )#*
+	*##end##
+#end#* /currentFileRelativeLink
+
+
+
+--------------------------------------------------*###
+#**
+ * Checks if the given link is the currently active one
+ *###
+#macro ( activeLink $href )#*
+
+	*##relativeLink ( $href )#*
+
+	*##if ( $href )#*
+		// either empty link (pointing to a page), or if the current file is index.html,
+		// the link may point to the whole directory
+		*##if ( '' == $relativeLink || ( $alignedFileName.endsWith("index.html") && './' == $relativeLink ) )#*
+			*##set ( $activeLink = true )#*
+			*##set ( $activeClass = 'active' )#*
+		*##else#*
+			*##set ( $activeLink = false )#*
+			*##set ( $activeClass = '' )#*
+		*##end#*
+	*##else#*
+		// null href - disable the link
+		*##set ( $activeLink = false )#*
+		*##set ( $activeClass = 'disabled' )#*
+	*##end##
+#end#* /activeLink
+
+
+
+--------------------------------------------------*###
+#**
+ * Creates a class="name" attribute if the given name exists
+ *###
+#macro ( classAttr $name )#*
+
+	*##if ( $name && '' != $name )#*
+		*#class="$name"#*
+	*##end##
+#end#* /class
+
+
+--------------------------------------------------*###
+#**
+ * Creates dropdown menu items
+ *###
+#macro ( topMenu $menus )#*
+
+	*##foreach ( $menu in $menus )#*
+
+		*##if ( $menu.name )#*
+			// check if one of the subtree items is the current one
+			*##set ( $displayTree = false )#*
+			*##displayTree ( $menu )##
+<li class="dropdown#if ( $displayTree ) active#end">
+    <a href="#" class="dropdown-toggle" data-toggle="dropdown">$menu.name <b class="caret"></b></a>
+    <ul class="dropdown-menu">
+    #*			*##foreach ( $item in $menu.items )#*
+
+				*##activeLink ( $item.href )#*
+				*##if ($item.items.isEmpty())##
+        <li #classAttr( $activeClass )>#link ( $relativeLink $item.name $item.target )</li>
+    #*				*##else##
+        <li class="dropdown-submenu $activeClass">
+            #link ( $relativeLink $item.name $item.target )
+
+            <ul class="dropdown-menu">
+            #*					*##foreach ($subitem in $item.items)#*
+						*##activeLink ( $subitem.href )##
+                <li #classAttr( $activeClass )>#link ( $relativeLink $subitem.name $subitem.target )</li>
+            #*					*##end## /foreach $subitem
+            </ul>
+        </li>
+    #*				*##end#*
+			*##end## /foreach $item
+    </ul>
+</li>
+#*		*##end#*
+	*##end## /foreach $menu
+#end#* /topMenu
+
+
+
+--------------------------------------------------*###
+#**
+ * Outputs a list of links
+ *###
+#macro ( links $links )#*
+
+	*##foreach ( $item in $links )#*
+		*##activeLink ( $item.href )##
+<li #classAttr( $activeClass )>#link ( $relativeLink $item.name $item.target )</li>
+#*	*##end##
+#end#* /links
+
+
+
+--------------------------------------------------*###
+#**
+ * Shortcut to display a basic hyperlink
+ *###
+#macro ( link $href $name $target )#*
+	*##fullLink ( $href $name $target false false false false false false false )##
+#end#* /link
+
+
+
+--------------------------------------------------*###
+#**
+ * Outputs a hyperlink with image and other attributes
+ *###
+#macro ( fullLink $href $name $target $img $position $alt $border $width $height $icon)#*
+
+// The opening <a> tag	*###
+<a#*
+	// if $href=false, do not create link
+	*##if ( $href ) href="$href"#end#*
+	*##if ( $name ) title="$name"#end#*
+	*##if ( $target ) target="$target"#end#*
+	*##checkExtLink ( $href )#*
+	*##if ( $checkExtLink ) class="externalLink"#end##
+>#*
+
+	*##if ( $img && $position == "left" )#*
+		// Image on the left side of the name
+		*##image ($img $alt $border $width $height)$name#*
+	*##elseif ( $img )#*
+		// Image on the right side of the name
+		*#${name}#if ($img) #image ($img $alt $border $width $height)#end#*
+	*##else#*
+		// No image - optional icon though on the right of the name
+		*#${name}#if ($icon) <i class="$icon"></i>#end#*
+	*##end#*
+
+// Close </a>	*###
+</a>##
+#end#* /fullLink
+
+
+
+--------------------------------------------------*###
+#**
+ * Outputs an image with attributes
+ *###
+#macro ( image $img $alt $border $width $height )#*
+
+	*##if ( $img )#*
+		*#<img class="imageLink"#*
+			*##relativeExtLink ( $img )#*
+			*# src="$relativeExtLink" alt='"'#if ( $alt )$alt#end'"'#*
+			*##if ( $border ) border="$border"#end#*
+			*##if ( $width ) width="$width"#end#*
+			*##if ( $height ) height="$height"#end#*
+		*# />#*
+
+	*##end##
+#end#* /image
+
+
+
+--------------------------------------------------*###
+#**
+ * Outputs a list of breadcrumbs
+ *###
+#macro ( breadcrumbs $breadcrumbs )#*
+
+	*##foreach ( $item in $breadcrumbs )#*
+		*##relativeLink ( $item.href )##
+<li>#fullLink ( $relativeLink $item.name $item.target $item.img $item.position $item.alt $item.border $item.width $item.height false )</li>
+<li class="divider">/</li>
+#*	*##end##
+<li>#if ( $shortTitle )$shortTitle#else$title#end</li>
+#end#* /breadcrumbs
+
+
+
+--------------------------------------------------*###
+#**
+ * Outputs the top Table of Contents ( subnav )
+ *###
+#macro ( topToc $topItems )#*
+
+	// read the top ToC max config to get the number of items to show
+	*##if ( $config.tocTopMax )#*
+		*##set ( $tocMax = $convert.toNumber($config.tocTopMax.getValue()) )#*
+	*##else#*
+		*##set ( $tocMax = -1 )#*
+	*##end#*
+
+	// check if we flatten the first 2 levels of ToC:
+	*##set ( $flattenConfig = $config.tocTopFlatten )#*
+	*##if ( !$flattenConfig )#*
+		// flatten config not available - calculate if need flattening:
+		// only flatten if the top level has not more than 2 elements
+		*##set ( $topItemsCount = $topItems.size() )#*
+		*##set ( $flattenLevel2 = $topItemsCount <= 2 )#*
+	*##elseif ( "true" == $flattenConfig.getValue() )#*
+		*##set ( $flattenLevel2 = true )#*
+	*##else#*
+		*##set ( $flattenLevel2 = false )#*
+	*##end#*
+
+	// count items at top and the next level that will be displayed in the ToC bar
+	*##set ( $tocBarItems = [] )#*
+	*##set ( $tocBarMaxItems = [] )#*
+
+	*##set ( $tocCount = 0 )#*
+	*##foreach ( $topItem in $topItems )#*
+
+		*##if ( ($tocCount < $tocMax) || ($tocMax < 0) )#*
+			// only add items if not after the maximum
+			*##call ( $tocBarItems.add( $topItem ) )#*
+			*##set ( $topInMax = false )#*
+		*##else#*
+			*##call ( $tocBarMaxItems.add( $topItem ) )#*
+			*##set ( $topInMax = true )#*
+		*##end#*
+
+		*##set ( $tocCount = $tocCount + 1 )#*
+
+		// if level 2 is flattened, traverse for subitems
+		*##if ( $flattenLevel2 )#*
+
+			*##foreach ( $item in $topItem.items )#*
+
+				*##if ( ($tocCount < $tocMax) || ($tocMax < 0) )#*
+					// only add subitems if not after the maximum
+					*##call ( $tocBarItems.add( $item ) )#*
+				*##elseif ( !$topInMax )#*
+					// top is not in the max - so add these directly to the max
+					*##call ( $tocBarMaxItems.add( $item ) )#*
+				*##end#*
+				*##set ( $tocCount = $tocCount + 1 )#*
+			*##end#* /foreach $item
+		*##end#*
+	*##end#* /foreach $topItem
+
+	// count items at top and the next level that will be displayed in the ToC bar
+	*##set ( $tocCount = 0 )#*
+	*##set ( $tocDivider = false )#*
+
+	*##foreach ( $topItem in $tocBarItems )#*
+		*##if ( $topItems.contains( $topItem ) && $tocDivider )##
+<li class="divider-vertical"></li>
+#*		*##end#*
+		*##if ( $topItem.items.isEmpty() )##
+<li class="toplevel"><a href="#$topItem.id" title="$topItem.text">$topItem.text</a></li>
+#*		*##elseif ( $topItems.contains( $topItem ) && $flattenLevel2 )#*
+			// top level item, but flattened: put it as a link, because its children are also in top bar *###
+<li class="toplevel"><a href="#$topItem.id" title="$topItem.text">$topItem.text</a></li>
+#*		*##else##
+<li class="dropdown">
+    <a href="#$topItem.id" title="$topItem.text" class="dropdown-toggle" role="button" data-toggle="dropdown" data-target="#">$topItem.text <b class="caret"></b></a>
+    <ul class="dropdown-menu" role="menu">
+        <!-- Repeat the item, otherwise it is not clickable as the dropdown root -->
+        <li><a href="#$topItem.id" title="$topItem.text">$topItem.text</a></li>
+        <li class="divider"></li>
+    #* 								*##topTocDropdown ( $topItem.items )
+    </ul>
+</li>
+#*		*##end#*
+		*##set ( $tocDivider = true )#*
+	*##end#* /foreach $topItem
+
+	*##if ( $tocBarMaxItems.size() > 0 )#*
+		// put the max items into an extra dropdown *###
+<li class="divider-vertical"></li>
+<li class="dropdown">
+    <a href="#" title="More&hellip;" class="dropdown-toggle" role="button" data-toggle="dropdown" data-target="#">&hellip; <b class="caret"></b></a>
+    <ul class="dropdown-menu" role="menu">
+    #* 				*##topTocDropdown ( $tocBarMaxItems )
+    </ul>
+</li>
+#*	*##end##
+#end#* /topToc
+
+
+
+--------------------------------------------------*###
+#**
+ * Recursively outputs the contents of top bar ToC dropdown item
+ *###
+#macro ( topTocDropdown $items )#*
+
+	*##foreach ( $subitem in $items )#*
+		*##if ($subitem.items.isEmpty())##
+<li><a href="#$subitem.id" title="$subitem.text">$subitem.text</a></li>
+#*		*##else##
+<li class="dropdown-submenu">
+    <a href="#$subitem.id" title="$subitem.text">$subitem.text</a>
+    <ul class="dropdown-menu" role="menu">
+    #* 										*##topTocDropdown ( $subitem.items )
+    </ul>
+</li>
+#*		*##end#*
+	*##end## /foreach $subitem
+
+#end#* /topTocOpenRemaining
+
+
+
+--------------------------------------------------*###
+#**
+ * Outputs Table of Contents into a list menu
+ *###
+#macro ( listToc $menus )##
+##
+<ul class="nav nav-list">
+    <li class="nav-header">Table of Contents</li>
+#*	*##foreach ( $item in $menus )#*
+		*##listTocItem ( $item )
+#*	*##end## /foreach $item
+</ul>
+#end#* /listToc
+
+
+
+--------------------------------------------------*###
+#**
+ * Recursively outputs ToC item and its children
+ *###
+#macro ( listTocItem $item )#*
+
+	*##if ( $item.items.size() > 0 )##
+<li class="dropdown"><a href="#$item.id" title="$item.text">$item.text <b class="caret"></b></a>
+#*		*##if ( $item.items.size() > 0 )##
+        <ul class="nav nav-list">
+        #*			*##foreach ( $subitem in $item.items )#*
+				*##listTocItem ( $subitem )
+        #*			*##end#* /foreach $subitem
+
+			*##if ( !$addedDivider )##
+            <li class="divider"></li>
+        #*				*##set ( $addedDivider = true )#*
+			*##end## /foreach $subitem
+        </ul>
+    #*		*##end##
+</li>
+#*	*##else##
+<li><a href="#$item.id" title="$item.text">$item.text</a>
+#*		*##set ( $addedDivider = false )##
+#*	*##end##
+#end#* /listTocItem
+
+
+
+--------------------------------------------------*###
+#**
+ * Outputs the top banner contents
+ *###
+#macro ( banner $banner $id )#*
+
+	*##if ( $banner )#*
+		*##if ( $banner.href )#*
+			*##relativeExtLink ( $banner.href )##
+<a href="$relativeExtLink" id="$id"#if ( $banner.alt ) title="$banner.alt"#end>#*
+		*##else##
+<div id="$id">#*
+		*##end#*
+
+		*##if ( $banner.src )#* start image
+			*##relativeExtLink ( $banner.src )#*
+			*#<img src="$relativeExtLink"#*
+				*# alt='"'#if ( $banner.alt )$banner.alt#elseif ( $banner.name )$banner.name#end'"'#*
+				*##if ( $banner.border ) border="$banner.border"#end#*
+				*##if ( $banner.width ) width="$banner.width"#end#*
+				*##if ( $banner.height ) height="$banner.height"#end#*
+			*# />#* /end image
+		*##else#*
+			*#<h1>$banner.name</h1>#*
+		*##end#*
+
+		*##if ( $banner.href )#*
+			*#</a>
+#*		*##else#*
+			*#</div>
+#*		*##end#*
+
+		// add slogan to correct position
+		*##if ( $config.slogan && $config.slogan != '' )#*
+			// read slogan position - if not set, use 'bannerLeft' as default
+			*##if ( $config.slogan.getAttribute("position") )#*
+				*##set ( $sloganPos = $config.slogan.getAttribute("position") )#*
+			*##else#*
+				*##set ( $sloganPos = "bannerLeft" )#*
+			*##end#*
+
+			*##if ( $id == $sloganPos )##
+    <p class="lead">$config.slogan.getValue()</p>
+#*			*##end#*
+		*##end#* /slogan
+	*##end##
+#end#* /banner
+
+
+
+--------------------------------------------------*###
+#**
+ * Partitions the body contents into sections with possibly different representations.
+ * Available body types, indicated in custom page config `sections` tag:
+ *
+ * 	<sections>
+ * 		<body/> - the main body of the page
+ * 		<sidebar/> - sidebar (should go after the body)
+ * 		<thumbs>x</thumbs> - x-column grid layout for thumbnails (first image is used as thumbnail)
+ * 		<columns>x</columns> - x-column grid layout
+ * 		<carousel/> - carousel (spinning images with captions)
+ * 	</sections>
+ *###
+#macro ( bodySections $bodyContent $sectionConfig )#*
+
+	// Split everything in the content on the horizontal rule tags <hr />
+	*##set ( $sections = $htmlTool.split( $bodyContent, "hr" ) )#*
+	*##set ( $sectCount = $sectionConfig.getChildCount() )#*
+	// Check if sidebar is indicated somewhere in the sections, need to adjust layout accordingly
+	*##set ( $hasSidebar = $sectionConfig.getChild( 'sidebar' ) )#*
+
+	// flag to indicate that last section was a main body section (needs closing for non-body sections)
+	*##set ( $lastBody = false )#*
+	// flag to indicate that a body section has already been found (to avoid multiple page-headers)
+	*##set ( $bodyFound = false )#*
+
+	*##set ( $sectIndex = 0 )#*
+	*##foreach ($section in $sections)#*
+
+		// Determine section type from the configuration
+		*##if ( $sectIndex < $sectCount )#*
+			*##set ( $sectType = $sectionConfig.getChild($sectIndex).getName() )#*
+			*##set ( $sectTypeValue = $sectionConfig.getChild($sectIndex).getValue() )#*
+		*##else#*
+			*##set ( $sectType = 'body' )#*
+		*##end#*
+
+		*##if ( 'sidebar' == $sectType || 'thumbs' == $sectType || 'columns' == $sectType || 'carousel' == $sectType )#*
+			// split section into sub-sections for each header (h1, h2, etc tag)
+			*##set ( $subsections = $htmlTool.splitOnStarts( $section, "h1, h2, h3, h4, h5, h6") )#*
+		*##else#*
+			// keep the section
+			*##set ( $subsections = [ $section ] )#*
+		*##end#*
+
+
+		*##if ( 'thumbs' == $sectType || 'columns' == $sectType || 'carousel' == $sectType )#*
+			// for full width layouts, we first need to close the body if it is still open
+			*##if ( $lastBody )##
+    </div>
+    </div>
+#*				// check if need to add explicit ToC sidebar
+				// (if ToC sidebar is needed, but no sidebar is defined)
+				*##if ( $tocSidebar && !$hasSidebar )#*
+					*##tocSidebar ()
+    #*				*##end##
+    </div>
+#*			*##end#*
+
+			// Print the subsections into columns
+			*##if ( 'thumbs' == $sectType )#*
+				*##thumbs ( $sectTypeValue $subsections )#*
+			*##elseif ( 'columns' == $sectType )#*
+				*##columns ( $sectTypeValue $subsections )#*
+			*##else#*
+				*##carousel ( $subsections )#*
+			*##end#*
+
+			// mark that last one was not a body
+			*##set ( $lastBody = false )#*
+
+
+		*##elseif ( 'sidebar' == $sectType )#*
+			// for sidebar, close the body if needed but not body row - then add the sidebar
+			*##if ( $lastBody )##
+    </div>
+    </div>
+#*	 		*##else##
+    <hr />
+<div class="row">
+#* 			*##end##
+    <div class="span4">
+    #*			*##if ( $tocSidebar )#*
+				*##tocSidebarContent ()
+    #*			*##end##
+        <div class="well sidebar">
+        #* 				// Print the subsections into sidebar
+                        *##sidebar ( $subsections )
+        </div>
+    </div>
+</div>
+#* 			*##set ( $lastBody = false )#*
+
+		*##else#*
+			// handle all other cases as 'body' type
+			*##if ( !$lastBody )##
+<div class="row">
+#* 				*##if ( $hasSidebar || $tocSidebar )#*
+					// has a sidebar - take part width
+*#		<div class="span8">
+    #*	 			*##else#*
+					// no sidebar - take full width
+*#		<div class="span12">
+    #* 				*##end##
+<div class="body-content">
+#* 			*##else#*
+				// reinstate the horizontal rule for continuing body
+*#				<hr />
+#* 			*##end#*
+
+			// set the contents
+			*##foreach ( $subsection in $subsections )#*
+				// if first body section, output with page-header
+				*##if ( !$bodyFound )##
+    #bodyWithHeader ( $subsection )
+#* 				*##else##
+    $subsection
+#* 				*##end#*
+				*##set ( $bodyFound = true )#*
+#* 			*##end#*
+
+			*##set ( $lastBody = true )#*
+		*##end#*
+
+		// increment the section counter (need to advance through the types)
+		*##set ( $sectIndex = $sectIndex + 1 )#*
+	*##end#*
+
+	// After the loop, check if body section still needs closing (if it was the last section)
+	*##if ( $lastBody )##
+</div>
+</div>
+#*		// check if need to add explicit ToC sidebar
+		// (if ToC sidebar is needed, but no sidebar is defined)
+		*##if ( $tocSidebar && !$hasSidebar )#*
+			*##tocSidebar ()
+    #*		*##end##
+</div>
+#* 	*##end##
+##
+#end#* /bodySections
+
+
+
+--------------------------------------------------*###
+#**
+ * Outputs subsections as thumbnail grid. Also rearranges the images to come on top.
+ *###
+#macro ( thumbs $colCount $subsections )##
+    <div class="row thumbnail-row">
+        <div class="span12">
+        #*	*##set ( $colCount = $convert.toNumber($colCount) )##
+            <ul class="thumbnails">
+            #*	*##set ( $colSpan = 12 / $colCount )#*
+	*##foreach ( $subsection in $subsections )##
+                <li class="span$colSpan">
+                    <div class="thumbnail">
+                    #* 		// bring the first image (possibly with a link) to the top of the subsection
+                            // (to have a thumbnail with leading image)
+                            *##set ( $thumbnailContent = $htmlTool.reorderToTop( $subsection, "a:has(img), img", 1, '<div class="caption"></div>' ) )#*
+		*##if ( $thumbnailContent == $subsection )#*
+			// no image found, so at least wrap into a caption *###
+                        <div class="caption">#stripEmptyP ( $thumbnailContent )</div>
+                    #*		*##else##
+                        #stripEmptyP ( $thumbnailContent )
+                    #*		*##end##
+                    </div>
+                </li>
+            #*	*##end## /foreach $subsection
+            </ul>
+        </div>
+    </div>
+#end#* /thumbs
+
+
+
+--------------------------------------------------*###
+#**
+ * Outputs subsections into a column grid
+ *###
+#macro ( columns $colCount $subsections )#*
+
+	*##set ( $colCount = $convert.toNumber($colCount) )##
+<div class="row columns columns$colCount">
+#*	*##set ( $colSpan = 12 / $colCount )#*
+	*##set ( $i = 1 )#*
+	*##foreach ( $subsection in $subsections )##
+    <div class="span$colSpan">
+        $subsection
+    </div>
+#*		*##set ( $mod = $i % $colCount )#*
+		*##if ( $mod == 0 )#*
+			//new row *###
+    </div>
+    <div class="row">
+    #*		*##end#*
+		*##set ( $i = $i + 1 )#*
+	*##end## /foreach $subsection
+</div>
+#end#* /columns
+
+
+
+--------------------------------------------------*###
+#**
+ * Outputs subsections into a sidebar one after another
+ *###
+#macro ( sidebar $subsections )#*
+	*##foreach ( $subsection in $subsections )##
+    $subsection
+#*	*##end##
+#end#* /sidebar
+
+
+
+--------------------------------------------------*###
+#**
+ * Outputs subsections into a carousel. Also rearranges the layout to fit carousel.
+ *###
+#macro ( carousel $subsections )#*
+
+	*##if ( !$carouselCounter )#*
+		*##set ( $carouselCounter = 0 )#*
+	*##else#*
+		*##set ( $carouselCounter = $carouselCounter + 1 )#*
+	*##end#*
+
+	*##set ( $carouselId = "carousel$carouselCounter" )##
+    <div id="$carouselId" class="carousel slide">
+        <div class="carousel-inner">
+        #*	*##set ( $activeClass = 'active' )#*
+	*##foreach ( $subsection in $subsections )##
+            <div class="item $activeClass">
+            #*		// Extract image (or link with image) from the subsection
+                    *##set ( $extract = $htmlTool.extract( $subsection, "a:has(img), img", 1 ) )#*
+		*##if ( $extract.extracted && $extract.extracted.size() > 0 )#*
+			// take just the first extracted image element	*###
+                $extract.extracted.get(0)
+            #*		*##end#*
+		// the remainder becomes the caption (heading with text)	*###
+                <div class="carousel-caption">
+                    #stripEmptyP ( $extract.remainder )
+                </div>
+            </div>
+        #*		*##set ( $activeClass = '' )#*
+	*##end## /foreach $subsection
+        </div>
+        <a class="left carousel-control" href="#$carouselId" data-slide="prev">&lsaquo;</a>
+        <a class="right carousel-control" href="#$carouselId" data-slide="next">&rsaquo;</a>
+    </div>
+#end#* /carousel
+
+
+
+--------------------------------------------------*###
+#**
+ * Outputs a sidebar containing ToC only.
+ * Does not do anything if ToC sidebar has already been added.
+ *###
+#macro ( tocSidebar )#*
+
+	*##if ( !$tocSidebarAdded )##
+    <div class="span4">
+    #*			*##tocSidebarContent ()
+    </div>
+#*	*##end##
+#end#* /tocSidebar
+
+
+
+--------------------------------------------------*###
+#**
+ * Outputs ToC sidebar contents.
+ * Does not do anything if ToC sidebar has already been added.
+ *###
+#macro ( tocSidebarContent )#*
+
+	*##if ( !$tocSidebarAdded )##
+    <div id="toc-sidebar">
+    #*				// do not set as scroll target - works weird with grid section headers
+                    <div id="toc-scroll-target" class="well">*###
+        <div class="well">
+        #*					*##listToc ( $tocItems )
+        </div>
+    </div>
+#*		*##set ( $tocSidebarAdded = true )#*
+	*##end##
+#end#* /tocSidebarContent
+
+
+
+--------------------------------------------------*###
+#**
+ * Renders copyright year (inception-currentDate) and organization.
+ *###
+#macro ( copyright )#*
+
+	*##if ( $project )#*
+		*##set ( $currentYear = ${currentDate.year} + 1900 )#*
+
+		*##if ( ${project.inceptionYear} && ( ${project.inceptionYear} != ${currentYear.toString()} ) )#*
+			*#${project.inceptionYear}-${currentYear}#*
+		*##else#*
+			*#${currentYear}#*
+		*##end#*
+
+		*##if ( ${project.organization} && ${project.organization.name} )#*
+			*##if ( ${project.organization.url} )#*
+				*# <a href="$project.organization.url">${project.organization.name}</a>#*
+			*##else#*
+				*# ${project.organization.name}#*
+			*##end#*
+		*##end#*
+	*##end##
+#end#* /copyright
+
+
+
+--------------------------------------------------*###
+#**
+ * Recursively checks if any of the submenu items is the current one
+ *###
+#macro ( displayTree $item )#*
+
+	*##if ( $item && $item.items && $item.items.size() > 0 )#*
+		*##foreach ( $subitem in $item.items )#*
+			*##activeLink ( $subitem.href )#*
+			*##if ( $activeLink )#*
+				*##set ( $displayTree = true )#*
+			*##end#*
+			*##displayTree ( $subitem )#*
+		*##end#* /foreach $subitem
+	*##end##
+#end#* /displayTree
+
+
+
+--------------------------------------------------*###
+#**
+ * Recursively outputs menu item and its children
+ *###
+#macro ( menuItem $item )#*
+
+	*##set ( $collapseClass = false )#*
+	*##activeLink ( $item.href )#*
+	// store value (if active) for later
+	*##set ( $active = $activeLink )#*
+	*##if ( $active )#*
+		*##set ( $currentLink = "#" )#*
+	*##else#*
+		*##set ( $currentLink = $relativeLink )#*
+	*##end#*
+
+	*##if ( $item.items && $item.items.size() > 0 )#*
+
+		*##if ( $item.collapse == false )#*
+			*##set ( $collapseClass = "icon-chevron-down" )#*
+		*##else#*
+			// By default collapsed
+			*##set ( $collapseClass = "icon-chevron-right" )#*
+		*##end#*
+
+		// check if one of the subtree items is the current one, if so, autoexpand
+		*##set ( $displayTree = false )#displayTree ( $item )#*
+		*##if ( $active || $displayTree )#*
+			*##set ( $collapseClass = "icon-chevron-down" )#*
+		*##end#*
+
+	*##end## /item with children
+##
+<li #classAttr( $activeClass )>
+##
+    #fullLink ( $currentLink $item.name $item.target $item.img $item.position $item.alt $item.border $item.width $item.height $collapseClass)
+
+#*	*##if ( $item.items && $item.items.size() > 0 && $collapseClass == "icon-chevron-down" )##
+    <ul class="nav nav-list">
+    #*		*##foreach ( $subitem in $item.items )#*
+			*##menuItem ( $subitem )
+    #*		*##end## /foreach $subitem
+    </ul>
+#*	*##end##
+</li>
+#end#* /menuItem
+
+
+
+--------------------------------------------------*###
+#**
+ * Creates a list menu with submenus
+ *###
+#macro ( listMenu $menus )##
+##
+<ul class="nav nav-list">
+#*	*##foreach ( $menu in $menus )#*
+		*##if ( $menu.name )##
+    <li class="nav-header">#*
+			*##if ( $menu.img )#*
+				*##if ( !$menu.position || $menu.position == "left" )#*
+					*##image ($menu.img $menu.alt $menu.border $menu.width $menu.height) $menu.name#*
+				*##else#*
+					*#$menu.name #image ($menu.img $menu.alt $menu.border $menu.width $menu.height)#*
+				*##end#*
+			*##else#*
+				*#$menu.name#*
+			*##end#*
+						*#</li>
+#*		*##end#* /if $menu.name
+
+		*##if ( $menu.items && $menu.items.size() > 0 )#*
+
+			*##foreach ( $item in $menu.items )#*
+				*##menuItem ( $item )
+#*			*##end#* /foreach $item
+
+		*##end#*
+	*##end## /foreach $menu
+</ul>
+#end#* /listMenu
+
+
+
+--------------------------------------------------*###
+#**
+ * Filters menus by their ref or name, and returns the matching results.
+ * The regex is used to check the match
+ *###
+#macro ( filterMenus $menus $filterRegex )#*
+
+	*##set ( $filterMenus = [] )#*
+	*##foreach ($menu in $menus)#*
+		*##if ( ( $menu.ref && $menu.ref.matches($filterRegex) ) || ( $menu.name && $menu.name.matches($filterRegex) ) )#*
+			*##call ( $filterMenus.add( $menu ) )#*
+		*##end#*
+	*##end## /foreach $menu
+#end#* /filterMenus
+
+
+
+--------------------------------------------------*###
+#**
+ * Outputs bottom navigation columns. The menus can be split into columns to be
+ * placed in the bottom navigation. This is done with the `bottomNav` config option:
+ *
+ * 	<bottomNav maxSpan="8"> - maximum span is indicated in the attribute (default =9)
+ * 		<column>regex</column> - indicates to add a column with the indicated regex filter
+ * 		<column>regex</column> - ...
+ * 		<column>regex</column> - ...
+ * 	</bottomNav>
+ *
+ * (The above produces a 3-column navigation with `span2` for each column (because max is 8)).
+ *###
+#macro ( bottomNav )#*
+
+	// by default, max span for bottom navigation is 9
+	*##set ( $maxNavSpan = 9 )#*
+	*##if ( $config.bottomNav && $config.bottomNav.getChildCount() > 0 )#*
+
+		// Bottom navigation config is available - filter menus for each column and collect
+		*##set ( $menuColumns = [] )#*
+		*##foreach ( $bottomNavCol in $config.bottomNav.getChildren() )#*
+			*##filterMenus ( $decoration.body.menus, $bottomNavCol.getValue() )#*
+			*##call ( $menuColumns.add( $filterMenus ) )#*
+		*##end#*
+
+		// read max span for bottom navigation from the config
+		*##if ( $config.bottomNav.getAttribute("maxSpan") )#*
+			*##set ( $maxNavSpanStr = $config.bottomNav.getAttribute("maxSpan") )#*
+			*##set ( $maxNavSpan = $convert.toNumber($maxNavSpanStr) )#*
+		*##end#*
+	*##else#*
+
+		// No bottom navigation config - just use all menus in a single column
+		*##set ( $menuColumns = [ $decoration.body.menus ] )#*
+	*##end#*
+
+	*##if ( $maxNavSpan > 12 )#*
+		*##set ( $maxNavSpan = 12 )#*
+	*##end#*
+
+	// Determine the column widths (aim for max span of 9 (default), and max width of 4)
+	*##set ( $navSpan = $maxNavSpan / $menuColumns.size() )#*
+	*##if ( $navSpan > 4 )#*
+		*##set ( $navSpan = 4 )#*
+	*##end#*
+	*##if ( $navSpan <= 0 )#*
+		*##set ( $navSpan = 1 )#*
+	*##end#*
+
+	*##if ( $maxNavSpan <= 0 )#*
+		*##set ( $maxNavSpan = $navSpan * $menuColumns.size() )#*
+	*##end#*
+
+	// mark total span taken by the bottomNav (needed to add other components to the footer)
+	*##set ( $lastNavSpan = $maxNavSpan - ($navSpan * ($menuColumns.size() - 1)) )#*
+	*##set ( $totalNavSpan = $maxNavSpan )#*
+
+	*##set ( $navColIndex = 0 )#*
+	*##foreach ( $menuCol in $menuColumns )#*
+		*##if ( $navColIndex == $menuColumns.size() - 1 )#*
+			*##set ( $navSpan = $lastNavSpan )#*
+		*##end##
+<div class="span$navSpan bottom-nav">
+#*					*##listMenu ( $menuCol )
+</div>
+#*		*##set ( $navColIndex = $navColIndex + 1 )#*
+	*##end##
+#end#* /bottomNav
+
+
+
+--------------------------------------------------*###
+#**
+ * Displays a 'Last published' date message.
+ *###
+#macro ( publishDate )#*
+
+	*##if ( $decoration.publishDate.format )#*
+		*##set ( $format = $decoration.publishDate.format )#*
+	*##else#*
+		*##set ( $format = "yyyy-MM-dd" )#*
+	*##end#*
+
+	*#$dateFormat.applyPattern( $format )#*
+
+	*##if ( $publishDate )#*
+		*##set ( $dateValue = $dateFormat.format( $publishDate ) )#*
+	*##elseif ( $config.publishDate )#*
+		*##set ( $dateValue = $config.publishDate.getValue() )#*
+	*##else#*
+		*##set ( $dateValue = $dateFormat.format( $currentDate ) )#*
+	*##end#*
+
+	// render with internationalization support
+	*#$i18n.getString( "site-renderer", $locale, "template.lastpublished" ): $dateValue##
+#end#* /publishDate
+
+
+
+--------------------------------------------------*###
+#**
+ * Displays a site version message.
+ *###
+#macro ( version )#*
+
+	// render with internationalization support
+	*#$i18n.getString( "site-renderer", $locale, "template.version" ): ${project.version}##
+#end#* /version
+
+
+
+--------------------------------------------------*###
+#**
+ * Outputs XML DOM objects as html elements into the rendered document.
+ * Taken from maven-fluido-skin.
+ *###
+#macro ( htmlContent $items )#*
+
+	*##foreach ( $item in $items )#*
+		*##set ( $itemHtml = $item.toString().trim() )#*
+		*##set ( $documentHeader = '<?xml version="1.0" encoding="UTF-8"?>' )#*
+		*##if ( $item.name == "script" )#*
+			*##set ( $itemHtml = $StringUtils.replace( $item.toUnescapedString(), $documentHeader, "" ) )#*
+		*##else#*
+			*##set ( $itemHtml = $StringUtils.replace( $item.toString(), $documentHeader, "" ) )#*
+		*##end#*
+		// eval the HTML - this will allow users to specify Velocity variables
+		*##evaluate ( $itemHtml )#*
+	*##end##
+#end#* /htmlContent
+
+
+--------------------------------------------------*###
+#**
+ * Marks the first header inside the content as page header, by wrapping it into
+ * a div with `page-header` class
+ *###
+#macro ( bodyWithHeader $content )#*
+	*##if ( $config.not( "markPageHeader" ) )#*
+		// do not mark page header, just print the content
+		*##set ( $bodyWithHeader = $content )#*
+	*##else#*
+		// try marking the header
+		*##set ( $bodyWithHeader = $htmlTool.wrap($content, "h1", '<div class="page-header"></div>', 1) )#*
+		*##if ( $bodyWithHeader == $content )#*
+			// nothing's changed - try with h2
+			*##set ( $bodyWithHeader = $htmlTool.wrap($content, "h2", '<div class="page-header"></div>', 1) )#*
+		*##end#*
+	*##end#*
+	*#$bodyWithHeader
+#end#* /bodyWithHeader
+
+
+
+--------------------------------------------------*###
+#**
+ * Strips empty paragraphs <p></p> from the content and outputs the result
+ *###
+#macro ( stripEmptyP $content )#*
+	// use CSS selector for paragraphs that have no text content (only whitespace - \s),
+	// neither nested elements
+	*#$htmlTool.remove($content, "p:matchesOwn(^${esc.backslash}s*$):not(*:has(*))")
+#end#* /stripEmptyP
+
+
+
+--------------------------------------------------*###
+#**
+ * Adds Google analytics tracker with the given account ID
+ *###
+#macro ( googleAnalytics $accountId )#*
+
+	*##if( $accountId && $accountId != "" )##
+<!-- Google Analytics -->
+<script type="text/javascript">
+
+    var _gaq = _gaq || [];
+    _gaq.push(['_setAccount', '$accountId']);
+    _gaq.push(['_trackPageview']);
+
+    (function() {
+        var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+        ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+    })();
+
+</script>
+#end
+#end#* /googleAnalytics
+
+
+
+--------------------------------------------------*###
+#**
+ * Fixes info collapse for Dependencies report.
+ *
+ * Uses Javascript toggle for "more information" in the dependency tree.
+ *###
+#macro ( depsCollapse )#*
+
+	*##set( $collapseCalls = $htmlTool.getAttr( $bodyContent, 'img[onclick^=toggleDependencyDetail]', "onclick") )#*
+	*##set( $iconReplacements = {} )#*
+	*##set( $collapseSelector = "" )#*
+	*##foreach ( $collapseCall in $collapseCalls )#*
+		*##set ( $funSplit = $collapseCall.split("'") )#*
+		*##if ( $funSplit.size() >= 4 )#*
+			*##set ( $divId = $funSplit.get(1) )#*
+			*##set ( $imgId = $funSplit.get(3) )#*
+			*##set ( $replBefore = '<button title="Information" class="btn btn-link btn-small" type="button" data-toggle="collapse" data-target="#' )#*
+			*##set ( $replAfter = '"><i class="icon-info-sign"></i></button>' )#*
+			*##call ( $iconReplacements.put("#$imgId", "$replBefore$divId$replAfter") )#*
+			*##set ( $collapseSelector = "${collapseSelector}, #$divId" )#*
+		*##end#*
+	*##end#*
+	*##if ( $iconReplacements.size() > 0 )#*
+		*##set ( $bodyContent = $htmlTool.replaceAll( $bodyContent, $iconReplacements ) )#*
+		*##set ( $bodyContent = $htmlTool.addClass( $bodyContent, $collapseSelector, "collapse" ) )#*
+		*##set ( $bodyContent = $htmlTool.setAttr( $bodyContent, $collapseSelector, "style", "" ) )#*
+	*##end##
+#end#* /depsCollapse
+
+
+--------------------------------------------------
+--------------------------------------------------
+ The page HTML
+--------------------------------------------------
+--------------------------------------------------
+
+*###
+<html #if ( $locale ) xml:lang="$locale.language" lang="$locale.language"#end>
+#*
+
+	*##if ( $project.name && $project.name != '' )#*
+		*##set ( $defaultProjectName = $project.name )#*
+	*##else#*
+		*##set ( $defaultProjectName = $project.artifactId )#*
+	*##end#*
+
+	// resolve date position, or set the default otherwise (bottom)
+	// Note, that currently we do not support "navigation-top" position for either publishDate or version.
+	*##set ( $datePosition = "bottom" )#*
+	*##if ( $decoration.publishDate.position )#*
+		*##set ( $datePosition = $decoration.publishDate.position )#*
+	*##end#*
+
+	// resolve version position, or set the default otherwise (bottom)
+	*##set ( $versionPosition = "bottom" )#*
+	*##if ( $decoration.version.position )#*
+		*##set ( $versionPosition = $decoration.version.position )#*
+	*##end#*
+
+	*##if ( $decoration.publishDate.position )#*
+		*##set ( $datePosition = $decoration.publishDate.position )#*
+	*##else#*
+		*##set ( $datePosition = "bottom" )#*
+	*##end#*
+
+	// Try resolving site URL from the POM.
+	// This can help with resolution of relative links, needed for 'active' link calculations,
+	// e.g. to normalise the relative links in menus.
+	*##if ( $project.url && $project.url != '' )#*
+		*##set ( $projectSiteLoc = $project.url )#*
+		*##if ( !$projectSiteLoc.endsWith("/") )#*
+			// ensure that the directory is uniform
+			*##set ( $projectSiteLoc = "$projectSiteLoc/" )#*
+		*##end#*
+	*##else#*
+	  // dummy project URL is used to provide a good base to resolve relative links with ../
+	  *##set ( $projectSiteLoc = "http://dummy.parent.url/" )#*
+	*##end#*
+
+	// absolute location of the current file
+	*##set ( $currentFileLoc = $uriTool.toURI( "$projectSiteLoc" ).resolve( "$currentFileName" ).toString() )#*
+
+	// Check if <toc> is set on the page or globally, then display Table of Contents
+	*##if ( $config.isValue( "toc", "top" ) )#*
+		*##set ( $tocTop = true )#*
+	*##else#*
+		*##set ( $tocTop = false )#*
+	*##end#*
+	*##if ( $config.isValue( "toc", "sidebar" ) )#*
+		*##set ( $tocSidebar = true )#*
+	*##else#*
+		*##set ( $tocSidebar = false )#*
+	*##end#*
+
+	*##if ( !$config.not( "imgLightbox" ) )#*
+		// lightbox is enabled by default, so check for false and negate
+		// TODO explain more?
+		*##set ( $bodyContent = $htmlTool.setAttr( $bodyContent, "a[href$=jpg], a[href$=JPG], a[href$=jpeg], a[href$=JPEG], a[href$=png], a[href$=gif], a[href$=bmp]:has(img)", "data-lightbox", "page" ))#*
+	*##end#*
+
+	*##if ( !$config.not( "html5Anchor" ) )#*
+		// HTML5-style anchors are enabled by default, so check for false and negate
+		*##set ( $bodyContent = $htmlTool.headingAnchorToId( $bodyContent ) )#*
+	*##end#*
+
+	*##if ( !$config.not( "bootstrapCss" ) )#*
+		// Bootstrap CSS class conversion is enabled by default, so check for false and negate
+		*##set ( $bodyContent = $htmlTool.addClass( $bodyContent, "table.bodyTable", ["table", "table-striped", "table-hover"] ) )#*
+		*##set ( $bodyContent = $htmlTool.fixTableHeads( $bodyContent ) )#*
+	*##end#*
+
+	*##if ( !$config.not( "bootstrapIcons" ) )#*
+		// Bootstrap Icons are enabled by default, so check for false and negate
+		*##depsCollapse ()#*
+		*##set ( $iconReplacements = { 'img[src$=images/add.gif]' : '<i class="icon-plus"></i>',
+    'img[src$=images/remove.gif]' : '<i class="icon-remove"></i>',
+    'img[src$=images/fix.gif]' : '<i class="icon-wrench"></i>',
+    'img[src$=images/update.gif]' : '<i class="icon-refresh"></i>',
+    'img[src$=images/icon_help_sml.gif]' : '<i class="icon-question-sign"></i>',
+    'img[src$=images/icon_success_sml.gif]' : '<i class="icon-ok"></i>',
+    'img[src$=images/icon_warning_sml.gif]' : '<i class="icon-warning-sign"></i>',
+    'img[src$=images/icon_error_sml.gif]' : '<i class="icon-exclamation-sign"></i>',
+    'img[src$=images/icon_info_sml.gif]' : '<i class="icon-info-sign"></i>' } )#*
+		*##set ( $bodyContent = $htmlTool.replaceAll( $bodyContent, $iconReplacements ) )#*
+	*##end#*
+
+	*##if ( $tocTop || $tocSidebar )#*
+		// Ensure IDs on all headings to refer to them in TOC
+		*##set ( $bodyContent = $htmlTool.ensureHeadingIds( $bodyContent, "_" ) )#*
+		*##set ( $tocItems = $htmlTool.headingTree( $bodyContent ) )#*
+	*##end#*
+
+
+	// generate a short title if one does not exist or is specified explicitly
+	// if specified explicitly, use that
+	*##set ( $shortTitleGenerated = false )#*
+	*##if ( !$config.not( "shortTitle" ) && ( !$shortTitle || $shortTitle == ''
+|| ($config.shortTitle && !$config.isValue("shortTitle", "generate") && !$config.isValue("shortTitle", "true") ) ) )#*
+		// Page title generation is enabled by default, so check for false and negate
+
+		*##if ( $config.shortTitle && !$config.isValue("shortTitle", "generate") && !$config.isValue("shortTitle", "true") )#*
+			// Use explicitly specified title
+			*##set ( $shortTitle = $config.shortTitle.getValue() )#*
+			*##set ( $shortTitleGenerated = true )#*
+		*##else#*
+			// Generate the title.
+			// To generate the title, we take the contents of the first h1 tag in the document.
+			// If it does not exist, we take the contents of the first h2 tag.
+			*##set ( $hTexts = $htmlTool.text( $bodyContent, "h1" ) )#*
+			*##if ( $hTexts.size() == 0 )#*
+				*##set ( $hTexts = $htmlTool.text( $bodyContent, "h2" ) )#*
+			*##end#*
+			*##if ( $hTexts.size() > 0 )#*
+				*##set ( $shortTitle = $hTexts.get(0) )#*
+				*##set ( $shortTitleGenerated = true )#*
+			*##end#*
+		*##end#*
+
+
+	*##end#*
+
+	// If title template is provided, use it to generate title.
+	// Also regenerate title if a new short title was generated.
+	*##if ( $config.titleTemplate || $shortTitleGenerated )#*
+		// read the title template from configuration
+		*##if ( $config.titleTemplate )#*
+			*##set ( $titleTemplate = $config.titleTemplate.getValue() )#*
+		*##else#*
+			// default template is "projectName - shortTitle"
+			*##set ( $titleTemplate = "%1${esc.d}s - %2${esc.d}s" )#*
+		*##end#*
+
+		// the company/project name is retrieved from decoration ( <project name="Foo">)
+		// or from the project itself
+		*##if ( $decoration.name )#*
+			*##set ( $titleProjectName = $decoration.name )#*
+		*##elseif ( $project.name )#*
+			*##set ( $titleProjectName = $project.name )#*
+		*##else#*
+			*##set ( $titleProjectName = "" )#*
+		*##end#*
+
+		// use String.format() to create new title
+		*##set ( $title = $titleTemplate.format( $titleTemplate, $titleProjectName, $shortTitle ) )#*
+	*##end#*
+
+	*###
+
+<head>
+    <meta charset="${outputEncoding}" />
+    <title>$title</title>
+    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+    <meta name="description" content="" />
+#*	*##foreach ( $author in $authors )##
+    <meta name="author" content="$author" />
+#*	*##end#*
+
+	*##if ( $locale )##
+    <meta http-equiv="content-language" content="$locale.language" />
+#*	*##end#*
+
+	// Use protocol relative URLs: http://paulirish.com/2010/the-protocol-relative-url/
+	// So we need a workaround for local file:// URLs
+	// Use config option <protocolRelativeURLs>true</protocolRelativeURLs>
+	*##if ( $config.is( "protocolRelativeURLs" ) )#*
+		*##set ( $protocol = "" )#*
+	*##else#*
+		*##set ( $protocol = "http:" )#*
+	*##end#*
+
+	// Use config option <absoluteResourceURL>http://mysite.com/</absoluteResourceURL>
+	*##if ( $config.absoluteResourceURL && $config.absoluteResourceURL.getValue() != '' )#*
+		*##currentFileRelativeLink ( $config.absoluteResourceURL.getValue() ) #*
+		*##set ( $resourcePath = $currentFileRelativeLink )#*
+	*##else#*
+		*##set ( $resourcePath = $relativePath )#*
+	*##end#*
+
+	// Config option <localResources>true</localResources> to force CDN-less Bootstrap & jQuery
+	*##if ( $config.is( "localResources" ) )#*
+		*##set ( $localResources = true )#*
+	*##else#*
+		*##set ( $localResources = false )#*
+	*##end#*
+
+	// for 'site' theme, use local CSS/Javascript. This allows users to use their own Bootstrap configs.
+	// Otherwise, load the default or Bootswatch themes from BootstrapCDN
+	*##if ( $localResources || ( $config.theme && "site" == $config.theme.getValue() ) )#*
+		*##set ( $bootstrapCssPath = "$resourcePath/css" )#*
+		*##set ( $bootstrapCssResponsivePath = $bootstrapCssPath )#*
+		*##set ( $bootstrapCssCombined = false )#*
+		*##set ( $bootstrapJsPath = "$resourcePath/js" )#*
+	*##else#*
+		*##set ( $bootstrapVersion = "2.3.2" )#*
+		*##set ( $bootswatchVersion = "2.3.2" )#*
+
+		// use Bootstrap theme from BootstrapCDN (loaded over network)
+		*##if ( $config.theme && $config.theme.getValue().startsWith("bootswatch-") )#*
+			*##set ( $bootswatchTheme = $config.theme.getValue().substring(11) )#*
+		*##else#*
+			*##set ( $bootswatchTheme = false )#*
+		*##end#*
+
+		*##if ( $bootswatchTheme )#*
+			*##set ( $bootstrapCssPath = "$protocol//netdna.bootstrapcdn.com/bootswatch/${bootswatchVersion}/$bootswatchTheme" )#*
+			// use Bootstrap 2.3.1 for responsive CDN, because 2.3.2 is not available (CSS did not change 2.3.1 -> 2.3.2)
+			*##set ( $bootstrapCssResponsivePath = "$protocol//netdna.bootstrapcdn.com/twitter-bootstrap/2.3.1/css" )#*
+			*##set ( $bootstrapCssCombined = false )#*
+		*##else#*
+			*##set ( $bootstrapCssPath = "$protocol//netdna.bootstrapcdn.com/twitter-bootstrap/${bootstrapVersion}/css" )#*
+			// since Bootstrap 2.3.2, the CDN hosts a combined version of default Bootstrap
+			*##set ( $bootstrapCssCombined = true )#*
+		*##end#*
+
+
+		*##set ( $bootstrapJsPath = "$protocol//netdna.bootstrapcdn.com/twitter-bootstrap/${bootstrapVersion}/js" )#*
+
+	*##end##
+
+    <link href="$bootstrapCssPath/bootstrap.min.css" rel="stylesheet" />
+#*		*##if ( !$bootstrapCssCombined )#*
+		    // if Bootstrap CSS is not combined, add bootstrap-responsive CSS *###
+    <link href="$bootstrapCssResponsivePath/bootstrap-responsive.min.css" rel="stylesheet" />
+#*		*##end#*
+		*##if ( $bootswatchTheme )#*
+		    // for Bootswatch themes, add bootswatch.css *###
+    <link href="$resourcePath/css/bootswatch.css" rel="stylesheet" />
+#*		*##else##
+    <link href="$resourcePath/css/docs.css" rel="stylesheet" />
+#*		*##end##
+    <link href="$resourcePath/css/reflow-skin.css" rel="stylesheet" />
+
+#*
+	// disable CDN-loaded highlightJs altogether if `localResources` is selected.
+	// it will need to be added manually
+	*##if ( !$localResources && $config.is( "highlightJs" ) )#*
+		*##set ( $highlightJs = true )#*
+	*##else#*
+		*##set ( $highlightJs = false )#*
+	*##end#*
+	*##set ( $highlightJsVersion = "7.5" )#*
+
+#*	*##if ( $highlightJs )#*
+		// get the configured theme, or use default if not explicitly specified
+		*##if ( $config.highlightJsTheme )#*
+			*##set ( $highlightJsTheme = $config.highlightJsTheme.getValue() )#*
+		*##else#*
+			*##set ( $highlightJsTheme = 'default' )#*
+		*##end#*
+		// use a hosted version of highlight.js for syntax highlighting	*###
+    <link href="$protocol//yandex.st/highlightjs/$highlightJsVersion/styles/${highlightJsTheme}.min.css" rel="stylesheet" />
+#*	*##end##
+
+#*	*##if ( !$config.not( "imgLightbox" ) )#*
+		// if not disabled, include lightbox for showing images	*###
+    <link href="$resourcePath/css/lightbox.css" rel="stylesheet" />
+#*	*##end##
+
+    <link href="$resourcePath/css/site.css" rel="stylesheet" />
+    <link href="$resourcePath/css/print.css" rel="stylesheet" media="print" />
+
+    <!-- Le HTML5 shim, for IE6-8 support of HTML5 elements -->
+    <!--[if lt IE 9]>
+    #*	*##if ( $localResources )##
+    <script src="$resourcePath/js/html5.js"></script>
+    #*	*##else##
+    <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
+    #*	*##end##
+    <![endif]-->
+
+
+#*	*##if ( $decoration.body.head )##
+    #htmlContent ( $decoration.body.head.getChildren() )
+#*	*##end#*
+
+	*##if( $headContent )#*
+		*#$headContent
+#*	*##end#*
+
+	*##googleAnalytics( $decoration.googleAnalyticsAccountId )
+##
+</head>
+
+##	// put page and project slugs as classes to the <body>. This allows page-specific CSS customizations.
+<body class="page-$config.fileId project-$config.projectId" data-spy="scroll" data-offset="60" data-target="${esc.h}toc-scroll-target">
+
+<div class="navbar navbar-fixed-top#if ( $config.is( "navbarInverse" ) ) navbar-inverse#end">
+    <div class="navbar-inner">
+        <div class="container">
+            <a class="btn btn-navbar" data-toggle="collapse" data-target="#top-nav-collapse">
+                <span class="icon-bar"></span>
+                <span class="icon-bar"></span>
+                <span class="icon-bar"></span>
+            </a>
+        #*
+
+            // Insert brand if it is available
+            *##if ( $config.brand )#*
+
+		*##if ( $config.brand.getChild( 'name' ) )#*
+			*##set ( $brandName = $config.brand.getChild( 'name' ).getValue() )#*
+		*##else#*
+			*##set ( $brandName = $defaultProjectName )#*
+		*##end#*
+
+		*##if ( $config.brand.getChild( 'href' ) )#*
+			*##currentFileRelativeLink ( $config.brand.getChild( 'href' ).getValue() )##
+            <a class="brand" href="$currentFileRelativeLink">$brandName</a>
+        #*		*##else##
+            <div class="brand">$brandName</div>
+        #*		*##end#*
+	*##end#*
+
+*###
+            <div class="nav-collapse collapse" id="top-nav-collapse">
+                <ul class="nav pull-right">
+                #*
+
+                    *##if ( $decoration.body.links )#*
+		*##links ( $decoration.body.links )
+                #*	*##end#*
+
+
+	*##if ( $decoration.body.menus )#*
+		// filter menus into the list if <topNav>regex<topNav> is configured
+		*##if ( $config.topNav )#*
+			*##filterMenus ( $decoration.body.menus, $config.topNav.getValue() )#*
+		*##else#*
+			*##set ( $filterMenus = $decoration.body.menus )#*
+		*##end#*
+
+		*##topMenu ( $filterMenus )
+                #*	*##end#* /menus
+
+*###
+                </ul>
+            </div><!--/.nav-collapse -->
+        </div>
+    </div>
+</div>
+
+<div class="container">
+
+    <!-- Masthead
+    ================================================== -->
+#*
+
+	*##if ( ($decoration.bannerLeft.name && $decoration.bannerLeft.name != $project.name || $decoration.bannerLeft.src || $decoration.bannerLeft.href ) || $decoration.bannerRight )#*
+		*##set ( $hasBanner = true )#*
+	*##else#*
+		*##set ( $hasBanner = false )#*
+	*##end##
+
+    <header>
+    #*
+        *##if  ( $hasBanner )##
+        <div class="jumbotron subhead">
+            <div class="row" id="banner">
+                <div class="span12">
+                    <div class="pull-left">
+                    #*					*##banner ( $decoration.bannerLeft "bannerLeft" )
+                    </div>
+                    <div class="pull-right">
+                    #*					*##banner ( $decoration.bannerRight "bannerRight" )
+                    </div>
+                </div>
+            </div>
+        </div>
+    #*	*##end#*
+
+
+	// add a 'breadcrumbs' bar for breadcrumbs, version and publish date (left/right) option
+	*##if ( !$config.not( "breadcrumbs" )
+    && (( $decoration.body.breadcrumbs && $decoration.body.breadcrumbs.size() > 0)
+    || $datePosition == "left" || $versionPosition == "left"
+    || $datePosition == "right" || $versionPosition == "right") )##
+        <div>
+            <ul class="breadcrumb">
+            #*
+                    // left side version/date
+                    *##set ( $addedBefore = false )#*
+		*##if ( $versionPosition == "left" )##
+                <li class="projectVersion version-date">#version ()</li>
+            #*			*##set ( $addedBefore = true )#*
+		*##end#*
+		*##if ( $datePosition == "left" )#*
+			*##if ( $addedBefore )##
+                <li class="divider">|</li>
+            #*			*##end##
+                <li class="publishDate version-date">#publishDate ()</li>
+            #*			*##set ( $addedBefore = true )#*
+		*##end#*
+
+		// breadcrumbs
+		*##if ( !$config.not( "breadcrumbs" ) && $decoration.body.breadcrumbs && $decoration.body.breadcrumbs.size() > 0 )#*
+			*##if ( $addedBefore )##
+                <li class="divider">|</li>
+            #*			*##end#*
+				*##breadcrumbs ( $decoration.body.breadcrumbs )
+            #*		*##end#*
+
+		// right side version/date
+		*##set ( $addedBefore = false )#*
+		*##if ( $datePosition == "right" )##
+                <li class="publishDate version-date pull-right">#publishDate ()</li>
+            #*			*##set ( $addedBefore = true )#*
+		*##end#*
+		*##if ( $versionPosition == "right" )#*
+			*##if ( $addedBefore )##
+                <li class="divider pull-right">|</li>
+            #*			*##end##
+                <li class="projectVersion version-date pull-right">#version ()</li>
+            #*		*##end##
+            </ul>
+        </div>
+    #*	*##end#*
+
+
+	*##if ( $tocTop )##
+        <hr class="toc-separator" />
+    #*
+            // read top offset for fixed ToC bar from the config
+            *##if ( $config.toc.getAttribute("offsetTop") )#*
+			*##set ( $tocOffsetTop = $config.toc.getAttribute("offsetTop") )#*
+		*##else#*
+			*##set ( $tocOffsetTop = "250" )#*
+		*##end#*
+*###
+        <div id="toc-bar" class="navbar" data-spy="affix" data-offset-top="$tocOffsetTop">
+            <div class="navbar-inner">
+                <div id="toc-scroll-target" class="container">
+                    <a class="btn btn-navbar" data-toggle="collapse" data-target="#toc-nav-collapse">
+                        <span class="icon-bar"></span>
+                        <span class="icon-bar"></span>
+                        <span class="icon-bar"></span>
+                    </a>
+                    <div class="nav-collapse collapse" id="toc-nav-collapse">
+                        <ul id="toc" class="nav">
+                        #*							// display Table of Contents in a top bar
+                                                    *##topToc ( $tocItems )
+                        </ul>
+                    </div>
+                </div>
+            </div>
+        </div>
+    #*	*##end##
+    </header>
+
+    <div class="main-body">
+    #*
+
+        *##if ( $config.sections )#*
+		*##bodySections ( $bodyContent $config.sections )
+    #*	*##else#*
+	// non-sectioned body - just output it all	*###
+    <div class="row">
+    #*		*##if ( $tocSidebar )##
+        <div class="span8">
+        #*		*##else##
+        <div class="span12">
+        #*		*##end##
+        <div class="body-content">
+        #*				*##bodyWithHeader ( $bodyContent )
+        </div>
+    </div>
+    #*		*##if ( $tocSidebar )#*
+			*##tocSidebar ()
+        #*		*##end##
+    </div>
+    #*	*##end##
+    </div>
+
+    </div><!-- /container -->
+
+    <!-- Footer
+    ================================================== -->
+    <footer class="well">
+        <div class="container">
+            <div class="row">
+            #*	*##if( $decoration.body.menus )#*
+		// if menus are available, display bottom navigation
+		*##bottomNav ()#*
+	*##else#*
+		*##set ( $totalNavSpan = 0 )#*
+	*##end#*
+
+
+	*##if ( $config.bottomDescription )#*
+		*##set ( $bottomSpanRemainder = 12 - $totalNavSpan )#*
+		*##if ( $bottomSpanRemainder < 0 )#*
+			*##set ( $bottomSpanRemainder = 1 )#*
+		*##end##
+                <div class="span$bottomSpanRemainder bottom-description">
+                #*		*##if ( $config.bottomDescription.getChildCount() > 0 )##
+                    #htmlContent ( $config.bottomDescription.getChildren() )
+                #*		*##elseif ( $config.bottomDescription.getAttribute("quote") && 'false' == $config.bottomDescription.getAttribute("quote") )#*
+					// no quote	*###
+                    $config.bottomDescription.getValue()
+                #*		*##else##
+                    <blockquote>$config.bottomDescription.getValue()</blockquote>
+                #*		*##end#*
+
+		// add version and publish date if the position is "navigation-bottom"
+		// (note that 'bottomDescription' needs to be enabled)
+		*##if ( $datePosition == "navigation-bottom" || $versionPosition == "navigation-bottom" )##
+                    <blockquote class="version-date">#*
+			*##if ( $versionPosition == "navigation-bottom" )#*
+						*#<span class="projectVersion">#version ()</span>#*
+				// add a line break if date is also displayed here
+				*##if ( $datePosition == "navigation-bottom" )#*
+						*#<br/>#*
+				*##end#*
+			*##end#*
+
+			// now add the date
+			*##if ( $datePosition == "navigation-bottom" )#*
+						*#<span class="publishDate">#publishDate ()</span>#*
+			*##end</blockquote>
+                #*		*##end##
+                </div>
+            #*	*##end#*
+
+*###
+            </div>
+        </div>
+    </footer>
+
+    <div class="container subfooter">
+        <div class="row">
+            <div class="span12">
+                <p class="pull-right"><a href="#">Back to top</a></p>
+                <p class="copyright">Copyright &copy;#copyright (). All Rights Reserved.</p>
+            #*	*##if ( $datePosition == "bottom" || $versionPosition == "bottom" )##
+                <p class="version-date">#*
+					*##if ( $versionPosition == "bottom" )<span class="projectVersion">#version (). </span>#end#*
+				 	*##if ( $datePosition == "bottom" )<span class="publishDate">#publishDate (). </span>#end#*
+				*#</p>
+            #*	*##end#*
+
+#*	*##if ( !$config.not("skinAttribution") )##
+                <p><a href="http://github.com/andriusvelykis/reflow-maven-skin" title="Reflow Maven skin">Reflow Maven skin</a> by <a href="http://andrius.velykis.lt" target="_blank" title="Andrius Velykis">Andrius Velykis</a>.</p>
+            #*	*##end#*
+
+
+	*##if ( $decoration.body.footer )##
+                #htmlContent ( $decoration.body.footer.getChildren() )
+            #*	*##end#*
+
+*###
+            </div>
+        </div>
+    </div>
+
+    <!-- Le javascript
+    ================================================== -->
+    <!-- Placed at the end of the document so the pages load faster -->
+#*
+	*##if ( $localResources )##
+    <script src="$resourcePath/js/jquery.min.js"></script>
+#*	*##else##
+    <script src="$protocol//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
+#*	*##end##
+
+    <script src="$bootstrapJsPath/bootstrap.min.js"></script>
+#*
+	*##if ( !$config.not( "imgLightbox" ) )#*
+		// if not disabled, include lightbox for showing images	*###
+    <script src="$resourcePath/js/lightbox.min.js"></script>
+#*	*##end#*
+
+	*##if ( !$config.not( "smoothScroll" ) )#*
+		// if not disabled, include smooth scrolling *###
+    <script src="$resourcePath/js/reflow-scroll.js"></script>
+#*	*##end#*
+
+	*##if ( $highlightJs )#*
+		// use a hosted version of highlight.js for syntax highlighting	*###
+    <script src="$protocol//yandex.st/highlightjs/$highlightJsVersion/highlight.min.js"></script>
+#*	*##end#*
+
+	*##if ( $config.endContent )#*
+		// custom HTML (e.g. JavaScript) to place at the end of the document before </body>	*###
+    #htmlContent ( $config.endContent.getChildren() )
+#*	*##end##
+
+    <script src="$resourcePath/js/reflow-skin.js"></script>
+
+</body>
+</html>
\ No newline at end of file

-- 
To stop receiving notification emails like this one, please contact
"commits@plc4x.apache.org" <co...@plc4x.apache.org>.