Przeksztalcenie odwrotne.
[redakcja.git] / platforma / static / xsl / wl2html_client.xsl
index 85ff4a3..7a7da8c 100755 (executable)
         Base tag for rendering the whole text 
     -->
 
-    <!-- TODO -->
-
-    
+    <xsl:template match="utwor">
+        <xsl:apply-templates select="child::*[name() = local-name()]">
+            <xsl:with-param name="mixed" select="false()" />
+        </xsl:apply-templates>
+    </xsl:template>    
     
     <!-- 
         Przekształcenia poszczególnych elementów zgodnie z:            
         Tagi rozpoczynające i kończące tekst utworu lirycznego o standardowej szerokości łamu:
     -->
 
-    <xsl:template match="liryka_l">
+    <xsl:template match="opowiadanie|powiesc">
+        <xsl:param name="mixed" />
+        <div class="{name()}" x-node="{name()}">
+            <xsl:apply-templates select="child::node()">
+                <xsl:with-param name="mixed" select="false()" />
+            </xsl:apply-templates>
+        </div>
+    </xsl:template>
+
+    <xsl:template match="liryka_l|liryka_lp">
+        <xsl:param name="mixed" />
+        <div class="{name()}" x-node="{name()}">
+            <xsl:apply-templates select="child::node()">
+                <xsl:with-param name="mixed" select="false()" />
+            </xsl:apply-templates>
+        </div>
+    </xsl:template>
+
+    <xsl:template match="dramat_wierszowany_l|dramat_wierszowany_lp|dramat_wspolczesny">
+        <xsl:param name="mixed" />
+        <div class="{name()}" x-node="{name()}">
+            <xsl:apply-templates select="child::node()">
+                <xsl:with-param name="mixed" select="false()" />
+            </xsl:apply-templates>
+        </div>
+    </xsl:template>
+
+    <xsl:template match="wywiad">
         <xsl:param name="mixed" />
         <div class="{name()}" x-node="{name()}">
             <xsl:apply-templates select="child::node()">
@@ -64,6 +93,7 @@
     <xsl:template match="autor_utworu">
         <xsl:param name="mixed" />
         <h2 class="{name()}" x-editable="true" x-node="{name()}">
+            <xsl:call-template name="context-menu" />
             <xsl:apply-templates select="child::node()">
                 <xsl:with-param name="mixed" select="true()" />
             </xsl:apply-templates>
     <xsl:template match="nazwa_utworu">
         <xsl:param name="mixed" />
         <h1 class="{name()}" x-editable="true" x-node="{name()}">
+            <xsl:call-template name="context-menu" />
             <xsl:apply-templates select="child::node()">
                 <xsl:with-param name="mixed" select="true()" />
             </xsl:apply-templates>
     <xsl:template match="dzielo_nadrzedne">
         <xsl:param name="mixed" />
         <h2 class="{name()}" x-editable="true" x-node="{name()}">
+            <xsl:call-template name="context-menu" />
             <xsl:apply-templates select="child::node()">
                 <xsl:with-param name="mixed" select="true()" />
             </xsl:apply-templates>
     <xsl:template match="podtytul">
         <xsl:param name="mixed" />
         <h3 class="{name()}" x-editable="true" x-node="{name()}">
+            <xsl:call-template name="context-menu" />
             <xsl:apply-templates select="child::node()">
                 <xsl:with-param name="mixed" select="true()" />
             </xsl:apply-templates>
     <xsl:template match="motto_podpis">
         <xsl:param name="mixed" />
         <p class="{name()}" x-editable="true" x-node="{name()}">
+            <xsl:call-template name="context-menu" />
             <xsl:apply-templates select="child::node()">
                 <xsl:with-param name="mixed" select="true()" />
             </xsl:apply-templates>
     -->
     <xsl:template match="lista_osob">
         <xsl:param name="mixed" />
