[yelp-xsl] [xslt/mallard] Support for Mallard Facets extension



commit 8ae6cd6b99c5b25387097176ea2bcb19daf0817d
Author: Shaun McCance <shaunm gnome org>
Date:   Thu Dec 16 16:53:06 2010 -0500

    [xslt/mallard] Support for Mallard Facets extension

 xslt/mallard/common/mal-link.xsl      |  122 ++++++++++++++++++++---
 xslt/mallard/html/Makefile.am         |    1 +
 xslt/mallard/html/mal2html-facets.xsl |  173 +++++++++++++++++++++++++++++++++
 xslt/mallard/html/mal2html-page.xsl   |   97 ++++++++++++++-----
 xslt/mallard/html/mal2xhtml.xsl       |    1 +
 5 files changed, 355 insertions(+), 39 deletions(-)
---
diff --git a/xslt/mallard/common/mal-link.xsl b/xslt/mallard/common/mal-link.xsl
index b762d02..559199d 100644
--- a/xslt/mallard/common/mal-link.xsl
+++ b/xslt/mallard/common/mal-link.xsl
@@ -17,18 +17,19 @@ Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
 -->
 
 <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
-                xmlns:cache="http://projectmallard.org/cache/1.0/";
                 xmlns:mal="http://projectmallard.org/1.0/";
+                xmlns:cache="http://projectmallard.org/cache/1.0/";
+                xmlns:facet="http://projectmallard.org/facet/1.0/";
                 xmlns:e="http://projectmallard.org/experimental/";
                 xmlns:exsl="http://exslt.org/common";
                 xmlns:str="http://exslt.org/strings";
-                exclude-result-prefixes="mal e str"
+                exclude-result-prefixes="mal cache facet e exsl str"
                 version="1.0">
 
 <!--!!==========================================================================
 Mallard Links
 Common linking utilities for Mallard documents.
-:Revision:version="1.0" date="2010-01-02"
+:Revision:version="1.0" date="2010-01-02" status="final"
 
 This stylesheets contains various utilities for handling links in Mallard
 documents.  The templates in this stylesheet make it easier to handle the
@@ -40,7 +41,7 @@ linking systems.
 <!--@@==========================================================================
 mal.cache.file
 The location of the cache file.
-:Revision:version="1.0" date="2010-01-02"
+:Revision:version="1.0" date="2010-01-02" status="final"
 
 In order to locate and process links between pages, this stylesheet requires
 a Mallard cache file.  Use this parameter to pass the path to a valid cache
@@ -52,7 +53,7 @@ file.
 <!--@@==========================================================================
 mal.cache
 The cache document as a node set.
-:Revision:version="1.0" date="2010-01-02"
+:Revision:version="1.0" date="2010-01-02" status="final"
 
 This parameter points to the root #{cache:cache} element of a Mallard cache
 document.  By default, it selects the root element from the file provided in
@@ -73,6 +74,14 @@ mal.cache.key
          use="concat(@type, ':', @xref)"/>
 
 
+<!--============================================================================
+mal.facet.all.key
+-->
+<xsl:key name="mal.facet.all.key"
+         match="mal:page[mal:info/facet:tag] | mal:section[mal:info/facet:tag]"
+         use="''"/>
+
+
 <!--@@==========================================================================
 mal.link.extension
 The filename extension for output files.
@@ -97,7 +106,7 @@ some Mallard extension formats.
 <!--**==========================================================================
 mal.link.linkid
 Output the fully qualified link ID for a page or section.
-:Revision:version="1.0" date="2010-01-02"
+:Revision:version="1.0" date="2010-01-02" status="final"
 $node: The #{page} or #{section} element to generate a link ID for.
 
 This template outputs the fully qualified link ID for a page or section.  For
@@ -128,7 +137,7 @@ template or *{mal.link.xref.linkid}.
 <!--**==========================================================================
 mal.link.xref.linkid
 Output the fully qualified link ID for an #{xref} attribute.
-:Revision:version="1.0" date="2010-01-02"
+:Revision:version="1.0" date="2010-01-02" status="final"
 $node: The element containing an #{xref} attribute.
 $xref: The #{xref} value to generate a link ID from.
 
@@ -151,7 +160,7 @@ See *{mal.link.linkid} for more on link IDs.
 <!--**==========================================================================
 mal.link.content
 Output the content for a #{link} element.
