Diagramy #13: číslování v rámci stránky + u diagramů ze souboru použijeme název souboru se zadáním.
authorFrantišek Kučera <franta-hg@frantovo.cz>
Sat, 07 Jan 2012 18:45:54 +0100
changeset 67 89b42acb3593
parent 66 a8085dedd92b
child 68 2e6d7bfcd84f
Diagramy #13: číslování v rámci stránky + u diagramů ze souboru použijeme název souboru se zadáním.
šablona/funkce/src/cz/frantovo/xmlWebGenerator/Funkce.java
šablona/makra/diagramy.xsl
--- a/šablona/funkce/src/cz/frantovo/xmlWebGenerator/Funkce.java	Sat Jan 07 17:34:57 2012 +0100
+++ b/šablona/funkce/src/cz/frantovo/xmlWebGenerator/Funkce.java	Sat Jan 07 18:45:54 2012 +0100
@@ -23,6 +23,8 @@
 import java.util.Date;
 import java.net.URI;
 import java.net.URISyntaxException;
+import java.net.URLDecoder;
+import java.nio.charset.Charset;
 import static cz.frantovo.xmlWebGenerator.NástrojeCLI.*;
 
 /**
@@ -41,6 +43,7 @@
 	private static final String PŘÍKAZ_MARKDOWN = "markdown";
 	private static final String ADRESÁŘ_VÝSTUPNÍ = "výstup";
 	private static int počítadloDiagramů = 0;
+	private static String počítadloDiagramůKontext = "";
 
 	/**
 	 * Zjištuje, kdy byl naposledy daný soubor změněn.
@@ -115,12 +118,38 @@
 	 * @param zadání definice diagramu ve formátu dot
 	 * @param vodorovně zda má být graf orientovaný vodorovně (funguje jen při <code>kompletní = false</code>)
 	 * @param kompletní false, pokud k zadání chceme doplnit <code>digraph d {…}</code>
+	 * @param kontext kam diagram patří – typicky název stránky, do které je vložen
+	 * diagramy se pak budou číslovat v rámci tohoto kontextu 
+	 * → nebude docházet k přepisování diagramů jiných stránek při částečném přegenerování webu.
+	 * @param souborZadání null pokud chceme automatické číslování | nebo zadáme název souboru se zadáním diagramu – vygenerovaný diagram se pak bude jmenovat stejně
 	 * @return název souboru bez přípony, který byl vytvořen, nebo null, pokud došlo k chybě.
 	 */
-	public static String vytvořDiagram(String zadání, boolean vodorovně, boolean kompletní) throws IOException, InterruptedException {
+	public static String vytvořDiagram(String zadání, boolean vodorovně, boolean kompletní, String kontext, String souborZadání) throws IOException, InterruptedException {
 		if (isPříkazDostupný(PŘÍKAZ_DOT)) {
-			počítadloDiagramů++;
-			String soubor = "diagram-" + počítadloDiagramů;
+			System.err.println("XXX Kontext: " + URLDecoder.decode(kontext, Charset.defaultCharset().name()));
+			System.err.println("XXX Soubor:  " + souborZadání);
+
+			String soubor;
+			if (souborZadání == null) {
+				if (kontext == null) {
+					počítadloDiagramů++;
+					soubor = "diagram-" + počítadloDiagramů;
+				} else {
+					// TODO: tohle by se mělo udělat v XSLT
+					kontext = URLDecoder.decode(kontext, Charset.defaultCharset().name());
+					
+					// Každá stránka bude mít svoje diagramy číslované od 1
+					if (!počítadloDiagramůKontext.equals(kontext)) {
+						počítadloDiagramůKontext = kontext;
+						počítadloDiagramů = 0;
+					}
+					
+					počítadloDiagramů++;
+					soubor = "diagram-" + kontext + "-" + počítadloDiagramů;
+				}
+			} else {
+				soubor = souborZadání;
+			}
 			String souborSložka = ADRESÁŘ_VÝSTUPNÍ + File.separator + soubor;
 
 			String zdroják;
--- a/šablona/makra/diagramy.xsl	Sat Jan 07 17:34:57 2012 +0100
+++ b/šablona/makra/diagramy.xsl	Sat Jan 07 18:45:54 2012 +0100
@@ -51,13 +51,19 @@
     <xsl:template name="vložDiagram">
 		<xsl:param name="zadání"/>
 		<xsl:param name="kompletní"/>
-		<xsl:variable name="souborDiagramu" select="j:vytvořDiagram($zadání, @orientace = 'vodorovně', $kompletní)"/>
+		<xsl:variable name="souborDiagramu" select="j:vytvořDiagram(
+															$zadání, 
+															@orientace = 'vodorovně', 
+															$kompletní,
+															tokenize(base-uri(), '/')[last()],
+															@src
+															)"/>
 		<xsl:choose>
 			<xsl:when test="$souborDiagramu">
 				<div class="diagram">
-					<a href="{$souborDiagramu}.svg">
+					<a href="{encode-for-uri($souborDiagramu)}.svg">
 						<img
-							src="{$souborDiagramu}.svg" 
+							src="{encode-for-uri($souborDiagramu)}.svg" 
 							alt="Diagram {(@nadpis, $souborDiagramu)[1]} | pokud nevidíte obrázek, váš prohlížeč stojí za starou bačkoru"
 							title="{@nadpis} (klikněte pro zobrazení samotného diagramu)"/>
 					</a>