-        <div class="{name()}" x-editable="true" x-node="{name()}">
+        <div class="{name()}" x-node="{name()}">
             <xsl:apply-templates select="child::node()">
                 <xsl:with-param name="mixed" select="false()" />
             </xsl:apply-templates>
 
     <xsl:template match="naglowek_listy">
         <xsl:param name="mixed" />
-        <p class="{name()}" x-node="{name()}">
+        <p class="{name()}" x-editable="true" x-node="{name()}">
+            <xsl:call-template name="context-menu" />
             <xsl:apply-templates select="child::node()">
                 <xsl:with-param name="mixed" select="true()" />
             </xsl:apply-templates>
     <xsl:template match="lista_osoba">
         <xsl:param name="mixed" />
         <p class="{name()}" x-editable="true" x-node="{name()}">
+            <xsl:call-template name="context-menu" />
             <xsl:apply-templates select="child::node()">
                 <xsl:with-param name="mixed" select="true()" />
             </xsl:apply-templates>
     <xsl:template match="naglowek_czesc">
         <xsl:param name="mixed" />
         <h2 class="{name()}" x-editable="true" x-node="{name()}">
+            <xsl:call-template name="context-menu" />
             <xsl:apply-templates select="child::node()">
                 <xsl:with-param name="mixed" select="true()" />
             </xsl:apply-templates>
     <xsl:template match="naglowek_rozdzial">
         <xsl:param name="mixed" />
         <h3 class="{name()}" x-editable="true" x-node="{name()}">
+            <xsl:call-template name="context-menu" />
             <xsl:apply-templates select="child::node()">
                 <xsl:with-param name="mixed" select="true()" />
             </xsl:apply-templates>
     <xsl:template match="naglowek_podrozdzial">
         <xsl:param name="mixed" />
         <h4 class="{name()}" x-editable="true" x-node="{name()}">
+            <xsl:call-template name="context-menu" />
             <xsl:apply-templates select="child::node()">
                 <xsl:with-param name="mixed" select="true()" />
             </xsl:apply-templates>
     <xsl:template match="srodtytul">
         <xsl:param name="mixed" />
         <h2 class="{name()}" x-editable="true" x-node="{name()}">
+            <xsl:call-template name="context-menu" />
             <xsl:apply-templates select="child::node()">
                 <xsl:with-param name="mixed" select="true()" />
             </xsl:apply-templates>
     <xsl:template match="naglowek_akt">
         <xsl:param name="mixed" />
         <h2 class="{name()}" x-editable="true" x-node="{name()}">
+            <xsl:call-template name="context-menu" />
             <xsl:apply-templates select="child::node()">
                 <xsl:with-param name="mixed" select="true()" />
             </xsl:apply-templates>
     <xsl:template match="naglowek_scena">
         <xsl:param name="mixed" />
         <h3 class="{name()}" x-editable="true" x-node="{name()}">
+            <xsl:call-template name="context-menu" />
             <xsl:apply-templates select="child::node()">
                 <xsl:with-param name="mixed" select="true()" />
             </xsl:apply-templates>
     <xsl:template match="naglowek_osoba">
         <xsl:param name="mixed" />
         <h4 class="{name()}" x-editable="true" x-node="{name()}">
+            <xsl:call-template name="context-menu" />
             <xsl:apply-templates select="child::node()">
                 <xsl:with-param name="mixed" select="true()" />
             </xsl:apply-templates>
     <xsl:template match="akap">
         <xsl:param name="mixed" />
         <p class="{name()}" x-editable="true" x-node="{name()}">
+            <xsl:call-template name="context-menu" />
             <xsl:apply-templates select="child::node()">
                 <xsl:with-param name="mixed" select="true()" />
             </xsl:apply-templates>
     <xsl:template match="akap_cd">
         <xsl:param name="mixed" />
         <p class="{name()}" x-editable="true" x-node="{name()}">