-:Revision:version="1.0" date="2010-01-02"
+:Revision:version="1.0" date="2010-01-02" status="final"
 $node: The #{link} or other element creating the link.
 $xref: The #{xref} attribute of ${node}.
 $href: The #{href} attribute of ${node}.
@@ -212,7 +221,7 @@ page or section cannot be found, ${xref} is used as the text content.
 <!--%%==========================================================================
 mal.link.content.mode
 Output the content for a link from the contents of a #{title} element.
-:Revision:version="1.0" date="2010-01-02"
+:Revision:version="1.0" date="2010-01-02" status="final"
 
 This mode is applied to the contents of a #{title} element by *{mal.link.content}.
 By default, it returns the string value of its input.  Stylesheets that use
@@ -226,7 +235,7 @@ By default, it returns the string value of its input.  Stylesheets that use
 <!--**==========================================================================
 mal.link.target
 Output the target URL for a #{link} or other linking element.
-:Revision:version="1.0" date="2010-01-02"
+:Revision:version="1.0" date="2010-01-02" status="final"
 $node: The #{link} or other element creating the link.
 $xref: The #{xref} attribute of ${node}.
 $href: The #{href} attribute of ${node}.
@@ -270,7 +279,7 @@ Otherwise, the link will point to ${href}.
 <!--**==========================================================================
 mal.link.tooltip
 Output the tooltip for a #{link} or other linking element.
-:Revision:version="1.0" date="2010-01-02"
+:Revision:version="1.0" date="2010-01-02" status="final"
 $node: The #{link} or other element creating the link.
 $xref: The #{xref} attribute of ${node}.
 $href: The #{href} attribute of ${node}.
@@ -304,7 +313,7 @@ tooltip for #{mailto:} URLs in ${href}.
 <!--**==========================================================================
 mal.link.guidelinks
 Output the guide links for a page or section.
-:Revision:version="1.0" date="2010-03-19"
+:Revision:version="1.0" date="2010-03-19" status="final"
 $node: The #{page} or #{section} element to generate links for.
 
 This template outputs all the guide links for a page or section, whether
@@ -365,7 +374,7 @@ The output is a result tree fragment.  To use these results, call
 <!--**==========================================================================
 mal.link.topiclinks
 Output the topic links for a page or section.
-:Revision:version="1.0" date="2010-03-19"
+:Revision:version="1.0" date="2010-03-19" status="final"
 $node: The #{page} or #{section} element to generate links for.
 
 This template outputs all the topic links for a guide page or section, whether
@@ -522,7 +531,7 @@ The output is a result tree fragment.  To use these results, call
 <!--**==========================================================================
 mal.link.seealsolinks
 Output the see-also links for a page or section.
-:Revision:version="1.0" date="2010-03-19"
+:Revision:version="1.0" date="2010-03-19" status="final"
 $node: The #{page} or #{section} element to generate links for.
 
 This template outputs all the see-also links for a page or section, whether
@@ -679,4 +688,89 @@ FIXME:
   </xsl:choose>
 </xsl:template>
 
