forrest-svn mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From ferdin...@apache.org
Subject svn commit: r344062 [1/2] - in /forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.output.smartSlides: ./ lib/ resources/ resources/stylesheets/ resources/ui/ src/ src/documentation/ src/documentation/content/ src/documentation/content/xdocs/ s...
Date Mon, 14 Nov 2005 07:16:57 GMT
Author: ferdinand
Date: Sun Nov 13 23:16:11 2005
New Revision: 344062

URL: http://svn.apache.org/viewcvs?rev=344062&view=rev
Log:
SmartSlides Output Plugin for discussion and reference (adding missing code)

Added:
    forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.output.smartSlides/build.xml
    forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.output.smartSlides/forrest.properties
    forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.output.smartSlides/lib/
    forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.output.smartSlides/lib/readme.txt
    forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.output.smartSlides/locationmap.xml
    forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.output.smartSlides/output.xmap
    forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.output.smartSlides/output.xmap.org
    forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.output.smartSlides/resources/
    forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.output.smartSlides/resources/stylesheets/
    forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.output.smartSlides/resources/stylesheets/presentation-to-slidy.xsl
    forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.output.smartSlides/resources/ui/
    forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.output.smartSlides/resources/ui/print.css
    forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.output.smartSlides/resources/ui/show.css
    forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.output.smartSlides/resources/ui/slidy.js
    forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.output.smartSlides/src/
    forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.output.smartSlides/src/documentation/
    forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.output.smartSlides/src/documentation/content/
    forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.output.smartSlides/src/documentation/content/xdocs/
    forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.output.smartSlides/src/documentation/content/xdocs/images/
    forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.output.smartSlides/src/documentation/content/xdocs/images/group-logo.gif   (with props)
    forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.output.smartSlides/src/documentation/content/xdocs/images/group.svg
    forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.output.smartSlides/src/documentation/content/xdocs/images/icon.png   (with props)
    forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.output.smartSlides/src/documentation/content/xdocs/images/project-logo.gif   (with props)
    forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.output.smartSlides/src/documentation/content/xdocs/images/project.svg
    forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.output.smartSlides/src/documentation/content/xdocs/images/usemap.gif   (with props)
    forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.output.smartSlides/src/documentation/content/xdocs/index.xml
    forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.output.smartSlides/src/documentation/content/xdocs/site.xml
    forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.output.smartSlides/src/documentation/content/xdocs/tabs.xml
    forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.output.smartSlides/src/documentation/skinconf.xml
    forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.output.smartSlides/src/java/
    forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.output.smartSlides/src/java/readme.txt
    forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.output.smartSlides/status.xml

Added: forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.output.smartSlides/build.xml
URL: http://svn.apache.org/viewcvs/forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.output.smartSlides/build.xml?rev=344062&view=auto
==============================================================================
--- forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.output.smartSlides/build.xml (added)
+++ forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.output.smartSlides/build.xml Sun Nov 13 23:16:11 2005
@@ -0,0 +1,42 @@
+<?xml version="1.0"?>
+<!--
+  Copyright 2002-2005 The Apache Software Foundation or its licensors,
+  as applicable.
+
+  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.
+-->
+<project default="docs" basedir="." name="Forrest org.apache.forrest.plugin.output.smartSlides build file">
+  <property name="plugin-name" value="org.apache.forrest.plugin.output.smartSlides"/>
+  <property name="forrest.version" value="0.8"/>
+  <property name="type" value="output"/>
+  <property name="plugin-version" value="0.1-dev"/>
+  <property name="description" value="Translate documents adhering to the smartSlide grammar to HTML-presentations based on W3Cs slidy-module."/>
+  <property name="author" value="Apache Forrest Project"/>
+  <property name="websiteURL" value="http://forrest.apache.org/docs/plugins/org.apache.forrest.plugin.output.smartSlides"/>
+  <property name="downloadURL" value="http://forrest.apache.org/plugins/"/>
+  
+  <import file="../build.xml"/>
+
+  <!-- Add any additional installation work here in the build target, for example:
+  <target name="build"
+          description="Extract the tools">
+     <unzip dest="${plugins.localDeploy-dir}/${plugin-name}/resources">
+       <fileset dir="tools">
+          <include name="pluginBionaryTools.zip"/>
+        </fileset>
+     </unzip>   
+  </target>
+  -->
+</project>
+  
+  

Added: forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.output.smartSlides/forrest.properties
URL: http://svn.apache.org/viewcvs/forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.output.smartSlides/forrest.properties?rev=344062&view=auto
==============================================================================
--- forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.output.smartSlides/forrest.properties (added)
+++ forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.output.smartSlides/forrest.properties Sun Nov 13 23:16:11 2005
@@ -0,0 +1,109 @@
+# Copyright 2002-2005 The Apache Software Foundation or its licensors,
+# as applicable.
+#
+# 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.
+
+##############
+# Properties used by forrest.build.xml for building the website
+# These are the defaults, un-comment them if you need to change them.
+##############
+
+# Prints out a summary of Forrest settings for this project
+#forrest.echo=true
+
+# Project name (used to name .war file)
+#project.name=my-project
+
+# Specifies name of Forrest skin to use
+#project.skin=tigris
+#project.skin=pelt
+
+# comma separated list, file:// is supported
+#forrest.skins.descriptors=http://forrest.apache.org/skins/skins.xml,file:///c:/myskins/skins.xml
+
+##############
+# behavioural properties
+#project.menu-scheme=tab_attributes
+#project.menu-scheme=directories
+
+##############
+# layout properties
+
+# Properties that can be set to override the default locations
+#
+# Parent properties must be set. This usually means uncommenting
+# project.content-dir if any other property using it is uncommented
+
+#project.status=status.xml
+#project.content-dir=src/documentation
+#project.raw-content-dir=${project.content-dir}/content
+#project.conf-dir=${project.content-dir}/conf
+#project.sitemap-dir=${project.content-dir}
+#project.xdocs-dir=${project.content-dir}/content/xdocs
+#project.resources-dir=${project.content-dir}/resources
+#project.stylesheets-dir=${project.resources-dir}/stylesheets
+#project.images-dir=${project.resources-dir}/images
+#project.schema-dir=${project.resources-dir}/schema
+#project.skins-dir=${project.content-dir}/skins
+#project.skinconf=${project.content-dir}/skinconf.xml
+#project.lib-dir=${project.content-dir}/lib
+#project.classes-dir=${project.content-dir}/classes
+#project.translations-dir=${project.content-dir}/translations
+
+##############
+# validation properties
+
+# This set of properties determine if validation is performed
+# Values are inherited unless overridden.
+# e.g. if forrest.validate=false then all others are false unless set to true.
+#forrest.validate=true
+#forrest.validate.xdocs=${forrest.validate}
+#forrest.validate.skinconf=${forrest.validate}
+#forrest.validate.sitemap=${forrest.validate}
+#forrest.validate.stylesheets=${forrest.validate}
+#forrest.validate.skins=${forrest.validate}
+#forrest.validate.skins.stylesheets=${forrest.validate.skins}
+
+# *.failonerror=(true|false) - stop when an XML file is invalid
+#forrest.validate.failonerror=true
+
+# *.excludes=(pattern) - comma-separated list of path patterns to not validate
+# e.g.
+#forrest.validate.xdocs.excludes=samples/subdir/**, samples/faq.xml
+#forrest.validate.xdocs.excludes=
+
+
+##############
+# General Forrest properties
+
+# The URL to start crawling from
+#project.start-uri=linkmap.html
+# Set logging level for messages printed to the console
+# (DEBUG, INFO, WARN, ERROR, FATAL_ERROR)
+#project.debuglevel=ERROR
+# Max memory to allocate to Java
+#forrest.maxmemory=64m
+# Any other arguments to pass to the JVM. For example, to run on an X-less
+# server, set to -Djava.awt.headless=true
+#forrest.jvmargs=
+# The bugtracking URL - the issue number will be appended
+#project.bugtracking-url=http://issues.apache.org/bugzilla/show_bug.cgi?id=
+#project.bugtracking-url=http://issues.apache.org/jira/browse/
+# The issues list as rss
+#project.issues-rss-url=
+#I18n Property only works for the "forrest run" target.
+#project.i18n=true
+# The names of plugins that are required to build the project
+# comma separated list (no spaces)
+# Run "forrest available-plugins" for a list of plug-ins currently available
+project.required.plugins=org.apache.forrest.plugin.output.smartSlides,org.apache.forrest.plugin.input.projectInfo,org.apache.forrest.plugin.output.pdf

Added: forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.output.smartSlides/lib/readme.txt
URL: http://svn.apache.org/viewcvs/forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.output.smartSlides/lib/readme.txt?rev=344062&view=auto
==============================================================================
--- forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.output.smartSlides/lib/readme.txt (added)
+++ forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.output.smartSlides/lib/readme.txt Sun Nov 13 23:16:11 2005
@@ -0,0 +1 @@
+Place any libraries required by your plugin in this directory.
\ No newline at end of file

Added: forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.output.smartSlides/locationmap.xml
URL: http://svn.apache.org/viewcvs/forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.output.smartSlides/locationmap.xml?rev=344062&view=auto
==============================================================================
--- forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.output.smartSlides/locationmap.xml (added)
+++ forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.output.smartSlides/locationmap.xml Sun Nov 13 23:16:11 2005
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Copyright 2002-2005 The Apache Software Foundation or its licensors,
+  as applicable.
+
+  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.
+-->
+<locationmap xmlns="http://apache.org/forrest/locationmap/1.0">
+
+  <components>
+    <matchers default="lm">
+      <matcher 
+        name="lm" 
+        src="org.apache.forrest.locationmap.WildcardLocationMapHintMatcher"/>
+    </matchers>
+    <selectors default="exists">
+          <selector name="exists" logger="sitemap.selector.exists"  
+                    src="org.apache.forrest.sourceexists.SourceExistsSelector" />
+    </selectors>
+  </components>
+  
+  <locator>    
+    <match pattern="daisy.transform.*.*">
+      <location src="resources/stylesheets/{1}-to-{2}.xsl"/>
+    </match>   
+  </locator>
+</locationmap>

