view xsl/unitcard.xsl @ 480:e0641e0eb86c

Re #410: "N units per M models in parent" requirement * Move context to a sub-folder/namespace to reduce clutter * Add simple "parent unit" context
author IBBoard <dev@ibboard.co.uk>
date Wed, 23 May 2012 21:00:33 +0100
parents a33be6e995c9
children
line wrap: on
line source

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" method="html" indent="yes" omit-xml-declaration="yes"/>
  <xsl:variable name="lower">abcdefghijklmnopqrstuvwxyz</xsl:variable>
  <xsl:variable name="upper">ABCDEFGHIJKLMNOPQRSTUVWXYZ</xsl:variable>
  <xsl:template match="/">
    <html>
      <head>
        <title>
          <xsl:value-of select="/army/name"/> - Created in WarFoundry
        </title>
        <style media="all">
          div#armyInfo { font-size: x-large; width: 100%; margin-bottom: 2em; }
          div.unitcard { border: 1px solid black; width: 75%; margin-bottom: 2em; }
          div.unitcard table.title { width: 100%; }
          div.unitcard table.title th { background-color: #999999; }
          table.stats { border-collapse: collapse; width: 100%;}
          table.lists { padding: 0px; margins: 0px; border: 1px solid black; width: 100%}
          table.lists th { font-size: small; font-variant: small-caps; text-align: left; }
          table.lists td { width: 45%; }
          ul.equipmentList { font-size: small; display: inline; list-style-type: none; }
          ul.abilityList { font-size: small; display: inline; list-style-type: none; }
        </style>
        <style media="print">
          div.unitcard { page-break-inside: avoid; }
          div.specialrules { page-break-inside: avoid; }
          div.pagebreak { page-break-after: always; display: none; }
        </style>
      </head>
      <body>
        <div id="armyInfo">
          Name: <xsl:value-of select="/army/name"/> <br />
          Points: <xsl:value-of select="/army/pointsUsed"/> of
          <xsl:value-of select="/army/pointsAvailable"/>
        </div>
        <xsl:for-each select="/army/category">
          <xsl:for-each select="./unit">
            <div class="unitcard">
              <table class="title">
                <th align="left" width="50%">
                  <xsl:value-of select="../@type"/>:<xsl:value-of select="./@name"/>
                </th>
                <th width="25%">
                  Models: <xsl:value-of select="sum(.//@models)"/>
                </th>
                <th width="25%">
                  Points: <xsl:value-of select="./@points"/>
                </th>
              </table>
              <table class="stats" border="1">
                <xsl:for-each select="./statLine[1]">
                  <tr>
                    <xsl:for-each select="./stat">
                      <td>
                        <b>
                          <xsl:value-of select="translate(./@name,$lower,$upper)"/>
                        </b>
                      </td>
                    </xsl:for-each>
                  </tr>
                </xsl:for-each>
                <xsl:for-each select="./statLine">
                  <tr>
                    <xsl:for-each select="./stat">
                      <td>
                        <xsl:value-of select="./@value"/>
                      </td>
                    </xsl:for-each>
                  </tr>
                </xsl:for-each>
              </table>
              <table class="lists">
                <tr>
                  <th>
                    Equipment
                  </th>
                  <th>
                    Abilities
                  </th>
                </tr>
                <tr>
                  <td>
                    <ul class="equipmentList">
                      <xsl:for-each select="./equipmentItem">
                        <li>
                          <xsl:value-of select="./@name"/> (<xsl:value-of select="./@count"/>)
                        </li>
                      </xsl:for-each>
                    </ul>
                  </td>
                  <td>
                    <ul class="abilityList">
                      <xsl:for-each select="./abilityItem">
                        <li>
                          <xsl:value-of select="./@name"/>
                        </li>
                      </xsl:for-each>
                    </ul>
                  </td>
                </tr>
              </table>
            </div>
          </xsl:for-each>
        </xsl:for-each>
        <div class="pagebreak"></div>
        <div class="specialrules">
          <h2>Special Rules</h2>
          <ul class="abilityDescriptions">
            <xsl:for-each select='//abilityItem[not(@name = preceding::abilityItem/@name)]'>
              <li>
                <xsl:value-of select='@name'/> - <xsl:value-of select='@description'/>
              </li>
            </xsl:for-each>
          </ul>
        </div>
      </body>
    </html>
  </xsl:template>
</xsl:stylesheet>