Use Case 1: WebHelp XSLT-import extension point to add copyright information extracted

Suppose you want to customize the WebHelp Responsive main page by adding information about the legal rights associated with the book in the footer (for example, copyright dates and owner). This information is specified in the bookmap:

<bookrights>            
  <copyrfirst>
    <year>2002</year>
  </copyrfirst>
  <copyrlast>
    <year>2017</year>
  </copyrlast>
  <bookowner>
    <organization>SyncRO Soft SRL</organization>                
  </bookowner>
</bookrights>
Figure: Example: Copyright information added in the WebHelp footer

The XSLT stylesheet that generates the main page is located in: [DITA-OT DIR]\plugins\com.oxygenxml.webhelp.responsive\xsl\mainFiles\createMainPage.xsl. This XSLT stylesheet declares the copy_template mode that processes the main page template to expand its components. The main page template declares a component for the footer section that looks like this:


<div class=" footer-container text-center ">
  <whc:include_html href="${webhelp.fragment.footer}"/>
</div>

In the following example, the extension stylesheet will add a template that matches this component. It applies the default processing and adds the copyright information at the end.

<xsl:template match="*:div[contains(@class, 'footer-container')]" mode="copy_template">
  <!-- Apply the default processing -->
  <xsl:next-match/>
    
  <!-- Add a div containing the copyright information -->
  <div class="copyright_info">        
      <xsl:choose>
          <!-- Adds the start-end years if they are defined -->
          <xsl:when test="exists($toc/*:topicmeta/*:bookrights/*:copyrfirst) and 
                              exists($toc/*:topicmeta/*:bookrights/*:copyrlast)">
              <span class="copyright_years">
                 &#xa9;<xsl:value-of select="$toc/*:topicmeta/*:bookrights/*:copyrfirst"/>
                       -<xsl:value-of select="$toc/*:topicmeta/*:bookrights/*:copyrlast"/>
              </span>
          </xsl:when>
            
          <!-- Adds only the first year if last is not defined. -->
          <xsl:when test="exists($toc/*:topicmeta/*:bookrights/*:copyrfirst)">
              <span class="copyright_years">
                 &#xa9;<xsl:value-of select="$toc/*:topicmeta/*:bookrights/*:copyrfirst"/>
              </span>
          </xsl:when>
      </xsl:choose>
                    
        
      <xsl:if test="exists($toc/*:topicmeta/*:bookrights/*:bookowner/*:organization)">
          <span class="organization">
              <xsl:text> </xsl:text><xsl:value-of 
                   select="$toc/*:topicmeta/*:bookrights/*:bookowner/*:organization"/>
              <xsl:text>. All rights reserved.</xsl:text>
          </span>
      </xsl:if>
  </div>
</xsl:template>

You can implement this functionality with a WebHelp extension plugin that uses the com.oxygenxml.webhelp.xsl.createMainPage extension point. This extension point allows you to specify a customization stylesheet that will override the template described above.

To add this functionality as a DITA-OT plugin, follow these steps:

  1. In the [DITA-OT DIR]\plugins\ folder, create a folder for this plugin (for example, com.oxygenxml.webhelp.responsive.custom.footer).
  2. Create a plugin.xml file (in the folder you created in step 1) that specifies the extension point and your customization stylesheet. For example:
    <plugin id="com.oxygenxml.webhelp.responsive.custom.footer">
      <feature extension="com.oxygenxml.webhelp.xsl.createMainPage"
                  file="custom_mainpage.xsl"/>    
    </plugin>
  3. Create your customization stylesheet (for example, custom_mainpage.xsl), and edit it to override the template that produces the footer section:
    <xsl:template match="*:div[contains(@class, 'footer-container')]" mode="copy_template">
      <!-- Apply the default processing -->
      <xsl:next-match/>
    
      <!-- Add a div containing the copyright information -->
      <div class="copyright_info">        
          <xsl:choose>
              <!-- Adds the start-end years if they are defined -->
              <xsl:when test="exists($toc/*:topicmeta/*:bookrights/*:copyrfirst) and 
                            exists($toc/*:topicmeta/*:bookrights/*:copyrlast)">
                  <span class="copyright_years">
                     &#xa9;<xsl:value-of select="$toc/*:topicmeta/*:bookrights/*:copyrfirst"/>
                           -<xsl:value-of select="$toc/*:topicmeta/*:bookrights/*:copyrlast"/>
                  </span>
              </xsl:when>
                
              <!-- Adds only the first year if last is not defined. -->
              <xsl:when test="exists($toc/*:topicmeta/*:bookrights/*:copyrfirst)">
                  <span class="copyright_years">
                     &#xa9;<xsl:value-of select="$toc/*:topicmeta/*:bookrights/*:copyrfirst"/>
                  </span>
              </xsl:when>
          </xsl:choose>
                        
            
          <xsl:if test="exists($toc/*:topicmeta/*:bookrights/*:bookowner/*:organization)">
              <span class="organization">
                  <xsl:text> </xsl:text><xsl:value-of 
                       select="$toc/*:topicmeta/*:bookrights/*:bookowner/*:organization"/>
                  <xsl:text>. All rights reserved.</xsl:text>
              </span>
          </xsl:if>
      </div>
    </xsl:template>
  4. Use the Run DITA-OT Integrator transformation scenario found in the DITA Map section in the Configure Transformation Scenario(s) dialog box.
  5. In the [DITA-OT DIR]/bin directory of the DITA-OT, run one of the following scripts, depending on your operating system:
    • Windows: [DITA-OT DIR]/bin/dita.bat --install
    • Linux/Mac OS X: [DITA-OT DIR]/bin/dita.sh --install
  6. Run a DITA Map WebHelp Responsive transformation scenario to obtain the customized side TOC.
  7. Execute a DITA Map to WebHelp Responsive transformation script.