Added: forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.output.smartSlides/output.xmap
URL: http://svn.apache.org/viewcvs/forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.output.smartSlides/output.xmap?rev=344062&view=auto
==============================================================================
--- forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.output.smartSlides/output.xmap (added)
+++ forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.output.smartSlides/output.xmap Sun Nov 13 23:16:11 2005
@@ -0,0 +1,65 @@
+<?xml version="1.0"?>
+
+  <!-- ============================================================ -->
+  <!-- S5 Plugin                                               -->
+  <!-- This plugin provides WYSIWYG editing of XHTML1.0 files       -->
+  <!--                                                              -->
+  <!-- ============================================================ -->
+
+<map:sitemap xmlns:map="http://apache.org/cocoon/sitemap/1.0">
+  
+  <map:pipelines internal="true">
+      
+      <map:components>
+          <map:actions>
+              <map:action logger="sitemap.action.sourcetype" name="sourcetype" src="org.apache.forrest.sourcetype.SourceTypeAction">
+                  <sourcetype name="SmartSlides-1.0">
+                      <document-declaration public-id="-//APACHE//DTD SmartSlides Presentation V1.0//EN" />
+                  </sourcetype>
+                  
+              </map:action>
+          </map:actions>
+          
+          <map:selectors default="parameter">
+              <map:selector logger="sitemap.selector.parameter" name="parameter" src="org.apache.cocoon.selection.ParameterSelector" />
+          </map:selectors>
+      </map:components>
+      
+      <map:resources>    
+          <map:resource name="transform-to-document">
+              <map:act type="sourcetype" src="{src}">
+                  <map:select type="parameter">
+                      <map:parameter name="parameter-selector-test" value="{sourcetype}" />
+                      <map:when test="SmartSlides-1.0">
+                          <map:generate src="{project:content.xdocs}{../../1}.xml" />
+                          <map:transform src="{forrest:plugins}/org.apache.forrest.plugin.output.smartSlides/resources/stylesheets/presentation-to-slidy.xsl" />
+                          <map:serialize type="html-document"/>
+                      </map:when>
+                  </map:select>
+              </map:act>
+          </map:resource>
+      </map:resources>
+      
+      
+    <map:pipeline>
+        <map:match pattern="SmartSlides/**.xml">
+            <map:call resource="transform-to-document">
+                <map:parameter name="src" value="{project:content.xdocs}{1}.xml" />
+            </map:call>
+        </map:match>
+       
+                    
+        <map:match pattern="SmartSlides/**/ui/*.js">
+            <map:read src="{forrest:plugins}/org.apache.forrest.plugin.output.smartSlides/resources/ui/{2}.js"
+           mime-type="application/x-javascript"/>
+      </map:match>  
+      
+        <map:match pattern="SmartSlides/**/ui/*.css">
+          <map:read src="{forrest:plugins}/org.apache.forrest.plugin.output.smartSlides/resources/ui/{2}.css"
+           mime-type="text/css"/>
+      </map:match>  
+     
+  
+    </map:pipeline>
+  </map:pipelines>    
+</map:sitemap>

Added: forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.output.smartSlides/output.xmap.org
URL: http://svn.apache.org/viewcvs/forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.output.smartSlides/output.xmap.org?rev=344062&view=auto
==============================================================================
--- forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.output.smartSlides/output.xmap.org (added)
+++ forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.output.smartSlides/output.xmap.org Sun Nov 13 23:16:11 2005
@@ -0,0 +1,29 @@
+<?xml version="1.0"?>
+<!--
+  Copyright 1999-2005 The Apache Software Foundation or its licensors,
+  as applicable.
+
+  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.
+-->
+<map:sitemap xmlns:map="http://apache.org/cocoon/sitemap/1.0">
+
+<map:pipelines>
+
+  <map:pipeline>
+
+  <!-- FIXME: add your plugin matches here -->
+  
+  </map:pipeline>
+</map:pipelines>
+
+</map:sitemap>

Added: forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.output.smartSlides/resources/stylesheets/presentation-to-slidy.xsl
URL: http://svn.apache.org/viewcvs/forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.output.smartSlides/resources/stylesheets/presentation-to-slidy.xsl?rev=344062&view=auto
==============================================================================
--- forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.output.smartSlides/resources/stylesheets/presentation-to-slidy.xsl (added)
+++ forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.output.smartSlides/resources/stylesheets/presentation-to-slidy.xsl Sun Nov 13 23:16:11 2005
@@ -0,0 +1,374 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" extension-element-prefixes="datetime
+    redirect" xmlns:datetime="http://exslt.org/dates-and-times" xmlns:redirect="http://xml.apache.org/xalan/redirect">
+    <xsl:output doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN"
+        doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" encoding="ISO-8859-1" indent="yes"
+        method="html" />
+    <!-- 
+        
+        Parameters 
+    
+    -->
+    <!--space separated list of all special elements to be visible in target (talk demo addlInfo comment todo) -->
+    <xsl:param name="show"> </xsl:param>
+    <xsl:template match="/">
+        <xsl:apply-templates mode="slidy" />
+    </xsl:template>
+    <!-- 
+        
+        Main processing template
+    -->
+    <xsl:template match="presentation" mode="slidy">
+        <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
+            <head>
+                <xsl:apply-templates select="metadata" mode="slidy" />
+            </head>
+            <xsl:apply-templates select="content" mode="slidy" />
+        </html>
+    </xsl:template>
+    <!-- 
+        
+        Process metadata
+    -->
+    <xsl:template match="metadata" mode="slidy">
+        <title>
+            <xsl:value-of select="title" />
+        </title>
+        <link rel="stylesheet" type="text/css" media="screen, projection" href="ui/show.css" />
+        <script src="ui/slidy.js" type="text/javascript" />
+        <style type="text/css">
+            <!-- your custom style rules -->
+        </style>
+        <link rel="stylesheet" type="text/css" media="print" href="ui/print.css" />
+        <meta name="copyright">
+            <xsl:attribute name="content">
+                <xsl:value-of select="author" />
+                <xsl:text> </xsl:text>
+                <xsl:value-of select="datetime:formatDate(created,'yyyy')" />
+            </xsl:attribute>
+        </meta>
+    </xsl:template>
+    <!-- 
+        
+        Generate visible content
+    -->
+    <xsl:template match="content" mode="slidy">
+        <body>
+            <xsl:attribute name="class">
+                <xsl:value-of select="normalize-space(concat('slidyPresentation ', @class))" />
+            </xsl:attribute>
+            <xsl:copy-of select="@id|@style" />
+            <!-- Background for all pages -->
+            <div class="background">
+                <img id="head-logo" alt="graphic with four colored squares" style="float:right"
+                    src="resources/ssplogo.png" />
+            </div>
+            <!-- Background for cover page -->
+            <div class="background cover" style="background-color: white"> </div>
+            <div class="background chapterTitle" style="background-color: yellow"> </div>
+            <xsl:apply-templates mode="slidy" />
+        </body>
+    </xsl:template>
+    <!--
+        
+        Process chapter start
+    -->
+    <xsl:template match="chapter" mode="slidy">
+        <xsl:if test="not(contains(@showOnlyFor,'print'))">
+            <xsl:apply-templates mode="slidy" />
+        </xsl:if>
+    </xsl:template>
+    <!--
+        
+        Process module (no processing at all)
+    -->
+    <xsl:template match="module" mode="slidy">
+        <xsl:if test="not(contains(@showOnlyFor,'print'))">
+            <xsl:apply-templates mode="slidy" />
+        </xsl:if>
+    </xsl:template>
+    <!--
+        
+        Process page
+    -->
+    <xsl:template match="page" mode="slidy">
+        <xsl:if test="not(contains(@showOnlyFor,'print'))">
+            <div>
+                <xsl:attribute name="class">
+                    <xsl:value-of select="normalize-space(concat('slide ', @type))" />
+                </xsl:attribute>
+                <xsl:choose>
+                    <xsl:when test="heading">
+                        <h1>
+                            <xsl:copy-of select="heading/@*" />
+                            <xsl:apply-templates mode="slidyHeading" select="heading" />
+                        </h1>
+                    </xsl:when>
+                    <xsl:otherwise>
+                        <h1>
+                            <xsl:copy-of select="@*" />
+                            <xsl:apply-templates mode="slidy" select="@title" />
+                        </h1>
+                    </xsl:otherwise>
+                </xsl:choose>
+                <xsl:apply-templates mode="slidy" />
+            </div>
+        </xsl:if>
+    </xsl:template>
+    <!--
+        
+        Special element TOC as a macro for a Table of content
+    -->
+    <xsl:template match="TOC" mode="slidy">
+        <ul>
+            <xsl:for-each select="//chapter[not (@hideInTOC)]|//page[@listIn='allTOCs' or  @listIn='globalTOC']">
+                <li>
+                    <p>
+                        <xsl:attribute name="class">
+                            <xsl:choose>
+                                <xsl:when test="local-name()='chapter'">TOCchapterEntry</xsl:when>
+                                <xsl:otherwise>TOCPageEntry</xsl:otherwise>
+                            </xsl:choose>
+                        </xsl:attribute>
+                        <xsl:choose>
+                            <xsl:when test="@title">
+                                <xsl:value-of select="@title" />
+                            </xsl:when>
+                            <xsl:otherwise>
+                                <xsl:value-of select="heading" />
+                            </xsl:otherwise>
+                        </xsl:choose>
+                    </p>
+                </li>
+            </xsl:for-each>
+        </ul>
+    </xsl:template>
+    <!--
+        
+        Special element chapterTOC as a macro for a Table of content
+    -->
+    <xsl:template match="chapterTOC" mode="slidy">
+        <!-- List of pages -->
+        <ul>
+            <xsl:for-each select="ancestor::                 page/following-sibling::page[@listIn='allTOCs' or
+                @listIn='chapterTOC']|ancestor::                 page/following-sibling::chapter">
+                <li>
+                    <xsl:value-of select="@title" />
+                </li>
+            </xsl:for-each>
+        </ul>
+    </xsl:template>
+    <!--
+        
+        Special element PresentationTitle as a macro for a Table of content
+    -->
+    <xsl:template match="PresentationTitle" mode="slidy">
+        <xsl:value-of select="/presentation/metadata/title" />
+    </xsl:template>
+    <!--
+        
+        Special element Presenters as a macro for a Table of content
+    -->
+    <xsl:template match="Presenters" mode="slidy">
+        <xsl:for-each select="/presentation/metadata/presenter">
+            <p class="Presenter">
+                <xsl:value-of select="fullName" />
+                <br />
+                <a href="mailto:{email}">
+                    <xsl:value-of select="email" />
+                </a>
+            </p>
+        </xsl:for-each>
+    </xsl:template>
+    <!--
+        
+        Heading
+        block processing
+    -->
+    <xsl:template match="heading" mode="slidyHeading">
+        <xsl:apply-templates mode="slidy" />
+    </xsl:template>
+    <!--
+        
+        Heading
+        block processing
+    -->
+    <xsl:template match="heading" mode="slidy" />
+    <!--
+        
+        section
+    -->
+    <xsl:template match="section" mode="slidy">
+        <xsl:if test="not(contains(@showOnlyFor,'print'))">
+            <xsl:element name="{concat('h',count(ancestor::section)+1)}">
+                <xsl:copy-of select="@class|@id|@style" />
+                <xsl:value-of select="@title" />
+            </xsl:element>
+            <xsl:apply-templates mode="slidy" />
+        </xsl:if>
+    </xsl:template>
+    <!--
+        
+        XRef
+    -->
+    <xsl:template match="xref" mode="slidy">
+        <xsl:if test="not(contains(@showOnlyFor,'print'))">
+            <a>
+                <xsl:copy-of select="@class|@id|@style" />
+                <xsl:attribute name="href">
+                    <xsl:value-of select="@url" />
+                </xsl:attribute>
+                <xsl:apply-templates mode="slidy" />
+            </a>
+        </xsl:if>
+    </xsl:template>
+    <!--
+        
+        Image
+    -->
+    <xsl:template match="image" mode="slidy">
+        <xsl:if test="not(contains(@showOnlyFor,'print'))">
+            <img>
+                <xsl:copy-of select="@class|@id|@style" />
+                <xsl:attribute name="src">
+                    <xsl:value-of select="@url" />
+                </xsl:attribute>
+                <xsl:attribute name="alt">
+                    <xsl:value-of select="@alternativeText" />
+                </xsl:attribute>
+            </img>
+        </xsl:if>
+    </xsl:template>
+    <!--
+        
+        numberedList
+    -->
+    <xsl:template match="numberedList" mode="slidy">
+        <xsl:if test="not(contains(@showOnlyFor,'print'))">
+            <ol>
+                <xsl:copy-of select="@class|@id|@style" />
+                <xsl:apply-templates mode="slidy" />
+            </ol>
+        </xsl:if>
+    </xsl:template>
+    <!--
+        
+        bulletList
+    -->
+    <xsl:template match="bulletList" mode="slidy">
+        <xsl:if test="not(contains(@showOnlyFor,'print'))">
+            <ul>
+                <xsl:copy-of select="@class|@id|@style" />
+                <xsl:apply-templates mode="slidy" />
+            </ul>
+        </xsl:if>
+    </xsl:template>
+    <!--
+        
+        list item
+    -->
+    <xsl:template match="item" mode="slidy">
+        <xsl:if test="not(contains(@showOnlyFor,'print'))">
+            <li>
+                <xsl:copy-of select="@class|@id|@style" />
+                <xsl:apply-templates mode="slidy" />
+            </li>
+        </xsl:if>
+    </xsl:template>
+    <!--
+        
+        para
+    -->
+    <xsl:template match="para" mode="slidy">
+        <xsl:if test="not(contains(@showOnlyFor,'print'))">
+            <p>
+                <xsl:copy-of select="@class|@id|@style" />
+                <xsl:apply-templates mode="slidy" />
+            </p>
+        </xsl:if>
+    </xsl:template>
+    <!--
+        
+        todo
+    -->
+    <xsl:template match="todo" mode="slidy">
+        <xsl:if test="contains($show,local-name())">
+            <div>
+                <xsl:attribute name="class">
+                    <xsl:value-of select="local-name()" />
+                </xsl:attribute>
+                <xsl:copy-of select="@id|@style" />
+                <xsl:value-of select="assignedTo" />:<xsl:value-of select="doUntil" />:<xsl:value-of select="priority" /><br />
+                <xsl:apply-templates mode="doc13" />
+            </div>
+        </xsl:if>
+    </xsl:template>
+    <!--
+        
+        comment, talk, demo
+    -->
+    <xsl:template match="comment|talk|demo" mode="slidy">
+        <xsl:if test="contains($show,local-name())">
+            <div>
+                <xsl:copy-of select="@id|@style" />
+                <xsl:attribute name="class">
+                    <xsl:value-of select="local-name()" />
+                </xsl:attribute>
+                <xsl:apply-templates mode="slidy" />
+            </div>
+        </xsl:if>
+    </xsl:template>
+    <!--
+        
+        addlInfo
+    -->
+    <xsl:template match="addlInfo" mode="slidy">
+        <xsl:if test="contains($show,local-name())">
+            <xsl:variable name="NoteFileName" select="concat('addlInfo/',generate-id(..),'.html')" />
+            <a href="{$NoteFileName}">
+                <xsl:attribute name="class">
+                    <xsl:value-of select="normalize-space(concat('additionalInfoRef ', @class))" />
+                </xsl:attribute>
+                <img src="resources\notes.png" alt="Click here to open additional info ..." />
+            </a>
+            <redirect:write select="$NoteFileName">
+                <html>
+                    <body>
+                        <xsl:apply-templates mode="slidy" />
+                    </body>
+                </html>
+            </redirect:write>
+        </xsl:if>
+    </xsl:template>
+    <!--
+
+        Elements that can be passed on unchanged
+    -->
+    <xsl:template match="em|strong|kbd|quote|code|br" mode="slidy">
+        <xsl:copy>
+            <xsl:copy-of select="@class|@id|@style" />
+            <xsl:apply-templates mode="slidy" />
+        </xsl:copy>
+    </xsl:template>
+    <!--
+        
+        Process bare text in items
+        and wrap it in paras
+    -->
+    <xsl:template match="item/text()|cell/text()" mode="slidy">
+        <!-- Ignore completely empty pieces of text -->
+        <xsl:if test="normalize-space(.)!=''">
+            <p>
+                <xsl:value-of select="." />
+            </p>
+        </xsl:if>
+    </xsl:template>
+    <!--
+        
+        Catch unblocked elements
+    -->
+    <xsl:template match="node()|text()|comment()">
+        <xsl:message>Ungeblocktes Elemente <xsl:value-of select="." /></xsl:message>
+    </xsl:template>
+    <xsl:template match="processing-instruction()" />
+</xsl:stylesheet>