+
+<!--**==========================================================================
+mal.link.facetlinks
+Output the facet links for a facets page or section.
+:Revision:version="1.0" date="2010-12-16" status="final"
+$node: The #{page} or #{section} element to generate links for.
+
+This template outputs all the facet links for facets page or section. Links are
+output for each page or section that matches all #{facet:match} elements from
+${node}, excluding those which will be included in descendant facets nodes. It
+outputs each of the links as a #{link} element within the Mallard namespace.
+Each #{link} element has an #{xref} attribute pointing to the target page
+or section.
+
+Each #{link} element contains a #{title} with #{type="sort"} providing the
+sort title of the target page or section.  The results are not sorted when
+returned from this template.  Use #{xsl:sort} on the sort titles to sort
+the results.
+
+Each #{link} element contains a copy of all the #{facet:tag} elements from
+the #{info} element of the target page or section.
+
+The output is a result tree fragment.  To use these results, call
+#{exsl:node-set} on them.
+-->
+<xsl:template name="mal.link.facetlinks">
+  <xsl:param name="node" select="."/>
+  <xsl:if test="$node/mal:info/facet:match">
+    <xsl:for-each select="$mal.cache">
+      <xsl:for-each select="key('mal.facet.all.key', '')">
+        <xsl:variable name="fnode" select="."/>
+        <xsl:variable name="linkid">
+          <xsl:call-template name="mal.link.linkid">
+            <xsl:with-param name="node" select="$fnode"/>
+          </xsl:call-template>
+        </xsl:variable>
+        <xsl:variable name="include">
+          <xsl:for-each select="$node/ancestor-or-self::*/mal:info/facet:match">
+            <xsl:variable name="match" select="."/>
+            <xsl:choose>
+              <xsl:when test="@values">
+                <xsl:if test="not(str:split($fnode/mal:info/facet:tag[ key = $match/@key]/@values)
+                              = str:split($match/@values))">
+                  <xsl:text>x</xsl:text>
+                </xsl:if>
+              </xsl:when>
+              <xsl:otherwise>
+                <xsl:if test="not($fnode/mal:info/facet:tag[ key = $match/@key])">
+                  <xsl:text>x</xsl:text>
+                </xsl:if>
+              </xsl:otherwise>
+            </xsl:choose>
+          </xsl:for-each>
+        </xsl:variable>
+        <xsl:variable name="exclude">
+          <xsl:for-each select="$node//mal:section/mal:info/facet:match">
+            <xsl:variable name="match" select="."/>
+            <xsl:choose>
+              <xsl:when test="@values">
+                <xsl:if test="str:split($fnode/mal:info/facet:tag[ key = $match/@key]/@values)
+                              = str:split($match/@values)">
+                  <xsl:text>x</xsl:text>
+                </xsl:if>
+              </xsl:when>
+              <xsl:otherwise>
+                <xsl:if test="$fnode/mal:info/facet:tag[ key = $match/@key]">
+                  <xsl:text>x</xsl:text>
+                </xsl:if>
+              </xsl:otherwise>
+            </xsl:choose>
+          </xsl:for-each>
+        </xsl:variable>
+        <xsl:if test="not(contains($include, 'x')) and not(contains($exclude, 'x'))">
+          <mal:link xref="{$linkid}">
+            <mal:title type="sort">
+              <xsl:value-of select="normalize-space($fnode/mal:info/mal:title[ type = 'sort'][1])"/>
+            </mal:title>
+            <xsl:copy-of select="mal:info/facet:tag"/>
+          </mal:link>
+        </xsl:if>
+      </xsl:for-each>
+    </xsl:for-each>
+  </xsl:if>
+</xsl:template>
+
 </xsl:stylesheet>
diff --git a/xslt/mallard/html/Makefile.am b/xslt/mallard/html/Makefile.am
index f1ff895..07c2525 100644
--- a/xslt/mallard/html/Makefile.am
+++ b/xslt/mallard/html/Makefile.am
@@ -2,6 +2,7 @@ xsldir=$(datadir)/yelp-xsl/xslt/mallard/html
 
 xsl_DATA =				\
 	mal2html-block.xsl		\
+	mal2html-facets.xsl		\
 	mal2html-inline.xsl		\
 	mal2html-list.xsl		\
 	mal2html-media.xsl		\
