<?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:kb = "http://herbaer.de/xmlns/20151211/kalenderbilder/"
  xmlns:lt = "http://herbaer.de/xmlns/20151212/loctext/"
  xmlns:l = "http://herbaer.de/xmlns/20141210/localization"
  xmlns:xl = "http://www.w3.org/1999/xlink"
  version = "1.0"
  xml:lang = "de-DE"
>
<d:info xmlns="http://herbaer.de/xmlns/20051201/doc">
  <title>kal.xslt</title>
  <subtitle>Bild-Kalender</subtitle>
  <date>2015-12-11</date>
  <author>
    <personname>
      <firstname>Herbert</firstname>
      <surname>Schiemann</surname>
    </personname>
    <email>h.schiemann@herbaer.de</email>
  </author>
</d:info>

<d:section xmlns="http://herbaer.de/xmlns/20051201/doc" role="stylesheet">
<para>
Diese Transformation erzeugt das HTML-Gerüst für die Kalender sowohl in der Bildschirm-
Ansicht als auch in der Druckausgabe.
Sie ist eine Anpassung der Version der Website für &#x201e;freistehende&#x201d; Kalender.
Bildschirmansicht und Druckausgabe nutzen unterschiedliche CSS-Regeln
Die Steuerung der Sichtbarkeit der &#x201e;Blätter&#x201d; und des Fensters.
&#x201e;Einstellung&#x201d; durch Javascript in der Bildschirmansicht
darf die Druckausgabe nicht stören.
</para>
<para>
Es gibt die folgenden Wörter im Wert der Attribute
<tag class="attribute">class</tag>:
</para>
<variablelist>
  <varlistentry>
    <term><literal>tiles</literal></term>
    <listitem>
      <para>