Added: forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.output.smartSlides/resources/ui/print.css
URL: http://svn.apache.org/viewcvs/forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.output.smartSlides/resources/ui/print.css?rev=344062&view=auto
==============================================================================
--- forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.output.smartSlides/resources/ui/print.css (added)
+++ forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.output.smartSlides/resources/ui/print.css Sun Nov 13 23:16:11 2005
@@ -0,0 +1,58 @@
+/* print.css
+
+   Copyright (c) 2005 W3C (MIT, ERCIM, Keio), All Rights Reserved.
+   W3C liability, trademark, document use and software licensing
+   rules apply, see:
+
+   http://www.w3.org/Consortium/Legal/copyright-documents
+   http://www.w3.org/Consortium/Legal/copyright-software
+*/
+body {
+  color: black;
+  font-family: sans-serif;
+  font-size: 12pt;
+}
+
+div.slide { page-break-before: auto; page-break-inside: avoid; }
+div.background { display: none; 
+  visibility: hidden; page-break-after: avoid; }
+div.handout { display: block; visibility: visible; }
+
+div dt
+{
+  margin-left: 0;
+  margin-top: 1em;
+  margin-bottom: 0.5em;
+  font-weight: bold;
+}
+div dd
+{
+  margin-left: 2em;
+}
+
+blockquote { font-style: italic }
+
+pre { color: rgb(0,128,0); font-size: 80%;
+ font-weight: bold; line-height: 120%; }
+
+p.copyright { font-size: smaller }
+
+a:visited { color: navy }
+a:link { color: blue }
+a:hover { color: red }
+a:active { color: red }
+
+a {text-decoration : none}
+.navbar a:link {color: white}
+.navbar a:visited {color: yellow}
+.navbar a:active {color: red}
+.navbar a:hover {color: red}
+
+ul { list-style-type: square; }
+ul ul { list-style-type: disc; }
+ul ul ul { list-style-type: circle; }
+ul ul ul ul { list-style-type: disc; }
+li { margin-left: 0.5em; }
+li li { font-size: 80%; font-style: italic }
+li li li { font-size: 80%; font-style: normal }
+