diff --git a/xslt/mallard/html/mal2html-facets.xsl b/xslt/mallard/html/mal2html-facets.xsl
new file mode 100644
index 0000000..7ae06a0
--- /dev/null
+++ b/xslt/mallard/html/mal2html-facets.xsl
@@ -0,0 +1,173 @@
+<?xml version='1.0' encoding='UTF-8'?><!-- -*- indent-tabs-mode: nil -*- -->
+<!--
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free
+Software Foundation; either version 2 of the License, or (at your option) any
+later version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
+details.
+
+You should have received a copy of the GNU Lesser General Public License
+along with this program; see the file COPYING.LGPL.  If not, write to the
+Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+02111-1307, USA.
+-->
+
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
+                xmlns:mal="http://projectmallard.org/1.0/";
+                xmlns:cache="http://projectmallard.org/cache/1.0/";
+                xmlns:facet="http://projectmallard.org/facet/1.0/";
+                xmlns:exsl="http://exslt.org/common";
+                xmlns:str="http://exslt.org/strings";
+                xmlns="http://www.w3.org/1999/xhtml";
+                exclude-result-prefixes="mal cache facet exsl str"
+                version="1.0">
+
+<!--!!==========================================================================
+Mallard to HTML - Facets
+Support the Mallard Facets extension.
+
+This stylesheet contains templates and supporting JavaScript for the Mallard
+Facets extension.
+-->
+
+<!--**==========================================================================
+mal2html.facets.controls
+Output the controls to filter faceted links.
+$node: The facets #{page} or #{section} to generate controls for.
+
+REMARK: Describe this template
+-->
+<xsl:template name="mal2html.facets.controls">
+  <xsl:param name="node" select="."/>
+  <xsl:variable name="choices" select="$node/mal:info/facet:choice"/>
+  <xsl:if test="count($choices) &gt; 0">
+    <div class="facets">
+      <xsl:for-each select="$choices">
+        <div class="facet">
+          <div class="title">
+            <xsl:apply-templates mode="mal2html.inline.mode" select="facet:title/node()"/>
+          </div>
+          <ul>
+            <xsl:for-each select="facet:case">
+              <li>
+                <label>
+                  <input type="checkbox" checked="checked" class="facet">
+                    <xsl:attribute name="data-facet-key">
+                      <xsl:value-of select="../@key"/>
+                    </xsl:attribute>
+                    <xsl:attribute name="data-facet-values">
+                      <xsl:value-of select="@values"/>
+                    </xsl:attribute>
+                  </input>
+                  <span>
+                    <xsl:apply-templates mode="mal2html.inline.mode"/>
+                  </span>
+                </label>
+              </li>
+            </xsl:for-each>
+          </ul>
+        </div>
+      </xsl:for-each>
+    </div>
+  </xsl:if>
+</xsl:template>
+
+
+<!--**==========================================================================
+mal2html.facets.links
+Output the links for a facets node.
+:Revision:version="1.0" date="2010-12-16" status="final"
+$node: The facets #{page} or #{section} element to generate links for.
+
+This template outputs links for a facets node. It gets the links from
+*{mal.link.facetlinks}, sorts them, and outputs HTML #{a} elements for each
+link. Each #{a} element has data attribute for each facet tag in ${node} in
+the form of #{data-facet-KEY="VALUES"}, where #{KEY} is the key of the facet
+tag and VALUES is the values.
+-->
+<xsl:template name="mal2html.facets.links">
+  <xsl:param name="node" select="."/>
+  <div>
+    <xsl:variable name="facetlinks">
+      <xsl:call-template name="mal.link.facetlinks">
+        <xsl:with-param name="node" select="$node"/>
+      </xsl:call-template>
+    </xsl:variable>
+    <xsl:for-each select="exsl:node-set($facetlinks)/mal:link">
+      <xsl:sort select="mal:title[ type = 'sort']"/>
+      <xsl:variable name="link" select="."/>
+      <xsl:variable name="xref" select="@xref"/>
+      <xsl:for-each select="$mal.cache">
+        <xsl:call-template name="mal2html.page.linkdiv">
+          <xsl:with-param name="source" select="$node"/>
+          <xsl:with-param name="target" select="key('mal.cache.key', $xref)"/>
+          <xsl:with-param name="attrs">
+            <a>
+              <xsl:for-each select="$link/facet:tag">
+                <xsl:attribute name="data-facet-{ key}">
+                  <xsl:value-of select="@values"/>
+                </xsl:attribute>
+              </xsl:for-each>
+            </a>
+          </xsl:with-param>
+        </xsl:call-template>
+      </xsl:for-each>
+    </xsl:for-each>
+  </div>
+</xsl:template>
+
+
+<!--**==========================================================================
+mal2html.facets.js
+
+REMARK: FIXME
+-->
+<xsl:template name="mal2html.facets.js">
+  <script type="text/javascript" language="javascript"><xsl:text><![CDATA[
+$(document).ready(function () {
+  $('input.facet').change(function () {
+    var control = $(this);
+    var content = control.closest('div.body,div.sect');
+    content.find('a').each(function () {
+      var link = $(this);
+      var facets = link.parents('div.body,div.sect').children('div.contents').children('div.facets').children('div.facet');
+      var visible = true;
+      for (var i = 0; i < facets.length; i++) {
+        var facet = facets.slice(i, i + 1);
+        var facetvis = false;
+        var inputs = facet.find('input.facet:checked');
+        for (var j = 0; j < inputs.length; j++) {
+          var input = inputs.slice(j, j + 1);
+          var inputvis = false;
+          var key = input.attr('data-facet-key');
+          var values = input.attr('data-facet-values').split(' ');
+          for (var k = 0; k < values.length; k++) {
+            if (link.is('a[data-facet-' + key + ' ~= "' + values[k] + '"]')) {
+              inputvis = true;
+              break;
+            }
+          }
+          if (inputvis) {
+            facetvis = true;
+            break;
+          }
+        }
+        if (!facetvis) {
+          visible = false;
+          break;
+        }
+      }
+      if (!visible)
+        link.hide();
+      else
+        link.show();
+    });
+  });
+});
+]]></xsl:text></script>
+
+</xsl:stylesheet>
diff --git a/xslt/mallard/html/mal2html-page.xsl b/xslt/mallard/html/mal2html-page.xsl
index 32ec2dc..2de6b9d 100644
--- a/xslt/mallard/html/mal2html-page.xsl
+++ b/xslt/mallard/html/mal2html-page.xsl
@@ -21,8 +21,7 @@ Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
                 xmlns:e="http://projectmallard.org/experimental/";
                 xmlns:exsl="http://exslt.org/common";
                 xmlns="http://www.w3.org/1999/xhtml";
