Author: vsiveton
Date: Tue Aug 1 06:02:26 2006
New Revision: 427569
URL: http://svn.apache.org/viewvc?rev=427569&view=rev
Log:
o reviewed XdocSink and XhtmlSink for nesting items in list and add unit tests
(thanks trygve)
o HtmlToolsTest is now a PlexusTestCase
o updated doxia-site-renderer test case
- added htmlunit 1.9 as dependency in test scope to test renderer files
- updated template and site descriptor
- added an xml test file to test nested items in list
Added:
maven/doxia/trunk/doxia-site-renderer/src/test/resources/log4j.properties
maven/doxia/trunk/doxia-site-renderer/src/test/site/xdoc/
maven/doxia/trunk/doxia-site-renderer/src/test/site/xdoc/nestedItems.xml
Modified:
maven/doxia/trunk/doxia-core/src/main/java/org/apache/maven/doxia/module/xdoc/XdocSink.java
maven/doxia/trunk/doxia-core/src/main/java/org/apache/maven/doxia/module/xhtml/XhtmlSink.java
maven/doxia/trunk/doxia-core/src/test/java/org/apache/maven/doxia/module/HtmlToolsTest.java
maven/doxia/trunk/doxia-site-renderer/pom.xml
maven/doxia/trunk/doxia-site-renderer/src/test/java/org/apache/maven/doxia/siterenderer/DefaultSiteRendererTest.java
maven/doxia/trunk/doxia-site-renderer/src/test/resources/default-site.vm
maven/doxia/trunk/doxia-site-renderer/src/test/site/site.xml
Modified:
maven/doxia/trunk/doxia-core/src/main/java/org/apache/maven/doxia/module/xdoc/XdocSink.java
URL:
http://svn.apache.org/viewvc/maven/doxia/trunk/doxia-core/src/main/java/org/apache/maven/doxia/module/xdoc/XdocSink.java?rev=427569&r1=427568&r2=427569&view=diff
==============================================================================
---
maven/doxia/trunk/doxia-core/src/main/java/org/apache/maven/doxia/module/xdoc/XdocSink.java
(original)
+++
maven/doxia/trunk/doxia-core/src/main/java/org/apache/maven/doxia/module/xdoc/XdocSink.java
Tue Aug 1 06:02:26 2006
@@ -296,6 +296,7 @@
public void list_()
{
markup( "</ul>" );
+ itemFlag = false;
}
public void listItem()
@@ -337,6 +338,7 @@
public void numberedList_()
{
markup( "</ol>" );
+ itemFlag = false;
}
public void numberedListItem()
@@ -359,6 +361,7 @@
public void definitionList_()
{
markup( "</dl>" );
+ itemFlag = false;
}
public void definedTerm()
Modified:
maven/doxia/trunk/doxia-core/src/main/java/org/apache/maven/doxia/module/xhtml/XhtmlSink.java
URL:
http://svn.apache.org/viewvc/maven/doxia/trunk/doxia-core/src/main/java/org/apache/maven/doxia/module/xhtml/XhtmlSink.java?rev=427569&r1=427568&r2=427569&view=diff
==============================================================================
---
maven/doxia/trunk/doxia-core/src/main/java/org/apache/maven/doxia/module/xhtml/XhtmlSink.java
(original)
+++
maven/doxia/trunk/doxia-core/src/main/java/org/apache/maven/doxia/module/xhtml/XhtmlSink.java
Tue Aug 1 06:02:26 2006
@@ -272,6 +272,7 @@
public void list_()
{
write( "</ul>" );
+ itemFlag = false;
}
public void listItem()
@@ -313,6 +314,7 @@
public void numberedList_()
{
write( "</ol>" );
+ itemFlag = false;
}
public void numberedListItem()
@@ -335,6 +337,7 @@
public void definitionList_()
{
write( "</dl>" );
+ itemFlag = false;
}
public void definedTerm()
Modified:
maven/doxia/trunk/doxia-core/src/test/java/org/apache/maven/doxia/module/HtmlToolsTest.java
URL:
http://svn.apache.org/viewvc/maven/doxia/trunk/doxia-core/src/test/java/org/apache/maven/doxia/module/HtmlToolsTest.java?rev=427569&r1=427568&r2=427569&view=diff
==============================================================================
---
maven/doxia/trunk/doxia-core/src/test/java/org/apache/maven/doxia/module/HtmlToolsTest.java
(original)
+++
maven/doxia/trunk/doxia-core/src/test/java/org/apache/maven/doxia/module/HtmlToolsTest.java
Tue Aug 1 06:02:26 2006
@@ -16,7 +16,7 @@
* limitations under the License.
*/
-import junit.framework.TestCase;
+import org.codehaus.plexus.PlexusTestCase;
/**
* Test case for <code>HtmlTools</code>
@@ -25,9 +25,8 @@
* @version $Id$
*/
public class HtmlToolsTest
- extends TestCase
+ extends PlexusTestCase
{
-
/**
* Verify the awaited results
*/
Modified: maven/doxia/trunk/doxia-site-renderer/pom.xml
URL:
http://svn.apache.org/viewvc/maven/doxia/trunk/doxia-site-renderer/pom.xml?rev=427569&r1=427568&r2=427569&view=diff
==============================================================================
--- maven/doxia/trunk/doxia-site-renderer/pom.xml (original)
+++ maven/doxia/trunk/doxia-site-renderer/pom.xml Tue Aug 1 06:02:26 2006
@@ -39,5 +39,11 @@
<artifactId>doxia-decoration-model</artifactId>
<version>1.0-alpha-8</version>
</dependency>
+ <dependency>
+ <groupId>htmlunit</groupId>
+ <artifactId>htmlunit</artifactId>
+ <version>1.9</version>
+ <scope>test</scope>
+ </dependency>
</dependencies>
</project>
Modified:
maven/doxia/trunk/doxia-site-renderer/src/test/java/org/apache/maven/doxia/siterenderer/DefaultSiteRendererTest.java
URL:
http://svn.apache.org/viewvc/maven/doxia/trunk/doxia-site-renderer/src/test/java/org/apache/maven/doxia/siterenderer/DefaultSiteRendererTest.java?rev=427569&r1=427568&r2=427569&view=diff
==============================================================================
---
maven/doxia/trunk/doxia-site-renderer/src/test/java/org/apache/maven/doxia/siterenderer/DefaultSiteRendererTest.java
(original)
+++
maven/doxia/trunk/doxia-site-renderer/src/test/java/org/apache/maven/doxia/siterenderer/DefaultSiteRendererTest.java
Tue Aug 1 06:02:26 2006
@@ -1,7 +1,7 @@
package org.apache.maven.doxia.siterenderer;
/*
- * Copyright 2004-2005 The Apache Software Foundation.
+ * Copyright 2004-2006 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.
@@ -16,15 +16,33 @@
* limitations under the License.
*/
+import java.io.File;
+import java.io.FileReader;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+
import org.apache.maven.doxia.site.decoration.DecorationModel;
import org.apache.maven.doxia.site.decoration.io.xpp3.DecorationXpp3Reader;
import org.codehaus.plexus.PlexusTestCase;
-import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
-import java.io.FileReader;
-import java.io.IOException;
+import com.gargoylesoftware.htmlunit.WebClient;
+import com.gargoylesoftware.htmlunit.html.HtmlAnchor;
+import com.gargoylesoftware.htmlunit.html.HtmlDefinitionDescription;
+import com.gargoylesoftware.htmlunit.html.HtmlDefinitionList;
+import com.gargoylesoftware.htmlunit.html.HtmlDefinitionTerm;
+import com.gargoylesoftware.htmlunit.html.HtmlDivision;
+import com.gargoylesoftware.htmlunit.html.HtmlElement;
+import com.gargoylesoftware.htmlunit.html.HtmlHeader2;
+import com.gargoylesoftware.htmlunit.html.HtmlHeader4;
+import com.gargoylesoftware.htmlunit.html.HtmlListItem;
+import com.gargoylesoftware.htmlunit.html.HtmlOrderedList;
+import com.gargoylesoftware.htmlunit.html.HtmlPage;
+import com.gargoylesoftware.htmlunit.html.HtmlParagraph;
+import com.gargoylesoftware.htmlunit.html.HtmlUnorderedList;
/**
+ * @author <a href="mailto:[EMAIL PROTECTED]">Vincent Siveton</a>
* @author <a href="mailto:[EMAIL PROTECTED]>Emmanuel Venisse</a>
* @version $Id:DefaultSiteRendererTest.java 348612 2005-11-24 12:54:19 +1100
(Thu, 24 Nov 2005) brett $
*/
@@ -54,15 +72,295 @@
}
public void testRender()
- throws RendererException, IOException, XmlPullParserException
+ throws Exception
{
- DecorationModel decoration =
- new DecorationXpp3Reader().read( new FileReader( getTestFile(
"src/test/site/site.xml" ) ) );
+ //
----------------------------------------------------------------------
+ // Render the site
+ //
----------------------------------------------------------------------
+ DecorationModel decoration = new DecorationXpp3Reader()
+ .read( new FileReader( getTestFile( "src/test/site/site.xml" ) ) );
+
SiteRenderingContext context = new SiteRenderingContext();
context.setTemplateName( "default-site.vm" );
context.setTemplateClassLoader( getClassLoader() );
+ context.setUsingDefaultTemplate( true );
+ Map templateProp = new HashMap();
+ templateProp.put( "outputEncoding", "UTF-8" );
+ context.setTemplateProperties( templateProp );
context.setDecoration( decoration );
context.addSiteDirectory( getTestFile( "src/test/site" ) );
+
renderer.render( renderer.locateDocumentFiles( context ).values(),
context, getTestFile( "target/output" ) );
+
+ //
----------------------------------------------------------------------
+ // Verify specific pages
+ //
----------------------------------------------------------------------
+ verifyCdcPage();
+ verifyNestedItemsPage();
+ }
+
+ public void verifyCdcPage()
+ throws Exception
+ {
+ File nestedItems = getTestFile( "target/output/cdc.html" );
+ assertNotNull( nestedItems );
+ assertTrue( nestedItems.exists() );
+ }
+
+ public void verifyNestedItemsPage()
+ throws Exception
+ {
+ File nestedItems = getTestFile( "target/output/nestedItems.html" );
+ assertNotNull( nestedItems );
+ assertTrue( nestedItems.exists() );
+
+ // HtmlUnit
+ WebClient webClient = new WebClient();
+ HtmlPage page = (HtmlPage) webClient.getPage( nestedItems.toURL() );
+ assertNotNull( page );
+
+ HtmlElement element = page.getHtmlElementById( "contentBox" );
+ assertNotNull( element );
+ HtmlDivision division = (HtmlDivision) element;
+ assertNotNull( division );
+
+ Iterator elementIterator = division.getAllHtmlChildElements();
+
+ HtmlAnchor a = (HtmlAnchor) elementIterator.next();
+ assertNotNull( a );
+ assertEquals( a.getAttributeValue( "name" ), "list_section" );
+
+ HtmlDivision div = (HtmlDivision) elementIterator.next();
+ assertNotNull( div );
+ assertEquals( div.getAttributeValue( "class" ), "section" );
+
+ HtmlHeader2 h2 = (HtmlHeader2) elementIterator.next();
+ assertNotNull( h2 );
+ assertEquals( h2.asText(), "List Section");
+
+ //
----------------------------------------------------------------------
+ // Unordered lists
+ //
----------------------------------------------------------------------
+ HtmlHeader4 h4 = (HtmlHeader4) elementIterator.next();
+ assertNotNull( h4 );
+ assertEquals( h4.asText(), "Unordered lists");
+
+ HtmlParagraph p = (HtmlParagraph) elementIterator.next();
+ assertNotNull( p );
+ assertEquals( p.asText(), "Below is an unordered list, followed by six
paragraphs." );
+
+ HtmlUnorderedList ul = (HtmlUnorderedList) elementIterator.next();
+ assertNotNull( ul );
+ assertEquals( ul.getFirstChild().asText(), "" );
+
+ HtmlListItem li = (HtmlListItem) elementIterator.next();
+ assertNotNull( li );
+ assertEquals( li.getFirstChild().asText(), "Item 1." );
+
+ ul = (HtmlUnorderedList) elementIterator.next();
+ assertNotNull( ul );
+ assertEquals( ul.getFirstChild().asText(), "" );
+
+ li = (HtmlListItem) elementIterator.next();
+ assertNotNull( li );
+ // No paragraph renderer
+ assertEquals( li.getFirstChild().asText(), "Item 11." );
+ System.out.println(li.getFirstChild().asText() );
+ li = (HtmlListItem) elementIterator.next();
+ assertNotNull( li );
+ // No paragraph renderer
+ assertEquals( li.getFirstChild().asText(), "Item 12." );
+ li = (HtmlListItem) elementIterator.next();
+ assertNotNull( li );
+ assertEquals( li.getFirstChild().asText(), "Item 13." );
+ li = (HtmlListItem) elementIterator.next();
+ assertNotNull( li );
+ assertEquals( li.getFirstChild().asText(), "Item 14." );
+ li = (HtmlListItem) elementIterator.next();
+ assertNotNull( li );
+ assertEquals( li.getFirstChild().asText(), "Item 2." );
+ li = (HtmlListItem) elementIterator.next();
+ assertNotNull( li );
+ assertEquals( li.getFirstChild().asText(), "Item 3." );
+ li = (HtmlListItem) elementIterator.next();
+ assertNotNull( li );
+ assertEquals( li.getFirstChild().asText(), "Item 4." );
+
+ ul = (HtmlUnorderedList) elementIterator.next();
+ assertNotNull( ul );
+ assertEquals( ul.getFirstChild().asText(), "" );
+
+ li = (HtmlListItem) elementIterator.next();
+ assertNotNull( li );
+ assertEquals( li.getFirstChild().asText(), "Item 41." );
+ li = (HtmlListItem) elementIterator.next();
+ assertNotNull( li );
+ assertEquals( li.getFirstChild().asText(), "Item 42." );
+ li = (HtmlListItem) elementIterator.next();
+ assertNotNull( li );
+ assertEquals( li.getFirstChild().asText(), "Item 43." );
+ li = (HtmlListItem) elementIterator.next();
+ assertNotNull( li );
+ assertEquals( li.getFirstChild().asText(), "Item 44." );
+
+ p = (HtmlParagraph) elementIterator.next();
+ assertNotNull( p );
+ assertEquals( p.asText(), "Paragraph 1 below list." );
+ p = (HtmlParagraph) elementIterator.next();
+ assertNotNull( p );
+ assertEquals( p.asText(), "Paragraph 2 below list." );
+ p = (HtmlParagraph) elementIterator.next();
+ assertNotNull( p );
+ assertEquals( p.asText(), "Paragraph 3 below list." );
+ p = (HtmlParagraph) elementIterator.next();
+ assertNotNull( p );
+ assertEquals( p.asText(), "Paragraph 4 below list." );
+ p = (HtmlParagraph) elementIterator.next();
+ assertNotNull( p );
+ assertEquals( p.asText(), "Paragraph 5 below list." );
+ p = (HtmlParagraph) elementIterator.next();
+ assertNotNull( p );
+ assertEquals( p.asText(), "Paragraph 6 below list." );
+
+ //
----------------------------------------------------------------------
+ // Ordered lists
+ //
----------------------------------------------------------------------
+ h4 = (HtmlHeader4) elementIterator.next();
+ assertNotNull( h4 );
+ assertEquals( h4.asText(), "Ordered lists");
+
+ p = (HtmlParagraph) elementIterator.next();
+ assertNotNull( p );
+ assertEquals( p.asText(), "Below is an ordered list, followed by six
paragraphs." );
+
+ HtmlOrderedList ol = (HtmlOrderedList) elementIterator.next();
+ assertNotNull( ol );
+ assertEquals( ol.getFirstChild().asText(), "" );
+
+ li = (HtmlListItem) elementIterator.next();
+ assertNotNull( li );
+ assertEquals( li.getFirstChild().asText(), "Item 1." );
+
+ ol = (HtmlOrderedList) elementIterator.next();
+ assertNotNull( ol );
+ assertEquals( ol.getFirstChild().asText(), "" );
+
+ li = (HtmlListItem) elementIterator.next();
+ assertNotNull( li );
+ assertEquals( li.getFirstChild().asText(), "Item 11." );
+ li = (HtmlListItem) elementIterator.next();
+ assertNotNull( li );
+ assertEquals( li.getFirstChild().asText(), "Item 12." );
+ li = (HtmlListItem) elementIterator.next();
+ assertNotNull( li );
+ assertEquals( li.getFirstChild().asText(), "Item 13." );
+ li = (HtmlListItem) elementIterator.next();
+ assertNotNull( li );
+ assertEquals( li.getFirstChild().asText(), "Item 14." );
+ li = (HtmlListItem) elementIterator.next();
+ assertNotNull( li );
+ assertEquals( li.getFirstChild().asText(), "Item 2." );
+ li = (HtmlListItem) elementIterator.next();
+ assertNotNull( li );
+ assertEquals( li.getFirstChild().asText(), "Item 3." );
+ li = (HtmlListItem) elementIterator.next();
+ assertNotNull( li );
+ assertEquals( li.getFirstChild().asText(), "Item 4." );
+
+ ol = (HtmlOrderedList) elementIterator.next();
+ assertNotNull( ol );
+ assertEquals( ol.getFirstChild().asText(), "" );
+
+ li = (HtmlListItem) elementIterator.next();
+ assertNotNull( li );
+ assertEquals( li.getFirstChild().asText(), "Item 41." );
+ li = (HtmlListItem) elementIterator.next();
+ assertNotNull( li );
+ assertEquals( li.getFirstChild().asText(), "Item 42." );
+ li = (HtmlListItem) elementIterator.next();
+ assertNotNull( li );
+ assertEquals( li.getFirstChild().asText(), "Item 43." );
+ li = (HtmlListItem) elementIterator.next();
+ assertNotNull( li );
+ assertEquals( li.getFirstChild().asText(), "Item 44." );
+
+ p = (HtmlParagraph) elementIterator.next();
+ assertNotNull( p );
+ assertEquals( p.asText(), "Paragraph 1 below list." );
+ p = (HtmlParagraph) elementIterator.next();
+ assertNotNull( p );
+ assertEquals( p.asText(), "Paragraph 2 below list." );
+ p = (HtmlParagraph) elementIterator.next();
+ assertNotNull( p );
+ assertEquals( p.asText(), "Paragraph 3 below list." );
+ p = (HtmlParagraph) elementIterator.next();
+ assertNotNull( p );
+ assertEquals( p.asText(), "Paragraph 4 below list." );
+ p = (HtmlParagraph) elementIterator.next();
+ assertNotNull( p );
+ assertEquals( p.asText(), "Paragraph 5 below list." );
+ p = (HtmlParagraph) elementIterator.next();
+ assertNotNull( p );
+ assertEquals( p.asText(), "Paragraph 6 below list." );
+
+ //
----------------------------------------------------------------------
+ // Definition lists
+ //
----------------------------------------------------------------------
+ h4 = (HtmlHeader4) elementIterator.next();
+ assertNotNull( h4 );
+ assertEquals( h4.asText(), "Definition lists");
+
+ p = (HtmlParagraph) elementIterator.next();
+ assertNotNull( p );
+ assertEquals( p.asText(), "Below is a definition list, followed by six
paragraphs." );
+
+ HtmlDefinitionList dl = (HtmlDefinitionList) elementIterator.next();
+ assertNotNull( dl );
+ assertEquals( dl.getFirstChild().asText(), "" );
+
+ HtmlDefinitionTerm dt = (HtmlDefinitionTerm) elementIterator.next();
+ assertNotNull( dt );
+ assertEquals( dt.getFirstChild().asText(), "Term 1." );
+ HtmlDefinitionDescription dd = (HtmlDefinitionDescription)
elementIterator.next();
+ assertNotNull( dd );
+ assertEquals( dd.getFirstChild().asText(), "Description 1." );
+
+ dt = (HtmlDefinitionTerm) elementIterator.next();
+ assertNotNull( dt );
+ assertEquals( dt.getFirstChild().asText(), "Term 2." );
+ dd = (HtmlDefinitionDescription) elementIterator.next();
+ assertNotNull( dd );
+ assertEquals( dd.getFirstChild().asText(), "Description 2." );
+
+ dl = (HtmlDefinitionList) elementIterator.next();
+ assertNotNull( dl );
+ assertEquals( dl.getFirstChild().asText(), "" );
+ dt = (HtmlDefinitionTerm) elementIterator.next();
+ assertNotNull( dt );
+ assertEquals( dt.getFirstChild().asText(), "Term 21." );
+ dd = (HtmlDefinitionDescription) elementIterator.next();
+ assertNotNull( dd );
+ assertEquals( dd.getFirstChild().asText(), "Description 21." );
+
+ p = (HtmlParagraph) elementIterator.next();
+ assertNotNull( p );
+ assertEquals( p.asText(), "Paragraph 1 below list." );
+ p = (HtmlParagraph) elementIterator.next();
+ assertNotNull( p );
+ assertEquals( p.asText(), "Paragraph 2 below list." );
+ p = (HtmlParagraph) elementIterator.next();
+ assertNotNull( p );
+ assertEquals( p.asText(), "Paragraph 3 below list." );
+ p = (HtmlParagraph) elementIterator.next();
+ assertNotNull( p );
+ assertEquals( p.asText(), "Paragraph 4 below list." );
+ p = (HtmlParagraph) elementIterator.next();
+ assertNotNull( p );
+ assertEquals( p.asText(), "Paragraph 5 below list." );
+ p = (HtmlParagraph) elementIterator.next();
+ assertNotNull( p );
+ assertEquals( p.asText(), "Paragraph 6 below list." );
+
+ assertFalse( elementIterator.hasNext() );
}
}
Modified:
maven/doxia/trunk/doxia-site-renderer/src/test/resources/default-site.vm
URL:
http://svn.apache.org/viewvc/maven/doxia/trunk/doxia-site-renderer/src/test/resources/default-site.vm?rev=427569&r1=427568&r2=427569&view=diff
==============================================================================
--- maven/doxia/trunk/doxia-site-renderer/src/test/resources/default-site.vm
(original)
+++ maven/doxia/trunk/doxia-site-renderer/src/test/resources/default-site.vm
Tue Aug 1 06:02:26 2006
@@ -1,82 +1,275 @@
-#macro ( banner $id )
- #set ( $e = $siteDescriptor.getChild( $id ) )
- #if( $e.getChild( "href" ) )
- #set ( $link = $e.getChild( "href" ).getValue() )
- <a href="$link" id="$id">
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+#macro ( banner $banner $id )
+ #if ( $banner )
+ #if( $banner.href )
+ <a href="$banner.href" id="$id">
#else
<span id="$id">
#end
- #if( $e.getChild( "src" ) )
- #set ( $src = $e.getChild( "src" ).getValue() )
- #if ( $e.getChild( "alt" ) )
- #set ( $alt = $e.getChild( "alt" ).getValue() )
+ #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 = "" )
#end
<img src="$src" alt="$alt" />
#else
- $e.getChild( "name" ).getValue()
+ $banner.name
#end
- #if( $e.getChild( "href" ) )
+ #if( $banner.href )
</a>
#else
</span>
#end
-
+ #end
#end
-#macro ( links )
+#macro ( links $links )
#set ( $counter = 0 )
- #set ( $links = $siteDescriptor.getChild( "body" ).getChild( "links" ) )
- #foreach( $item in $links.getChildren() )
+ #foreach( $item in $links )
#set ( $counter = $counter + 1 )
- <a href="$item.getAttribute( "href" )">$item.getAttribute( "name" )</a>
- #if ( $links.getChildCount() > $counter )
- |
+ #set ( $currentItemHref = $PathTool.calculateLink( $item.href,
$relativePath ) )
+ #set ( $currentItemHref = $currentItemHref.replaceAll( "\\", "/" ) )
+ <a href="$currentItemHref">$item.name</a>
+ #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
+ <a href="$currentItemHref">$item.name</a>
+ #end
+ #if ( $breadcrumbs.size() > $counter )
+ >
+ #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 )
- #if ( $item.getChildCount() > 0 )
- #set ( $collapse = "expanded" )
- #else
- #set ( $collapse = "none" )
+ #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
- #set ( $currentItemHref = $PathTool.calculateLink( $item.getAttribute(
"href" ), $relativePath ) )
<li class="$collapse">
- #if ( $currentFileName == $currentItemHref )
- <strong><a href="$currentItemHref">$item.getAttribute( "name"
)</a></strong>
+ #if ( $item.img )
+ #if ( ! ( $item.img.toLowerCase().startsWith("http") ||
$item.img.toLowerCase().startsWith("https") ) )
+ #set ( $src = $PathTool.calculateLink( $item.img, $relativePath ) )
+ #set ( $src = $item.img.replaceAll( "\\", "/" ) )
+ <img src="$src"/>
+ #else
+ <img src="$item.img" align="absbottom" style="border-width: 0"/>
+ #end
+ #end
+ #if ( $alignedFileName == $currentItemHref )
+ <strong>$item.name</strong>
#else
- <a href="$currentItemHref">$item.getAttribute( "name" )</a>
+ <a href="$currentItemHref">$item.name</a>
#end
- </li>
- #if ( $item.getChildren() )
- #if ( $item.getChildCount() > 0 )
+ #if ( $item && $item.items && $item.items.size() > 0 )
+ #if ( $collapse == "expanded" )
<ul>
- #foreach( $subitem in $item.getChildren() )
+ #foreach( $subitem in $item.items )
#menuItem( $subitem )
#end
</ul>
#end
#end
+ </li>
#end
-#macro ( mainMenu )
- #set ( $menus = $siteDescriptor.getChild( "body" ).getChildren( "menu" ) )
+#macro ( mainMenu $menus )
#foreach( $menu in $menus )
- <h5>$menu.getAttribute( "name" )</h5>
+ #if ( $menu.name )
+ <h5>$menu.name</h5>
+ #end
<ul>
- #foreach( $item in $menu.getChildren() )
+ #foreach( $item in $menu.items )
#menuItem( $item )
#end
</ul>
#end
#end
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+#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} )
+ ${project.organization.name}
+ #end
+ #end
+#end
+
+#macro ( publishDate $position $publishDate $version )
+ #if ( $publishDate && $publishDate.format )
+ #set ( $format = $publishDate.format )
+ #else
+ #set ( $format = "MM/dd/yyyy" )
+ #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
+ #end
+
+ #set ( $breadcrumbs = $decoration.body.breadcrumbs )
+
+ #if ( $datePosition.equalsIgnoreCase( $position ) )
+ #if ( ( $datePosition.equalsIgnoreCase( "right" ) ) || (
$datePosition.equalsIgnoreCase( "bottom" ) ) )
+ | $i18n.getString( "site-renderer", $locale,
"template.lastpublished" ): $dateToday
+ #if ( $versionPosition.equalsIgnoreCase( $position ) )
+ | $i18n.getString( "site-renderer", $locale, "template.version"
): ${project.version}
+ #end
+ #elseif ( ( $datePosition.equalsIgnoreCase( "navigation-bottom" ) ) || (
$datePosition.equalsIgnoreCase( "navigation-top" ) ) )
+ <div id="lastPublished">
+ $i18n.getString( "site-renderer", $locale, "template.lastpublished" ):
$dateToday
+ #if ( $versionPosition.equalsIgnoreCase( $position ) )
+ | $i18n.getString( "site-renderer", $locale,
"template.version" ): ${project.version}
+ #end
+ </div>
+ #elseif ( $datePosition.equalsIgnoreCase("left") )
+ <div class="xleft">
+ $i18n.getString( "site-renderer", $locale, "template.lastpublished" ):
$dateToday
+ #if ( $versionPosition.equalsIgnoreCase( $position ) )
+ | $i18n.getString( "site-renderer", $locale,
"template.version" ): ${project.version}
+ #end
+ #if ( $breadcrumbs && $breadcrumbs.size() > 0 )
+ | #breadcrumbs( $breadcrumbs )
+ #end
+ </div>
+ #end
+ #elseif ( $versionPosition.equalsIgnoreCase( $position ) )
+ #if ( ( $versionPosition.equalsIgnoreCase( "right" ) ) || (
$versionPosition.equalsIgnoreCase( "bottom" ) ) )
+ | $i18n.getString( "site-renderer", $locale, "template.version" ):
${project.version}
+ #elseif ( ( $versionPosition.equalsIgnoreCase( "navigation-bottom" ) ) ||
( $versionPosition.equalsIgnoreCase( "navigation-top" ) ) )
+ <div id="lastPublished">
+ $i18n.getString( "site-renderer", $locale, "template.version" ):
${project.version}
+ </div>
+ #elseif ( $versionPosition.equalsIgnoreCase("left") )
+ <div class="xleft">
+ $i18n.getString( "site-renderer", $locale, "template.version" ):
${project.version}
+ #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
+
+ <a href="$href" title="$name" id="poweredBy">
+ #set ( $img = $PathTool.calculateLink( $img, $relativePath ) )
+ #set ( $img = $img.replaceAll( "\\", "/" ) )
+ <img alt="$name" src="$img" />
+ </a>
+ #end
+ #if( $poweredBy.isEmpty() )
+ <a href="http://maven.apache.org/" title="$i18n.getString(
"site-renderer", $locale, "template.builtby" ) Maven" id="poweredBy">
+ <img alt="$i18n.getString( "site-renderer", $locale,
"template.builtby" ) Maven"
src="$relativePath/images/logos/maven-feather.png"></img>
+ </a>
+ #end
+ #else
+ <a href="http://maven.apache.org/" title="$i18n.getString(
"site-renderer", $locale, "template.builtby" ) Maven" id="poweredBy">
+ <img alt="$i18n.getString( "site-renderer", $locale,
"template.builtby" ) Maven"
src="$relativePath/images/logos/maven-feather.png"></img>
+ </a>
+ #end
+#end
+
<html>
<head>
<title>$title</title>
@@ -85,33 +278,44 @@
@import url("$relativePath/css/maven-theme.css");
@import url("$relativePath/css/site.css");
</style>
- <link rel="stylesheet" href="$relativePath/style/print.css"
type="text/css" media="print" />
+ <link rel="stylesheet" href="$relativePath/css/print.css" type="text/css"
media="print" />
#foreach( $author in $authors )
<meta name="author" content="$author" />
#end
- <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <meta http-equiv="Content-Type" content="text/html;
charset=${outputEncoding}" />
+ #if ( $decoration.body.head )
+ #foreach( $item in $decoration.body.head.getChildren() )
+ #if ( $item.name == "script" )
+ $item.toUnescapedString()
+ #else
+ $item.toString()
+ #end
+ #end
+ #end
</head>
<body class="composite">
<div id="banner">
- #set ( $banner = "bannerLeft" )
- #banner( $banner )
- #set ( $banner = "bannerRight" )
- #banner( $banner )
+ #banner( $decoration.bannerLeft "bannerLeft" )
+ #banner( $decoration.bannerRight "bannerRight" )
<div class="clear">
<hr/>
</div>
</div>
<div id="breadcrumbs">
- <div class="xleft">$i18n.getString( "site-plugin", $locale,
"template.lastpublished" ): $currentDate</div>
- <div class="xright">#links()</div>
+ #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">#mainMenu()<a
href="http://maven.apache.org/" title="$i18n.getString( "site-plugin", $locale,
"template.builtby" ) Maven" id="poweredBy">
- <img alt="$i18n.getString( "site-plugin", $locale,
"template.builtby" ) Maven"
src="$relativePath/images/logos/maven-feather.png"></img>
- </a>
- </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
@@ -121,7 +325,7 @@
<hr/>
</div>
<div id="footer">
- <div class="xright">© 2002-2005, Apache Software Foundation</div>
+ <div class="xright">©#copyright()#publishDate( "bottom"
$decoration.publishDate $decoration.version )</div>
<div class="clear">
<hr/>
</div>
Added: maven/doxia/trunk/doxia-site-renderer/src/test/resources/log4j.properties
URL:
http://svn.apache.org/viewvc/maven/doxia/trunk/doxia-site-renderer/src/test/resources/log4j.properties?rev=427569&view=auto
==============================================================================
--- maven/doxia/trunk/doxia-site-renderer/src/test/resources/log4j.properties
(added)
+++ maven/doxia/trunk/doxia-site-renderer/src/test/resources/log4j.properties
Tue Aug 1 06:02:26 2006
@@ -0,0 +1,23 @@
+# -------------------------------------------------------------------
+# Copyright 2006 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.
+# -------------------------------------------------------------------
+
+log4j.rootCategory=INFO, stdout
+
+log4j.appender.stdout=org.apache.log4j.ConsoleAppender
+log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
+log4j.appender.stdout.layout.ConversionPattern=%5p [%c{1}:%L] %d{ISO8601} -
%m%n
+
+log4j.logger.com.gargoylesoftware.htmlunit=ERROR
Modified: maven/doxia/trunk/doxia-site-renderer/src/test/site/site.xml
URL:
http://svn.apache.org/viewvc/maven/doxia/trunk/doxia-site-renderer/src/test/site/site.xml?rev=427569&r1=427568&r2=427569&view=diff
==============================================================================
--- maven/doxia/trunk/doxia-site-renderer/src/test/site/site.xml (original)
+++ maven/doxia/trunk/doxia-site-renderer/src/test/site/site.xml Tue Aug 1
06:02:26 2006
@@ -2,10 +2,11 @@
<project name="Plexus">
<bannerLeft>
<name>Plexus</name>
+ <src>http://plexus.codehaus.org/images/plexus-logo.png</src>
<href>http://plexus.codehaus.org</href>
</bannerLeft>
<bannerRight>
- <src>http://codehaus.org/codehaus-small.png</src>
+ <src>http://media.codehaus.org/images/unity-codehaus-logo.png</src>
<href>http://www.codehaus.org</href>
</bannerRight>
<body>
@@ -14,7 +15,8 @@
<item name="The Codehaus" href="http://www.codehaus.org"/>
</links>
<menu name="Quick Links">
- <item name="CDC" href="/cdc.html"/>
+ <item name="CDC" href="/cdc.html"/>
+ <item name="nestedItems" href="/nestedItems.html"/>
</menu>
</body>
</project>
Added: maven/doxia/trunk/doxia-site-renderer/src/test/site/xdoc/nestedItems.xml
URL:
http://svn.apache.org/viewvc/maven/doxia/trunk/doxia-site-renderer/src/test/site/xdoc/nestedItems.xml?rev=427569&view=auto
==============================================================================
--- maven/doxia/trunk/doxia-site-renderer/src/test/site/xdoc/nestedItems.xml
(added)
+++ maven/doxia/trunk/doxia-site-renderer/src/test/site/xdoc/nestedItems.xml
Tue Aug 1 06:02:26 2006
@@ -0,0 +1,174 @@
+<?xml version="1.0"?>
+<document>
+ <properties>
+ <title>Test List Issue</title>
+ </properties>
+
+ <body>
+ <section name="List Section">
+ <h4>Unordered lists</h4>
+ <p>
+ Below is an unordered list, followed by six paragraphs.
+ </p>
+ <ul>
+ <li>
+ Item 1.
+ <ul>
+ <li>
+ <p>Item 11.</p>
+ </li>
+ <li>
+ <p>Item 12.</p>
+ </li>
+ <li>
+ Item 13.
+ </li>
+ <li>
+ Item 14.
+ </li>
+ </ul>
+ </li>
+ <li>
+ Item 2.
+ </li>
+ <li>
+ Item 3.
+ </li>
+ <li>
+ Item 4.
+ <ul>
+ <li>
+ Item 41.
+ </li>
+ <li>
+ Item 42.
+ </li>
+ <li>
+ Item 43.
+ </li>
+ <li>
+ Item 44.
+ </li>
+ </ul>
+ </li>
+ </ul>
+ <p>
+ Paragraph 1 below list.
+ </p>
+ <p>
+ Paragraph 2 below list.
+ </p>
+ <p>
+ Paragraph 3 below list.
+ </p>
+ <p>
+ Paragraph 4 below list.
+ </p>
+ <p>
+ Paragraph 5 below list.
+ </p>
+ <p>
+ Paragraph 6 below list.
+ </p>
+
+ <h4>Ordered lists</h4>
+ <p>
+ Below is an ordered list, followed by six paragraphs.
+ </p>
+ <ol>
+ <li>
+ Item 1.
+ <ol>
+ <li>
+ Item 11.
+ </li>
+ <li>
+ Item 12.
+ </li>
+ <li>
+ Item 13.
+ </li>
+ <li>
+ Item 14.
+ </li>
+ </ol>
+ </li>
+ <li>
+ Item 2.
+ </li>
+ <li>
+ Item 3.
+ </li>
+ <li>
+ Item 4.
+ <ol>
+ <li>
+ Item 41.
+ </li>
+ <li>
+ Item 42.
+ </li>
+ <li>
+ Item 43.
+ </li>
+ <li>
+ Item 44.
+ </li>
+ </ol>
+ </li>
+ </ol>
+ <p>
+ Paragraph 1 below list.
+ </p>
+ <p>
+ Paragraph 2 below list.
+ </p>
+ <p>
+ Paragraph 3 below list.
+ </p>
+ <p>
+ Paragraph 4 below list.
+ </p>
+ <p>
+ Paragraph 5 below list.
+ </p>
+ <p>
+ Paragraph 6 below list.
+ </p>
+
+ <h4>Definition lists</h4>
+ <p>
+ Below is a definition list, followed by six paragraphs.
+ </p>
+ <dl>
+ <dt>Term 1.</dt>
+ <dd>Description 1.</dd>
+ <dt>Term 2.</dt>
+ <dd>Description 2.
+ <dl>
+ <dt>Term 21.</dt>
+ <dd>Description 21.</dd>
+ </dl>
+ </dd>
+ </dl>
+ <p>
+ Paragraph 1 below list.
+ </p>
+ <p>
+ Paragraph 2 below list.
+ </p>
+ <p>
+ Paragraph 3 below list.
+ </p>
+ <p>
+ Paragraph 4 below list.
+ </p>
+ <p>
+ Paragraph 5 below list.
+ </p>
+ <p>
+ Paragraph 6 below list.
+ </p>
+ </section>
+ </body>
+</document>