nested.xsl 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. <?xml
  2. version="1.0"
  3. encoding="utf-8"
  4. ?>
  5. <xsl:stylesheet
  6. version="1.0"
  7. xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  8. >
  9. <xsl:output
  10. method="html"
  11. encoding="utf-8"
  12. omit-xml-declaration="yes"
  13. standalone="no"
  14. indent="no"
  15. media-type="text/html"
  16. />
  17. <xsl:param name="theme_name" />
  18. <xsl:param name="theme_path" />
  19. <xsl:template match="/">
  20. <xsl:call-template name="nodes">
  21. <xsl:with-param name="node" select="/root" />
  22. <xsl:with-param name="theme_name" select="$theme_name" />
  23. <xsl:with-param name="theme_path" select="$theme_path" />
  24. </xsl:call-template>
  25. </xsl:template>
  26. <xsl:template name="nodes">
  27. <xsl:param name="node" />
  28. <xsl:param name="theme_name" />
  29. <xsl:param name="theme_path" />
  30. <ul>
  31. <xsl:for-each select="$node/item">
  32. <xsl:variable name="children" select="count(./item) &gt; 0" />
  33. <li>
  34. <xsl:attribute name="class">
  35. <xsl:if test="position() = last()"> last </xsl:if>
  36. <xsl:choose>
  37. <xsl:when test="@state = 'open'"> open </xsl:when>
  38. <xsl:when test="$children or @hasChildren"> closed </xsl:when>
  39. <xsl:otherwise> leaf </xsl:otherwise>
  40. </xsl:choose>
  41. <xsl:value-of select="@class" />
  42. </xsl:attribute>
  43. <xsl:for-each select="@*">
  44. <xsl:if test="name() != 'class' and name() != 'state' and name() != 'hasChildren'">
  45. <xsl:attribute name="{name()}"><xsl:value-of select="." /></xsl:attribute>
  46. </xsl:if>
  47. </xsl:for-each>
  48. <xsl:for-each select="content/name">
  49. <a href="#">
  50. <xsl:attribute name="class"><xsl:value-of select="@lang" /> <xsl:value-of select="@class" /></xsl:attribute>
  51. <xsl:attribute name="style">
  52. <xsl:value-of select="@style" />
  53. <xsl:if test="string-length(attribute::icon) > 0 and $theme_name != 'themeroller'">background-image:url(<xsl:if test="not(contains(@icon,'/'))"><xsl:value-of select="$theme_path" /></xsl:if><xsl:value-of select="@icon" />);</xsl:if>
  54. </xsl:attribute>
  55. <xsl:for-each select="@*">
  56. <xsl:if test="name() != 'style' and name() != 'class'">
  57. <xsl:attribute name="{name()}"><xsl:value-of select="." /></xsl:attribute>
  58. </xsl:if>
  59. </xsl:for-each>
  60. <xsl:if test="$theme_name = 'themeroller' and string-length(attribute::icon) > 0">
  61. <ins>
  62. <xsl:attribute name="class">ui-icon <xsl:value-of select="@icon" /></xsl:attribute>
  63. </ins>
  64. </xsl:if>
  65. <xsl:value-of select="current()" /></a>
  66. </xsl:for-each>
  67. <xsl:if test="$children or @hasChildren">
  68. <xsl:call-template name="nodes">
  69. <xsl:with-param name="node" select="current()" />
  70. <xsl:with-param name="theme_path" select="$theme_path" />
  71. <xsl:with-param name="theme_name" select="$theme_name" />
  72. </xsl:call-template>
  73. </xsl:if>
  74. </li>
  75. </xsl:for-each>
  76. </ul>
  77. </xsl:template>
  78. </xsl:stylesheet>