Velocity Template Example

The following is a sample Velocity template you could use to merge your files. This is the default_site.vm file used by the maven site plugin.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<!-- Generated by Apache Maven Doxia at $dateFormat.format( $currentDate ) -->
#macro ( link $href $name $target $img $position $alt $border $width $height )
  #set ( $linkTitle = ' title="' + $name + '"' )
  #if( $target )
    #set ( $linkTarget = ' target="' + $target + '"' )
  #else
    #set ( $linkTarget = "" )
  #end
  #if ( ( $href.toLowerCase().startsWith("http") || $href.toLowerCase().startsWith("https") ) )
    #set ( $linkClass = ' class="externalLink"' )
  #else
    #set ( $linkClass = "" )
  #end
  #if ( $img )
    #if ( $position == "left" )
      <a href="$href"$linkClass$linkTarget$linkTitle>#image($img $alt $border $width $height)$name</a>
    #else
      <a href="$href"$linkClass$linkTarget$linkTitle>$name #image($img $alt $border $width $height)</a>
    #end
  #else
    <a href="$href"$linkClass$linkTarget$linkTitle>$name</a>
  #end
#end
##
#macro ( image $img $alt $border $width $height )
  #if( $img )
    #if ( ! ( $img.toLowerCase().startsWith("http") || $img.toLowerCase().startsWith("https") ) )
      #set ( $imgSrc = $PathTool.calculateLink( $img, ${relativePath} ) )
      #set ( $imgSrc = $imgSrc.replaceAll( "\\", "/" ) )
      #set ( $imgSrc = ' src="' + $imgSrc + '"' )
    #else
      #set ( $imgSrc = ' src="' + $img + '"' )
    #end
    #if( $alt )
      #set ( $imgAlt = ' alt="' + $alt + '"' )
    #else
      #set ( $imgAlt = ' alt=""' )
    #end
    #if( $border )
      #set ( $imgBorder = ' border="' + $border + '"' )
    #else
      #set ( $imgBorder = "" )
    #end
    #if( $width )
      #set ( $imgWidth = ' width="' + $width + '"' )
    #else
      #set ( $imgWidth = "" )
    #end
    #if( $height )
      #set ( $imgHeight = ' height="' + $height + '"' )
    #else
      #set ( $imgHeight = "" )
    #end
    <img class="imageLink"$imgSrc$imgAlt$imgBorder$imgWidth$imgHeight/>
  #end
#end
#macro ( banner $banner $id )
  #if ( $banner )
    #if( $banner.href )
      <a href="$banner.href" id="$id"#if( $banner.alt ) title="$banner.alt"#end>
    #else
        <div id="$id">
    #end
##
    #if( $banner.src )
        #set ( $src = $banner.src )
        #if ( ! ( $src.toLowerCase().startsWith("http") || $src.toLowerCase().startsWith("https") ) )
            #set ( $src = $PathTool.calculateLink( $src, ${relativePath} ) )
            #set ( $src = $src.replaceAll( "\\", "/" ) )
        #end
        #if ( $banner.alt )
            #set ( $alt = $banner.alt )
        #else
            #set ( $alt = $banner.name )
        #end
        <img src="$src" alt="$alt" />
    #else
        $banner.name
    #end
##
    #if( $banner.href )
        </a>
    #else
        </div>
    #end
  #end
#end
##
#macro ( links $links )
  #set ( $counter = 0 )
  #foreach( $item in $links )
    #set ( $counter = $counter + 1 )
    #set ( $currentItemHref = $PathTool.calculateLink( $item.href, ${relativePath} ) )
    #set ( $currentItemHref = $currentItemHref.replaceAll( "\\", "/" ) )
    #link( $currentItemHref $item.name $item.target $item.img $item.position $item.alt $item.border $item.width $item.height )
    #if ( $links.size() > $counter )
      |
    #end
  #end
