home *** CD-ROM | disk | FTP | other *** search
/ PC World 2003 May / PCWorld_2003-05_cd.bin / Komunik / apache / apache_2.0.45-win32-x86-no_ssl.msi / Data.Cab / F233077_moduleindex.xsl < prev    next >
Extensible Markup Language  |  2003-01-08  |  12KB  |  348 lines

  1. <?xml version="1.0"?>
  2. <!DOCTYPE xsl:stylesheet [ <!ENTITY nbsp " "> ]>
  3. <xsl:stylesheet version="1.0"
  4.               xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  5.                   xmlns="http://www.w3.org/1999/xhtml">
  6.  
  7.   <!--                              -->
  8.   <!-- Builds the moduleindex page  -->
  9.   <!--                              -->
  10.   <xsl:template match="moduleindex">
  11.     <html xml:lang="{$messages/@lang}" lang="{$messages/@lang}">
  12.       <xsl:call-template name="head"/>
  13.  
  14. <xsl:text>
  15. </xsl:text> <!-- insert line break -->
  16.  
  17.       <body id="module-index">
  18.         <xsl:call-template name="top"/>  
  19.  
  20.         <div id="page-content">
  21.         <div id="preamble">
  22.           <h1>
  23.             <xsl:value-of select="title"/>
  24.           </h1>
  25.           
  26. <xsl:text>
  27. </xsl:text> <!-- insert line break -->
  28.  
  29.           <xsl:apply-templates select="summary" />
  30.         </div>
  31.         <!-- /preamble -->
  32.  
  33. <xsl:text>
  34. </xsl:text> <!-- insert line break -->
  35.  
  36.         <div id="quickview">
  37.           <ul id="toc">
  38.  
  39. <xsl:text>
  40. </xsl:text> <!-- insert line break -->
  41.  
  42.             <li>
  43.               <img src="{$path}/images/down.gif" alt="" />
  44.               <xsl:text> </xsl:text>
  45.               <a href="#core">
  46.                 <xsl:value-of select="$messages/message[@name='corefeatures']"/>
  47.               </a>
  48.             </li>
  49.  
  50.             <li>
  51.               <img src="{$path}/images/down.gif" alt="" />
  52.               <xsl:text> </xsl:text>
  53.               <a href="#other">
  54.                 <xsl:value-of select="$messages/message[@name='othermodules']"/>
  55.               </a>
  56.             </li>
  57.           </ul>
  58.  
  59.           <xsl:if test="seealso">
  60.             <h3>
  61.               <xsl:value-of select="$messages/message[@name='seealso']"/>
  62.             </h3>
  63.             
  64. <xsl:text>
  65. </xsl:text> <!-- insert line break -->
  66.  
  67.             <ul class="seealso">
  68.  
  69. <xsl:text>
  70. </xsl:text> <!-- insert line break -->
  71.  
  72.               <xsl:for-each select="seealso">
  73.                 <li>
  74.                   <xsl:apply-templates/>
  75.                 </li>
  76.  
  77. <xsl:text>
  78. </xsl:text> <!-- insert line break -->
  79.  
  80.               </xsl:for-each>
  81.             </ul>
  82.           </xsl:if>
  83.         </div> <!-- /quickview -->
  84.  
  85. <xsl:text>
  86. </xsl:text> <!-- insert line break -->
  87.  
  88.         <xsl:call-template name="toplink"/>
  89.  
  90. <xsl:text>
  91. </xsl:text> <!-- insert line break -->
  92.  
  93.         <div class="section">
  94.           <h2>
  95.             <a name="core" id="core">
  96.               <xsl:value-of select="$messages/message[@name='corefeatures']"/>
  97.             </a>
  98.           </h2>
  99.  
  100. <xsl:text>
  101. </xsl:text> <!-- insert line break -->
  102.  
  103.           <!--                                -->
  104.           <!-- put core and mpm_common on top -->
  105.           <!--                                -->
  106.           <dl>
  107.  
  108. <xsl:text>
  109. </xsl:text> <!-- insert line break -->
  110.  
  111.             <dt>
  112.               <a href="{document(sitemap/category[@id='modules']/modulefilelist/modulefile[starts-with(.,'core.xml')])/modulesynopsis/name}.html">
  113.                 <xsl:value-of select="document(sitemap/category[@id='modules']/modulefilelist/modulefile[starts-with(.,'core.xml')])/modulesynopsis/name"/>
  114.               </a>
  115.             </dt>
  116.             <dd>
  117.               <xsl:apply-templates select="document(sitemap/category[@id='modules']/modulefilelist/modulefile[starts-with(.,'core.xml')])/modulesynopsis/description"/>
  118.             </dd>
  119.  
  120. <xsl:text>
  121. </xsl:text> <!-- insert line break -->
  122.  
  123.             <dt>
  124.               <a href="{document(sitemap/category[@id='modules']/modulefilelist/modulefile[starts-with(.,'mpm_common.xml')])/modulesynopsis/name}.html">
  125.                 <xsl:value-of select="document(sitemap/category[@id='modules']/modulefilelist/modulefile[starts-with(.,'mpm_common.xml')])/modulesynopsis/name"/>
  126.               </a>
  127.             </dt>
  128.             <dd class="separate">
  129.               <xsl:apply-templates select="document(sitemap/category[@id='modules']/modulefilelist/modulefile[starts-with(.,'mpm_common.xml')])/modulesynopsis/description"/>
  130.             </dd>
  131.           <!-- /core, mpm_common -->
  132.  
  133. <xsl:text>
  134. </xsl:text> <!-- insert line break -->
  135.  
  136.             <xsl:variable name="mpmmodules" select="document(sitemap/category[@id='modules']/modulefilelist/modulefile)/modulesynopsis[status='MPM' and name != 'mpm_common']"/>
  137.             <xsl:variable name="translist">
  138.               <xsl:call-template name="module-translist">
  139.                 <xsl:with-param name="modules" select="$mpmmodules"/>
  140.               </xsl:call-template>
  141.             </xsl:variable>
  142.  
  143.             <xsl:for-each select="$mpmmodules">
  144.             <xsl:sort select="substring-before(substring-after($translist, concat('- ', translate(normalize-space(name),$lowercase,$uppercase), ' ')), ' -')"/>
  145.  
  146.               <dt>
  147.                 <a href="{name}.html">
  148.                   <xsl:value-of select="name"/>
  149.                 </a>
  150.               </dt>
  151.               <dd>
  152.                 <xsl:apply-templates select="description"/>
  153.               </dd>
  154.  
  155. <xsl:text>
  156. </xsl:text> <!-- insert line break -->
  157.  
  158.             </xsl:for-each>
  159.             <!-- /mpm -->
  160.           </dl>
  161.         </div>
  162.         <!-- /core section -->
  163.  
  164. <xsl:text>
  165. </xsl:text> <!-- insert line break -->
  166.  
  167.         <xsl:call-template name="toplink"/>
  168.  
  169. <xsl:text>
  170. </xsl:text> <!-- insert line break -->
  171.  
  172.         <div class="section">
  173.           <h2>
  174.             <a name="other" id="other">
  175.               <xsl:value-of select="$messages/message[@name='othermodules']"/>
  176.             </a>
  177.           </h2>
  178.             
  179. <xsl:text>
  180. </xsl:text> <!-- insert line break -->
  181.  
  182.           <xsl:variable name="modules" select="document(sitemap/category[@id='modules']/modulefilelist/modulefile)/modulesynopsis[status!='MPM' and status!='Core' and status!='Obsolete']"/>
  183.  
  184.           <!-- collect the start letters -->
  185.           <xsl:variable name="start-letters">
  186.             <xsl:call-template name="module-startletters">
  187.               <xsl:with-param name="modules" select="$modules"/>
  188.             </xsl:call-template>
  189.           </xsl:variable>
  190.  
  191.           <!-- letter line -->
  192.           <p class="letters">
  193.             <xsl:call-template name="letter-bar">
  194.               <xsl:with-param name="letters" select="$start-letters"/>
  195.               <xsl:with-param name="first" select="true()"/>
  196.             </xsl:call-template>
  197.           </p>
  198.           <!-- /letter line -->
  199.  
  200. <xsl:text>
  201. </xsl:text> <!-- insert line break -->
  202.  
  203.           <dl>
  204.             <xsl:call-template name="mindex-of-letter">
  205.               <xsl:with-param name="letters-todo" select="$start-letters"/>
  206.               <xsl:with-param name="modules" select="$modules"/>
  207.             </xsl:call-template>
  208.           </dl>
  209.         </div>
  210.         <!-- /modules section -->
  211.         
  212.         </div>
  213.         <!-- /page-content -->
  214.  
  215. <xsl:text>
  216. </xsl:text> <!-- insert line break -->
  217.  
  218.         <xsl:call-template name="bottom"/>
  219.  
  220. <xsl:text>
  221. </xsl:text> <!-- insert line break -->
  222.  
  223.       </body>
  224.     </html>
  225.   </xsl:template> 
  226.   <!-- /moduleindex -->
  227.  
  228.  
  229.   <!--                                                     -->
  230.   <!-- the working horse. builds list items of all         -->
  231.   <!-- modules starting with one letter                    -->
  232.   <!-- when done, it calls itself to catch the next letter -->
  233.   <!--                                                     -->
  234.   <xsl:template name="mindex-of-letter">
  235.   <xsl:param name="letters-todo"/>
  236.   <xsl:param name="modules"/>
  237.  
  238.     <xsl:variable name="letter" select="substring($letters-todo,1,1)"/>
  239.     <xsl:variable name="translist">
  240.       <xsl:call-template name="module-translist">
  241.         <xsl:with-param name="modules" select="$modules"/>
  242.       </xsl:call-template>
  243.     </xsl:variable>
  244.  
  245.     <xsl:for-each select="$modules[$letter=substring(substring-before(substring-after($translist, concat('- ', translate(normalize-space(name),$lowercase,$uppercase), ' ')), ' -'), 1, 1)]">
  246.     <xsl:sort select="substring-before(substring-after($translist, concat('- ', translate(normalize-space(name),$lowercase,$uppercase), ' ')), ' -')"/>
  247.  
  248.       <dt>
  249.         <a href="{name}.html">
  250.           <xsl:if test="position()=1">
  251.             <xsl:attribute name="id"><xsl:value-of select="$letter"/></xsl:attribute>
  252.             <xsl:attribute name="name"><xsl:value-of select="$letter"/></xsl:attribute>
  253.           </xsl:if>
  254.  
  255.           <xsl:value-of select="name"/>
  256.         </a>
  257.       </dt>
  258.       <dd>
  259.         <xsl:apply-templates select="description"/>
  260.       </dd>
  261.  
  262. <xsl:text>
  263. </xsl:text> <!-- insert a line break -->
  264.  
  265.     </xsl:for-each> <!-- /directives -->
  266.  
  267.     <!-- call next letter, if there is -->
  268.     <xsl:if test="string-length($letters-todo) > 1">
  269.       <xsl:call-template name="mindex-of-letter">
  270.         <xsl:with-param name="letters-todo" select="substring($letters-todo,2)"/>
  271.         <xsl:with-param name="modules" select="$modules"/>
  272.       </xsl:call-template>
  273.     </xsl:if>
  274.  
  275.   </xsl:template>
  276.   <!-- /mindex-of-letter -->
  277.  
  278.  
  279.   <!--                                                    -->
  280.   <!-- collect start letters of modules                   -->
  281.   <!--                                                    -->
  282.   <xsl:template name="module-startletters">
  283.   <xsl:param name="modules"/>
  284.  
  285.     <xsl:variable name="translist">
  286.       <xsl:call-template name="module-translist">
  287.         <xsl:with-param name="modules" select="$modules"/>
  288.       </xsl:call-template>
  289.     </xsl:variable>
  290.  
  291.     <xsl:call-template name="_squeeze-letters">
  292.       <xsl:with-param name="lastletter" select="''"/>
  293.  
  294.       <xsl:with-param name="letters">
  295.         <xsl:for-each select="$modules">
  296.         <xsl:sort select="substring-before(substring-after($translist, concat('- ', translate(normalize-space(name),$lowercase,$uppercase), ' ')), ' -')"/>
  297.           <xsl:value-of select="substring(substring-before(substring-after($translist, concat('- ', translate(normalize-space(name),$lowercase,$uppercase), ' ')), ' -'), 1, 1)"/>
  298.         </xsl:for-each>
  299.       </xsl:with-param>
  300.     </xsl:call-template>
  301.  
  302.   </xsl:template>
  303.   <!-- /module-startletters -->
  304.  
  305.  
  306.   <!--                                                     -->
  307.   <!-- define module name translations for sorting         -->
  308.   <!--                                                     -->
  309.   <!-- it's a kind of a hack...                            -->
  310.   <!-- we build a string that contains the following data: -->
  311.   <!-- "- modulename sortname - modulename sortname - ..." -->
  312.   <!-- (with all data in uppercase)                        -->
  313.   <!--                                                     -->
  314.   <!-- So, the translation from modulename to sortname     -->
  315.   <!-- can be done with the expression below:              -->
  316.   <!--
  317.        substring-before(
  318.            substring-after($translist, 
  319.                            concat('- ',
  320.                                   translate(modulename,
  321.                                             $lowercase,
  322.                                             $uppercase),
  323.                                   ' ')
  324.                            ),
  325.            ' -')
  326.                                                            -->
  327.   <!--                                                     -->
  328.   <xsl:template name="module-translist">
  329.   <xsl:param name="modules"/>
  330.  
  331.     <xsl:text>-</xsl:text>
  332.     <xsl:for-each select="$modules">
  333.       <xsl:variable name="sname" select="translate(normalize-space(name),$lowercase,$uppercase)"/>
  334.  
  335.       <xsl:text> </xsl:text>
  336.       <xsl:value-of select="$sname"/>
  337.       <xsl:text> </xsl:text>
  338.       <xsl:call-template name="module-translatename">
  339.         <xsl:with-param name="name" select="$sname"/>
  340.       </xsl:call-template>
  341.       <xsl:text> -</xsl:text>
  342.     </xsl:for-each>
  343.  
  344.   </xsl:template>
  345.   <!-- /module-translist -->
  346.  
  347.   </xsl:stylesheet>
  348.