-                extension-element-prefixes="exsl"
-                exclude-result-prefixes="mal e"
+                exclude-result-prefixes="mal e exsl"
                 version="1.0">
 
 <!--!!==========================================================================
@@ -71,15 +70,17 @@ Each copyright is output in a nested #{div} element with #{class="copyright"}.
 
 <!--**==========================================================================
 mal2html.page.linkdiv
-Outputs an automatic link block from a guide to a page
-$source: The #{page} or #{section} element containing the link
-$target: The element from the cache file of the page being linked to
+Output an automatic link block from a guide to a page.
+$source: The #{page} or #{section} element containing the link.
+$target: The element from the cache file of the page being linked to.
+$attrs: A set of extra data attributes to add to the #{a} element.
 
 REMARK: Describe this template
 -->
 <xsl:template name="mal2html.page.linkdiv">
   <xsl:param name="source" select="."/>
   <xsl:param name="target"/>
+  <xsl:param name="attrs"/>
   <a>
     <xsl:attribute name="href">
       <xsl:call-template name="mal.link.target">
@@ -87,6 +88,7 @@ REMARK: Describe this template
         <xsl:with-param name="xref" select="$target/@id"/>
       </xsl:call-template>
     </xsl:attribute>
+    <xsl:copy-of select="exsl:node-set($attrs)/*/@*"/>
     <div class="linkdiv">
       <div class="title">
         <span class="title">
@@ -499,38 +501,48 @@ REMARK: Describe this template
 
 <!-- page | section -->
 <xsl:template match="mal:page | mal:section">
+  <xsl:variable name="type" select="/mal:page/@type"/>
   <xsl:variable name="topiclinks">
-    <xsl:call-template name="mal.link.topiclinks"/>
+    <xsl:if test="$type = 'guide'">
+      <xsl:call-template name="mal.link.topiclinks"/>
+    </xsl:if>
   </xsl:variable>
   <xsl:variable name="topicnodes" select="exsl:node-set($topiclinks)/*"/>
   <xsl:variable name="allgroups">
-    <xsl:text> </xsl:text>
-    <xsl:for-each select="e:links[ type = 'topic']">
-      <xsl:choose>
-        <xsl:when test="@groups">
-          <xsl:value-of select="@groups"/>
-        </xsl:when>
-        <xsl:otherwise>
-          <xsl:text>#default</xsl:text>
-        </xsl:otherwise>
-      </xsl:choose>
+    <xsl:if test="$type = 'guide'">
       <xsl:text> </xsl:text>
-    </xsl:for-each>
+      <xsl:for-each select="e:links[ type = 'topic']">
+        <xsl:choose>
+          <xsl:when test="@groups">
+            <xsl:value-of select="@groups"/>
+          </xsl:when>
+          <xsl:otherwise>
+            <xsl:text>#default</xsl:text>
+          </xsl:otherwise>
+        </xsl:choose>
+        <xsl:text> </xsl:text>
+      </xsl:for-each>
+    </xsl:if>
   </xsl:variable>
   <div class="hgroup">
     <xsl:apply-templates mode="mal2html.title.mode" select="mal:title"/>
     <xsl:apply-templates mode="mal2html.title.mode" select="mal:subtitle"/>
   </div>
   <div class="contents">