#end
##
#macro ( breadcrumbs $breadcrumbs )
  #set ( $counter = 0 )
  #foreach( $item in $breadcrumbs )
    #set ( $counter = $counter + 1 )
    #set ( $currentItemHref = $PathTool.calculateLink( $item.href, ${relativePath} ) )
    #set ( $currentItemHref = $currentItemHref.replaceAll( "\\", "/" ) )
##
    #if ( $currentItemHref == $alignedFileName || $currentItemHref == "" )
      $item.name
    #else
      #link( $currentItemHref $item.name $item.target $item.img $item.position $item.alt $item.border $item.width $item.height )
    #end
    #if ( $breadcrumbs.size() > $counter )
      &gt;
    #end
  #end
#end
##
#macro ( displayTree $display $item )
  #if ( $item && $item.items && $item.items.size() > 0 )
    #foreach( $subitem in $item.items )
      #set ( $subitemHref = $PathTool.calculateLink( $subitem.href, ${relativePath} ) )
      #set ( $subitemHref = $subitemHref.replaceAll( "\\", "/" ) )
      #if ( $alignedFileName == $subitemHref )
        #set ( $display = true )
      #end
##
      #displayTree( $display $subitem )
    #end
  #end
#end
##
#macro ( menuItem $item )
  #set ( $collapse = "none" )
  #set ( $currentItemHref = $PathTool.calculateLink( $item.href, ${relativePath} ) )
  #set ( $currentItemHref = $currentItemHref.replaceAll( "\\", "/" ) )
##
  #if ( $item && $item.items && $item.items.size() > 0 )
    #if ( $item.collapse == false )
      #set ( $collapse = "expanded" )
    #else
      ## By default collapsed
      #set ( $collapse = "collapsed" )
    #end
##
    #set ( $display = false )
    #displayTree( $display $item )
##
    #if ( $alignedFileName == $currentItemHref || $display )
      #set ( $collapse = "expanded" )
    #end
  #end
  <li class="$collapse">
  #if ( $item.img )
    #if ( $item.position == "left" )
      #if ( $alignedFileName == $currentItemHref )
        <strong>#image($item.img $item.alt $item.border $item.width $item.height) $item.name</strong>
      #else
        #link($currentItemHref $item.name $item.target $item.img $item.position $item.alt $item.border $item.width $item.height)
      #end
    #else
      #if ( $alignedFileName == $currentItemHref )
        <strong>$item.name #image($item.img $item.alt $item.border $item.width $item.height)</strong>
      #else
        #link($currentItemHref $item.name $item.target $item.img $item.position $item.alt $item.border $item.width $item.height)
      #end
    #end
  #else
    #if ( $alignedFileName == $currentItemHref )
      <strong>$item.name</strong>
    #else
      #link( $currentItemHref $item.name $item.target $item.img $item.position $item.alt $item.border $item.width $item.height )
    #end
  #end
  #if ( $item && $item.items && $item.items.size() > 0 )
    #if ( $collapse == "expanded" )
      <ul>
        #foreach( $subitem in $item.items )
          #menuItem( $subitem )
        #end
      </ul>
    #end
  #end
  </li>
#end
##
#macro ( mainMenu $menus )
  #foreach( $menu in $menus )
    #if ( $menu.name )
      #if ( $menu.img )
        #if( $menu.position )
          #set ( $position = $menu.position )
        #else
          #set ( $position = "left" )
        #end
##
        #if ( ! ( $menu.img.toLowerCase().startsWith("http") || $menu.img.toLowerCase().startsWith("https") ) )
          #set ( $src = $PathTool.calculateLink( $menu.img, ${relativePath} ) )
          #set ( $src = $src.replaceAll( "\\", "/" ) )
          #set ( $src = ' src="' + $src + '"' )
        #else
          #set ( $src = ' src="' + $menu.img + '"' )
        #end
