You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by sz...@apache.org on 2005/10/12 21:49:23 UTC
svn commit: r315015 - in /directory/sitedocs/trunk: project.properties
src/etc/site-alternate.jsl
Author: szoerner
Date: Wed Oct 12 12:49:18 2005
New Revision: 315015
URL: http://svn.apache.org/viewcvs?rev=315015&view=rev
Log:
Create and use a new site.jsl, which allows to set a description for a page.
Search engines use the HTML meta description, hence it is now generated by the site-alternate.jsl.
Added:
directory/sitedocs/trunk/src/etc/site-alternate.jsl
Modified:
directory/sitedocs/trunk/project.properties
Modified: directory/sitedocs/trunk/project.properties
URL: http://svn.apache.org/viewcvs/directory/sitedocs/trunk/project.properties?rev=315015&r1=315014&r2=315015&view=diff
==============================================================================
--- directory/sitedocs/trunk/project.properties (original)
+++ directory/sitedocs/trunk/project.properties Wed Oct 12 12:49:18 2005
@@ -1,5 +1,6 @@
maven.xdoc.date=left
maven.xdoc.includeProjectDocumentation=no
+maven.xdoc.jsl=./src/etc/site-alternate.jsl
maven.xdoc.poweredby.image=
maven.multiproject.basedir = ${basedir}/../..
Added: directory/sitedocs/trunk/src/etc/site-alternate.jsl
URL: http://svn.apache.org/viewcvs/directory/sitedocs/trunk/src/etc/site-alternate.jsl?rev=315015&view=auto
==============================================================================
--- directory/sitedocs/trunk/src/etc/site-alternate.jsl (added)
+++ directory/sitedocs/trunk/src/etc/site-alternate.jsl Wed Oct 12 12:49:18 2005
@@ -0,0 +1,509 @@
+<?xml version="1.0"?>
+
+<!--
+ * ========================================================================
+ *
+ * Copyright 2004 The Apache Software Foundation.
+ *
+ * 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.
+ *
+ * ========================================================================
+-->
+<!-- stylesheet to be used -->
+<jsl:stylesheet select="$doc"
+ xmlns:define="jelly:define"
+ xmlns:j="jelly:core"
+ xmlns:jsl="jelly:jsl"
+ xmlns:log="jelly:log"
+ xmlns:util="jelly:util"
+ xmlns:x="jelly:xml"
+ xmlns:doc="doc"
+ xmlns:maven="jelly:maven"
+ xmlns="dummy"
+ trim="true">
+ <jsl:template match="document" trim="true">
+ <j:useBean var="navbean" class="org.apache.maven.NavBean"/>
+ <j:set var="location" value="${outFile.substring(destdir.length())}"/>
+ <util:replace var="location" oldChar="\" newChar="/" value="${location}"/>
+ <!-- Stores location for publish date / version -->
+ <j:set var="date">${maven.xdoc.date}</j:set>
+ <j:setProperties object="${navbean}" document="${doc}" location="${location}"/>
+
+ <x:doctype name="html" publicId="-//W3C//DTD XHTML 1.0 Transitional//EN" systemId="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"/>
+ <html>
+ <head>
+ <j:set var="docTitle"><x:expr select="./properties/title"/></j:set>
+ <j:set var="docDescription">
+ <x:expr select="./properties/description"/>
+ </j:set>
+ <x:if select="$nav/title">
+ <title><x:expr select="$nav/title"/> - ${docTitle}</title>
+ </x:if>
+ <x:if select="not($nav/title)">
+ <title>${pom.name} - ${docTitle}</title>
+ </x:if>
+
+ <j:set var="themeUrl" value="${maven.xdoc.theme.url}"/>
+ <util:file var="projectCssFile" name="${maven.docs.src}/style/project.css"/>
+
+ <style type="text/css" media="all"><![CDATA[
+ @import url("${relativePath}/style/maven-base.css");
+ ]]>
+ <j:if test="${!empty(themeUrl)}"><![CDATA[
+ @import url("${maven.xdoc.theme.url}");
+ ]]></j:if>
+ <j:if test="${empty(themeUrl)}"><![CDATA[
+ @import url("${relativePath}/style/maven-${maven.xdoc.theme}.css");
+ ]]></j:if>
+ <j:if test="${projectCssFile.exists()}"><![CDATA[
+ @import url("${relativePath}/style/project.css");
+ ]]></j:if>
+ </style>
+
+ <link rel="stylesheet" type="text/css" href="${relativePath}/style/print.css" media="print"/>
+ <meta http-equiv="Content-Type" content="text/html; charset=${outputencoding}"/>
+ <x:forEach var="author" select="./properties/author">
+ <meta name="author" content="${author.text}"/>
+ <meta name="email" content="${author.attribute('email').value}"/>
+ </x:forEach>
+ <j:if test="${!empty(docDescription)}">
+ <meta name="description" content="${docDescription}"/>
+ </j:if>
+ <jsl:applyTemplates select="$doc/document/head/*"/>
+
+ </head>
+
+ <x:element name="body"><j:whitespace trim="true">
+ <x:attribute name="class">composite</x:attribute>
+ <x:forEach var="attr" select="$doc/document/body/@*">
+ <x:attribute name="${attr.name}">${attr.value}</x:attribute>
+ </x:forEach>
+ </j:whitespace>
+
+ <div id="banner">
+ <!-- organization logo -->
+ <j:set var="logo" value="${pom.organization.logo}"/>
+ <j:if test="${!empty(logo)}">
+ <!-- set url to org or project url -->
+ <j:set var="url" value="${pom.organization.url}"/>
+ <j:if test="${!empty(url)}">
+ <j:set var="home" value="${pom.organization.url}"/>
+ </j:if>
+ <j:if test="${empty(url)}">
+ <j:set var="home" value="${pom.url}"/>
+ </j:if>
+ <!-- set image to relative or complete -->
+ <j:set var="image" value="${pom.organization.logo}"/>
+ <j:if test="${!image.startsWith('http://') and !image.startsWith('https://')}">
+ <j:set var="image" value="${relativePath}${image}"/>
+ </j:if>
+ <a href="${home}" id="organizationLogo">
+ <img src="${image}" alt="${pom.organization.name}" />
+ </a>
+ </j:if>
+
+ <!-- project logo and link -->
+ <j:set var="logo" value="${pom.logo}"/>
+ <j:if test="${logo != null and logo != ''}">
+ <!-- set image to relative or complete -->
+ <j:set var="image" value="${pom.logo}"/>
+ <j:if test="${!image.startsWith('http://') and !image.startsWith('https://')}">
+ <j:set var="image" value="${relativePath}${image}"/>
+ </j:if>
+
+ <a href="${pom.url}" id="projectLogo">
+ <img src="${image}" alt="${pom.name}"/>
+ </a>
+ </j:if>
+ <j:if test="${logo == null or logo == ''}">
+ <a href="${pom.url}" id="projectLogo">
+ <span>${pom.name}</span>
+ </a>
+ </j:if>
+ <div class="clear"><hr /></div>
+ </div>
+
+ <div id="breadcrumbs">
+ <j:if test="${date == 'left'}">
+ <maven:property var="version" name="maven.xdoc.version" defaultValue="${pom.currentVersion}"/>
+ <div class="xleft">
+ Last published: ${build.date}
+ <j:if test="${!empty(version)}">| Doc for ${version}</j:if>
+ </div>
+ </j:if>
+ <div class="xright">
+ <j:if test="${date == 'right'}">
+ Last published: ${build.date}
+ <x:if select="$nav/body/links">|</x:if>
+ </j:if>
+ <!-- render links -->
+ <x:if select="$nav/body/links">
+ <jsl:applyTemplates select="$nav/body/links"/>
+ </x:if>
+ </div>
+ <div class="clear"><hr /></div>
+ </div>
+
+ <!-- left column start -->
+ <div id="leftColumn">
+ <div id="navcolumn">
+ <j:if test="${date == 'navigation-top'}">
+ <div id="lastPublished">Last published: ${build.date}</div>
+ </j:if>
+ <x:if select="$nav">
+ <jsl:applyTemplates select="$nav/body/menu[not(@type) | @type='header'] | $nav/body/search"/>
+ </x:if>
+ <jsl:applyTemplates select="$projectNav/body/menu"/>
+ <!-- allows user to put menu items after standard reports -->
+ <x:if select="$nav">
+ <jsl:applyTemplates select="$nav/body/menu[@type='footer']"/>
+ </x:if>
+ <!-- Standard Maven Navigation -->
+ <j:set var="fileName">${file}</j:set>
+ <j:set var="poweredbyimage">${maven.xdoc.poweredby.image}</j:set>
+ <j:set var="poweredbytitle">${maven.xdoc.poweredby.title}</j:set>
+ <j:set var="poweredbyurl" value="${maven.xdoc.poweredby.url}" />
+ <j:if test="${!empty(poweredbyimage)}">
+ <a id="poweredBy" href="${poweredbyurl}" title="${poweredbytitle}">
+ <img alt="${maven.xdoc.poweredby.title}" src="${relativePath}/images/logos/${poweredbyimage}" />
+ </a>
+ </j:if>
+ <j:if test="${date == 'navigation-bottom'}">
+ <div id="lastPublished">Last published: ${build.date}</div>
+ </j:if>
+ </div>
+ </div>
+ <!-- left column end -->
+
+ <!-- body start -->
+ <div id="bodyColumn">
+ <div class="contentBox">
+ <!-- FIXME really shouldn't use $doc, but jelly loses it's context again -->
+ <jsl:applyTemplates select="$doc/document/body/section"/>
+ <jsl:applyTemplates select="$doc/document/body/release" />
+ <jsl:applyTemplates select="$doc/document/body/goals" />
+ </div>
+ </div>
+ <div class="clear"><hr /></div>
+ <!-- body end -->
+
+
+ <!-- footer start -->
+ <div id="footer">
+ <jsl:applyTemplates select="$nav/body/footer"/>
+ <div class="xright">
+ <j:if test="${!empty(pom.organization.name)}">
+ <j:if test="${!empty(pom.inceptionYear)}">
+ <j:if test="${pom.inceptionYear == mavenCurrentYear}">
+ © ${mavenCurrentYear}, ${pom.organization.name}
+ </j:if>
+ <j:if test="${pom.inceptionYear != mavenCurrentYear}">
+ © ${pom.inceptionYear}-${mavenCurrentYear}, ${pom.organization.name}
+ </j:if>
+ </j:if>
+ <j:if test="${empty(pom.inceptionYear)}">
+ © ${mavenCurrentYear}, ${pom.organization.name}
+ </j:if>
+ </j:if>
+ <j:if test="${date == 'bottom'}">
+ - Last published: ${build.date}
+ </j:if>
+ </div>
+ <div class="clear"><hr /></div>
+ </div>
+ <!-- footer end -->
+
+
+ </x:element>
+ </html>
+ </jsl:template>
+
+ <!-- process the properties of the doc -->
+ <jsl:template match="properties" trim="true">
+ <!-- stick head block here later -->
+ </jsl:template>
+
+ <!-- Process a menu for the navigation bar -->
+ <jsl:template match="menu" trim="true">
+ <j:set var="_menuName"><x:expr select="@name"/></j:set>
+ <j:set var="_menuName"><doc:escapeNameToken value="${_menuName}"/></j:set>
+ <j:choose>
+ <j:when test="${!empty(_menuName)}">
+ <div id="menu${_menuName}">
+ <h5><x:expr select="@name"/></h5>
+ <ul><jsl:applyTemplates select="item"/></ul>
+ </div>
+ </j:when>
+ <j:otherwise>
+ <div>
+ <ul><jsl:applyTemplates select="item"/></ul>
+ </div>
+ </j:otherwise>
+ </j:choose>
+
+ </jsl:template>
+
+ <jsl:template match="item" trim="true">
+ <x:set var="item" select="."/>
+ <x:set var="_name" select="string(@name)"/>
+ <x:set var="_link" select="string(@href)"/>
+ <x:set var="_img" select="string(@img)"/>
+ <x:set var="_target" select="string(@target)"/>
+ <x:set var="_childCount" select="count(./item)"/>
+ <j:set var="_isCollapsed" value="${navbean.isCollapsed(item.get(0))}"/>
+ <j:set var="_state" value="none"/>
+ <j:if test="${_childCount.intValue() gt 0}">
+ <j:if test="${!_isCollapsed}"><j:set var="_state" value="expanded"/></j:if>
+ <j:if test="${_isCollapsed}"><j:set var="_state" value="collapsed"/></j:if>
+ </j:if>
+ <li class="${_state}">
+ <j:if test="${navbean.isSelected(item.get(0))}">
+ <strong><doc:itemLink name="${_name}" link="${_link}" img="${_img}" state="${_state}" target="${_target}"/></strong>
+ </j:if>
+ <j:if test="${!navbean.isSelected(item.get(0))}">
+ <doc:itemLink name="${_name}" link="${_link}" img="${_img}" state="${_state}" target="${_target}"/>
+ </j:if>
+ <j:if test="${_state == 'expanded'}">
+ <ul>
+ <jsl:applyTemplates select="item"/>
+ </ul>
+ </j:if>
+ </li>
+ </jsl:template>
+
+ <!-- Process the breadcrumb navbar -->
+ <jsl:template match="links" trim="true">
+ <j:set var="linkCount" value="1"/>
+ <x:forEach var="link" select="item">
+ <j:set var="_img"><x:expr select="@img"/></j:set>
+ <j:set var="_name"><x:expr select="@name"/></j:set>
+ <j:set var="_link"><x:expr select="@href"/></j:set>
+ <j:set var="_target"><x:expr select="@target"/></j:set>
+ <j:whitespace trim="false">
+ <j:if test="${linkCount != 1}">
+ <j:if test="${!(maven.xdoc.crumb.separator == '')}">
+ <span class="separator">${maven.xdoc.crumb.separator}</span>
+ </j:if>
+ </j:if>
+ <doc:itemLink name="${_name}" link="${_link}" img="${_img}" target="${_target}"/>
+ </j:whitespace>
+ <j:set var="linkCount" value="${1+linkCount}"/>
+ </x:forEach>
+ </jsl:template>
+
+ <!-- Google site search -->
+ <jsl:template match="search" trim="true">
+ <!-- Search code: http://www.google.com/searchcode.html -->
+ <!-- Google logos: http://www.google.com/stickers.html -->
+ <!-- Terms: http://www.google.com./services/terms_free.html -->
+ <div id="search">
+ <h5>Search ${pom.name}</h5>
+ <form method="get" action="http://www.google.com/search">
+ <a class="navlink" href="http://www.google.com">
+ <img src="http://www.google.com/logos/Logo_25wht.gif" width="75" height="32" alt="Google" />
+ </a>
+ <j:set var="siteURL" value="${pom.url}"/>
+ <!-- google fails on urls that end with / -->
+ <j:if test="${siteURL.endsWith('/')}">
+ <j:set var="URLLength" value="${siteURL.length() - 1}"/>
+ <j:set var="siteURL" value="${siteURL.substring(0, URLLength.intValue())}"/>
+ </j:if>
+ <input type="text" id="q" size="15" name="q" maxlength="255" value=""/>
+ <input type="submit" id="btnG" value="Go" name="btnG"/>
+ <input type="hidden" name="domains" value="${siteURL}"/>
+ <input type="hidden" id="search" name="sitesearch" value="${siteURL}"/>
+ </form>
+ </div>
+ </jsl:template>
+
+ <!-- process a documentation section -->
+ <jsl:template match="section" trim="true">
+ <div class="section">
+ <j:set var="_sectionName"><x:expr select="@name"/></j:set>
+ <!-- named anchors can't contain whitespaces -->
+ <j:set var="_anchorName"><doc:escapeNameToken value="${_sectionName}"/></j:set>
+ <j:if test="${!empty(_sectionName)}">
+ <a name="${_anchorName}"/><h2>${_sectionName}</h2>
+ </j:if>
+ <jsl:applyTemplates select="*"/>
+ </div>
+ </jsl:template>
+
+ <jsl:template match="subsection" trim="true">
+ <div class="subsection">
+ <j:set var="_sectionName"><x:expr select="@name"/></j:set>
+ <!-- named anchors can't contain whitespaces -->
+ <j:set var="_anchorName"><doc:escapeNameToken value="${_sectionName}"/></j:set>
+ <j:if test="${!empty(_sectionName)}">
+ <a name="${_anchorName}"/><h3>${_sectionName}</h3>
+ </j:if>
+ <jsl:applyTemplates select="*"/>
+ </div>
+ </jsl:template>
+
+ <jsl:template match="source" trim="false">
+ <div class="source"><pre><jsl:applyTemplates /></pre></div>
+ </jsl:template>
+
+ <!-- preserve whitespace in the following elements -->
+ <jsl:template match="pre | script | style" trim="true">
+ <x:set var="nodename" select="name()"/>
+ <x:element name="${nodename}">
+ <x:forEach var="attr" select="@*">
+ <x:attribute name="${attr.name}">${attr.value}</x:attribute>
+ </x:forEach>
+ <j:whitespace trim="false"><jsl:applyTemplates /></j:whitespace>
+ </x:element>
+ </jsl:template>
+
+ <!-- xhtml fixup: add missing alt attribute for images -->
+ <jsl:template match="img" trim="true">
+ <x:element name="img">
+ <x:forEach var="attr" select="@*">
+ <x:attribute name="${attr.name}">${attr.value}</x:attribute>
+ </x:forEach>
+ <x:set var="noalt" select="count(./@alt) = 0" />
+ <j:if test="${noalt}" >
+ <x:attribute name="alt"></x:attribute>
+ </j:if>
+ </x:element>
+ </jsl:template>
+
+ <jsl:template match="footer" trim="true">
+ <div class="xleft">
+ <jsl:applyTemplates select="*"/>
+ </div>
+ </jsl:template>
+
+ <jsl:template match="table" trim="true">
+ <j:set var="rowcount" value="0"/>
+ <table class="bodyTable">
+ <jsl:applyTemplates select="*"/>
+ </table>
+ </jsl:template>
+
+ <jsl:template match="tr" trim="true">
+ <j:choose>
+ <j:when test="${rowMode == 'a'}">
+ <j:set var="rowMode" value="b"/>
+ </j:when>
+ <j:otherwise>
+ <j:set var="rowMode" value="a"/>
+ </j:otherwise>
+ </j:choose>
+ <x:element name="tr"><j:whitespace trim="true">
+ <x:attribute name="class">${rowMode}</x:attribute>
+ <x:forEach var="attr" select="@*">
+ <x:attribute name="${attr.name}">${attr.value}</x:attribute>
+ </x:forEach>
+ <jsl:applyTemplates select="*"/>
+</j:whitespace></x:element>
+ </jsl:template>
+
+ <!--************************-->
+ <!-- goals documentation -->
+ <!--************************-->
+ <jsl:template match="goals" trim="true">
+ <!-- reset row alternation -->
+ <j:set var="rowMode" value="" />
+ <div class="h3">
+ <a name="Goals"/><h3>Goals</h3>
+ <table class="bodyTable">
+ <thead>
+ <tr><th>Goal</th><th>Description</th></tr>
+ </thead>
+ <tbody>
+ <jsl:applyTemplates select="goal"/>
+ </tbody>
+ </table>
+ </div>
+ </jsl:template>
+
+ <!-- a goal -->
+ <jsl:template match="goal" trim="true">
+ <j:choose>
+ <j:when test="${rowMode == 'a'}">
+ <j:set var="rowMode" value="b"/>
+ </j:when>
+ <j:otherwise>
+ <j:set var="rowMode" value="a"/>
+ </j:otherwise>
+ </j:choose>
+
+ <x:element name="tr"><j:whitespace trim="true">
+ <x:attribute name="class">${rowMode}</x:attribute>
+ <j:set var="_goalName"><x:expr select="./name" /></j:set>
+ <td style="width:20%"><a name="${_goalName}"/>${_goalName}</td>
+ <td ><jsl:applyTemplates select="description" /></td>
+</j:whitespace></x:element>
+ </jsl:template>
+
+ <jsl:template match="description">
+ <jsl:applyTemplates trim="false"/>
+ </jsl:template>
+
+ <!-- remove the space at the end of parsed "a" anchors and fix local hrefs -->
+ <jsl:template match="a" trim="true">
+ <x:element name="a" trim="true">
+ <x:forEach var="attr" select="@*">
+ <j:choose>
+ <j:when test="${attr.name == 'href'}">
+ <j:set var="href" value="${attr.value}" />
+ <j:choose>
+ <j:when test="${href.startsWith('#')}">
+ <x:attribute name="href">
+ <doc:escapeNameToken value="${href}"/>
+ </x:attribute>
+ </j:when>
+ <j:when test="${href.startsWith('http://')}">
+ <x:attribute name="href">${href}</x:attribute>
+ <x:attribute name="class">externalLink</x:attribute>
+ <x:attribute name="title">External Link</x:attribute>
+ </j:when>
+ <j:otherwise>
+ <x:attribute name="href">${href}</x:attribute>
+ </j:otherwise>
+ </j:choose>
+ </j:when>
+ <j:when test="${attr.name == 'target'}">
+ <j:set var="target">${attr.value}</j:set>
+ <j:if test="${!empty(target) and target.equals('_blank')}">
+ <x:attribute name="class">newWindow</x:attribute>
+ <x:attribute name="title">New Window</x:attribute>
+ </j:if>
+ <x:attribute name="target">${target}</x:attribute>
+ </j:when>
+ <j:when test="${attr.name == 'name'}">
+ <x:attribute name="name">
+ <doc:escapeNameToken value="${attr.value}"/>
+ </x:attribute>
+ </j:when>
+ <j:otherwise>
+ <x:attribute name="${attr.name}">${attr.value}</x:attribute>
+ </j:otherwise>
+ </j:choose>
+ </x:forEach>
+ <jsl:applyTemplates/>
+ </x:element>
+ </jsl:template>
+
+ <!-- copy any other elements through -->
+ <jsl:template match="*" trim="false"><jsl:copy trim="false"><jsl:applyTemplates trim="false"/></jsl:copy></jsl:template>
+
+ <!-- element values don't pass through as text -->
+ <jsl:template match="@*"/>
+
+ <!-- CDATA and text nodes pass-thru -->
+ <jsl:template match="text()"><x:expr select="."/></jsl:template>
+
+</jsl:stylesheet>