+++ /dev/null
-<?xml version="1.0"?>
-<!--
- 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.
--->
-<!--
-site-to-xhtml.xsl is the final stage in HTML page production. It merges HTML from
-document-to-html.xsl, tab-to-menu.xsl and book-to-menu.xsl, and adds the site header,
-footer, searchbar, css etc. As input, it takes XML of the form:
-
-<site>
- <div class="menu">
- ...
- </div>
- <div class="tab">
- ...
- </div>
- <div class="content">
- ...
- </div>
-</site>
-
--->
-<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
- xmlns:java="http://xml.apache.org/xslt/java" exclude-result-prefixes="java">
- <xsl:variable name="config" select="//skinconfig"/>
-<!-- If true, a txt link for this page will not be generated -->
- <xsl:variable name="disable-txt-link" select="//skinconfig/disable-txt-link"/>
-<!-- If true, a PDF link for this page will not be generated -->
- <xsl:variable name="disable-pdf-link" select="//skinconfig/disable-pdf-link"/>
-<!-- If true, a "print" link for this page will not be generated -->
- <xsl:variable name="disable-print-link" select="//skinconfig/disable-print-link"/>
-<!-- If true, an XML link for this page will not be generated -->
- <xsl:variable name="disable-xml-link" select="//skinconfig/disable-xml-link"/>
-<!-- If true, a POD link for this page will not be generated -->
- <xsl:variable name="disable-pod-link" select="//skinconfig/disable-pod-link"/>
-<!-- Get the location where to generate the minitoc -->
- <xsl:variable name="minitoc-location" select="//skinconfig/toc/@location"/>
- <xsl:param name="path"/>
- <xsl:include href="dotdots.xsl"/>
- <xsl:include href="pathutils.xsl"/>
- <xsl:include href="renderlogo.xsl"/>
-<!-- Path (..'s) to the root directory -->
- <xsl:variable name="root">
- <xsl:call-template name="dotdots">
- <xsl:with-param name="path" select="$path"/>
- </xsl:call-template>
- </xsl:variable>
-<!-- Source filename (eg 'foo.xml') of current page -->
- <xsl:variable name="filename">
- <xsl:call-template name="filename">
- <xsl:with-param name="path" select="$path"/>
- </xsl:call-template>
- </xsl:variable>
-<!-- Path of Lucene search results page (relative to $root) -->
- <xsl:param name="lucene-search" select="'lucene-search.html'"/>
- <xsl:variable name="filename-noext">
- <xsl:call-template name="filename-noext">
- <xsl:with-param name="path" select="$path"/>
- </xsl:call-template>
- </xsl:variable>
-<!-- Whether to obfuscate email links -->
- <xsl:variable name="obfuscate-mail-links" select="//skinconfig/obfuscate-mail-links"/>
-<!-- If true, the font size script will not be rendered -->
- <xsl:variable name="disable-font-script" select="//skinconfig/disable-font-script"/>
-<!-- If true, an the images on all external links will not be added -->
- <xsl:variable name="disable-external-link-image" select="//skinconfig/disable-external-link-image"/>
- <xsl:variable name="skin-img-dir" select="concat(string($root), 'skin/images')"/>
- <xsl:variable name="spacer" select="concat($root, 'skin/images/spacer.gif')"/>
- <xsl:template name="breadcrumbs">
- <xsl:if test="(//skinconfig/trail/link1/@name)and(//skinconfig/trail/link1/@name!='')"><a href="{//skinconfig/trail/link1/@href}">
- <xsl:value-of select="//skinconfig/trail/link1/@name"/></a>
- </xsl:if>
- <xsl:if test="(//skinconfig/trail/link2/@name)and(//skinconfig/trail/link2/@name!='')"> > <a href="{//skinconfig/trail/link2/@href}">
- <xsl:value-of select="//skinconfig/trail/link2/@name"/></a>
- </xsl:if>
- <xsl:if test="(//skinconfig/trail/link3/@name)and(//skinconfig/trail/link3/@name!='')"> > <a href="{//skinconfig/trail/link3/@href}">
- <xsl:value-of select="//skinconfig/trail/link3/@name"/></a>
- </xsl:if>
-<script type="text/javascript" language="JavaScript" src="{$root}skin/breadcrumbs.js"/>
- </xsl:template>
- <xsl:template match="site">
- <html>
- <head>
- <title><xsl:value-of select="div[@class='content']/table/tr/td/h1"/></title>
- <xsl:if test="//skinconfig/favicon-url"><link rel="shortcut icon">
- <xsl:attribute name="href">
- <xsl:value-of select="concat($root,//skinconfig/favicon-url)"/>
- </xsl:attribute></link>
- </xsl:if>
- </head>
- <body>
- <xsl:if test="//skinconfig/group-url">
- <xsl:call-template name="renderlogo">
- <xsl:with-param name="name" select="//skinconfig/group-name"/>
- <xsl:with-param name="url" select="//skinconfig/group-url"/>
- <xsl:with-param name="logo" select="//skinconfig/group-logo"/>
- <xsl:with-param name="root" select="$root"/>
- <xsl:with-param name="description" select="//skinconfig/group-description"/>
- </xsl:call-template>
- </xsl:if>
- <xsl:call-template name="renderlogo">
- <xsl:with-param name="name" select="//skinconfig/project-name"/>
- <xsl:with-param name="url" select="//skinconfig/project-url"/>
- <xsl:with-param name="logo" select="//skinconfig/project-logo"/>
- <xsl:with-param name="root" select="$root"/>
- <xsl:with-param name="description" select="//skinconfig/project-description"/>
- </xsl:call-template>
- <xsl:comment>================= start Tabs ==================</xsl:comment>
- <xsl:apply-templates select="div[@class='tab']"/>
- <xsl:comment>================= end Tabs ==================</xsl:comment>
- <xsl:comment>================= start Menu items ==================</xsl:comment>
- <xsl:apply-templates select="div[@class='menu']"/>
- <xsl:comment>================= end Menu items ==================</xsl:comment>
- <xsl:comment>================= start Content==================</xsl:comment>
- <xsl:apply-templates select="div[@class='content']"/>
- <xsl:comment>================= end Content==================</xsl:comment>
- <xsl:comment>================= start Footer ==================</xsl:comment>
- <xsl:choose>
- <xsl:when test="$config/copyright-link"><a>
- <xsl:attribute name="href">
- <xsl:value-of select="$config/copyright-link"/>
- </xsl:attribute>
- Copyright © <xsl:value-of select="$config/year"/>
- <xsl:call-template name="current-year">
- <xsl:with-param name="copyrightyear" select="$config/year"/>
- </xsl:call-template> 
- <xsl:value-of select="$config/vendor"/></a>
- </xsl:when>
- <xsl:otherwise>
- Copyright © <xsl:value-of select="$config/year"/>
- <xsl:call-template name="current-year">
- <xsl:with-param name="copyrightyear" select="$config/year"/>
- </xsl:call-template> 
- <xsl:value-of select="$config/vendor"/>
- </xsl:otherwise>
- </xsl:choose>
- All rights reserved.
- <script language="JavaScript" type="text/javascript"><![CDATA[<!--
- document.write(" - "+"Last Published: " + document.lastModified);
- // -->]]></script>
- <xsl:if test="//skinconfig/host-logo and not(//skinconfig/host-logo = '')"><a href="{//skinconfig/host-url}">
- <xsl:call-template name="renderlogo">
- <xsl:with-param name="name" select="//skinconfig/host-name"/>
- <xsl:with-param name="url" select="//skinconfig/host-url"/>
- <xsl:with-param name="logo" select="//skinconfig/host-logo"/>
- <xsl:with-param name="root" select="$root"/>
- </xsl:call-template></a>
- </xsl:if>
- <xsl:if test="$filename = 'index.html' and //skinconfig/credits">
- <xsl:for-each select="//skinconfig/credits/credit[not(@role='pdf')]">
- <xsl:call-template name="renderlogo">
- <xsl:with-param name="name" select="name"/>
- <xsl:with-param name="url" select="url"/>
- <xsl:with-param name="logo" select="image"/>
- <xsl:with-param name="root" select="$root"/>
- <xsl:with-param name="width" select="width"/>
- <xsl:with-param name="height" select="height"/>
- </xsl:call-template>
- </xsl:for-each>
- </xsl:if><a href="http://validator.w3.org/check/referer">
- <img class="skin" border="0"
- src="http://www.w3.org/Icons/valid-html401"
- alt="Valid HTML 4.01!" height="31" width="88"/></a>
- </body>
- </html>
- </xsl:template>
-<!-- Add links to any standards-compliance logos -->
- <xsl:template name="compliancy-logos">
- <xsl:if test="$filename = 'index.html' and //skinconfig/disable-compliance-links = 'false'"><a href="http://validator.w3.org/check/referer">
- <img class="logoImage"
- src="{$skin-img-dir}/valid-html401.png"
- alt="Valid HTML 4.01!" title="Valid HTML 4.01!" height="31" width="88" border="0"/></a><a href="http://jigsaw.w3.org/css-validator/check/referer">
- <img class="logoImage"
- src="{$skin-img-dir}/vcss.png"
- alt="Valid CSS!" title="Valid CSS!" height="31" width="88" border="0"/></a>
- </xsl:if>
- </xsl:template>
-<!-- Generates the PDF link -->
- <xsl:template match="div[@id='skinconf-pdflink']">
- <xsl:if test="not($config/disable-pdf-link) or $disable-pdf-link = 'false'">
- <td align="center" width="40" nowrap="nowrap"><a href="{$filename-noext}.pdf" class="dida">
- <img class="skin" src="{$skin-img-dir}/pdfdoc.gif" alt="PDF"/>
- <br/>
- PDF</a>
- </td>
- </xsl:if>
- </xsl:template>
-<!-- Generates the TXT link -->
- <xsl:template match="div[@id='skinconf-txtlink']">
- <xsl:if test="$disable-txt-link = 'false'">
- <td align="center" width="40" nowrap="nowrap"><a href="{$filename-noext}.txt" class="dida">
- <img class="skin" src="{$skin-img-dir}/txtdoc.png" alt="TXT"/>
- <br/>
- TXT</a>
- </td>
- </xsl:if>
- </xsl:template>
-<!-- Generates the POD link -->
- <xsl:template match="div[@id='skinconf-podlink']">
- <xsl:if test="$disable-pod-link = 'false'">
- <td align="center" width="40" nowrap="nowrap"><a href="{$filename-noext}.pod" class="dida">
- <img class="skin" src="{$skin-img-dir}/poddoc.png" alt="POD"/>
- <br/>
- POD</a>
- </td>
- </xsl:if>
- </xsl:template>
-<!-- Generates the XML link -->
- <xsl:template match="div[@id='skinconf-xmllink']">
- <xsl:if test="$disable-xml-link = 'false'">
- <td align="center" width="40" nowrap="nowrap"><a href="{$filename-noext}.xml" class="dida">
- <img class="skin" src="{$skin-img-dir}/xmldoc.gif" alt="XML"/>
- <br/>
- XML</a>
- </td>
- </xsl:if>
- </xsl:template>
-<!-- Generates the "printer friendly version" link -->
- <xsl:template match="div[@id='skinconf-printlink']">
- <xsl:if test="$disable-print-link = 'false'">
-<script type="text/javascript" language="Javascript">
-function printit() {
- if (window.print) {
- window.focus();
- window.print();
- }
-}
-
-var NS = (navigator.appName == "Netscape");
-var VERSION = parseInt(navigator.appVersion);
-if (VERSION > 3) {
- document.write('<td align="center" width="40" nowrap="nowrap">');
- document.write(' <a href="javascript:printit()" class="dida">');
- document.write(' <img class="skin" src="{$skin-img-dir}/printer.gif" alt="Print this Page"/><br />');
- document.write(' print</a>');
- document.write('</td>');
-}
-</script>
- </xsl:if>
- </xsl:template>
-<!-- handle all obfuscating mail links and disabling external link images -->
- <xsl:template match="a">
- <xsl:choose>
- <xsl:when test="$obfuscate-mail-links='true' and starts-with(@href, 'mailto:') and contains(@href, '@')">
- <xsl:variable name="mailto-1" select="substring-before(@href,'@')"/>
- <xsl:variable name="mailto-2" select="substring-after(@href,'@')"/>
- <xsl:variable name="obfuscation" select="normalize-space(//skinconfig/obfuscate-mail-value)"/><a href="{$mailto-1}{$obfuscation}{$mailto-2}">
- <xsl:apply-templates/></a>
- </xsl:when>
- <xsl:when test="not($disable-external-link-image='true') and contains(@href, ':') and not(contains(@href, //skinconfig/group-url)) and not(contains(@href, //skinconfig/project-url))"><a href="{@href}" class="external">
- <xsl:apply-templates/></a>
- </xsl:when>
- <xsl:otherwise>
-<!-- xsl:copy-of makes sure we copy <a href> as well as <a name>
- or any other <a ...> forms -->
- <xsl:copy-of select="."/>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:template>
- <xsl:template match="div[@id='skinconf-toc-page']">
- <xsl:if test="$config/toc">
- <xsl:if test="contains($minitoc-location,'page')">
- <xsl:if test="(count(//tocitems/tocitem) >= $config/toc/@min-sections) or (//tocitems/@force = 'true')">
- <xsl:call-template name="minitoc">
- <xsl:with-param name="tocroot" select="//tocitems"/>
- </xsl:call-template>
- </xsl:if>
- </xsl:if>
- </xsl:if>
- </xsl:template>
- <xsl:template name="minitoc">
- <xsl:param name="tocroot"/>
- <xsl:if test="(count($tocroot/tocitem) >= $config/toc/@min-sections) or ($tocroot/@force = 'true')">
- <xsl:if test="contains($config/toc/@location,'page')">
- <ul class="minitoc">
- <xsl:for-each select="$tocroot/tocitem">
- <li><a href="{@href}">
- <xsl:value-of select="@title"/></a>
- <xsl:if test="@level<//skinconfig/toc/@max-depth+1">
- <xsl:call-template name="minitoc">
- <xsl:with-param name="tocroot" select="."/>
- </xsl:call-template>
- </xsl:if></li>
- </xsl:for-each>
- </ul>
- </xsl:if>
- </xsl:if>
- </xsl:template>
- <xsl:template name="html-meta">
- <meta name="Generator" content="Apache Forrest"/>
- <meta name="Forrest-version">
- <xsl:attribute name="content">
- <xsl:value-of select="//info/forrest-version"/>
- </xsl:attribute>
- </meta>
- <meta name="Forrest-skin-name">
- <xsl:attribute name="content">
- <xsl:value-of select="//info/project-skin"/>
- </xsl:attribute>
- </meta>
- </xsl:template>
-<!-- meta information from v 2.0 documents
- FIXME: the match is really inefficient -->
- <xsl:template name="meta-data">
- <xsl:for-each select="//meta-data/meta">
- <xsl:element name="meta">
- <xsl:attribute name="name">
- <xsl:value-of select="@name"/>
- </xsl:attribute>
- <xsl:attribute name="content">
- <xsl:value-of select="."/>
- </xsl:attribute>
- <xsl:if test="@xml:lang">
- <xsl:attribute name="lang">
- <xsl:value-of select="@xml:lang"/>
- </xsl:attribute>
- </xsl:if>
- </xsl:element>
- </xsl:for-each>
- </xsl:template>
- <xsl:template name="feedback">
- <div id="feedback">
- <xsl:value-of select="$config/feedback"/>
- <xsl:choose>
- <xsl:when test="$config/feedback/@href and not($config/feedback/@href='')"><a id="feedbackto">
- <xsl:attribute name="href">
- <xsl:value-of select="$config/feedback/@href"/>
- <xsl:value-of select="$path"/>
- </xsl:attribute>
- <xsl:value-of select="$config/feedback/@to"/></a>
- </xsl:when>
- <xsl:otherwise>
- <xsl:value-of select="$config/feedback/@to"/>
- </xsl:otherwise>
- </xsl:choose>
- </div>
- </xsl:template>
- <xsl:template match="node()|@*" priority="-1">
- <xsl:copy>
- <xsl:apply-templates select="@*"/>
- <xsl:apply-templates/>
- </xsl:copy>
- </xsl:template>
-<!-- inception year copyright management -->
- <xsl:template name="current-year">
-<!-- Displays the current year after the inception year (in the copyright i.e: 2002-2005)
- - the copyright year (2005 by default) can be indicated in the copyrightyear parameter,
- - the year format (yyyy by default) can be indicated in the dateformat parameter,
- - the dates separator (- by default) can be indicated in the dateseparator parameter.
- For instance the following call will format the year on 2 digits and separates the dates
- with /
- (copyright 02/05)
- <xsl:call-template name="current-year">
- <xsl:with-param name="copyrightyear" select="'02'"/>
- <xsl:with-param name="dateformat" select="'yy'"/>
- <xsl:with-param name="dateseparator" select="'/'"/>
- </xsl:call-template>
- Warning, to enable inception year, inception attribute must be set to "true" in copyright/year/@inception
- -->
- <xsl:param name="copyrightyear">2005</xsl:param>
- <xsl:param name="dateformat">yyyy</xsl:param>
- <xsl:param name="dateseparator">-</xsl:param>
- <xsl:if test="$copyrightyear[@inception = 'true']">
- <xsl:variable name="tz" select='java:java.util.SimpleTimeZone.new(0,"GMT+00:00")' />
- <xsl:variable name="formatter" select="java:java.text.SimpleDateFormat.new($dateformat)"/>
- <xsl:variable name="settz" select="java:setTimeZone($formatter, $tz)" />
- <xsl:variable name="date" select="java:java.util.Date.new()"/>
- <xsl:variable name="year" select="java:format($formatter, $date)"/>
- <xsl:if test="$copyrightyear != $year">
- <xsl:value-of select="$dateseparator"/>
- <xsl:value-of select="$year"/>
- </xsl:if>
- </xsl:if>
- </xsl:template>
-</xsl:stylesheet>