šablona/stránka.xsl
changeset 51 df1f942f7b69
parent 50 ae8222d2c903
child 61 9503eb8377f1
equal deleted inserted replaced
50:ae8222d2c903 51:df1f942f7b69
    15 		method="xml" 
    15 		method="xml" 
    16 		indent="yes" 
    16 		indent="yes" 
    17 		encoding="UTF-8"		
    17 		encoding="UTF-8"		
    18 		doctype-public="-//W3C//DTD XHTML 1.1 plus MathML 2.0 plus SVG 1.1//EN" 
    18 		doctype-public="-//W3C//DTD XHTML 1.1 plus MathML 2.0 plus SVG 1.1//EN" 
    19 		doctype-system="http://www.w3.org/2002/04/xhtml-math-svg/xhtml-math-svg.dtd"/>
    19 		doctype-system="http://www.w3.org/2002/04/xhtml-math-svg/xhtml-math-svg.dtd"/>
    20 		
    20 	<xsl:include href="stránka-společné.xsl"/>
    21 	<xsl:param name="vstup" select="'../vstup/'"/>
       
    22 	<xsl:param name="výstup" select="'../výstup/'"/>
       
    23 	<xsl:param name="vstupníPřípona" select="'.xml'"/>
       
    24 	<xsl:param name="výstupníPřípona" select="'.xhtml'"/>
       
    25 	<xsl:param name="vsuvkováPřípona" select="'.inc'"/>
       
    26 	<xsl:param name="podporaZaostalýchProhlížečů" select="false()" as="xs:boolean"/>
       
    27 	
    21 	
    28 	<xsl:include href="makra.xsl"/>
    22 	<!-- 
    29 	
    23 		Šablona stránky
    30 	<!-- Celý dokument: -->
    24 		***************
       
    25 	-->
    31 	<xsl:template match="/">
    26 	<xsl:template match="/">
    32 		<xsl:variable name="konfigurace" select="document(concat($vstup, 'web.conf'))"/>
       
    33 		<html>
    27 		<html>
    34 			<head>
    28 			<head>
    35 				<xsl:if test="$podporaZaostalýchProhlížečů">
    29 				<xsl:if test="$podporaZaostalýchProhlížečů">
    36 					<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=utf-8" />
    30 					<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=utf-8" />
    37 				</xsl:if>
    31 				</xsl:if>
    38 				<title><xsl:value-of select="s:stránka/s:nadpis"/></title>
    32 				<title><xsl:value-of select="s:stránka/s:nadpis"/></title>
    39 				<link title="Novinky (Atom)" href="atom.xml" type="application/atom+xml" rel="alternate"/>
    33 				<link title="Novinky (Atom)" href="atom.xml" type="application/atom+xml" rel="alternate"/>
    40 				<link title="Novinky (RSS)"  href="rss.xml"  type="application/rss+xml"  rel="alternate"/>
    34 				<link title="Novinky (RSS)"  href="rss.xml"  type="application/rss+xml"  rel="alternate"/>
    41 				<xsl:apply-templates select="$konfigurace/k:web/k:js"/>
    35 				<xsl:apply-templates select="$konfigurace/k:web/k:js"/>
    42 				<xsl:apply-templates select="$konfigurace/k:web/k:css"/>				
    36 				<xsl:apply-templates select="$konfigurace/k:web/k:css"/>
    43 			</head>
    37 			</head>
    44 			<body>
    38 			<body>
    45 				<div id="tělo">
    39 				<div id="tělo">
    46 					<div id="záhlaví">
    40 					<div id="záhlaví">
    47 						<xsl:apply-templates select="document(fn:encode-for-uri(concat($vstup, 'záhlaví', $vsuvkováPřípona)))/s:stránka/h:text/node()"/>
    41 						<xsl:apply-templates select="document(fn:encode-for-uri(concat($vstup, 'záhlaví', $vsuvkováPřípona)))/s:stránka/h:text/node()"/>
    68 					</div>
    62 					</div>
    69 				</div>
    63 				</div>
    70 			</body>
    64 			</body>
    71 		</html>
    65 		</html>
    72 	</xsl:template>
    66 	</xsl:template>
    73 	
       
    74 	<!-- Kopírujeme elementy, ale vynecháme nepoužité xmlns deklarace: -->
       
    75 	<xsl:template match="*">
       
    76 		<xsl:element name="{name()}">
       
    77 			<xsl:copy-of select="@*"/>
       
    78 			<xsl:apply-templates/>
       
    79 		</xsl:element>
       
    80     </xsl:template>
       
    81     
    67     
    82     <!-- Varování pro případ, že jsme v režimu podpory pro zaostalé prohlížeče -->
       
    83     <xsl:template name="varováníRetardace">
       
    84     	<xsl:if test="$podporaZaostalýchProhlížečů">
       
    85 			<xsl:comment>
       
    86 				Generátor byl spuštěn v režimu podpory zaostalých prohlížečů.
       
    87 				Uživatelům doporučujeme upgrade na skutečný WWW prohlížeč,
       
    88 				jako je např. Firefox nebo Chromium (případně Opera či Safari).
       
    89 			</xsl:comment>
       
    90     	</xsl:if>
       
    91     </xsl:template>
       
    92 
       
    93     <!-- Odkazy na JavaScript a kaskádové styly -->    
       
    94     <xsl:template match="k:web/k:js">    	
       
    95     	<script src="{text()}" type="text/javascript">
       
    96     		<xsl:call-template name="varováníRetardace"/>
       
    97     	</script>
       
    98     </xsl:template>
       
    99     <xsl:template match="k:web/k:css">
       
   100     	<link href="{text()}" type="text/css" rel="StyleSheet" />
       
   101     </xsl:template>
       
   102     
       
   103     <!--
       
   104     	TODO: makra vyčlenit do samostatných souborů
       
   105     -->
       
   106    
       
   107     <!--
       
   108     	Makro pro převod interních odkazů:
       
   109     		- doplnění správné přípony
       
   110     		- URL kódování znaků
       
   111     -->
       
   112     <xsl:template match="m:a">
       
   113     	<a>
       
   114     		<xsl:copy-of select="@*"/>
       
   115     		<xsl:attribute name="href">
       
   116     			<xsl:value-of select="fn:encode-for-uri(concat(@href, $výstupníPřípona))"/>
       
   117     		</xsl:attribute>
       
   118     		<xsl:apply-templates/>
       
   119     	</a>
       
   120     </xsl:template>
       
   121     
       
   122     <!--
       
   123     	Makro pro zvýraznění syntaxe:
       
   124     -->    
       
   125     <xsl:template match="m:pre">
       
   126     	<xsl:call-template name="zvýrazniZdroják">
       
   127     		<xsl:with-param name="zdroják" select="text()"/>
       
   128     	</xsl:call-template>
       
   129     </xsl:template>
       
   130     
       
   131     <xsl:template match="m:pre[@src]">
       
   132     	<xsl:call-template name="zvýrazniZdroják">
       
   133     		<xsl:with-param name="zdroják" select="unparsed-text(concat($vstup, @src))"/>
       
   134     	</xsl:call-template>
       
   135 		<xsl:if test="@odkaz = 'ano'">
       
   136 			<p class="zdroják-ke-stažení">
       
   137 				<span>Stáhnout: <a href="{encode-for-uri(@src)}"><xsl:value-of select="@src"/></a></span>
       
   138 			</p>
       
   139 		</xsl:if>
       
   140     </xsl:template>
       
   141     
       
   142     <xsl:template name="zvýrazniZdroják">
       
   143     	<xsl:param name="zdroják"/>
       
   144     	<xsl:variable name="zvýrazněnýZdroják" select="j:zvýrazniSyntaxi($zdroják, @jazyk)"/>
       
   145     	<xsl:choose>
       
   146     		<xsl:when test="$zvýrazněnýZdroják">
       
   147     			<xsl:comment>Následující kód je v jazyce <xsl:value-of select="@jazyk"/></xsl:comment>
       
   148     			<xsl:value-of disable-output-escaping="yes" select="$zvýrazněnýZdroják"/>
       
   149     		</xsl:when>
       
   150     		<xsl:otherwise>
       
   151     			<xsl:message>Zvýraznění syntaxe se nezdařilo → bude vložen původní nezvýrazněný kód.</xsl:message>
       
   152     			<pre><xsl:value-of select="$zdroják"/></pre>
       
   153     		</xsl:otherwise>
       
   154     	</xsl:choose>    	
       
   155     </xsl:template>
       
   156     
       
   157     <!--
       
   158     	Makro pro diagramy/grafy
       
   159     -->
       
   160     <xsl:template match="m:diagram">
       
   161     	<xsl:variable name="souborDiagramu" select="j:vytvořDiagram(text(), @orientace = 'vodorovně')"/>
       
   162     	<xsl:choose>
       
   163 			<xsl:when test="$souborDiagramu">
       
   164 				<div class="diagram">
       
   165 					<a href="{$souborDiagramu}.svg">
       
   166 						<img
       
   167 							src="{$souborDiagramu}.svg" 
       
   168 							alt="Diagram {$souborDiagramu} | pokud nevidíte obrázek, váš prohlížeč stojí za starou bačkoru"
       
   169 							title="{@nadpis} (klikněte pro zobrazení samotného diagramu)"/>
       
   170 					</a>
       
   171 					<!-- TODO: SVG+PNG
       
   172 					<xsl:variable name="svgDiagramu" select="document(concat($výstup, $souborDiagramu, '.svg'))/svg:svg"/>
       
   173 					<object
       
   174 						data="{$souborDiagramu}.svg"
       
   175 						type="image/svg+xml"
       
   176 						style="width: {$svgDiagramu/@width}; height: {$svgDiagramu/@height}">
       
   177 							<img src="{$souborDiagramu}.png" alt="Diagram {$souborDiagramu}"/>
       
   178 					</object>
       
   179 					-->
       
   180 					<xsl:if test="@nadpis">
       
   181 						<p class="nadpis"><xsl:value-of select="@nadpis"/></p>
       
   182 					</xsl:if>
       
   183 				</div>
       
   184 			</xsl:when>
       
   185 			<xsl:otherwise>
       
   186 				<xsl:message terminate="yes">Při vytváření diagramu došlo k chybě.</xsl:message>
       
   187 			</xsl:otherwise>
       
   188     	</xsl:choose>
       
   189     </xsl:template>
       
   190     
       
   191     <!--
       
   192     	Makro pro Wiki syntaxi
       
   193     -->
       
   194     <xsl:template match="m:wiki">
       
   195     	<xsl:variable name="wikiXHTML" select="j:formátujWiki(text(), @syntaxe)"/>
       
   196     	<xsl:choose>
       
   197 			<xsl:when test="$wikiXHTML">
       
   198 				<xsl:value-of select="$wikiXHTML" disable-output-escaping="yes"/>
       
   199 			</xsl:when>
       
   200 			<xsl:otherwise>
       
   201 				<xsl:message terminate="yes">Při zpracování wiki syntaxe došlo k chybě.</xsl:message>
       
   202 			</xsl:otherwise>
       
   203 		</xsl:choose>
       
   204     </xsl:template>
       
   205     
       
   206     <!-- 
       
   207     	Makro pro vycpávkový text
       
   208     -->
       
   209     <xsl:template match="m:vycpávka">
       
   210     	<!-- 
       
   211     		TODO: stáhnout jen jednou, uložit do souboru a při dalších generováních brát z něj.
       
   212     	-->
       
   213     	<xsl:message>Stahuji vycpávkový text z http://lipsum.lipsum.com/</xsl:message>
       
   214     	<xsl:variable name="prostýText" select="document(concat('http://lipsum.lipsum.com/feed/xml?amount=', @odstavců, '&amp;what=paragraphs'))/feed/lipsum"/>
       
   215     	<xsl:for-each select="fn:tokenize($prostýText, '\n')">
       
   216     		<p><xsl:value-of select="."/></p>
       
   217     	</xsl:for-each>
       
   218     </xsl:template>
       
   219     
       
   220     <!--
       
   221     	Makro pro jednoduché tabulky
       
   222     -->
       
   223     <xsl:template match="m:tabulka">
       
   224     	<table>
       
   225     		<xsl:variable name="data" select="replace(replace(text(), '^\s+', ''),'\s+$','')"/>
       
   226     		<xsl:variable name="hlavička" select="substring-before($data, '&#10;')"/>
       
   227     		<xsl:variable name="tělo" select="substring-after($data, '&#10;')"/>
       
   228     		<thead>
       
   229     			<tr>
       
   230     				<xsl:for-each select="tokenize($hlavička, '\t+')">
       
   231     					<xsl:if test="normalize-space(.)">
       
   232 							<td><xsl:value-of select="normalize-space(.)"/></td>
       
   233 						</xsl:if>
       
   234 					</xsl:for-each>
       
   235     			</tr>
       
   236     		</thead>
       
   237     		<tbody>
       
   238 				<xsl:for-each select="tokenize($tělo, '\n')">
       
   239 					<xsl:if test="normalize-space(.)">
       
   240 						<tr>
       
   241 							<xsl:for-each select="tokenize(., '\t+')">
       
   242 								<xsl:if test="normalize-space(.)">
       
   243 									<td><xsl:value-of select="normalize-space(.)"/></td>
       
   244 								</xsl:if>
       
   245 							</xsl:for-each>
       
   246 						</tr>
       
   247 					</xsl:if>
       
   248 				</xsl:for-each>
       
   249     		</tbody>
       
   250     	</table>    
       
   251     </xsl:template>
       
   252 
       
   253 </xsl:stylesheet>
    68 </xsl:stylesheet>