Hello,
It seems that
I have figured it out. The
stylesheet bellow now generates the
file with javascript tree contaning the table of contents.
Greetings,
Pavel ©kopík
<xsl:import href=“chunk.xsl"/>
<xsl:template match="/">
<xsl:choose>
<xsl:when
test="(function-available('exsl:node-set') or
contains(system-property('xsl:vendor'),
'Apache Software Foundation'))
and
(*/self::ng:* or */self::db:*)">
<xsl:call-template name="log.message">
<xsl:with-param name="level">Note</xsl:with-param>
<xsl:with-param name="context-desc">
<xsl:text>namesp. cut</xsl:text>
</xsl:with-param>
<xsl:with-param name="message">
<xsl:text>stripped namespace before processing</xsl:text>
</xsl:with-param>
</xsl:call-template>
<xsl:variable name="nons">
<xsl:apply-templates mode="stripNS"/>
</xsl:variable>
<xsl:call-template name="log.message">
<xsl:with-param name="level">Note</xsl:with-param>
<xsl:with-param name="context-desc">
<xsl:text>namesp. cut</xsl:text>
</xsl:with-param>
<xsl:with-param name="message">
<xsl:text>processing stripped document</xsl:text>
</xsl:with-param>
</xsl:call-template>
<xsl:apply-templates select="exsl:node-set($nons)"/>
</xsl:when>
<xsl:otherwise>
<xsl:choose>
<xsl:when test="$rootid !=
''">
<xsl:choose>
<xsl:when test="count(key('id',$rootid)) = 0">
<xsl:message terminate="yes">
<xsl:text>ID '</xsl:text>
<xsl:value-of
select="$rootid"/>
<xsl:text>' not found in document.</xsl:text>
</xsl:message>
</xsl:when>
<xsl:otherwise>
<xsl:if
test="$collect.xref.targets = 'yes' or
$collect.xref.targets
= 'only'">
<xsl:apply-templates
select="key('id', $rootid)"
mode="collect.targets"/>
</xsl:if>
<xsl:if test="$collect.xref.targets
!= 'only'">
<xsl:message>Formatting from <xsl:value-of
select="$rootid"/></xsl:message>
<xsl:apply-templates
select="key('id',$rootid)"
mode="process.root"/>
<xsl:call-template
name="jstoc"/>
</xsl:if>
</xsl:otherwise>
</xsl:choose>
</xsl:when>
<xsl:otherwise>
<xsl:if
test="$collect.xref.targets
= 'yes' or
$collect.xref.targets
= 'only'">
<xsl:apply-templates
select="/" mode="collect.targets"/>
</xsl:if>
<xsl:if test="$collect.xref.targets != 'only'">
<xsl:apply-templates
select="/" mode="process.root"/>
<xsl:call-template
name="jstoc"/>
</xsl:if>
</xsl:otherwise>
</xsl:choose>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template match="text()"
mode="jstoc"/>
<!—template
for creating javascript tree file -->
<xsl:template name="jstoc">
<xsl:call-template name="write.chunk">
<xsl:with-param name="filename">
<xsl:if test="$manifest.in.base.dir
!= 0">
<xsl:value-of select="$base.dir"/>
</xsl:if>
<xsl:value-of select="'toctree.js'"/>
</xsl:with-param>
<xsl:with-param name="method" select="'text'"/>
<xsl:with-param name="encoding" select="'windows-1250'"/>
<xsl:with-param name="indent" select="'yes'"/>
<xsl:with-param name="content">
<!—javascript code which draws the
tree -->
<xsl:text>
var tree;
function
treeInit() {
tree
= new YAHOO.widget.TreeView("treeDiv1");
var root
= tree.getRoot();
</xsl:text>
<xsl:apply-templates mode="jstoc"/>
<xsl:text>
tree.draw();
}
YAHOO.util.Event.addListener(window, "load", treeInit);
</xsl:text>
</xsl:with-param>
</xsl:call-template>
</xsl:template>
<!-- this template generate nodes of the
javascript tree -->
<xsl:template
match="book|part|reference|preface|chapter|bibliography|appendix|article|glossary|section|sect1|sect2|sect3|sect4|sect5|refentry|colophon|bibliodiv|index"
mode="jstoc">
<xsl:param name="current.node" select="."/>
<xsl:variable name="objID" select="generate-id()"/>
<!-- let's find out if current node is a root node; if not it
gets the ‘root’ value, otherwise id of parent node is generated -->
<xsl:variable name="parentID">
<xsl:if test="$current.node = /">
<xsl:value-of select="'root'"/>
</xsl:if>
<xsl:if test="$current.node != /">
<xsl:value-of select="generate-id(parent::*)"/>
</xsl:if>
</xsl:variable>
<xsl:variable name="title">
<xsl:apply-templates select="." mode="title.markup"/>
</xsl:variable>
<xsl:variable name="href">
<xsl:call-template name="href.target.with.base.dir">
<xsl:with-param name="context" select="/"/>
</xsl:call-template>
</xsl:variable>
<!—javascript
tree nodes -->
<xsl:text>var
</xsl:text>
<xsl:value-of select="concat('obj', $objID)"/>
<xsl:text>
= { label: "</xsl:text>
<xsl:value-of select="normalize-space($title)"/>
<xsl:text>",
href:"</xsl:text>
<xsl:value-of select="$href"/>
<xsl:text>",
target:"content"};</xsl:text>
<xsl:text>var
</xsl:text>
<xsl:value-of select="$objID"/>
<xsl:text>
= new YAHOO.widget.TextNode(</xsl:text>
<xsl:value-of select="concat('obj', $objID)"/>
<xsl:text>,
</xsl:text>
<xsl:value-of select="$parentID"/>
<xsl:text>,
false);</xsl:text>
<xsl:apply-templates mode="jstoc"
select="book|part|reference|preface|chapter|bibliography|appendix|article|glossary|section|sect1|sect2|sect3|sect4|sect5|refentry|colophon|bibliodiv|index"/>
</xsl:template>