+    <xsl:if test="$type = 'facets'">
+      <xsl:call-template name="mal2html.facets.controls"/>
+    </xsl:if>
     <xsl:for-each
         select="*[not(self::mal:section or self::mal:title or self::mal:subtitle)]">
       <xsl:choose>
         <xsl:when test="preceding-sibling::mal:section"/>
         <xsl:when test="self::e:links[ type = 'topic']">
-          <xsl:apply-templates select=".">
-            <xsl:with-param name="allgroups" select="$allgroups"/>
-            <xsl:with-param name="links" select="$topicnodes"/>
-          </xsl:apply-templates>
+          <xsl:if test="$type = 'guide'">
+            <xsl:apply-templates select=".">
+              <xsl:with-param name="allgroups" select="$allgroups"/>
+              <xsl:with-param name="links" select="$topicnodes"/>
+            </xsl:apply-templates>
+          </xsl:if>
         </xsl:when>
         <xsl:when test="self::e:links">
           <xsl:apply-templates select="."/>
@@ -540,10 +552,15 @@ REMARK: Describe this template
         </xsl:otherwise>
       </xsl:choose>
     </xsl:for-each>
-    <xsl:if test="not(e:links[ type = 'topic'])">
-      <xsl:call-template name="mal2html.links.topic">
-        <xsl:with-param name="links" select="$topicnodes"/>
-      </xsl:call-template>
+    <xsl:if test="$type = 'guide'">
+      <xsl:if test="not(e:links[ type = 'topic'])">
+        <xsl:call-template name="mal2html.links.topic">
+          <xsl:with-param name="links" select="$topicnodes"/>
+        </xsl:call-template>
+      </xsl:if>
+    </xsl:if>
+    <xsl:if test="$type = 'facets'">
+      <xsl:call-template name="mal2html.facets.links"/>
     </xsl:if>
   </div>
   <xsl:apply-templates mode="mal2html.section.mode" select="mal:section"/>
@@ -833,6 +850,31 @@ span.hi {
   background-color: </xsl:text>
     <xsl:value-of select="$color.yellow_background"/><xsl:text>;
 }
+
+div.facets {
+  display: inline-block;
+  padding: 6px;
+  background-color: </xsl:text>
+    <xsl:value-of select="$color.yellow_background"/><xsl:text>;
+  border: solid 1px </xsl:text>
+    <xsl:value-of select="$color.blue_border"/><xsl:text>;
+} 
+div.facet {
+ vertical-align: top;
+  display: inline-block;
+  margin-top: 0;
+  margin-bottom: 1em;
+  margin-</xsl:text><xsl:value-of select="$right"/><xsl:text>: 1em;
+}
+div.facet div.title { margin: 0; }
+div.facet li {
+  margin: 0; padding: 0;
+  list-style-type: none;
+}
+div.facet input {
+  vertical-align: middle;
+  margin: 0;
+}
 </xsl:text>
 <xsl:if test="$mal2html.editor_mode">
 <xsl:text>
@@ -877,4 +919,9 @@ div.linkdiv div.desc {
 </xsl:if>
 </xsl:template>
 
+<!--%# html.js.mode -->
+<xsl:template mode="html.js.mode" match="mal:page">
+  <xsl:call-template name="mal2html.facets.js"/>
+</xsl:template>
+
 </xsl:stylesheet>
diff --git a/xslt/mallard/html/mal2xhtml.xsl b/xslt/mallard/html/mal2xhtml.xsl
index b15404d..5bebb6b 100644
--- a/xslt/mallard/html/mal2xhtml.xsl
+++ b/xslt/mallard/html/mal2xhtml.xsl
@@ -40,6 +40,7 @@ REMARK: Describe this module
 <xsl:param name="mal.link.extension" select="$html.extension"/>
 
 <xsl:include href="mal2html-block.xsl"/>
+<xsl:include href="mal2html-facets.xsl"/>
 <xsl:include href="mal2html-inline.xsl"/>
 <xsl:include href="mal2html-list.xsl"/>
 <xsl:include href="mal2html-media.xsl"/>



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