diff options
author | tpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2010-03-01 19:17:32 +0000 |
---|---|---|
committer | tpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2010-03-01 19:17:32 +0000 |
commit | e38d2351b83fa65c66ccde443777647ef5cb6cff (patch) | |
tree | 1897fc20e9f73a81c520a5b9f76f8ed042124883 /xslt/report-templates/Group_Summary.xsl | |
download | tellico-e38d2351b83fa65c66ccde443777647ef5cb6cff.tar.gz tellico-e38d2351b83fa65c66ccde443777647ef5cb6cff.zip |
Added KDE3 version of Tellico
git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/applications/tellico@1097620 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'xslt/report-templates/Group_Summary.xsl')
-rw-r--r-- | xslt/report-templates/Group_Summary.xsl | 323 |
1 files changed, 323 insertions, 0 deletions
diff --git a/xslt/report-templates/Group_Summary.xsl b/xslt/report-templates/Group_Summary.xsl new file mode 100644 index 0000000..9058f78 --- /dev/null +++ b/xslt/report-templates/Group_Summary.xsl @@ -0,0 +1,323 @@ +<?xml version="1.0"?> +<!-- WARNING: Tellico uses tc as the internal namespace declaration, and it must be identical here!! --> +<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" + xmlns:tc="http://periapsis.org/tellico/" + xmlns:exsl="http://exslt.org/common" + xmlns:dyn="http://exslt.org/dynamic" + extension-element-prefixes="exsl dyn" + exclude-result-prefixes="tc" + version="1.0"> + +<!-- + =================================================================== + Tellico XSLT file - Collection Summary Report + + Copyright (C) 2005-2006 Robby Stephenson - [email protected] + + This XSLT stylesheet is designed to be used with the 'Tellico' + application, which can be found at http://www.periapsis.org/tellico/ + + =================================================================== +--> + +<!-- import common templates --> +<!-- location depends on being installed correctly --> +<xsl:import href="../tellico-common.xsl"/> + +<xsl:output method="html" + indent="yes" + doctype-public="-//W3C//DTD HTML 4.01//EN" + doctype-system="http://www.w3.org/TR/html4/strict.dtd" + encoding="utf-8"/> + +<xsl:param name="filename"/> +<xsl:param name="cdate"/> + +<!-- Sort using user's preferred language --> +<xsl:param name="lang"/> + +<xsl:variable name="limit" select="5"/> + +<xsl:key name="fieldsByName" match="tc:field" use="@name"/> + +<xsl:template match="/"> + <xsl:apply-templates select="tc:tellico"/> +</xsl:template> + +<xsl:template match="tc:tellico"> + <html> + <head> + <style type="text/css"> + body { + font-family: sans-serif; + background-color: #fff; + color: #000; + } + #header-left { + margin-top: 0; + float: left; + font-size: 80%; + font-style: italic; + } + #header-right { + margin-top: 0; + float: right; + font-size: 80%; + font-style: italic; + } + h1.colltitle { + margin: 0px; + padding-bottom: 5px; + font-size: 2em; + text-align: center; + } + div.field { + margin-left: auto; + margin-right: auto; + margin-bottom: 20px; + width: 750px; + background-color: #ddd; + border: solid 1px #999; + overflow: auto; + padding: 0px 0px 0px 0px; + } + h2 { + font-size: 125%; + border-bottom: solid 1px #999; + text-align: center; + margin-top: 5px; + margin-bottom: 0px; + } + h3 { + font-size: 0.9em; + color: #666; + text-align: right; + padding-right: 4px; + margin-top: -1.1em; + margin-bottom: 0px; + } + h4 { + text-align: center; + } + table { + margin-left: auto; + margin-right: auto; + padding: 10px 0px 10px 0px; + } + div.row { + margin: 0px 0px 0px 0px; + padding: 0px 0px 0px 0px; + border: solid 1px transparent; + clear: left; + overflow: auto; + line-height: 120%; + } + div.group { + text-align: left; + margin: 0px 0px 0px 0px; + padding: 0px 10px 0px 4px; + float: left; + } + span.bar { + width: 590px; + margin: 1px 2px 1px 150px; + position: absolute; + float: left; + border-left: solid 5px #ddd; /* padding of a sort */ + } + span.bar span { + border-top: outset 1px #669; + border-right: outset 2px #003; + border-bottom: outset 2px #003; + border-left: outset 2px #669; + float: left; + position: absolute; + background-color: #336; + color: white; + padding-right: 4px; + padding-bottom: 2px; + font-size: 0.9em; + line-height: 0.9em; + text-align: right; + font-style: italic; + } + </style> + <title>Tellico</title> + </head> + <body> + <xsl:apply-templates select="tc:collection"/> + </body> + </html> +</xsl:template> + +<xsl:template match="tc:collection"> + <p id="header-left"><xsl:value-of select="$filename"/></p> + <p id="header-right"><xsl:value-of select="$cdate"/></p> + <h1 class="colltitle"> + <xsl:value-of select="@title"/> + <i18n>: Group Summary</i18n> + </h1> + + <xsl:variable name="coll" select="."/> + + <table> + <tbody> + <tr> + <th><i18n>Total number of fields:</i18n></th> + <th style="padding-right: 50px; color: #006;"> + <xsl:value-of select="count(tc:fields/tc:field)"/> + </th> + <th><i18n>Total number of entries:</i18n></th> + <th style="color:#006;"> + <xsl:value-of select="count(tc:entry)"/> + </th> + </tr> + </tbody> + </table> + <!-- grouping flag is second bit from right --> + <xsl:for-each select="tc:fields/tc:field[boolean(floor(@flags div 2) mod 2)]"> + <xsl:call-template name="output-group"> + <xsl:with-param name="coll" select="$coll"/> + <xsl:with-param name="fieldname" select="@name"/> + </xsl:call-template> + </xsl:for-each> + + <!-- + <h4><a href="http://www.periapsis.org/tellico/"><i18n>Generated by Tellico</i18n></a></h4> +--> +</xsl:template> + +<xsl:template name="output-group"> + <xsl:param name="coll"/> + <xsl:param name="fieldname"/> + + <xsl:variable name="str"> + <xsl:choose> + <xsl:when test="boolean(floor(key('fieldsByName', $fieldname)/@flags mod 2))"> + <xsl:choose> + <xsl:when test="key('fieldsByName', $fieldname)/@type=8"> + <xsl:value-of select="concat('$coll/tc:entry/tc:',$fieldname,'s/tc:',$fieldname,'/tc:column[1]')"/> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="concat('$coll/tc:entry/tc:',$fieldname,'s/tc:',$fieldname)"/> + </xsl:otherwise> + </xsl:choose> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="concat('$coll/tc:entry/tc:',$fieldname)"/> + </xsl:otherwise> + </xsl:choose> + </xsl:variable> + <xsl:variable name="values" select="dyn:evaluate($str)"/> + + <xsl:variable name="listing"> + <xsl:for-each select="$values[not(. = preceding::*)]"> + <!-- speed sorting by ignoring groups with a count of 1 --> + <xsl:variable name="c" select="count($values[. = current()])"/> + <xsl:if test="$c > 1"> + <group> + <xsl:attribute name="name"> + <xsl:call-template name="text-value"/> + </xsl:attribute> + <xsl:attribute name="count"> + <xsl:value-of select="$c"/> + </xsl:attribute> + </group> + </xsl:if> + </xsl:for-each> + </xsl:variable> + + <xsl:variable name="groups" select="exsl:node-set($listing)/group"/> + <xsl:variable name="total" select="count($groups)"/> + + <xsl:variable name="max"> + <xsl:call-template name="max-count"> + <xsl:with-param name="nodes" select="$groups"/> + </xsl:call-template> + </xsl:variable> + + <xsl:if test="$total > 2"> + + <div class="field"> + <h2> + <xsl:value-of select="key('fieldsByName', $fieldname)/@title"/> + </h2> + + <xsl:for-each select="$groups"> + <xsl:sort lang="$lang" select="@count" data-type="number" order="descending" /> + <xsl:sort lang="$lang" select="@name"/> + <xsl:if test="position() <= $limit"> + <div class="row"> + <div class="group"> + <xsl:value-of select="@name"/> + </div> + <span class="bar"> + <span> + <xsl:attribute name="style"> + <xsl:text>padding-left:</xsl:text> + <!-- the 540 is rather arbitrarily dependent on font-size, seem to work --> + <xsl:value-of select="floor(540 * @count div $max)"/> + <xsl:text>px;</xsl:text> + </xsl:attribute> + (<xsl:value-of select="@count"/>) + </span> + </span> + </div> + </xsl:if> + </xsl:for-each> + + <h3> + <i18n>Distinct values: </i18n><xsl:value-of select="$total"/> + </h3> + </div> + + </xsl:if> +</xsl:template> + +<xsl:template name="max-count"> + <xsl:param name="nodes" select="/.."/> + <xsl:param name="max"/> + + <xsl:variable name="count" select="count($nodes)"/> + <xsl:variable name="aNode" select="$nodes[ceiling($count div 2)]"/> + + <xsl:choose> + <xsl:when test="$count = 0"> + <xsl:value-of select="number($max)"/> + </xsl:when> + + <xsl:otherwise> + <xsl:call-template name="max-count"> + + <xsl:with-param name="nodes" select="$nodes[not(@count <= number($aNode/@count))]"/> + <xsl:with-param name="max"> + <xsl:choose> + <xsl:when test="not($max) or $aNode/@count > $max"> + <xsl:value-of select="$aNode/@count"/> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="$max"/> + </xsl:otherwise> + </xsl:choose> + </xsl:with-param> + </xsl:call-template> + </xsl:otherwise> + </xsl:choose> +</xsl:template> + +<xsl:template name="text-value"> + <xsl:choose> + <xsl:when test="text()"> + <xsl:value-of select="text()"/> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="..//tc:column[1]"/> + </xsl:otherwise> + </xsl:choose> +</xsl:template> + +</xsl:stylesheet> +<!-- Local Variables: --> +<!-- sgml-indent-step: 1 --> +<!-- sgml-indent-data: 1 --> +<!-- End: --> |