[gnome-doc-utils] [mal2html] Implement previous and next links for Mallard documents



commit 9d70b0898cbb88e58bbcb87df162c2a0721bd2b3
Author: Shaun McCance <shaunm gnome org>
Date:   Wed Jan 6 15:16:07 2010 -0600

    [mal2html] Implement previous and next links for Mallard documents

 xslt/gettext/l10n.xml.in            |   10 ++++++++
 xslt/mallard/common/mal-link.xsl    |    3 ++
 xslt/mallard/html/mal2html-css.xsl  |   18 ++++++++++++++
 xslt/mallard/html/mal2html-page.xsl |   43 ++++++++++++++++++++++++++++++++++-
 4 files changed, 73 insertions(+), 1 deletions(-)
---
diff --git a/xslt/gettext/l10n.xml.in b/xslt/gettext/l10n.xml.in
index 6076c9a..26a7dbc 100644
--- a/xslt/gettext/l10n.xml.in
+++ b/xslt/gettext/l10n.xml.in
@@ -203,6 +203,11 @@
   <_msg>Name</_msg>
 </msgset>
 <msgset>
+  <msgid>Next</msgid>
+  <!-- Used as link to the next page in a series. -->
+  <_msg>Next</_msg>
+</msgset>
+<msgset>
   <msgid>Note</msgid>
   <!--
   http://www.docbook.org/tdg/en/html/note.html
@@ -240,6 +245,11 @@
   <_msg>Preface</_msg>
 </msgset>
 <msgset>
+  <msgid>Previous</msgid>
+  <!-- Used as link to the previous page in a series. -->
+  <_msg>Previous</_msg>
+</msgset>
+<msgset>
   <msgid>Publisher</msgid>
   <!-- Used as a header before a list of publishers. -->
   <_msg>
diff --git a/xslt/mallard/common/mal-link.xsl b/xslt/mallard/common/mal-link.xsl
index ab4974d..2f8fb95 100644
--- a/xslt/mallard/common/mal-link.xsl
+++ b/xslt/mallard/common/mal-link.xsl
@@ -66,6 +66,9 @@ it to a file.  Those tools can use this parameter directly.
 mal.cache.key
 -->
 <xsl:key name="mal.cache.key" match="mal:page | mal:section" use="@id"/>
+<xsl:key name="mal.cache.link.key"
+         match="mal:info/mal:link[ type]"
+         use="concat(@type, ':', @xref)"/>
 
 
 <!--@@==========================================================================
diff --git a/xslt/mallard/html/mal2html-css.xsl b/xslt/mallard/html/mal2html-css.xsl
index 4179f1d..f1e016d 100644
--- a/xslt/mallard/html/mal2html-css.xsl
+++ b/xslt/mallard/html/mal2html-css.xsl
@@ -138,6 +138,24 @@ div.body {
   background-color: </xsl:text>
     <xsl:value-of select="$theme.color.background"/><xsl:text>;
 }
+div.navbar {
+  margin: 0;
+  float: right;
+}
+a.navbar-prev::before {
+  content: '</xsl:text><xsl:choose>
+  <xsl:when test="$left = 'left'"><xsl:text>&#x25C0;&#x00A0;&#x00A0;</xsl:text></xsl:when>
+  <xsl:otherwise><xsl:text>&#x25B6;&#x00A0;&#x00A0;</xsl:text></xsl:otherwise>
+  </xsl:choose><xsl:text>';
+  color: </xsl:text><xsl:value-of select="$theme.color.text_light"/><xsl:text>;
+}
+a.navbar-next::after {
+  content: '</xsl:text><xsl:choose>
+  <xsl:when test="$left = 'left'"><xsl:text>&#x00A0;&#x00A0;&#x25B6;</xsl:text></xsl:when>
+  <xsl:otherwise><xsl:text>&#x00A0;&#x00A0;&#x25C0;</xsl:text></xsl:otherwise>
+  </xsl:choose><xsl:text>';
+  color: </xsl:text><xsl:value-of select="$theme.color.text_light"/><xsl:text>;
+}
 div.copyrights {
   text-align: center;
   color: </xsl:text>
diff --git a/xslt/mallard/html/mal2html-page.xsl b/xslt/mallard/html/mal2html-page.xsl
index 78c91ed..673c02d 100644
--- a/xslt/mallard/html/mal2html-page.xsl
+++ b/xslt/mallard/html/mal2html-page.xsl
@@ -261,12 +261,12 @@ REMARK: Describe this template
           <xsl:attribute name="class">
             <xsl:text>title</xsl:text>
           </xsl:attribute>
-          <!-- FIXME: i18n -->
           <xsl:call-template name="l10n.gettext">
             <xsl:with-param name="msgid" select="'Further Reading'"/>
           </xsl:call-template>
         </xsl:element>
       </div>
+      <!-- FIXME: For prev/next series, insert links to first/prev/next/last -->
       <div class="autolinks">
         <xsl:if test="$guidenodes">
           <div class="title"><span>
@@ -500,6 +500,47 @@ REMARK: Describe this template
         <xsl:with-param name="node" select="."/>
       </xsl:call-template>
       <div class="body">
+        <xsl:variable name="linkid">
+          <xsl:call-template name="mal.link.linkid"/>
+        </xsl:variable>
+        <xsl:variable name="next" select="mal:info/mal:link[ type='next']"/>
+        <xsl:for-each select="$mal.cache">
+          <xsl:variable name="prev" select="key('mal.cache.link.key', concat('next:', $linkid))"/>
+          <xsl:if test="$prev or $next">
+            <!-- FIXME: Get prev/next links in constant position -->
+            <div class="navbar">
+              <xsl:if test="$prev">
+                <a class="navbar-prev">
+                  <xsl:attribute name="href">
+                    <xsl:call-template name="mal.link.target">
+                      <xsl:with-param name="node" select="$prev"/>
+                      <xsl:with-param name="xref" select="$prev/../../@id"/>
+                    </xsl:call-template>
+                  </xsl:attribute>
+                  <xsl:call-template name="l10n.gettext">
+                    <xsl:with-param name="msgid" select="'Previous'"/>
+                  </xsl:call-template>
+                </a>
+              </xsl:if>
+              <xsl:if test="$prev and $next">
+                <xsl:text>&#x00A0;&#x00A0;|&#x00A0;&#x00A0;</xsl:text>
+              </xsl:if>
+              <xsl:if test="$next">
+                <a class="navbar-next">
+                  <xsl:attribute name="href">
+                    <xsl:call-template name="mal.link.target">
+                      <xsl:with-param name="node" select="$next"/>
+                      <xsl:with-param name="xref" select="$next/@xref"/>
+                    </xsl:call-template>
+                  </xsl:attribute>
+                  <xsl:call-template name="l10n.gettext">
+                    <xsl:with-param name="msgid" select="'Next'"/>
+                  </xsl:call-template>
+                </a>
+              </xsl:if>
+            </div>
+          </xsl:if>
+        </xsl:for-each>
         <xsl:if test="$mal2html.editor_mode and $revision/@status != ''">
           <div class="version">
             <!-- FIXME: i18n -->



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]