##
        #if( $menu.alt )
          #set ( $alt = ' alt="' + $menu.alt + '"' )
        #else
          #set ( $alt = ' alt="' + $menu.name + '"' )
        #end
##
        #if( $menu.border )
          #set ( $border = ' border="' + $menu.border + '"' )
        #else
          #set ( $border = ' border="0"' )
        #end
##
        #if( $menu.width )
          #set ( $width = ' width="' + $menu.width + '"' )
        #else
          #set ( $width = "" )
        #end
        #if( $menu.height )
          #set ( $height = ' height="' + $menu.height + '"' )
        #else
          #set ( $height = "" )
        #end
##
        #set ( $img = '<img class="imageLink"' + $src + $alt + $border + $width + $height + "/>" )
##
        #if ( $position == "left" )
        <h5>$img $menu.name</h5>
        #else
        <h5>$menu.name $img</h5>
        #end
      #else
       <h5>$menu.name</h5>
      #end
    #end
    #if ( $menu.items && $menu.items.size() > 0 )
    <ul>
      #foreach( $item in $menu.items )
        #menuItem( $item )
      #end
    </ul>
    #end
  #end
#end
##
#macro ( copyright )
  #if ( $project )
    #if ( ${project.organization} && ${project.organization.name} )
      #set ( $period = "" )
    #else
      #set ( $period = "." )
   #end
##
   #set ( $currentYear = ${currentDate.year} + 1900 )
##
    #if ( ${project.inceptionYear} && ( ${project.inceptionYear} != ${currentYear.toString()} ) )
      ${project.inceptionYear}-${currentYear}${period}
    #else
      ${currentYear}${period}
    #end
##
    #if ( ${project.organization} )
      #if ( ${project.organization.name} && ${project.organization.url} )
          <a href="$project.organization.url">${project.organization.name}</a>.
      #elseif ( ${project.organization.name} )
        ${project.organization.name}.
      #end
    #end
  #end
#end
##
#macro ( publishDate $position $publishDate $version )
  #if ( $publishDate && $publishDate.format )
    #set ( $format = $publishDate.format )
  #else
    #set ( $format = "yyyy-MM-dd" )
  #end
##
  $dateFormat.applyPattern( $format )
##
  #set ( $dateToday = $dateFormat.format( $currentDate ) )
##
  #if ( $publishDate && $publishDate.position )
    #set ( $datePosition = $publishDate.position )
  #else
    #set ( $datePosition = "left" )
  #end
##
  #if ( $version )
    #if ( $version.position )
      #set ( $versionPosition = $version.position )
    #else
      #set ( $versionPosition = "left" )
    #end
  #else
    #set ( $version = "" )
    #set ( $versionPosition = "left" )
  #end
##
  #set ( $breadcrumbs = $decoration.body.breadcrumbs )
  #set ( $links = $decoration.body.links )

  #if ( $datePosition.equalsIgnoreCase( "right" ) && $links && $links.size() > 0 )
    #set ( $prefix = "&nbsp;|" )
  #else
    #set ( $prefix = "" )
  #end
