<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet href="/pool/xslt_ht.xslt" type="application/xml"?>
<xsl:stylesheet
  xmlns = "http://www.w3.org/1999/xhtml"
  xmlns:xsl = "http://www.w3.org/1999/XSL/Transform"
  xmlns:d = "http://herbaer.de/xmlns/20051201/doc"
  xmlns:ht = "http://www.w3.org/1999/xhtml"
  xmlns:xl = "http://www.w3.org/1999/xlink"
  version = "1.0"
  exclude-result-prefixes = "d ht xl"
>

<d:info xmlns="http://herbaer.de/xmlns/20051201/doc">
  <title>xhtml_add_linkthumbs.xslt</title>
  <subtitle>Vorschaubilder zu Verweisen auf Bildergeschichten</subtitle>
  <date>2015-07-18</date>
  <author>
    <personname>
      <firstname>Herbert</firstname>
      <surname>Schiemann</surname>
    </personname>
    <email>h.schiemann@herbaer.de</email>
  </author>
</d:info>

<d:para role="stylesheet">
Zu Verweisen auf Bildergeschichten werden am Ende jedes Abschnitts
die "thumbnails" als Verweise eingefügt.
</d:para>

<d:para>
Die Vorlage, die ein Vorschaubild als Verweis einfügt
</d:para>
<xsl:variable name="insert" select="document('')/xsl:stylesheet/xsl:template[@name = 'insert']"
/>

<xsl:variable name="break">
  <xsl:text>
</xsl:text>
</xsl:variable>

<d:para>
Einträge in einer Liste genau einmal verarbeiten
</d:para>
<xsl:include href="/pool/applyunique.xslt"/>

<xsl:output method="xml" encoding="utf-8"/>

<xsl:template match="/">
  <xsl:apply-templates select="processing-instruction() | comment() | *"/>
</xsl:template>

<d:para>
Verarbeitungsanweisungen, Kommentare und Text werden kopiert
</d:para>
<xsl:template match="processing-instruction() | comment() | text()">
  <xsl:copy-of select="."/>
</xsl:template>

<d:para>
Elemente werden "hohl" kopiert.
</d:para>
<xsl:template match="*">
  <xsl:copy>
    <xsl:copy-of select="@*"/>
    <xsl:apply-templates select="processing-instruction() | comment() | text() | *"/>
  </xsl:copy>
</xsl:template>

<d:para>
<d:tag class="element">div</d:tag>-Elemente werden besonders behandelt:
Am Ende werden möglicherweise Vorschaubilder zu Bildergeschichten eingefügt.
</d:para>
<xsl:template match="ht:div | ht:body">
  <xsl:copy>
    <xsl:copy-of select="@*"/>
    <xsl:apply-templates select="processing-instruction() | comment() | text() | *"/>
    <xsl:variable name="stories">
      <xsl:apply-templates select="." mode="list"/>
    </xsl:variable>
    <xsl:if test="string-length($stories) &gt; 0">
      <p class="storythumbs">
        <xsl:call-template name="apply_unique">
          <xsl:with-param name="inlist" select="$stories"/>
          <xsl:with-param name="element" select="$insert"/>
        </xsl:call-template>
      </p>
    </xsl:if>
  </xsl:copy>
</xsl:template>

<d:para>
Ein Vorschaubild als Verweis einfügen
</d:para>
<xsl:template match="xsl:template[@name = 'insert']" name="insert" mode="xslt_apply">
  <!-- Kennung der Bildergeschichte -->
  <xsl:param name="name"/>
  <a href="/s{$name}/story.xml" target="_blank">
    <img src="/s{$name}/thumbnail.jpg"/>
  </a>
  <xsl:text> </xsl:text>
</xsl:template>

<d:para role="mode.list">
Die Vorlagen des Modus
<d:literal>list</d:literal>
ergeben eine Liste von Kennungen von Bildergeschichten, auf die verwiesen wird.
</d:para>

<d:para>
Kindelemente mit Ausnahme von
<d:tag class="element">div</d:tag>-Elementen
werden nach Verweisen auf Bildergeschichten durchsucht.
</d:para>
<xsl:template match="*" mode="list">
  <xsl:apply-templates select="* [local-name(.) != 'div']" mode="list"/>
</xsl:template>

<d:para>
Verweise werden geprüft.
</d:para>
<xsl:template match="ht:a" mode="list">
  <xsl:if test="starts-with (@href, '/s2')">
    <xsl:variable name="r" select="substring-after (@href, '/s')"/>
    <xsl:if test="contains ($r, '/')">
      <xsl:value-of select="concat (substring-before ($r, '/'), ' ')"/>
    </xsl:if>
  </xsl:if>
</xsl:template>

</xsl:stylesheet>
