OASIS Mailing List ArchivesView the OASIS mailing list archive below
or browse/search using MarkMail.

 


Help: OASIS Mailing Lists Help | MarkMail Help

docbook-apps message

[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]


Subject: RFC: Split head.content template?


Hi,

in {xhtml,html}/docbook.xsl there is the head.content template. The 
head.content does a lot of things: It creates a title, some CSS stylesheets 
references, and meta tags.

Unfortunately, customizing is a bit inconvenient: You have to copy *all* the 
content, although you just want to change the <style> element, for example. 
Same for meta information.

As this is one "central" piece when generating HTML, wouldn't it be more user 
friendly to split it into smaller pieces allowing easier customization? 

I've added a small patch which moves some elements into separate templates. 
That makes it a lot easier to customize just the necessary parts without 
touching head.content. I've named them header.content.<PURPOSE>:

 * head.content.base
   Creates <base href="{$html.base}"/>

 * head.content.link.made
   Creates <link rev="made" href="{$link.mailto.url}"/>

 * head.content.generator
   <meta name="generator" content="DocBook {$DistroTitle} V{$VERSION}"/>

 * head.content.abstract
   Creates a <meta name="description"> tag and adds all the content from an
   abstract element

 * head.content.style
   Creates a <style type="text/css"> to support draft mode

The first three might be debatable as all three create just one element. The 
question is, is there are a need to customize, e.g., a <base/> element? Or to 
create a generator meta element directly?

Apart from the first three, the head.content.abstract and head.content.style 
templates are useful. People might want to customize what should go inside an 
meta description. Or change the content of <style> for the draft mode.


What do you think? Comments, suggestions, ideas? :-)

Thanks!


-- 
Gruß/Regards
  Thomas Schraitle
--- docbook.xsl.bak	2012-09-12 19:54:11.939057473 +0200
+++ docbook.xsl	2012-09-12 20:01:09.045387110 +0200
@@ -125,6 +125,69 @@
   </xsl:if>
 </xsl:template>
 
+<xsl:template name="head.content.base">
+  <xsl:param name="node" select="."/>
+  <base href="{$html.base}"/>
+</xsl:template>
+
+<xsl:template name="head.content.abstract">
+  <xsl:param name="node" select="."/>
+  <xsl:variable name="info" select="(articleinfo
+    |bookinfo
+    |prefaceinfo
+    |chapterinfo
+    |appendixinfo
+    |sectioninfo
+    |sect1info
+    |sect2info
+    |sect3info
+    |sect4info
+    |sect5info
+    |referenceinfo
+    |refentryinfo
+    |partinfo
+    |info
+    |docinfo)[1]"/>
+  <xsl:if test="$info and $info/abstract">
+    <meta name="description">
+      <xsl:attribute name="content">
+        <xsl:for-each select="$info/abstract[1]/*">
+          <xsl:value-of select="normalize-space(.)"/>
+          <xsl:if test="position() &lt; last()">
+            <xsl:text> </xsl:text>
+          </xsl:if>
+        </xsl:for-each>
+      </xsl:attribute>
+    </meta>
+  </xsl:if>
+</xsl:template>
+
+<xsl:template name="head.content.link.made">
+  <xsl:param name="node" select="."/>
+  
+  <link rev="made" href="{$link.mailto.url}"/>
+</xsl:template>
+
+<xsl:template name="head.content.generator">
+  <xsl:param name="node" select="."/>
+  <meta name="generator" content="DocBook {$DistroTitle} V{$VERSION}"/>
+</xsl:template>
+
+<xsl:template name="head.content.style">
+  <xsl:param name="node" select="."/>
+  <style type="text/css"><xsl:text>
+body { background-image: url('</xsl:text>
+<xsl:value-of select="$draft.watermark.image"/><xsl:text>');
+       background-repeat: no-repeat;
+       background-position: top left;
+       /* The following properties make the watermark "fixed" on the page. */
+       /* I think that's just a bit too distracting for the reader... */
+       /* background-attachment: fixed; */
+       /* background-position: center center; */
+     }</xsl:text>
+    </style>
+</xsl:template>
+
 <xsl:template name="head.content">
   <xsl:param name="node" select="."/>
   <xsl:param name="title">
@@ -137,7 +200,9 @@
   </xsl:call-template>
 
   <xsl:if test="$html.base != ''">
-    <base href="{$html.base}"/>
+    <xsl:call-template name="head.content.base">
+      <xsl:with-param name="node" select="$node"/>
+    </xsl:call-template>
   </xsl:if>
 
   <!-- Insert links to CSS files or insert literal style elements -->
@@ -156,58 +221,28 @@
   </xsl:if>
 
   <xsl:if test="$link.mailto.url != ''">
-    <link rev="made"
-          href="{$link.mailto.url}"/>
+    <xsl:call-template name="head.content.link.made">
+      <xsl:with-param name="node" select="$node"/>
+    </xsl:call-template>
   </xsl:if>
 
-  <meta name="generator" content="DocBook {$DistroTitle} V{$VERSION}"/>
+  <xsl:call-template name="head.content.generator">
+    <xsl:with-param name="node" select="$node"/>
+  </xsl:call-template>
 
   <xsl:if test="$generate.meta.abstract != 0">
-    <xsl:variable name="info" select="(articleinfo
-                                      |bookinfo
-                                      |prefaceinfo
-                                      |chapterinfo
-                                      |appendixinfo
-                                      |sectioninfo
-                                      |sect1info
-                                      |sect2info
-                                      |sect3info
-                                      |sect4info
-                                      |sect5info
-                                      |referenceinfo
-                                      |refentryinfo
-                                      |partinfo
-                                      |info
-                                      |docinfo)[1]"/>
-    <xsl:if test="$info and $info/abstract">
-      <meta name="description">
-        <xsl:attribute name="content">
-          <xsl:for-each select="$info/abstract[1]/*">
-            <xsl:value-of select="normalize-space(.)"/>
-            <xsl:if test="position() &lt; last()">
-              <xsl:text> </xsl:text>
-            </xsl:if>
-          </xsl:for-each>
-        </xsl:attribute>
-      </meta>
-    </xsl:if>
+    <xsl:call-template name="head.content.abstract">
+      <xsl:with-param name="node" select="$node"/>
+    </xsl:call-template>
   </xsl:if>
 
   <xsl:if test="($draft.mode = 'yes' or
                 ($draft.mode = 'maybe' and
                 ancestor-or-self::*[@status][1]/@status = 'draft'))
                 and $draft.watermark.image != ''">
-    <style type="text/css"><xsl:text>
-body { background-image: url('</xsl:text>
-<xsl:value-of select="$draft.watermark.image"/><xsl:text>');
-       background-repeat: no-repeat;
-       background-position: top left;
-       /* The following properties make the watermark "fixed" on the page. */
-       /* I think that's just a bit too distracting for the reader... */
-       /* background-attachment: fixed; */
-       /* background-position: center center; */
-     }</xsl:text>
-    </style>
+    <xsl:call-template name="head.content.style">
+      <xsl:with-param name="node" select="$node"/>
+    </xsl:call-template>
   </xsl:if>
   <xsl:apply-templates select="." mode="head.keywords.content"/>
 </xsl:template>


[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]