Added: forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.output.smartSlides/resources/ui/show.css
URL: http://svn.apache.org/viewcvs/forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.output.smartSlides/resources/ui/show.css?rev=344062&view=auto
==============================================================================
--- forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.output.smartSlides/resources/ui/show.css (added)
+++ forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.output.smartSlides/resources/ui/show.css Sun Nov 13 23:16:11 2005
@@ -0,0 +1,167 @@
+/* show.css
+
+   Copyright (c) 2005 W3C (MIT, ERCIM, Keio), All Rights Reserved.
+   W3C liability, trademark, document use and software licensing
+   rules apply, see:
+
+   http://www.w3.org/Consortium/Legal/copyright-documents
+   http://www.w3.org/Consortium/Legal/copyright-software
+*/
+body
+{
+  margin: 0 0 0 0;
+  padding: 0 0 0 0;
+  width: 100%;
+  height: 100%;
+  color: black;
+  background-color: white;
+  font-family: sans-serif;
+  font-size: 14pt;
+}
+
+div.toolbar {
+  position: fixed; z-index: 200;
+  top: auto; bottom: 0; left: 0; right: 0;
+  height: 1.2em; text-align: right;
+  padding-left: 1em;
+  padding-right: 1em; 
+  font-size: 60%;
+  color: red; background: rgb(240,240,240);
+}
+
+div.background {
+  position: absolute; z-index: 1;
+  left: 0; right: 0; top: 0; bottom: 0;
+}
+
+div.handout {
+  margin-left: 20px;
+  margin-right: 20px;
+}
+
+div.slide.titlepage {
+  text-align: center;
+}
+
+div.slide.titlepage.h1 {
+  padding-top: 40%;
+}
+
+
+div.slide {
+  z-index: 20;
+  margin: 0 0 0 0;
+  padding-top: 1em;
+  padding-bottom: 0;
+  padding-left: 50px;
+  padding-right: 50px;
+  border-width: 0;
+  top: 0;
+  bottom: 0;
+  left: 0;
+  right: 0;
+  line-height: 120%;
+  background-color: transparent;
+}
+
+div.slide h1 {
+  padding-left: 0;
+  padding-right: 20pt;
+  padding-top: 4pt;
+  padding-bottom: 4pt;
+  margin-top: 1em;
+  margin-left: 0;
+  margin-right: 60pt;
+  margin-bottom: 0.5em;
+  display: block; 
+  font-size: 160%;
+  line-height: 1.2em;
+  background: transparent;
+}
+
+pre { color: rgb(0,128,0); font-size: 80%;
+ font-weight: bold; line-height: 120%; }
+
+blockquote { font-style: italic }
+
+img { background-color: transparent }
+
+p.copyright { font-size: smaller }
+
+.center { text-align: center }
+.footnote { font-size: smaller; margin-left: 2em; }
+
+a img { border-width: 0; border-style: none }
+
+a:visited { color: navy }
+a:link { color: blue }
+a:hover { color: red; text-decoration: underline }
+a:active { color: red; text-decoration: underline }
+
+a {text-decoration: none}
+.navbar a:link {color: white}
+.navbar a:visited {color: yellow}
+.navbar a:active {color: red}
+.navbar a:hover {color: red}
+
+ul { list-style-type: square; }
+ul ul { list-style-type: disc; }
+ul ul ul { list-style-type: circle; }
+ul ul ul ul { list-style-type: disc; }
+li { margin-left: 0.5em; margin-top: 0.5em; }
+li li { font-size: 85%; font-style: normal }
+li li li { font-size: 85%; font-style: normal }
+
+div dt
+{
+  margin-left: 0;
+  margin-top: 1em;
+  margin-bottom: 0.5em;
+  font-weight: bold;
+}
+div dd
+{
+  margin-left: 2em;
+  margin-bottom: 0.5em;
+}
+
+.comment 
+{
+    color: grey; 
+    background-color: silver;
+} 
+
+.talk 
+{ 
+    color: blue; 
+    font-size: 10pt; 
+} 
+
+.todo 
+{ 
+    color: red; 
+    font-size: 10pt; 
+} 
+
+.demo 
+{
+    background-color:linen; 
+} 
+
+.additionalInfoRef 
+{ 
+    position: fixed; 
+    bottom: 1em; 
+    right: 1em;
+} 
+
+.chapterTitle h1
+{
+    position:relative;
+    top:35%;
+}
+
+ #ferdinandsphoto{float: left; margin-right: 2em; width: 10%; margin-bottom: 2em;}
+ .clearBoth{clear:both}
+ .screenshots {width: 60%;}     
+. skinShots {width: 50%;}

