OASIS Mailing List ArchivesView the OASIS mailing list archive below
or browse/search using MarkMail.

 


Help: OASIS Mailing Lists Help | MarkMail Help

docbook-apps message

[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]


Subject: RE: [docbook-apps] generating javascript navigation


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>



[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]