RE: [docbook-apps] generating javascript navigation

From
"Eavid Dramer"
Date
2008-04-17T19:36:18+00:00
ID
Thread
RE: [docbook-apps] generating javascript navigation
Nevermind. I see the link now in your previous message. 
Neat :-)

 

Thanks,

David

  

  
  From: David Cramer 
Sent: Thursday, 
  April 17, 2008 10:39 AM
To: Skopik Pavel; 
  
Subject: RE: [docbook-apps] 
  generating javascript navigation

  

  
What else do you have to do to use this? Is there an 
  example of the output I could look at? 

  
 

  
Thanks,

  
David

  
    

    
    From: Skopik Pavel 
    [mailto:] 
Sent: Thursday, April 17, 2008 
    5:21 AM
To: 
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 
    姍op璭

    
 

    
<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>