Added: forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.output.smartSlides/resources/ui/slidy.js
URL: http://svn.apache.org/viewcvs/forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.output.smartSlides/resources/ui/slidy.js?rev=344062&view=auto
==============================================================================
--- forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.output.smartSlides/resources/ui/slidy.js (added)
+++ forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.output.smartSlides/resources/ui/slidy.js Sun Nov 13 23:16:11 2005
@@ -0,0 +1,1598 @@
+/* slidy.js
+
+   Copyright (c) 2005 W3C (MIT, ERCIM, Keio), All Rights Reserved.
+   W3C liability, trademark, document use and software licensing
+   rules apply, see:
+
+   http://www.w3.org/Consortium/Legal/copyright-documents
+   http://www.w3.org/Consortium/Legal/copyright-software
+*/
+
+var ns_pos = (typeof window.pageYOffset!='undefined');
+var khtml = ((navigator.userAgent).indexOf("KHTML") >= 0 ? true : false);
+
+window.onload = startup; // equivalent to onload on body element
+
+var slidenum = 0;     // integer slide count: 0, 1, 2, ...
+var slides;           // set to array of slide div's
+var slideNumElement;  // element containing slide number
+var notes;            // set to array of handout div's
+var backgrounds;      // set to array of background div's
+var toolbar;          // element containing toolbar
+var title;            // document title
+var lastShown = null; // last incrementally shown item
+var eos = null;       // span element for end of slide indicator
+
+var viewAll = 0;      // 1 to view all slides + handouts
+var wantToolbar = 1;   // 0 if toolbar isn't wanted
+var mouseClickEnabled = true;  // enables left click for next slide
+var scrollhack = 0;   // IE work around for position: fixed
+
+var helpPage = "http://www.w3.org/Talks/Tools/Slidy/help.html";
+var helpText = "Navigate with click, space bar, Pg Up or Pg Dn." +
+               " Use < and > (or - and + on number pad) to change font size.";
+
+var sizeIndex = 0;
+var sizes = new Array("10pt", "12pt", "14pt", "16pt", "18pt",
+                      "20pt", "22pt", "24pt", "26pt");
+
+// the corresponding expected toolbar height in pixels
+// as measured with Internet Explorer and Galeon
+
+var toolbarHeight = new Array(10,12,13,15,16,19,21,23,25);
+
+var okayForIncremental = incrementalElementList();
+
+// needed for efficient resizing
+var lastWidth = 0;
+var lastHeight = 0;
+
+// Needed for cross browser support for relative width/height on
+// object elements. The work around is to save width/height attributes
+// and then to recompute absolute width/height dimensions on resizing
+var objects;
+
+/* general initialization */
+function startup()
+{
+   title = document.title;
+   toolbar = addToolbar();
+   slides = collectSlides();
+   notes = collectNotes();
+   objects = document.body.getElementsByTagName("object");
+   backgrounds = collectBackgrounds();
+   patchAnchors();
+   slidenum = findSlideNumber(location.href);
+
+   if (slides.length > 0)
+   {
+      var slide = slides[slidenum];
+      slide.style.position = "absolute";
+   
+      if (slidenum > 0)
+      {
+         setVisibilityAllIncremental("visible");
+         lastShown = previousIncrementalItem(null);
+         setEosStatus(true);
+      }
+      else
+      {
+         lastShown = null;
+         setVisibilityAllIncremental("hidden");
+         setEosStatus(!nextIncrementalItem(lastShown));
+      }
+
+      setLocation();
+   }
+
+   // bind even handlers
+   document.onclick = mouseButtonClick;
+   document.onkeydown = keyDown;
+   window.onresize  = resized;
+   window.onscroll = scrolled;
+   singleSlideView();
+
+   setLocation();
+   resized();
+   showToolbar();
+   //fontAdjust();
+
+
+   //if (!ns_pos)
+   //   setTimeout(ieHack, 100);
+}
+
+// hack to persuade IE to compute correct document height
+// as needed for simulating fixed positioning of toolbar
+function ieHack()
+{
+   window.resizeBy(0,-1);
+   window.resizeBy(0, 1);
+}
+
+// Safari and Konqueror don't yet support getComputedStyle()
+// and they always reload page when location.href is updated
+function isKHTML()
+{
+   var agent = navigator.userAgent;
+   return (agent.indexOf("KHTML") >= 0 ? true : false);
+}
+
+// hack to work around variation in point size to pixels as
+// Opera/Linux displays fonts 30% smaller than other browsers
+
+function fontAdjust()
+{
+   var fontAdjustment = toolbarHeight[sizeIndex] / toolbar.offsetHeight;
+   //alert("fontAdjustment is " + fontAdjustment);
+
+   if (fontAdjustment > 1.1)
+   {
+      // calculated adjustment varies with Opera's window size
+      // which causes problems, so let's fix it to 1.3
+      fontAdjustment = 1.3;
+
+      for (var i = 0; i < sizes.length; ++i)
+      {
+         size = parseInt(sizes[i]);
+         sizes[i] = Math.round(fontAdjustment * size) + "pt";
+      }
+
+      document.body.style.fontSize = sizes[sizeIndex];
+
+      // force correct positioning of toolbar
+      setTimeout(showToolbar, 500);
+      //alert("adjustment is " + fontAdjustment);
+   }
+
+   showToolbar();
+}
+
+function resized()
+{
+   var width = 0;
+
+   if ( typeof( window.innerWidth ) == 'number' )
+      width = window.innerWidth;  // Non IE browser
+   else if (document.documentElement && document.documentElement.clientWidth)
+      width = document.documentElement.clientWidth;  // IE6
+   else if (document.body && document.body.clientWidth)
+      width = document.body.clientWidth; // IE4
+
+   var height = 0;
+
+   if ( typeof( window.innerHeight ) == 'number' )
+      height = window.innerHeight;  // Non IE browser
+   else if (document.documentElement && document.documentElement.clientHeight)
+      height = document.documentElement.clientHeight;  // IE6
+   else if (document.body && document.body.clientHeight)
+      height = document.body.clientHeight; // IE4
+
+   // IE fires onresize even when only font size is changed!
+   // so we do a check to avoid blocking < and > actions
+   if (width != lastWidth || height != lastHeight)
+   {
+      if (width > 1100)
+         sizeIndex = 4;
+      else if (width > 1000)
+         sizeIndex = 3;
+      else if (width > 800)
+         sizeIndex = 2;
+      else if (width > 600)
+         sizeIndex = 1;
+      else if (width)
+         sizeIndex = 0;
+
+      // enables cross browser use of relative width/height
+      // on object elements for use with SVG and Flash media
+      adjustObjectDimensions(width, height);
+
+      document.body.style.fontSize = sizes[sizeIndex];
+
+      lastWidth = width;
+      lastHeight = height;
+
+      // force reflow to work around Mozilla bug
+      //if (ns_pos)
+      {
+         var slide = slides[slidenum];
+         hideSlide(slide);
+         showSlide(slide);
+      }
+
+      // force correct positioning of toolbar
+      refreshToolbar(200);
+   }
+}
+
+function scrolled()
+{
+   if (toolbar && !ns_pos)
+   {
+      // hide toolbar
+      toolbar.style.display = "none";
+
+      // make it reappear later
+      if (scrollhack == 0 && !viewAll)
+      {
+         setTimeout(showToolbar, 1000);
+         scrollhack = 1;
+      }
+   }
+}
+
+// used to ensure IE refreshes toolbar in correct position
+function refreshToolbar(interval)
+{
+   hideToolbar();
+   setTimeout(showToolbar, interval);
+}
+
+// restores toolbar after short delay
+function showToolbar()
+{
+   if (wantToolbar)
+   {
+      if (!ns_pos)
+      {
+         // adjust position to allow for scrolling
+         var xoffset = scrollXOffset();
+         toolbar.style.left = xoffset;
+         toolbar.style.right = xoffset;
+
+         // determine vertical scroll offset
+         //var yoffset = scrollYOffset();
+
+         // bottom is doc height - window height - scroll offset
+         //var bottom = documentHeight() - lastHeight - yoffset
+
+         //if (yoffset > 0 || documentHeight() > lastHeight)
+         //   bottom += 16;  // allow for height of scrollbar
+
+         toolbar.style.bottom = 0; //bottom;
+      }
+
+      toolbar.style.display = "block";
+      toolbar.style.visibility = "visible";
+   }
+
+   scrollhack = 0;
+}
+
+function test()
+{
+   var s = "docH: " + documentHeight() +
+       " winH: " + lastHeight +
+       " yoffset: " + scrollYOffset() +
+       " toolbot: " + (documentHeight() - lastHeight - scrollYOffset());
+
+   //alert(s);
+
+   var slide = slides[slidenum];
+   // IE getAttribute requires "class" to be "className"
+   var name = ns_pos ? "class" : "className";
+   var style = (slide.currentStyle ? slide.currentStyle["backgroundColor"] :
+       document.defaultView.getComputedStyle(slide, '').getPropertyValue("background-color"));
+   alert("class='" + slide.getAttribute(name) + "' backgroundColor: " + style);
+}
+
+function hideToolbar()
+{
+   toolbar.style.display = "none";
+   toolbar.style.visibility = "hidden";
+}
+
+// invoked via F key
+function toggleToolbar()
+{
+   if (!viewAll)
+   {
+      if (toolbar.style.display == "none")
+      {
+         toolbar.style.display = "block";
+         toolbar.style.visibility = "visible";
+         wantToolbar = 1;
+      }
+      else
+      {
+         toolbar.style.display = "none";
+         toolbar.style.visibility = "hidden";
+         wantToolbar = 0;
+      }
+   }
+}
+
+function scrollXOffset()
+{
+   if (window.pageXOffset)
+      return self.pageXOffset;
+
+   if (document.documentElement && 
+             document.documentElement.scrollLeft)
+      return document.documentElement.scrollLeft;
+
+   if (document.body)
+      return document.body.scrollLeft;
+
+    return 0;
+}
+
+
+function scrollYOffset()
+{
+   if (window.pageYOffset)
+      return self.pageYOffset;
+
+   if (document.documentElement && 
+             document.documentElement.scrollTop)
+      return document.documentElement.scrollTop;
+
+   if (document.body)
+      return document.body.scrollTop;
+
+    return 0;
+}
+
+function documentHeight()
+{
+   var sh, oh;
+
+   sh = document.body.scrollHeight;
+   oh = document.body.offsetHeight;
+
+   if (sh && oh)
+   {
+      return (sh > oh ? sh : oh);
+   }
+
+   // no idea!
+   return 0;
+}
+
+// these don't work well on Opera, for which
+// we take advantage on @media projection
+function smaller()
+{
+   if (sizeIndex > 0)
+   {
+      --sizeIndex;
+   }
+
+   toolbar.style.display = "none";
+   document.body.style.fontSize = sizes[sizeIndex];
+   var slide = slides[slidenum];
+   hideSlide(slide);
+   showSlide(slide);
+   setTimeout(showToolbar, 300);
+}
+
+function bigger()
+{
+   if (sizeIndex < sizes.length - 1)
+   {
+      ++sizeIndex;
+   }
+
+   toolbar.style.display = "none";
+   document.body.style.fontSize = sizes[sizeIndex];
+   var slide = slides[slidenum];
+   hideSlide(slide);
+   showSlide(slide);
+   setTimeout(showToolbar, 300);
+}
+
+// enables cross browser use of relative width/height
+// on object elements for use with SVG and Flash media
+// with thanks to Ivan Herman for the suggestion
+function adjustObjectDimensions(width, height)
+{
+   for( var i = 0; i < objects.length; i++ )
+   {
+      var obj = objects[i];
+      var mimeType = obj.getAttribute("type");
+
+      if (mimeType == "image/svg+xml" || mimeType == "application/x-shockwave-flash")
+      {
+         if ( !obj.initialWidth ) 
+            obj.initialWidth = obj.getAttribute("width");
+
+         if ( !obj.initialHeight ) 
+            obj.initialHeight = obj.getAttribute("height");
+
+         if ( obj.initialWidth && obj.initialWidth.charAt(obj.initialWidth.length-1) == "%" )
+         {
+            var w = parseInt(obj.initialWidth.slice(0, obj.initialWidth.length-1));
+            var newW = width * (w/100.0);
+            obj.setAttribute("width",newW);
+         }
+
+         if ( obj.initialHeight && obj.initialHeight.charAt(obj.initialHeight.length-1) == "%" )
+         {
+            var h = parseInt(obj.initialHeight.slice(0, obj.initialHeight.length-1));
+            var newH = height * (h/100.0);
+            obj.setAttribute("height", newH);
+         }
+      }
+   }
+}
+
+function cancel(event)
+{
+  event.cancel = true;
+  event.returnValue = false;
+  return false;
+}
+
+//  See e.g. http://www.quirksmode.org/js/events/keys.html for keycodes
+function keyDown(event)
+{
+    var key;
+
+    if (!event)
+      var event = window.event;
+
+    // kludge around NS/IE differences 
+    if (window.event)
+       key = window.event.keyCode;
+    else if (event.which)
+       key = event.which;
+    else
+       return true; // Yikes! unknown browser
+
+    // ignore event if key value is zero
+    // as for alt on Opera and Konqueror
+    if (!key)
+       return true;
+
+    // check for concurrent control/command/alt key
+    // but are these only present on mouse events?
+
+    if (event.ctrlKey || event.altKey)
+       return true;
+
+    if (key == 34) // Page Down
+    {
+       nextSlide(false);
+       return cancel(event);
+    }
+    else if (key == 33) // Page Up
+    {
+       previousSlide(false);
+       return cancel(event);
+    }
+    else if (key == 32) // space bar
+    {
+       nextSlide(true);
+       return cancel(event);
+    }
+    else if (key == 37) // Left arrow
+    {
+       previousSlide(true);
+       return cancel(event);
+    }
+    else if (key == 36) // Home
+    {
+       firstSlide();
+       return cancel(event);
+    }
+    else if (key == 35) // End
+    {
+       lastSlide();
+       return cancel(event);
+    }
+    else if (key == 39) // Right arrow
+    {
+       nextSlide(true);
+       return cancel(event);
+    }
+    else if (key == 188)  // < for smaller fonts
+    {
+       smaller();
+       return cancel(event);
+    }
+    else if (key == 190)  // > for larger fonts
+    {
+       bigger();
+       return cancel(event);
+    }
+    else if (key == 189 || key == 109)  // - for smaller fonts
+    {
+       smaller();
+       return cancel(event);
+    }
+    else if (key == 187 || key == 191 || key == 107)  // = +  for larger fonts
+    {
+       bigger();
+       return cancel(event);
+    }
+    else if (key == 86)  // V for smaller fonts
+    {
+       smaller();
+       return cancel(event);
+    }
+    else if (key == 66)  // B for larger fonts
+    {
+       bigger();
+       return cancel(event);
+    }
+    else if (key == 90)  // Z for last slide
+    {
+       lastSlide();
+       return cancel(event);
+    }
+    else if (key == 70)  // F for toggle toolbar
+    {
+       toggleToolbar();
+       return cancel(event);
+    }
+    else if (key == 65)  // A for toggle view single/all slides
+    {
+       toggleView();
+       return cancel(event);
+    }
+    else if (key == 75)  // toggle action of left click for next page
+    {
+       mouseClickEnabled = !mouseClickEnabled;
+       alert((mouseClickEnabled ? "enabled" : "disabled") +  " mouse click advance");
+       return cancel(event);
+    }
+    else if (key == 84)  // T for test
+    {
+       test();
+       return cancel(event);
+    }
+    //else alert("key code is "+ key);
+
+    return true;
+}
+
+// right mouse button click is reserved for context menus
+// it is more reliable to detect rightclick than leftclick
+function mouseButtonClick(e)
+{
+   var rightclick = false;
+   var target;
+
+   if (!e)
+      var e = window.event;
+
+   if (e.target)
+      target = e.target;
+   else if (e.srcElement)
+      target = e.srcElement;
+
+   // work around Safari bug
+   if (target.nodeType == 3)
+      target = target.parentNode;
+
+   if (e.which)
+      rightclick = (e.which == 3);
+   else if (e.button)
+      rightclick = (e.button == 2);
+
+   // check if target is something that probably want's clicks
+   // e.g. embed, object, input, textarea, select, option
+
+   if (mouseClickEnabled && !rightclick &&
+        target.nodeName != "EMBED" &&
+        target.nodeName != "OBJECT" &&
+        target.nodeName != "INPUT" &&
+        target.nodeName != "TEXTAREA" &&
+        target.nodeName != "SELECT" &&
+        target.nodeName != "OPTION")
+   {
+      nextSlide(true);
+      stopPropagation(e);
+      e.cancel = true;
+      e.returnValue = false;
+   }
+}
+
+function previousSlide(incremental)
+{
+   if (!viewAll)
+   {
+      var slide;
+
+      if ((incremental || slidenum == 0) && lastShown != null)
+      {
+         lastShown = hidePreviousItem(lastShown);
+         setEosStatus(false);
+      }
+      else if (slidenum > 0)
+      {
+         slide = slides[slidenum];
+         hideSlide(slide);
+
+         slidenum = slidenum - 1;
+         slide = slides[slidenum];
+         setVisibilityAllIncremental("visible");
+         lastShown = previousIncrementalItem(null);
+         setEosStatus(true);
+         showSlide(slide);
+      }
+
+      setLocation();
+
+      if (!ns_pos)
+         refreshToolbar(200);
+   }
+}
+
+function nextSlide(incremental)
+{
+   if (!viewAll)
+   {
+      var slide;
+
+      if (incremental || slidenum == slides.length - 1)
+         lastShown = revealNextItem(lastShown);
+
+      if ((!incremental || lastShown == null) && slidenum < slides.length - 1)
+      {
+         slide = slides[slidenum];
+         hideSlide(slide);
+
+         slidenum = slidenum + 1;
+         slide = slides[slidenum];
+         lastShown = null;
+         setVisibilityAllIncremental("hidden");
+         showSlide(slide);
+      }
+
+      setLocation();
+
+      setEosStatus(!nextIncrementalItem(lastShown));
+
+      if (!ns_pos)
+         refreshToolbar(200);
+   }
+}
+
+// to first slide with nothing revealed
+// i.e. state at start of presentation
+function firstSlide()
+{
+   if (!viewAll)
+   {
+      var slide;
+
+      if (slidenum != 0)
+      {
+         slide = slides[slidenum];
+         hideSlide(slide);
+
+         slidenum = 0;
+         slide = slides[slidenum];
+         lastShown = null;
+         setVisibilityAllIncremental("hidden");
+         showSlide(slide);
+      }
+
+      setEosStatus(!nextIncrementalItem(lastShown));
+      setLocation();
+   }
+}
+
+
+// to last slide with everything revealed
+// i.e. state at end of presentation
+function lastSlide()
+{
+   if (!viewAll)
+   {
+      var slide;
+
+      lastShown = null; //revealNextItem(lastShown);
+
+      if (lastShown == null && slidenum < slides.length - 1)
+      {
+         slide = slides[slidenum];
+         hideSlide(slide);
+         slidenum = slides.length - 1;
+         slide = slides[slidenum];
+         setVisibilityAllIncremental("visible");
+         lastShown = previousIncrementalItem(null);
+
+         showSlide(slide);
+      }
+      else
+      {
+         setVisibilityAllIncremental("visible");
+         lastShown = previousIncrementalItem(null);
+      }
+
+      setEosStatus(true);
+      setLocation();
+   }
+}
+
+function setEosStatus(state)
+{
+   if (eos)
+      eos.style.color = (state ? "rgb(240,240,240)" : "red");
+}
+
+function showSlide(slide)
+{
+   syncBackground(slide);
+   slide.style.visibility = "visible";
+   slide.style.display = "block";
+}
+
+function hideSlide(slide)
+{
+   slide.style.visibility = "hidden";
+   slide.style.display = "none";
+}
+
+function toggleView()
+{
+   if (viewAll)
+   {
+      singleSlideView();
+      showToolbar();
+      viewAll = 0;
+   }
+   else
+   {
+      showAllSlides();
+      hideToolbar();
+      viewAll = 1;
+   }
+}
+
+// prepare for printing
+function showAllSlides()
+{
+   var slide;
+
+   for (var i = 0; i < slides.length; ++i)
+   {
+      slide = slides[i];
+
+      slide.style.position = "relative";
+      slide.style.borderTopStyle = "solid";
+      slide.style.borderTopWidth = "thin";
+      slide.style.borderTopColor = "black";
+
+      setVisibilityAllIncremental("visible");
+      showSlide(slide);
+   }
+
+   var note;
+
+   for (var i = 0; i < notes.length; ++i)
+   {
+      showSlide(notes[i]);
+   }
+}
+
+// restore after printing
+function singleSlideView()
+{
+   var slide;
+
+   for (var i = 0; i < slides.length; ++i)
+   {
+      slide = slides[i];
+
+      slide.style.position = "absolute";
+
+      if (i == slidenum)
+      {
+         slide.style.borderStyle = "none";
+         showSlide(slide);
+      }
+      else
+      {
+         slide.style.borderStyle = "none";
+         hideSlide(slide);
+      }
+   }
+
+   setVisibilityAllIncremental("visible");
+   lastShown = previousIncrementalItem(null);
+
+   var note;
+
+   for (var i = 0; i < notes.length; ++i)
+   {
+      hideSlide(notes[i]);
+   }
+}
+
+// the string str is a whitespace separated list of tokens
+// test if str contains a particular token, e.g. "slide"
+function hasToken(str, token)
+{
+   if (str)
+   {
+      // define pattern as regular expression
+      var pattern = /\w+/g;
+
+      // check for matches
+      // place result in array
+      var result = str.match(pattern);
+
+      // now check if desired token is present
+      for (var i = 0; i < result.length; i++)
+      {
+         if (result[i] == token)
+            return true;
+      }
+   }
+
+   return false;
+}
+
+// return new array of all slides
+function collectSlides()
+{
+   var slides = new Array();
+   var divs = document.body.getElementsByTagName("div");
+
+   // IE getAttribute requires "class" to be "className"
+   var name = ns_pos ? "class" : "className";
+
+   for (var i = 0; i < divs.length; ++i)
+   {
+      div = divs.item(i);
+
+      if (hasToken(div.getAttribute(name), "slide"))
+      {
+         // add slide to collection
+         slides[slides.length] = div;
+
+         // hide each slide as it is found
+         div.style.display = "none";
+         div.style.visibility = "hidden";
+         // add dummy <br/> at end for scrolling hack
+         var node = document.createElement("br");
+         div.appendChild(node);
+      }
+   }
+
+   return slides;
+}
+
+// return new array of all <div class="handout">
+function collectNotes()
+{
+   var notes = new Array();
+   var divs = document.body.getElementsByTagName("div");
+
+   // IE getAttribute requires "class" to be "className"
+   var name = ns_pos ? "class" : "className";
+
+   for (var i = 0; i < divs.length; ++i)
+   {
+      div = divs.item(i);
+
+      if (hasToken(div.getAttribute(name), "handout"))
+      {
+         // add slide to collection
+         notes[notes.length] = div;
+
+         // hide handout notes as they are found
+         div.style.display = "none";
+         div.style.visibility = "hidden";
+      }
+   }
+
+   return notes;
+}
+
+// return new array of all <div class="background">
+// including named backgrounds e.g. class="background titlepage"
+function collectBackgrounds()
+{
+   var backgrounds = new Array();
+   var divs = document.body.getElementsByTagName("div");
+
+   // IE getAttribute requires "class" to be "className"
+   var name = ns_pos ? "class" : "className";
+   var background;
+
+   for (var i = 0; i < divs.length; ++i)
+   {
+      div = divs.item(i);
+
+      background = div.getAttribute(name);
+
+      if (hasToken(background, "background"))
+      {
+         // add slide to collection
+         backgrounds[backgrounds.length] = div;
+
+         // hide named backgrounds as they are found
+         // e.g. class="background epilog"
+         if (background != "background")
+         {
+            div.style.display = "none";
+            div.style.visibility = "hidden";
+         }
+      }
+   }
+
+   return backgrounds;
+}
+
+// show just the backgrounds pertinent to this slide
+function syncBackground(slide)
+{
+   var background;
+   var bgColor;
+
+   if (slide.currentStyle)
+      bgColor = slide.currentStyle["backgroundColor"];
+   else if (document.defaultView)
+   {
+      var styles = document.defaultView.getComputedStyle(slide,null);
+
+      if (styles)
+          bgColor = styles.getPropertyValue("background-color");
+      else // broken implementation probably due Safari or Konqueror
+      {
+          //alert("defective implementation of getComputedStyle()");
+          bgColor = "transparent";
+      }
+   }
+   else
+      bgColor == "transparent";
+
+   if (bgColor == "transparent")
+   {
+      // IE getAttribute requires "class" to be "className"
+      var name = ns_pos ? "class" : "className";
+      var slideClass = slide.getAttribute(name);
+      var bgClass;
+
+      for (var i = 0; i < backgrounds.length; i++)
+      {
+         background = backgrounds[i];
+
+         bgClass = background.getAttribute(name);
+
+         if (matchingBackground(slideClass, bgClass))
+         {
+            background.style.display = "block";
+            background.style.visibility = "visible";
+         }
+         else
+         {
+            background.style.display = "none";
+            background.style.visibility = "hidden";
+         }
+      }
+   }
+   else // forcibly hide all backgrounds
+   {
+      for (var i = 0; i < backgrounds.length; i++)
+      {
+         background = backgrounds[i];
+         background.style.display = "none";
+         background.style.visibility = "hidden";
+      }
+   }
+}
+
+// compare classes for slide and background
+function matchingBackground(slideClass, bgClass)
+{
+   if (bgClass == "background")
+      return true;
+
+   // define pattern as regular expression
+   var pattern = /\w+/g;
+
+   // check for matches and place result in array
+   var result = slideClass.match(pattern);
+
+   // now check if desired name is present for background
+   for (var i = 0; i < result.length; i++)
+   {
+      if (hasToken(bgClass, result[i]))
+         return true;
+   }
+
+   return false;
+}
+
+// left to right traversal of root's content
+function nextNode(root, node)
+{
+   if (node == null)
+      return root.firstChild;
+
+   if (node.firstChild)
+      return node.firstChild;
+
+   if (node.nextSibling)
+      return node.nextSibling;
+
+   for (;;)
+   {
+      node = node.parentNode;
+
+      if (node == root)
+         return null;
+
+      if (node.nextSibling)
+         return node.nextSibling;
+   }
+
+   return null;
+}
+
+// right to left traversal of root's content
+function previousNode(root, node)
+{
+   if (node == null)
+   {
+      node = root.lastChild;
+
+      if (node)
+      {
+         while (node.lastChild)
+            node = node.lastChild;
+      }
+
+      return node;
+   }
+
+   if (node.previousSibling)
+   {
+      node = node.previousSibling;
+
+      while (node.lastChild)
+         node = node.lastChild;
+
+      return node;
+   }
+
+   if (node.parentNode != root)
+      return node.parentNode;
+
+   return null;
+}
+
+// HTML elements that can be used with class="incremental"
+// note that you can also put the class on containers like
+// up, ol, dl, and div to make their contents appear
+// incrementally. Upper case is used since this is what
+// browsers report for HTML node names (text/html).
+function incrementalElementList()
+{
+   var inclist = new Array();
+   inclist["P"] = true;
+   inclist["PRE"] = true;
+   inclist["LI"] = true;
+   inclist["BLOCKQUOTE"] = true;
+   inclist["DT"] = true;
+   inclist["DD"] = true;
+   inclist["H2"] = true;
+   inclist["H3"] = true;
+   inclist["H4"] = true;
+   inclist["H5"] = true;
+   inclist["H6"] = true;
+   inclist["SPAN"] = true;
+   inclist["ADDRESS"] = true;
+   inclist["TABLE"] = true;
+   inclist["TR"] = true;
+   inclist["TH"] = true;
+   inclist["TD"] = true;
+   inclist["IMG"] = true;
+   inclist["OBJECT"] = true;
+   return inclist;
+}
+
+function nextIncrementalItem(node)
+{
+   var slide = slides[slidenum];
+
+   // IE getAttribute requires "class" to be "className"
+   var classattr = ns_pos ? "class" : "className";
+
+
+   for (;;)
+   {
+      node = nextNode(slide, node);
+
+      if (node == null || node.parentNode == null)
+         break;
+
+      if (node.nodeType == 1)  // ELEMENT
+      {
+         if (hasToken(node.parentNode.getAttribute(classattr), "incremental")
+             && node.nodeName != "BR")
+            return node;
+
+         if (hasToken(node.getAttribute(classattr), "incremental")
+             && okayForIncremental[node.nodeName])
+         {
+            return node;
+         }
+      }
+   }
+
+   return node;
+}
+
+function previousIncrementalItem(node)
+{
+   var slide = slides[slidenum];
+
+   // IE getAttribute requires "class" to be "className"
+   var classattr = ns_pos ? "class" : "className";
+
+
+   for (;;)
+   {
+      node = previousNode(slide, node);
+
+      if (node == null || node.parentNode == null)
+         break;
+
+      if (node.nodeType == 1)
+      {
+         if (hasToken(node.parentNode.getAttribute(classattr), "incremental")
+             && node.nodeName != "BR")
+            return node;
+
+         if (hasToken(node.getAttribute(classattr), "incremental")
+             && okayForIncremental[node.nodeName])
+         {
+            return node;
+         }
+      }
+   }
+
+   return node;
+}
+
+// set visibility for all elements on current slide with
+// a parent element with attribute class="incremental"
+function setVisibilityAllIncremental(value)
+{
+   var node = nextIncrementalItem(null);
+
+   while (node)
+   {
+      node.style.visibility = value;
+      node = nextIncrementalItem(node);
+   }
+}
+
+// reveal the next hidden item on the slide
+// node is null or the node that was last revealed
+function revealNextItem(node)
+{
+   node = nextIncrementalItem(node);
+
+   if (node && node.nodeType == 1)  // an element
+      node.style.visibility = "visible";
+
+   return node;
+}
+
+
+// exact inverse of revealNextItem(node)
+function hidePreviousItem(node)
+{
+   if (node && node.nodeType == 1)  // an element
+      node.style.visibility = "hidden";
+
+   return previousIncrementalItem(node);
+}
+
+
+/* set click handlers on all anchors */
+function patchAnchors()
+{
+   var anchors = document.body.getElementsByTagName("a");
+
+   for (var i = 0; i < anchors.length; ++i)
+   {
+      anchors[i].onclick = clickedAnchor;
+   }
+}
+
+function clickedAnchor(e)
+{
+   if (!e)
+      var e = window.event;
+
+   // compare this.href with location.href
+   // for link to another slide in this doc
+
+   if (pageAddress(this.href) == pageAddress(location.href))
+   {
+      // yes, so find new slide number
+      var newslidenum = findSlideNumber(this.href);
+
+      if (newslidenum != slidenum)
+      {
+         slide = slides[slidenum];
+         hideSlide(slide);
+         slidenum = newslidenum;
+         slide = slides[slidenum];
+         showSlide(slide);
+         setLocation();
+      }
+   }
+   else if (this.target == null)
+      location.href = this.href;
+
+   this.blur();
+   stopPropagation(e);
+}
+
+function pageAddress(uri)
+{
+   var i = uri.indexOf("#");
+
+   // check if anchor is entire page
+
+   if (i < 0)
+      return uri;  // yes
+
+   return uri.substr(0, i);
+}
+
+function showSlideNumber()
+{
+   slideNumElement.innerHTML = "slide " +
+           (slidenum + 1) + "/" + slides.length;
+}
+
+function setLocation()
+{
+   var uri = pageAddress(location.href);
+
+   if (slidenum > 0)
+      uri = uri + "#[" + (slidenum+1) + "]";
+
+   if (uri != location.href && !khtml)
+      location.href = uri;
+
+   document.title = title + " [" + (slidenum+1) + "]";
+   //document.title = (slidenum+1) + ") " + slideName();
+
+   showSlideNumber();
+}
+
+// find current slide based upon location
+// first find target anchor and then look
+// for associated div element enclosing it
+// finally map that to slide number
+function findSlideNumber(uri)
+{
+   // first get anchor from page location
+
+   var i = uri.indexOf("#");
+
+   // check if anchor is entire page
+
+   if (i < 0)
+      return 0;  // yes
+
+   var anchor = uri.substr(i+1);
+
+   // now use anchor as XML ID to find target
+   var target = document.getElementById(anchor);
+
+   if (!target)
+   {
+      // does anchor look like "[2]" for slide 2 ??
+      // where first slide is [1]
+      var re = /\[(\d)+\]/;
+
+      if (anchor.match(re))
+      {
+         var num = parseInt(anchor.substring(1, anchor.length-1));
+
+         if (num > slides.length)
+            num = 1;
+
+         if (--num < 0)
+            num = 0;
+
+         return num;
+      }
+
+      // oh dear unknown anchor
+      return 0;
+   }
+
+   // search for enclosing slide
+
+   // IE getAttribute requires "class" to be "className"
+   var name = ns_pos ? "class" : "className";
+
+   while (true)
+   {
+      // browser coerces html elements to uppercase!
+      if (target.nodeName.toLowerCase() == "div" &&
+          target.getAttribute(name) == "slide")
+      {
+         // found the slide element
+         break;
+      }
+
+      // otherwise try parent element if any
+
+      target = target.parentNode;
+
+      if (!target)
+      {
+         return 0;   // no luck!
+      }
+   };
+
+   for (i = 0; i < slides.length; ++i)
+   {
+      if (slides[i] == target)
+         return i;  // success
+   }
+
+   // oh dear still no luck
+   return 0;
+}
+
+// find slide name from h1 element
+// should allow for h1 within a div (FIX ME)
+// default to document title
+function slideName()
+{
+   var nodes = slides[slidenum].childNodes
+
+   for (var i = 0; i < nodes.length; ++i)
+   {
+      var node = nodes[i];
+
+      if (node.nodeType == 1 &&
+           (node.nodeName == "H1" || node.nodeName == "h1"))
+         return node.innerHTML;
+   }
+
+   return title;
+}
+
+// find copyright text from meta element
+function findCopyright()
+{
+   var name, content;
+   var meta = document.getElementsByTagName("meta");
+
+   for (var i = 0; i < meta.length; ++i)
+   {
+      name = meta[i].getAttribute("name");
+      content = meta[i].getAttribute("content");
+
+      if (name == "copyright")
+         return content;
+   }
+
+   return null;
+}
+
+function addToolbar()
+{
+   var slideCounter, page;
+
+   var toolbar = createElement("div");
+   toolbar.setAttribute("class", "toolbar");
+
+   if (ns_pos) // a reasonably behaved browser
+   {
+      var right = document.createElement("div");
+      right.setAttribute("style", "float: right; text-align: right");
+
+      slideCounter = document.createElement("div")
+      slideCounter.innerHTML = "slide n/m";
+      right.appendChild(slideCounter);
+      toolbar.appendChild(right);
+
+      var left = document.createElement("div");
+      left.setAttribute("style", "text-align: left");
+
+      // global end of slide indicator
+      eos = document.createElement("span");
+      eos.innerHTML = "* ";
+      left.appendChild(eos);
+
+      var help = document.createElement("a");
+      help.setAttribute("href", helpPage);
+      help.setAttribute("title", helpText);
+      help.innerHTML = "help?";
+      left.appendChild(help);
+
+      var gap = document.createTextNode(" ");
+      left.appendChild(gap);
+
+      var i = location.href.indexOf("#");
+
+      // check if anchor is entire page
+
+      if (i > 0)
+         page = location.href.substr(0, i);
+      else
+         page = location.href;
+
+      var start = document.createElement("a");
+      start.setAttribute("href", page);
+      start.setAttribute("title", "restart presentation");
+      start.innerHTML = "restart?";
+      left.appendChild(start);
+
+      var copyright = findCopyright();
+
+      if (copyright)
+      {
+         var span = document.createElement("span");
+         span.innerHTML = copyright;
+         span.style.color = "black";
+         span.style.marginLeft = "4em";
+         left.appendChild(span);
+      }
+
+      toolbar.appendChild(left);
+   }
+   else // IE so need to work around its poor CSS support
+   {
+      toolbar.style.position = "absolute";
+      toolbar.style.zIndex = "200";
+      toolbar.style.width = "100%";
+      toolbar.style.height = "1.2em";
+      toolbar.style.top = "auto";
+      toolbar.style.bottom = "0";
+      toolbar.style.left = "0";
+      toolbar.style.right = "0";
+      toolbar.style.textAlign = "left";
+      toolbar.style.fontSize = "60%";
+      toolbar.style.color = "red";
+      toolbar.borderWidth = 0;
+      toolbar.style.background = "rgb(240,240,240)";
+
+      // would like to have help text left aligned
+      // and page counter right aligned, floating
+      // div's don't work, so instead use nested
+      // absolutely positioned div's.
+
+      var sp = document.createElement("span");
+      sp.innerHTML = "&nbsp;&nbsp;*&nbsp;";
+      toolbar.appendChild(sp);
+      eos = sp;  // end of slide indicator
+
+      var help = document.createElement("a");
+      help.setAttribute("href", helpPage);
+      help.setAttribute("title", helpText);
+      help.innerHTML = "help?";
+      toolbar.appendChild(help);
+
+      var gap = document.createTextNode(" ");
+      toolbar.appendChild(gap);
+
+      var i = location.href.indexOf("#");
+
+      // check if anchor is entire page
+
+      if (i > 0)
+         page = location.href.substr(0, i);
+      else
+         page = location.href;
+
+      var start = document.createElement("a");
+      start.setAttribute("href", page);
+      start.setAttribute("title", "restart presentation");
+      start.innerHTML = "restart?";
+      toolbar.appendChild(start);
+
+      var copyright = findCopyright();
+
+      if (copyright)
+      {
+         var span = document.createElement("span");
+         span.innerHTML = copyright;
+         span.style.color = "black";
+         span.style.marginLeft = "2em";
+         toolbar.appendChild(span);
+      }
+
+      slideCounter = document.createElement("div")
+      slideCounter.style.position = "absolute";
+      slideCounter.style.width = "auto"; //"20%";
+      slideCounter.style.height = "1.2em";
+      slideCounter.style.top = "auto";
+      slideCounter.style.bottom = 0;
+      slideCounter.style.right = "0";
+      slideCounter.style.textAlign = "right";
+      slideCounter.style.color = "red";
+      slideCounter.style.background = "rgb(240,240,240)";
+
+      slideCounter.innerHTML = "slide n/m";
+      toolbar.appendChild(slideCounter);
+   }
+
+   // ensure that click isn't passed through to the page
+   toolbar.onclick = stopPropagation;
+   document.body.appendChild(toolbar);
+   slideNumElement = slideCounter;
+   setEosStatus(false);
+
+   return toolbar;
+}
+
+function replaceByNonBreakingSpace(str)
+{
+   for (var i = 0; i < str.length; ++i)
+      str[i] = 160;
+}
+
+function stopPropagation(e)
+{
+   if (window.event)
+   {
+      window.event.cancelBubble = true;
+      //window.event.returnValue = false;
+   }
+   else
+   {
+      e.cancelBubble = true;
+      e.stopPropagation();
+      //e.preventDefault();
+   }
+}
+
+// works with text/html and text/xhtml+xml with thanks to Simon Willison
+function createElement(element)
+{
+   if (typeof document.createElementNS != 'undefined')
+   {
+      return document.createElementNS('http://www.w3.org/1999/xhtml', element);
+   }
+
+   if (typeof document.createElement != 'undefined')
+   {
+      return document.createElement(element);
+   }
+
+   return false;
+}
+
+// designed to work with both text/html and text/xhtml+xml
+function getElementsByTagName(name)
+{
+   if (typeof document.getElementsByTagNameNS != 'undefined')
+   {
+      return document.getElementsByTagNameNS('http://www.w3.org/1999/xhtml', name);
+   }
+
+   if (typeof document.getElementsByTagName != 'undefined')
+   {
+      return document.getElementsByTagName(name);
+   }
+
+   return null;
+}
+
+// clean alternative to innerHTML method, but on IE6
+// it doesn't work with named entities like &nbsp;
+// which need to be replaced by numeric entities
+function insertText(element, text)
+{
+   if (element.textContent)  // DOM3 only
+      element.textContent = text;
+   else
+   {
+      if (element.firstChild)
+      {
+         // remove current children
+         while (element.firstChild)
+            element.removeChild(element.firstChild);
+      }
+
+      element.appendChild(document.createTextNode(text));
+   }
+}