+            <xsl:call-template name="context-menu" />
             <xsl:apply-templates select="child::node()">
                 <xsl:with-param name="mixed" select="true()" />
             </xsl:apply-templates>
     <xsl:template match="akap_dialog">
         <xsl:param name="mixed" />
         <p class="{name()}" x-editable="true" x-node="{name()}">
+            <xsl:call-template name="context-menu" />
             <xsl:apply-templates select="child::node()">
                 <xsl:with-param name="mixed" select="true()" />
             </xsl:apply-templates>
     -->
     <xsl:template match="strofa">
         <div class="{name()}" x-editable="true" x-node="{name()}">
+            <xsl:call-template name="context-menu" />
             <xsl:choose>
                 <xsl:when test="count(br) > 0">
+                    <xsl:variable name="first-verse" select="br[1]/preceding-sibling::node()" />                    
                     <xsl:call-template name="verse">
-                        <xsl:with-param name="verse-content" select="br[1]/preceding-sibling::node()" />
-                        <xsl:with-param name="verse-type" select="name(br[1]/preceding-sibling::*[starts-with(name(current()),'wers')])" />
+                        <xsl:with-param name="verse-content" select="$first-verse" />                        
                     </xsl:call-template>
                     <xsl:for-each select="br">
-                       <!-- Each BR tag "consumes" text after it -->
                         <xsl:variable name="lnum" select="count(preceding-sibling::br)" />
+                        <!-- select all nodes up to the next br or end of stanza -->
+                        <xsl:variable name="current-verse"
+                            select="following-sibling::node()[count(preceding-sibling::br) = $lnum+1]" />                        
                         <xsl:call-template name="verse">
-                            <xsl:with-param name="verse-content"
-                                select="following-sibling::node()[count(preceding-sibling::br) = $lnum+1]" />
-                            <xsl:with-param name="verse-type"
-                                select="name(following-sibling::*[count(preceding-sibling::br) = $lnum+1 and starts-with(name(current()), 'wers')][1])" />
+                            <xsl:with-param name="verse-content" select="$current-verse" />                            
                         </xsl:call-template>
                     </xsl:for-each>
                 </xsl:when>
                 <xsl:otherwise>
                     <xsl:call-template name="verse">
-                        <xsl:with-param name="verse-content" select="child::node()" />
-                        <xsl:with-param name="verse-type" select="name(child::*[starts-with(name(current()),'wers')])" />
+                        <xsl:with-param name="verse-content" select="child::node()" />                        
                     </xsl:call-template>
                 </xsl:otherwise>
             </xsl:choose>
     </xsl:template>
 
     <xsl:template name="verse">
+        <!-- the verse contents including the last br (if any) -->
         <xsl:param name="verse-content" />
-        <xsl:param name="verse-type" />
+        
+        <xsl:variable name="first-tag-name" select="name($verse-content/self::*)" />
+        <!-- name of text nodes is '' == false -->
 
         <xsl:choose>
-            <xsl:when test="$verse-type = ''">
-                <p class="wers" x-node="wers">
+            <xsl:when test="starts-with($first-tag-name, 'wers')">
+                <p class="{$first-tag-name}" x-node="{$first-tag-name}">
                 <xsl:for-each select="$verse-content[name(.) != 'br']">
-                    <xsl:apply-templates select=".">
+                <xsl:apply-templates select=".">
                     <xsl:with-param name="mixed" select="true()" />
-                    </xsl:apply-templates>
+                </xsl:apply-templates>
                 </xsl:for-each>
-                </p>                
+                </p>
             </xsl:when>
+
             <xsl:otherwise>
-                <p class="{$verse-type}" x-node="{$verse-type}">
+                <p class="wers" x-node="wers">
                 <xsl:for-each select="$verse-content[name(.) != 'br']">
-                <xsl:apply-templates select=".">
+                    <xsl:apply-templates select=".">
                     <xsl:with-param name="mixed" select="true()" />
-                </xsl:apply-templates>
+                    </xsl:apply-templates>
                 </xsl:for-each>
