blob: 263f16ab7094424781f33fd2cb34e82a830705ab [file] [log] [blame]
<?xml version="1.0"?>
<!--
book2menu.xsl generates the HTML menu. It outputs XML/HTML of the form:
<div class="menu">
...
</div>
which is then merged with other HTML by site2xhtml.xsl
$Id$
-->
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<!-- ================================================================ -->
<!-- These templates SHOULD be overridden -->
<!-- ================================================================ -->
<xsl:template name="selected">
<xsl:value-of select="@label"/>
</xsl:template>
<xsl:template name="unselected">
<a href="{@href}">
<xsl:if test="@description">
<xsl:attribute name="title">
<xsl:value-of select="@description"/>
</xsl:attribute>
</xsl:if>
<xsl:value-of select="@label"/>
</a>
</xsl:template>
<xsl:template name="print-external">
<!-- Use apply-imports when overriding -->
<xsl:value-of select="@label"/>
</xsl:template>
<!-- ================================================================ -->
<!-- These templates CAN be overridden -->
<!-- ================================================================ -->
<!-- Eg, if tab href is 'index.html#foo', this will be called when index.html
is selected -->
<xsl:template name="selected-anchor">
<!-- By default, render as unselected so that it is clickable (takes user
to the anchor) -->
<xsl:call-template name="unselected"/>
</xsl:template>
<xsl:template name="unselected-anchor">
<xsl:call-template name="unselected"/>
</xsl:template>
<xsl:template match="book">
<xsl:apply-templates select="menu"/>
</xsl:template>
<xsl:template match="menu">
<div class="menu">
<xsl:call-template name="base-menu"/>
</div>
</xsl:template>
<xsl:template match="menu-item">
<!-- Use apply-imports when overriding -->
<xsl:variable name="href-nofrag">
<xsl:call-template name="path-nofrag">
<xsl:with-param name="path" select="@href"/>
</xsl:call-template>
</xsl:variable>
<xsl:variable name="node-path">
<xsl:call-template name="normalize">
<xsl:with-param name="path" select="concat($dirname, $href-nofrag)"/>
</xsl:call-template>
</xsl:variable>
<xsl:choose>
<!-- Compare with extensions stripped -->
<xsl:when test="$node-path = $path-nofrag">
<xsl:choose>
<xsl:when test="contains(@href, '#')">
<xsl:call-template name="selected-anchor"/>
</xsl:when>
<xsl:otherwise>
<xsl:call-template name="selected"/>
</xsl:otherwise>
</xsl:choose>
</xsl:when>
<xsl:otherwise>
<xsl:choose>
<xsl:when test="contains(@href, '#')">
<xsl:call-template name="unselected-anchor"/>
</xsl:when>
<xsl:otherwise>
<xsl:call-template name="unselected"/>
</xsl:otherwise>
</xsl:choose>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<!-- ================================================================ -->
<!-- These templates SHOULD NOT be overridden -->
<!-- ================================================================ -->
<xsl:param name="path"/>
<xsl:include href="pathutils.xsl"/>
<xsl:variable name="filename">
<xsl:call-template name="filename">
<xsl:with-param name="path" select="$path"/>
</xsl:call-template>
</xsl:variable>
<xsl:variable name="path-nofrag">
<xsl:call-template name="path-nofrag">
<xsl:with-param name="path" select="$path"/>
</xsl:call-template>
</xsl:variable>
<xsl:variable name="path-nofrag">
<xsl:call-template name="path-nofrag">
<xsl:with-param name="path" select="$path"/>
</xsl:call-template>
</xsl:variable>
<xsl:variable name="dirname">
<xsl:call-template name="dirname">
<xsl:with-param name="path" select="$path"/>
</xsl:call-template>
</xsl:variable>
<xsl:template match="external">
<li>
<xsl:choose>
<xsl:when test="starts-with(@href, $path-nofrag)">
<span class="externalSelected">
<xsl:call-template name="print-external"/>
</span>
</xsl:when>
<xsl:otherwise>
<a href="{@href}" target="_blank"><xsl:value-of select="@label"/></a>
</xsl:otherwise>
</xsl:choose>
</li>
</xsl:template>
<xsl:template match="menu-item[@type='hidden']"/>
<xsl:template match="external[@type='hidden']"/>
<xsl:template name="base-menu">
<xsl:apply-templates/>
</xsl:template>
</xsl:stylesheet>