Added: forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.output.smartSlides/src/documentation/content/xdocs/images/group-logo.gif
URL: http://svn.apache.org/viewcvs/forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.output.smartSlides/src/documentation/content/xdocs/images/group-logo.gif?rev=344062&view=auto
==============================================================================
Binary file - no diff available.

Propchange: forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.output.smartSlides/src/documentation/content/xdocs/images/group-logo.gif
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.output.smartSlides/src/documentation/content/xdocs/images/group.svg
URL: http://svn.apache.org/viewcvs/forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.output.smartSlides/src/documentation/content/xdocs/images/group.svg?rev=344062&view=auto
==============================================================================
--- forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.output.smartSlides/src/documentation/content/xdocs/images/group.svg (added)
+++ forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.output.smartSlides/src/documentation/content/xdocs/images/group.svg Sun Nov 13 23:16:11 2005
@@ -0,0 +1,82 @@
+<?xml version="1.0" standalone="no"?>
+<!--
+  Copyright 2002-2004 The Apache Software Foundation or its licensors,
+  as applicable.
+
+  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.
+-->
+
+<!--
+       SVG Anteater logo
+
+To get started with SVG, I'd recommend getting the Adobe SVG plugin, and the
+xml-batik CVS module. Then have a look at the xml-batik/samples files. Use the
+SVG spec (http://www.w3.org/TR/SVG/) as a reference.
+-->
+
+<!-- See Forrest Issue: FOR-229
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN"
+"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd"
+[
+ <!ATTLIST svg xmlns:for CDATA #FIXED "http://apache.org/forrest">
+ <!ENTITY % textExt "|for:group-name">
+ <!ELEMENT for:group-name (#PCDATA)>
+]>
+-->
+<svg xmlns="http://www.w3.org/2000/svg"
+     xmlns:xlink="http://www.w3.org/1999/xlink"
+     xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+     xsl:version="1.0"
+     xmlns:for="http://apache.org/forrest"
+     width="220" height="65" >
+  <title>Anteater logo</title>
+
+  <defs>
+
+    <!--
+    <radialGradient id="radialGradient">
+      <stop style="stop-color:gold" offset="0"/>
+      <stop style="stop-color:orange" offset=".5"/>
+      <stop style="stop-color:crimson" offset="1"/>
+    </radialGradient>
+    <linearGradient id="linearGradient">
+      <stop style="stop-color:gold" offset="0"/>
+      <stop style="stop-color:orange" offset=".5"/>
+      <stop style="stop-color:crimson" offset="1"/>
+    </linearGradient>
+    -->
+
+    <linearGradient id="gradient" x1="0" y1="0" x2="0" y2="1">
+      <stop style="stop-color:white" offset="0"/>
+      <stop style="stop-color:lightgreen" offset="1"/>
+    </linearGradient>
+
+    <filter id="shadowFilter" filterUnits="objectBoundingBox" width="1.4" height="1.4">
+      <!-- Takes the alpha channel (black outline of the text), blurs it and saves as 'blur' -->
+      <feGaussianBlur in="SourceAlpha" stdDeviation="2 2" result="blur"/>
+      <!-- Takes saved 'blur' and offsets it by 4 pixels, saves as 'offsetBlur' -->
+      <feOffset in="blur" dx="4" dy="4" result="offsetBlur"/>
+      <!-- Merges SourceGraphic (original image) and 'offsetBlur', putting the
+      former 'over' the latter, and using the merged result as the finished
+      image -->
+      <feComposite in="SourceGraphic" in2="offsetBlur" operator="over"/>
+    </filter>
+
+  </defs>
+
+  <g filter="url(#shadowFilter)" fill="url(#gradient)">
+    <text x="40%" y="60%" style="font-size:24pt; font-family:Verdana ; text-anchor: middle">
+    <for:group-name />
+    </text>
+  </g>
+</svg>

Added: forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.output.smartSlides/src/documentation/content/xdocs/images/icon.png
URL: http://svn.apache.org/viewcvs/forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.output.smartSlides/src/documentation/content/xdocs/images/icon.png?rev=344062&view=auto
==============================================================================
Binary file - no diff available.

Propchange: forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.output.smartSlides/src/documentation/content/xdocs/images/icon.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.output.smartSlides/src/documentation/content/xdocs/images/project-logo.gif
URL: http://svn.apache.org/viewcvs/forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.output.smartSlides/src/documentation/content/xdocs/images/project-logo.gif?rev=344062&view=auto
==============================================================================
Binary file - no diff available.

Propchange: forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.output.smartSlides/src/documentation/content/xdocs/images/project-logo.gif
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.output.smartSlides/src/documentation/content/xdocs/images/project.svg
URL: http://svn.apache.org/viewcvs/forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.output.smartSlides/src/documentation/content/xdocs/images/project.svg?rev=344062&view=auto
==============================================================================
--- forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.output.smartSlides/src/documentation/content/xdocs/images/project.svg (added)
+++ forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.output.smartSlides/src/documentation/content/xdocs/images/project.svg Sun Nov 13 23:16:11 2005
@@ -0,0 +1,82 @@
+<?xml version="1.0" standalone="no"?>
+<!--
+  Copyright 2002-2004 The Apache Software Foundation or its licensors,
+  as applicable.
+
+  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.
+-->
+
+<!--
+       SVG Anteater logo
+
+To get started with SVG, I'd recommend getting the Adobe SVG plugin, and the
+xml-batik CVS module. Then have a look at the xml-batik/samples files. Use the
+SVG spec (http://www.w3.org/TR/SVG/) as a reference.
+-->
+
+<!-- See Forrest Issue: FOR-229
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN"
+"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd"
+[
+ <!ATTLIST svg xmlns:for CDATA #FIXED "http://apache.org/forrest">
+ <!ENTITY % textExt "|for:project-name">
+ <!ELEMENT for:project-name (#PCDATA)>
+]>
+-->
+<svg xmlns="http://www.w3.org/2000/svg"
+     xmlns:xlink="http://www.w3.org/1999/xlink"
+     xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+     xsl:version="1.0"
+     xmlns:for="http://apache.org/forrest"
+     width="420" height="65" >
+  <title>Anteater logo</title>
+
+  <defs>
+
+    <!--
+    <radialGradient id="radialGradient">
+      <stop style="stop-color:gold" offset="0"/>
+      <stop style="stop-color:orange" offset=".5"/>
+      <stop style="stop-color:crimson" offset="1"/>
+    </radialGradient>
+    <linearGradient id="linearGradient">
+      <stop style="stop-color:gold" offset="0"/>
+      <stop style="stop-color:orange" offset=".5"/>
+      <stop style="stop-color:crimson" offset="1"/>
+    </linearGradient>
+    -->
+
+    <linearGradient id="gradient" x1="0" y1="0" x2="0" y2="1">
+      <stop style="stop-color:white" offset="0"/>
+      <stop style="stop-color:lightgreen" offset="1"/>
+    </linearGradient>
+
+    <filter id="shadowFilter" filterUnits="objectBoundingBox" width="1.4" height="1.4">
+      <!-- Takes the alpha channel (black outline of the text), blurs it and saves as 'blur' -->
+      <feGaussianBlur in="SourceAlpha" stdDeviation="2 2" result="blur"/>
+      <!-- Takes saved 'blur' and offsets it by 4 pixels, saves as 'offsetBlur' -->
+      <feOffset in="blur" dx="4" dy="4" result="offsetBlur"/>
+      <!-- Merges SourceGraphic (original image) and 'offsetBlur', putting the
+      former 'over' the latter, and using the merged result as the finished
+      image -->
+      <feComposite in="SourceGraphic" in2="offsetBlur" operator="over"/>
+    </filter>
+
+  </defs>
+
+  <g filter="url(#shadowFilter)" fill="url(#gradient)">
+    <text x="100%" y="60%" style="font-size:24pt; font-family:Verdana ; text-anchor: end" >
+    <for:project-name />
+    </text>
+  </g>
+</svg>

Added: forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.output.smartSlides/src/documentation/content/xdocs/images/usemap.gif
URL: http://svn.apache.org/viewcvs/forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.output.smartSlides/src/documentation/content/xdocs/images/usemap.gif?rev=344062&view=auto
==============================================================================
Binary file - no diff available.

Propchange: forrest/trunk/whiteboard/plugins/org.apache.forrest.plugin.output.smartSlides/src/documentation/content/xdocs/images/usemap.gif
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream



Mime
View raw message