-                </p>
-            </xsl:otherwise>
-        </xsl:choose>
-        
-        
+                </p>                
+            </xsl:otherwise>          
+            
+        </xsl:choose>       
+    </xsl:template>
+
+    <xsl:template match="wers_cd|wers_akap|wers_wciety">
+        <xsl:param name="mixed" />
+        <xsl:call-template name="copy-attributes" />
+        <xsl:apply-templates select="child::node()">
+                <xsl:with-param name="mixed" select="true()" />
+            </xsl:apply-templates>
     </xsl:template>
     
 
     -->
     <xsl:template match="tytul_dziela">
         <xsl:param name="mixed" />
-        <span class="{name()}" x-editable="true" x-node="{name()}">
+        <em class="{name()}" x-node="{name()}">
             <xsl:apply-templates select="child::node()">
                 <xsl:with-param name="mixed" select="true()" />
             </xsl:apply-templates>
-        </span>
+        </em>
     </xsl:template>
 
     <xsl:template match="wyroznienie|slowo_obce|mat|didask_tekst|osoba|wyp_osoba|www">
         <br class="{name()}" x-node="{name()}" />
     </xsl:template>
 
-    <xsl:template match="sekcja_asteryks">
+    <xsl:template match="sekcja_asterysk">
         <xsl:param name="mixed" />
         <hr class="{name()}" x-node="{name()}" />
     </xsl:template>
         Przypisy i motywy
     -->
     <xsl:template match="pr|pa|pe|pt">       
-        <span class="annotation-inline-box" x-node="{name()}">
+        <span class="annotation-inline-box" x-node="{name()}" x-editable="true">
             <a name="anchor-{generate-id(.)}" />
             <!-- the link to the non-inline version -->
             <a href="#annotation-{generate-id(.)}" class="annotation"></a>
             <!-- inline contents -->
             <span x-annotation-box="true">
+                <xsl:call-template name="context-menu" />
                 <xsl:apply-templates select="node()">
                     <xsl:with-param name="mixed" select="true()" />
                 </xsl:apply-templates>
             </span>
         </span>
-
     </xsl:template>
 
-    <xsl:template match="begin">
-        <xsl:variable name="id" select="substring-after(@id, 'b')" />
-        <span class="theme-begin" x-node="begin" x-theme-class="{$id}" id="{@id}"></span>
-        <xsl:apply-templates select="following-sibling::motyw[@id = concat('m', $id)]" mode="theme-begin" />
+    <xsl:template match="begin">        
+        <span class="theme-begin" x-node="begin">
+            <xsl:call-template name="copy-attributes" />
+        </span>
     </xsl:template>
 
     <xsl:template match="motyw">
-        <span class="theme-ref" x-node="motyw" x-theme-class="{substring-after(@id, 'm')}" id="{@id}">
+        <span class="theme-ref" x-node="motyw">
+            <xsl:call-template name="copy-attributes" />
             <xsl:value-of select="." />
         </span>
     </xsl:template>
 
-
     <xsl:template match="end">
-        <span class="theme-end" x-node="end" x-theme-class="{substring-after(@id, 'e')}" id="{@id}">
+        <span class="theme-end" x-node="end">
+            <xsl:call-template name="copy-attributes" />
         </span>
     </xsl:template>
 
     <xsl:template match="*">
         <div x-node="error" x-content="{name()}" />
     </xsl:template>
+
+    <xsl:template name="context-menu">
+        <span class="default-menu context-menu">
+            <span class="edit-button">Edit</span>
+        </span>
+        <span class="edit-menu context-menu">
+            <span class="accept-button">OK</span>
+            <span class="reject-button">Cancel</span>
+        </span>
+    </xsl:template>
+
+    <xsl:template name="copy-attributes">
+        <xsl:for-each select="@*">
+            <xsl:attribute name="x-attrib-{name(.)}"><xsl:value-of select="."/></xsl:attribute>
+        </xsl:for-each>
+    </xsl:template>
     
 </xsl:stylesheet>
\ No newline at end of file