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: Re: [docbook-apps] Page X of Y in user.footer.navigation


Well, I never know how much information to give because list participants
have a wide range of experience with XSL.  8^)

Here is a sample customization of 'user.footer.content'.   The first three
variables are global (not inside a template), so they are computed once when
the stylesheet starts.

<!-- Create the chunk hierarchy -->
<xsl:variable name="mychunk.hierarchy">
  <xsl:if test="function-available('exsl:node-set')">
    <xsl:message>Computing chunks...</xsl:message>
    <xsl:apply-templates select="/*" mode="find.chunks"/>
  </xsl:if>
</xsl:variable>

<!-- Turn the chunk hierarchy into a node-set -->
<xsl:variable name="mychunks"
select="exsl:node-set($mychunk.hierarchy)//div"/>

<!-- Get the total number of chunks -->
<xsl:variable name="chunk.total" select="count($mychunks)"/>

<!-- Add a line to the footer -->
<xsl:template name="user.footer.content">

  <!-- Get the id of the current chunk -->
  <xsl:variable name="genid" select="generate-id()"/>

  <!-- Get the position of the current chunk.
       You have to switch contexts using xsl:for-each to
       get the position within the node-set. -->
  <xsl:variable name="X">
    <xsl:for-each select="$mychunks">
      <xsl:if test="@id = $genid">
        <xsl:value-of select="position()"/>
      </xsl:if>
    </xsl:for-each>
  </xsl:variable>

  <!-- Output the numbers -->
 <div class="nodecount">
    <xsl:text>Node </xsl:text>
    <xsl:value-of select="$X"/>
    <xsl:text> of </xsl:text>
    <xsl:value-of select="$chunk.total"/>
  </div>

</xsl:template>

I originally thought iterating over all the chunks using xsl:for-each would
slow things down, since it is done for each chunk.  But my tests show it
doesn't affect processing time much, even for a 400 chunk document.

Bob Stayton
Sagehill Enterprises
DocBook Consulting
bobs@sagehill.net


----- Original Message ----- 
From: "Diane Larin" <diane@inro.ca>
To: <docbook-apps@lists.oasis-open.org>
Sent: Thursday, March 31, 2005 4:32 PM
Subject: Re: [docbook-apps] Page X of Y in user.footer.navigation


> I had a look at the 'process-chunk-element' template but I find
> it quite cryptic (I don't have a lot of experience in writing/modifying
> XSL stylesheets). I was expecting that I was not the first one to have
> this need and that a "recipe" would exist :-(
>
> Diane Larin
> INRO
>
> On Wed, 30 Mar 2005, Bob Stayton wrote:
>
> > I think this could be done by borrowing some of the chunkfast code.
> It
> > precomputes a node-set of all the chunks.  Once you have that, you
> could
> > count the nodes to get Y, and figure out the position of the current
> chunk
> > in the node-set to get X.   Take a look at the first part of the
> template
> > named 'process-chunk-element' in html/chunk-code.xsl.  It shows how to
> > process nodes in the chunk node-set.
> >
> > Bob Stayton
> > Sagehill Enterprises
> > DocBook Consulting
> > bobs@sagehill.net
> >
> >
> > ----- Original Message ----- 
> > From: "Diane Larin" <diane@inro.ca>
> > To: <bobs@sagehill.net>
> > Cc: <diane@inro.ca>
> > Sent: Wednesday, March 30, 2005 7:06 AM
> > Subject: Re: [docbook-apps] Page X of Y in user.footer.navigation
> >
> >
> > > > I'm not sure I understand.  There are no page numbers in chunked
> HTML.
> > > > Do you mean to label the chunks with a sequence number X, with Y
> being
> > > > the total number of chunks?
> > >
> > > Exactly. This is for a tutorial where we want to be able to inform
> > > the user what remains to be done.
> > >
> > > Diane Larin
> > > INRO
>
>
>




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