##
  #if ( $datePosition.equalsIgnoreCase( $position ) )
    #if ( ( $datePosition.equalsIgnoreCase( "right" ) ) || ( $datePosition.equalsIgnoreCase( "bottom" ) ) )
      $prefix <span id="publishDate">$i18n.getString( "site-renderer", $locale, "template.lastpublished" ): $dateToday</span>
      #if ( $versionPosition.equalsIgnoreCase( $position ) )
        &nbsp;| <span id="projectVersion">$i18n.getString( "site-renderer", $locale, "template.version" ): ${project.version}</span>
      #end
    #elseif ( ( $datePosition.equalsIgnoreCase( "navigation-bottom" ) ) || ( $datePosition.equalsIgnoreCase( "navigation-top" ) ) )
      <div id="lastPublished">
        <span id="publishDate">$i18n.getString( "site-renderer", $locale, "template.lastpublished" ): $dateToday</span>
        #if ( $versionPosition.equalsIgnoreCase( $position ) )
          &nbsp;| <span id="projectVersion">$i18n.getString( "site-renderer", $locale, "template.version" ): ${project.version}</span>
        #end
      </div>
    #elseif ( $datePosition.equalsIgnoreCase("left") )
      <div class="xleft">
        <span id="publishDate">$i18n.getString( "site-renderer", $locale, "template.lastpublished" ): $dateToday</span>
        #if ( $versionPosition.equalsIgnoreCase( $position ) )
          &nbsp;| <span id="projectVersion">$i18n.getString( "site-renderer", $locale, "template.version" ): ${project.version}</span>
        #end
        #if ( $breadcrumbs && $breadcrumbs.size() > 0 )
          | #breadcrumbs( $breadcrumbs )
        #end
      </div>
    #end
  #elseif ( $versionPosition.equalsIgnoreCase( $position ) )
    #if ( ( $versionPosition.equalsIgnoreCase( "right" ) ) || ( $versionPosition.equalsIgnoreCase( "bottom" ) ) )
      $prefix <span id="projectVersion">$i18n.getString( "site-renderer", $locale, "template.version" ): ${project.version}</span>
    #elseif ( ( $versionPosition.equalsIgnoreCase( "navigation-bottom" ) ) || ( $versionPosition.equalsIgnoreCase( "navigation-top" ) ) )
      <div id="lastPublished">
        <span id="projectVersion">$i18n.getString( "site-renderer", $locale, "template.version" ): ${project.version}</span>
      </div>
    #elseif ( $versionPosition.equalsIgnoreCase("left") )
      <div class="xleft">
        <span id="projectVersion">$i18n.getString( "site-renderer", $locale, "template.version" ): ${project.version}</span>
        #if ( $breadcrumbs && $breadcrumbs.size() > 0 )
          | #breadcrumbs( $breadcrumbs )
        #end
      </div>
    #end
  #elseif ( $position.equalsIgnoreCase( "left" ) )
    #if ( $breadcrumbs && $breadcrumbs.size() > 0 )
      <div class="xleft">
        #breadcrumbs( $breadcrumbs )
      </div>
    #end
  #end
#end
##
#macro ( poweredByLogo $poweredBy )
  #if( $poweredBy )
    #foreach ($item in $poweredBy)
      #if( $item.href )
        #set ( $href = $PathTool.calculateLink( $item.href, ${relativePath} ) )
        #set ( $href = $href.replaceAll( "\\", "/" ) )
      #else
        #set ( $href="http://maven.apache.org/" )
      #end
##
      #if( $item.name )
        #set ( $name = $item.name )
      #else
        #set ( $name = $i18n.getString( "site-renderer", $locale, "template.builtby" )  )
        #set ( $name = "${name} Maven"  )
      #end
##
      #if( $item.img )
        #set ( $img = $item.img )
      #else
        #set ( $img = "images/logos/maven-feather.png" )
      #end
##
      #if ( ! ( $img.toLowerCase().startsWith("http") || $img.toLowerCase().startsWith("https") ) )
        #set ( $img = $PathTool.calculateLink( $img, ${relativePath} ) )
        #set ( $img = $src.replaceAll( "\\", "/" ) )
      #end
##
      #if( $item.alt )
        #set ( $alt = ' alt="' + $item.alt + '"' )
      #else
        #set ( $alt = ' alt="' + $name + '"' )
      #end
##
      #if( $item.border )
        #set ( $border = ' border="' + $item.border + '"' )
      #else
        #set ( $border = "" )
      #end
##
      #if( $item.width )
        #set ( $width = ' width="' + $item.width + '"' )
      #else
        #set ( $width = "" )
      #end
      #if( $item.height )
        #set ( $height = ' height="' + $item.height + '"' )
      #else
        #set ( $height = "" )
      #end
