diff options
Diffstat (limited to 'xslt/entry-templates/Compact.xsl')
-rw-r--r-- | xslt/entry-templates/Compact.xsl | 294 |
1 files changed, 294 insertions, 0 deletions
diff --git a/xslt/entry-templates/Compact.xsl b/xslt/entry-templates/Compact.xsl new file mode 100644 index 0000000..f523d68 --- /dev/null +++ b/xslt/entry-templates/Compact.xsl @@ -0,0 +1,294 @@ +<?xml version="1.0"?> +<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" + xmlns:tc="http://periapsis.org/tellico/" + exclude-result-prefixes="tc" + version="1.0"> + +<!-- + =================================================================== + Tellico XSLT file - compact template for viewing entry data + + Copyright (C) 2003-2006 Robby Stephenson - [email protected] + + The drop-shadow effect is based on the "A List Apart" method + at http://www.alistapart.com/articles/cssdropshadows/ + + Known Issues: + o Dependent titles have no value in the entry element. + o Bool and URL fields are assumed to never have multiple values. + + 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="datadir"/> <!-- dir where Tellico data are located --> +<xsl:param name="imgdir"/> <!-- dir where field images are located --> +<xsl:param name="font"/> <!-- font family --> +<xsl:param name="fontsize"/> <!-- font size --> +<xsl:param name="fgcolor"/> <!-- foreground color --> +<xsl:param name="bgcolor"/> <!-- background color --> + +<xsl:param name="collection-file"/> <!-- might have a link to parent collection --> + +<xsl:key name="fieldsByName" match="tc:field" use="@name"/> +<xsl:key name="imagesById" match="tc:image" use="@id"/> + +<xsl:variable name="endl"> +<xsl:text> +</xsl:text> +</xsl:variable> + +<xsl:template match="/"> + <xsl:apply-templates select="tc:tellico"/> +</xsl:template> + +<!-- The default layout is pretty boring, but catches every field value in + the entry. The title is in the top H1 element. --> +<xsl:template match="tc:tellico"> + <!-- This stylesheet is designed for Tellico document syntax version 10 --> + <xsl:call-template name="syntax-version"> + <xsl:with-param name="this-version" select="'10'"/> + <xsl:with-param name="data-version" select="@syntaxVersion"/> + </xsl:call-template> + + <html> + <head> + <style type="text/css"> + body { + margin: 0px; + padding: 0px; + font-family: <xsl:value-of select="$font"/>; + font-size: <xsl:value-of select="$fontsize"/>pt; + color: <xsl:value-of select="$fgcolor"/>; + background-color: <xsl:value-of select="$bgcolor"/>; + } + #content { + padding-right: 160px; + } + #images { + margin: 6px 5px 0px 5px; + float: right; + min-width: 150px; + } + div.img-shadow { + float: left; + background: url(<xsl:value-of select="concat($datadir,'shadowAlpha.png')"/>) no-repeat bottom right; + margin: 10px 0 0 10px; + } + div.img-shadow img { + display: block; + position: relative; + border: 1px solid #a9a9a9; + margin: -6px 6px 6px -6px; + } + table { + border-collapse: collapse; + border-spacing: 0px; + } + th.fieldName { + font-weight: bold; + text-align: left; + padding: 0px 4px 0px 2px; + white-space: nowrap; + } + td.fieldValue { + text-align: left; + padding: 0px 10px 0px 2px; + } + td.column1 { + text-align: left; + padding: 0px; + } + td.column2 { + font-style: italic; + text-align: left; + padding: 0px 10px; + } + p { + margin-top: 0px; + text-align: left; + } + ul { + margin-top: 0px; + margin-bottom: 0px; + padding: 0px 0px 0px 20px; + } + img { + border: 0px; + } + p.navigation { + font-weight: bold; + text-align: center; + clear: both; + } + </style> + <title> + <xsl:value-of select="tc:collection/tc:entry[1]//tc:title[1]"/> + <xsl:text> – </xsl:text> + <xsl:value-of select="tc:collection/@title"/> + </title> + </head> + <body> + <xsl:apply-templates select="tc:collection[1]"/> + <xsl:if test="$collection-file"> + <p class="navigation"> + <a href="{$collection-file}"><< <xsl:value-of select="tc:collection/@title"/></a> + </p> + </xsl:if> + </body> + </html> +</xsl:template> + +<xsl:template match="tc:collection"> + <xsl:apply-templates select="tc:entry[1]"/> +</xsl:template> + +<xsl:template match="tc:entry"> + <xsl:variable name="entry" select="."/> + + <!-- all the images are in a div, aligned to the right side and floated--> + <div id="images"> + <!-- images are field type 10 --> + <xsl:for-each select="../tc:fields/tc:field[@type=10]"> + + <!-- find the value of the image field in the entry --> + <xsl:variable name="image" select="$entry/*[local-name(.) = current()/@name]"/> + <!-- check if the value is not empty --> + <xsl:if test="$image"> + <div class="img-shadow"> + <a> + <xsl:attribute name="href"> + <xsl:choose> + <!-- Amazon license requires the image to be linked to the amazon website --> + <xsl:when test="$entry/tc:amazon"> + <xsl:value-of select="$entry/tc:amazon"/> + </xsl:when> + <xsl:otherwise> + <xsl:call-template name="image-link"> + <xsl:with-param name="image" select="key('imagesById', $image)"/> + <xsl:with-param name="dir" select="$imgdir"/> + </xsl:call-template> + </xsl:otherwise> + </xsl:choose> + </xsl:attribute> + <img alt=""> + <xsl:attribute name="src"> + <xsl:call-template name="image-link"> + <xsl:with-param name="image" select="key('imagesById', $image)"/> + <xsl:with-param name="dir" select="$imgdir"/> + </xsl:call-template> + </xsl:attribute> + <!-- limit to maximum width of 150 and height of 200 --> + <xsl:call-template name="image-size"> + <xsl:with-param name="limit-width" select="150"/> + <xsl:with-param name="limit-height" select="200"/> + <xsl:with-param name="image" select="key('imagesById', $image)"/> + </xsl:call-template> + </img> + </a> + </div> + <br/> <!-- needed since the img-shadow block floats --> + </xsl:if> + </xsl:for-each> + </div> + + <!-- all the data is in the content block --> + <div id="content"> + + <!-- now for all the rest of the data --> + <!-- iterate over the categories, but skip images --> + <table> + <tbody> + <xsl:for-each select="../tc:fields/tc:field[@type!=10]"> + <xsl:variable name="field" select="."/> + + <xsl:if test="$entry//*[local-name(.) = $field/@name]"> + <tr> + <th class="fieldName" valign="top"> + <xsl:value-of select="@title"/> + <xsl:text>:</xsl:text> + </th> + + <td class="fieldValue"> + <!-- ok, big xsl:choose loop for field type --> + <xsl:choose> + + <!-- paragraphs are field type 2 --> + <xsl:when test="@type = 2"> + <p> + <xsl:value-of select="$entry/*[local-name(.) = $field/@name]" disable-output-escaping="yes"/> + </p> + </xsl:when> + + <!-- tables are field type 8 --> + <!-- ok to put category name inside div instead of table here --> + <xsl:when test="@type = 8"> + <!-- look at number of columns --> + <xsl:choose> + <xsl:when test="$field/tc:prop[@name = 'columns'] > 1"> + <table> + <tbody> + <xsl:for-each select="$entry//*[local-name(.) = $field/@name]"> + <tr> + <xsl:for-each select="tc:column"> + <xsl:choose> + <xsl:when test="position() = 1"> + <td class="column1"> + <xsl:value-of select="."/> + <xsl:text> </xsl:text> + </td> + </xsl:when> + <xsl:otherwise> + <td class="column2"> + <xsl:value-of select="."/> + <xsl:text> </xsl:text> + </td> + </xsl:otherwise> + </xsl:choose> + </xsl:for-each> + </tr> + </xsl:for-each> + </tbody> + </table> + </xsl:when> + <xsl:otherwise> + <ul> + <xsl:for-each select="$entry//*[local-name(.) = $field/@name]"> + <li> + <xsl:value-of select="."/> + </li> + </xsl:for-each> + </ul> + </xsl:otherwise> + </xsl:choose> + </xsl:when> + + <xsl:otherwise> + <xsl:call-template name="simple-field-value"> + <xsl:with-param name="entry" select="$entry"/> + <xsl:with-param name="field" select="$field/@name"/> + </xsl:call-template> + </xsl:otherwise> + + </xsl:choose> + </td> + </tr> + </xsl:if> + </xsl:for-each> + </tbody> + </table> + </div> +</xsl:template> + +</xsl:stylesheet> |