Abschnitt mit den Vorschaubildern (&#x201e;Kacheln&#x201d;)
auf dem &#x201e;Deckblatt&#x201d;
      </para>
    </listitem>
  </varlistentry>
  <varlistentry>
    <term><literal>n</literal></term>
    <listitem>
      <para>
Seitenbereiche für die Bildschirmansicht mit Schaltflächen,
die normalerweise nicht sichtbar (transparent) sind.
      </para>
    </listitem>
  </varlistentry>
  <varlistentry>
    <term><literal>hide</literal></term>
    <listitem>
      <para>
Fenster &#x201e;Einstellung&#x201d;:
<tag class="element">div</tag>-Element mit der ID <literal>set</literal>
      </para>
    </listitem>
  </varlistentry>
  <varlistentry>
    <term><literal>lft</literal></term>
    <listitem>
      <para>
<tag class="element">p</tag>-Elemente,
deren Inhalt linksbündig statt zentriert ausgegeben werden soll
(im Fenster &#x201e;Einstellung&#x201d;)
      </para>
    </listitem>
  </varlistentry>
  <varlistentry>
    <term><literal>d</literal></term>
    <listitem>
      <para>
Bildchen auf dem Deckblatt zu einem Monat.
      </para>
    </listitem>
  </varlistentry>
  <varlistentry>
    <term><literal>img</literal></term>
    <listitem>
      <para>
Umhüllende
<tag class="element">div</tag>- und
<tag class="element">a</tag>-Elemente
um das Bild eines Monatsblatts
      </para>
    </listitem>
  </varlistentry>
  <varlistentry>
    <term><literal>m</literal></term>
    <listitem>
      <para>
Bild
(<tag class="element">img</tag>-Element)
auf einem Monatsblatt
      </para>
    </listitem>
  </varlistentry>
</variablelist>
<para>
Es gibt die folgenden ID-Werte:
</para>
<variablelist>
  <varlistentry>
    <term><literal>d00</literal></term>
    <listitem>
      <para>
Das &#x201e;Deckblatt&#x201d;
      </para>
    </listitem>
  </varlistentry>
  <varlistentry>
    <term><literal>bl</literal></term>
    <listitem>
      <para>
Linker Seitenrandbereich mit dem Dreieck mit der Spitze nach links
      </para>
    </listitem>
  </varlistentry>
  <varlistentry>
    <term><literal>br</literal></term>
    <listitem>
      <para>
Rechter Seitenrandbereich mit dem Dreieck mit der Spitze nach rechts
      </para>
    </listitem>
  </varlistentry>
  <varlistentry>
    <term><literal>bt</literal></term>
    <listitem>
      <para>
Oberer Seitenrandbereich mit einigen &#x201e;Schaltern&#x201d; und Verweisen.
      </para>
    </listitem>
  </varlistentry>
  <varlistentry>
    <term><literal>ah</literal></term>
    <listitem>
      <para>
<tag class="element">a</tag>-Element im oberen Seitenrandbereich
verweist auf den Anfang des Kalenders.
      </para>
    </listitem>
  </varlistentry>
  <varlistentry>
    <term><literal>as</literal></term>
    <listitem>
      <para>
<tag class="attribute">a</tag>-Element im oberen Seitenrandbereich
öffnet das Fenster &#x201e;Einstellung&#x201d;.
      </para>
    </listitem>
  </varlistentry>
  <varlistentry>
    <term><literal>set</literal></term>
    <listitem>
      <para>
<tag class="element">div</tag>-Element (Fenster) &#x201e;Einstellung&#x201d;
      </para>
    </listitem>
  </varlistentry>
  <varlistentry>
    <term><literal>chk_vm</literal></term>
    <listitem>
      <para>
Markierungsfeld &#x201e;Vormonat&#x201d;
      </para>
    </listitem>
  </varlistentry>
  <varlistentry>
    <term><literal>chk_fm</literal></term>
    <listitem>
      <para>
        Markierungsfeld &#x201e;Folgemonat&#x201d;
      </para>
    </listitem>
  </varlistentry>
  <varlistentry>
    <term><literal>chk_kw</literal></term>
    <listitem>
      <para>
Markierungsfeld &#x201e;Kalenderwoche&#x201d;
      </para>
    </listitem>
  </varlistentry>
  <varlistentry>
    <term><literal>chk_mc</literal></term>
    <listitem>
      <para>
Markierungsfeld &#x201e;Monatsname in Tabelle&#x201d;
      </para>
    </listitem>
  </varlistentry>
  <varlistentry>
    <term><literal>b_cl</literal></term>
    <listitem>
      <para>
Schaltfläche &#x201e;Schließen&#x201d; im Fenster &#x201e;Einstellung".
      </para>
    </listitem>
  </varlistentry>
  <varlistentry>
    <term><literal>t<replaceable>99</replaceable></literal></term>
    <listitem>
      <para>
<tag class="element">img</tag>-Element
des Kalenderblatts für den Monat <replaceable>99</replaceable>:
<literal>01</literal> für Januar, <literal>12</literal> für Dezember.
      </para>
    </listitem>
  </varlistentry>
 </variablelist>
<para>
Weitere ID-Werte und Wörter im Attribut
<tag class="attribute">class</tag> werden aus den
<link xl:href="grunddaten.xhtml">Grunddaten</link> übernommen.
</para>
</d:section>

<d:para>
Verzeichnis der Bilder
</d:para>
<xsl:param name="p_imgdir" select="'img'"/>

<!-- die Sprache für die Lokalisierung und die Hilfe -->
<xsl:variable name="lang">
  <xsl:choose>
    <xsl:when test="contains (/*/@xml:lang, '-')">
      <xsl:value-of select="substring-before(/*/@xml:lang, '-')"/>
    </xsl:when>
    <xsl:otherwise>
      <xsl:value-of select="/*/@xml:lang"/>
    </xsl:otherwise>
  </xsl:choose>
</xsl:variable>

<!-- das Land für die Kalender-Grunddaten -->
<xsl:variable name="country">
  <xsl:choose>
    <xsl:when test="contains (/*/@xml:lang, '-')">
      <xsl:value-of select="substring-after(/*/@xml:lang, '-')"/>
    </xsl:when>
    <xsl:otherwise>
      <xsl:value-of select="/*/@xml:lang"/>
    </xsl:otherwise>
  </xsl:choose>
</xsl:variable>

<xsl:variable name="g_l" select="document(concat ('local.xml.', $lang))/l:localization"/>

<d:para>Wurzelelement der Kalenderbilder</d:para>
<xsl:variable name="g_rootelt" select="/kb:kalenderbilder"/>

<d:para>
Eintrag zu einem Monat
</d:para>
<xsl:template match="kb:m">
  <xsl:apply-templates select="kb:s"/>
  <xsl:value-of select="kb:i"/>
  <xsl:text>||</xsl:text>
</xsl:template>

<xsl:template match="/">
  <xsl:apply-templates select="*"/>
</xsl:template>

<xsl:template match="kb:kalenderbilder">
  <xsl:call-template name="kalender">
    <xsl:with-param name="data">
      <xsl:apply-templates select="kb:m"/>
    </xsl:with-param>
  </xsl:call-template>
</xsl:template>

<d:section xmlns="http://herbaer.de/xmlns/20051201/doc">
<d:para>
Erzeugt das HTML-Dokument
</d:para>
<para>
Der Parameter
<varname>data</varname> ist eine Zeichenkette mit den Daten der Bilder
im Format
<literal><replaceable>TITEL</replaceable>?||<replaceable
>IMGID</replaceable>||){12}</literal>
</para>
<para>
Der Kopf enthält Verweise auf die Dateien
<filename xl:href="kal.js.xhtml">kal.js</filename>
(<d:link xl:href="kal.js">Quelltext</d:link>),
<filename xl:href="kal.css.xhtml">kal.css</filename>
(<d:link xl:href="kal.css">Quelltext</d:link>)
und <filename>prt.css</filename>.
</para>
</d:section>
<xsl:template name="kalender">
  <xsl:param name="data"/>
  <xsl:variable
    name = "body"
    select = "document(concat ('../b/', $g_rootelt/kb:y, '/', $country, '.xml'))/ht:body"
  />
  <xsl:variable name="title">
    <xsl:value-of select="$g_rootelt/kb:t"/>
  </xsl:variable>
  <html>
    <xsl:attribute name="xml:lang"><xsl:value-of select="$lang"/></xsl:attribute>
    <head>
      <meta name="viewport" content="width=device-width, initial-scale=1"/>
      <xsl:element name="link">
        <xsl:attribute name="rel">stylesheet</xsl:attribute>
        <xsl:attribute name="media">screen</xsl:attribute>
        <xsl:attribute name="href">src/kal.css</xsl:attribute>
      </xsl:element>
      <xsl:element name="link">
        <xsl:attribute name="rel">stylesheet</xsl:attribute>
        <xsl:attribute name="media">print</xsl:attribute>
        <xsl:attribute name="href">src/prt.css</xsl:attribute>
      </xsl:element>
      <title>
        <xsl:value-of select="$title"/>
      </title>
      <xsl:element name="script">
        <xsl:attribute name="src">src/kal.js</xsl:attribute>
      </xsl:element>
    </head>
    <body>
      <div id="d00">
        <h1><xsl:value-of select="$title"/></h1>
        <xsl:apply-templates select="$body/@kb:y"/>
        <div class="tiles">
          <xsl:call-template name="tiles">
            <xsl:with-param name="l" select="$data"/>
          </xsl:call-template>
        </div>
      </div>
      <xsl:apply-templates select="$body/ht:div[2]">
        <xsl:with-param name="l" select="$data"/>
      </xsl:apply-templates>
      <div id="bl" class="n">&#x25c0;</div>
      <div id="br" class="n">&#x25b6;</div>
      <div id="bt" class="n">
        <a id="ah">&#x25c9;</a>
        <a id="as">&#x22ee;</a>
        <a href="src/kal_help.xhtml.{$lang}">?</a>
      </div>
      <div id="set" class="hide">
        <h3><xsl:value-of select="$g_l/l:t[@id='cm']"/></h3>
        <p class="lft">
          <label>
            <input type="checkbox" id="chk_vm"/>
            <xsl:value-of select="$g_l/l:t[@id='cn']"/>
          </label>
        </p>
        <p class="lft">
          <label>
            <input type="checkbox" id="chk_fm"/>
            <xsl:value-of select="$g_l/l:t[@id='co']"/>
          </label>
        </p>
        <p class="lft">
          <label>
            <input type="checkbox" id="chk_kw" checked="checked"/>
            <xsl:value-of select="$g_l/l:t[@id='cp']"/>
          </label>
        </p>
        <p class="lft">
          <label>
            <input type="checkbox" id="chk_mc"/>
            <xsl:value-of select="$g_l/l:t[@id='dd']"/>
          </label>
        </p>
        <p>
          <button id="b_cl"><xsl:value-of select="$g_l/l:t[@id='cq']"/></button>
        </p>
      </div>
    </body>
  </html>
</xsl:template>

<d:para>
Ein Monatsbild auf der Titelseite
</d:para>
<xsl:template name="tiles">
  <xsl:param name="l"/>
  <xsl:param name="m" select="1"/>
  <xsl:variable name="mm" select="substring (100 + $m, 2)"/>
  <xsl:variable name="i" select="substring-before ($l, '||')"/>
  <xsl:variable name="a" select="substring-after ($l, '||')"/>
  <img src="{$p_imgdir}/{$i}.jpg" class="d" id="t{$mm}"/>
  <xsl:if test="string-length ($a) &gt; 0">
    <xsl:call-template name="tiles">
      <xsl:with-param name="l" select="$a"/>
      <xsl:with-param name="m" select="$m + 1"/>
    </xsl:call-template>
  </xsl:if>
</xsl:template>

<d:para>
In die Abschnitte der Monate werden die Bilder eingefügt
</d:para>
<xsl:template match="ht:body/ht:div">
  <xsl:param name="l"/>
  <xsl:variable name="i" select="substring-before ($l, '||')"/>
  <xsl:variable name="a" select="substring-after ($l, '||')"/>
  <xsl:copy>
    <xsl:copy-of select="@*"/>
    <xsl:apply-templates select="ht:h1"/>
    <div class="img">
      <img src="{$p_imgdir}/{$i}.jpg" class="m"/>
    </div>
    <xsl:apply-templates select="preceding-sibling::*[1]/ht:table">
      <xsl:with-param name="cls" select="'v'"/>
    </xsl:apply-templates>
    <xsl:apply-templates select="ht:* [local-name(.) != 'h1']"/>
    <xsl:apply-templates select="following-sibling::*[1]/ht:table">
      <xsl:with-param name="cls" select="'n'"/>
    </xsl:apply-templates>
  </xsl:copy>
  <xsl:if test="string-length ($a) &gt; 0">
    <xsl:apply-templates select="following-sibling::ht:div[1]">
      <xsl:with-param name="l" select="$a"/>
    </xsl:apply-templates>
  </xsl:if>
</xsl:template>

<d:para>
Das Jahr erscheint unter der Überschrift des ersten Abschnitts
</d:para>
<xsl:template match="ht:body/@kb:y">
  <h1><xsl:value-of select="."/></h1>
</xsl:template>

<d:para>
HTML-Elemente werden kopiert
</d:para>
<xsl:template match="ht:*">
  <xsl:param name="cls"/>
  <xsl:copy>
    <xsl:choose>
      <xsl:when test="string-length ($cls) &gt; 0">
        <xsl:copy-of select="@*[local-name() != 'class']"/>
        <xsl:attribute name="class">
          <xsl:if test="@class">
            <xsl:value-of select="concat (@class, ' ')"/>
          </xsl:if>
          <xsl:value-of select="$cls"/>
        </xsl:attribute>
      </xsl:when>
      <xsl:otherwise>
        <xsl:copy-of select="@*"/>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:apply-templates select="* | text()"/>
  </xsl:copy>
</xsl:template>

<d:para>
Platzhalter werden eingesetzt
</d:para>
<xsl:template match="l:ph">
  <xsl:variable name="id" select="@id"/>
  <xsl:value-of select="$g_l/l:t[@id=$id]"/>
</xsl:template>

</xsl:stylesheet>