##
      <a href="$href" title="$name" class="poweredBy">
        <img class="poweredBy" $alt src="$img" $border $width $height />
      </a>
    #end
    #if( $poweredBy.isEmpty() )
      <a href="http://maven.apache.org/" title="$i18n.getString( "site-renderer", $locale, "template.builtby" ) Maven" class="poweredBy">
        <img class="poweredBy" alt="$i18n.getString( "site-renderer", $locale, "template.builtby" ) Maven" src="${relativePath}/images/logos/maven-feather.png" />
      </a>
    #end
  #else
    <a href="http://maven.apache.org/" title="$i18n.getString( "site-renderer", $locale, "template.builtby" ) Maven" class="poweredBy">
      <img class="poweredBy" alt="$i18n.getString( "site-renderer", $locale, "template.builtby" ) Maven" src="${relativePath}/images/logos/maven-feather.png" />
    </a>
  #end
#end
##
<html xmlns="http://www.w3.org/1999/xhtml"#if ( $locale ) xml:lang="$locale.language" lang="$locale.language"#end>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=${outputEncoding}" />
    <title>$title</title>
    <style type="text/css" media="all">
      @import url("${relativePath}/css/maven-base.css");
      @import url("${relativePath}/css/maven-theme.css");
      @import url("${relativePath}/css/site.css");
      @import url("${relativePath}/css/highlight.css");
    </style>
    <link rel="stylesheet" href="${relativePath}/css/print.css" type="text/css" media="print" />
#foreach( $author in $authors )
      <meta name="author" content="$author" />
#end
#if ( $dateCreation )
    <meta name="Date-Creation-yyyymmdd" content="$dateCreation" />
#end
#if ( $dateRevision )
    <meta name="Date-Revision-yyyymmdd" content="$dateRevision" />
#end
#if ( $locale )
    <meta http-equiv="Content-Language" content="$locale.language" />
#end
    #if ( $decoration.body.head )
      #foreach( $item in $decoration.body.head.getChildren() )
        ## Workaround for DOXIA-150 due to a non-desired behaviour in p-u
        ## @see org.codehaus.plexus.util.xml.Xpp3Dom#toString()
        ## @see org.codehaus.plexus.util.xml.Xpp3Dom#toUnescapedString()
        #set ( $documentHeader = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" )
        #set ( $documentHeader = $documentHeader.replaceAll( "\\", "" ) )
        #if ( $item.name == "script" )
          $StringUtils.replace( $item.toUnescapedString(), $documentHeader, "" )
        #else
          $StringUtils.replace( $item.toString(), $documentHeader, "" )
        #end
      #end
    #end
    $headContent
  </head>
  <body class="composite">
    <div id="banner">
      #banner( $decoration.bannerLeft "bannerLeft" )
      #banner( $decoration.bannerRight "bannerRight" )
      <div class="clear">
        <hr/>
      </div>
    </div>
    <div id="breadcrumbs">
      #publishDate( "left" $decoration.publishDate $decoration.version )
      <div class="xright">#links( $decoration.body.links )#publishDate( "right" $decoration.publishDate $decoration.version )</div>
      <div class="clear">
        <hr/>
      </div>
    </div>
    <div id="leftColumn">
      <div id="navcolumn">
       #publishDate( "navigation-top" $decoration.publishDate $decoration.version )
       #mainMenu( $decoration.body.menus )
       #poweredByLogo( $decoration.poweredBy )
       #publishDate( "navigation-bottom" $decoration.publishDate $decoration.version )
      </div>
    </div>
    <div id="bodyColumn">
      <div id="contentBox">
        $bodyContent
      </div>
    </div>
    <div class="clear">
      <hr/>
    </div>
    <div id="footer">
      <div class="xright">Copyright &#169;#copyright()All Rights Reserved.#publishDate( "bottom" $decoration.publishDate $decoration.version )</div>
      <div class="clear">
        <hr/>
      </div>
    </div>
  </body>
</html>