<xsl:template match="*[@revision]" mode="class.value">
        <xsl:value-of select="@revision"/>
    </xsl:template>

Thanks Bob, this seemed to work a little, but I think it only applies my class 
to elements that would have already had one in the first place. Paragraphs, 
spans, and who knows what else completely ignore it. Also, it deletes the class 
attribute that would have been there for the element.

So, I tried this:


<xsl:template match="*[@revision]" mode="class.value">
        <xsl:param name="class" select="concat(local-name(.), ' ', @revision)"/>
        <!-- permit customization of class value only -->
        <!-- Use element name by default -->
        <xsl:value-of select="$class"/>
    </xsl:template>

This I would have thought would concatenate the local-name and the revision, 
but it doesn’t seem to do anything. Maybe my xpath statement isn’t allowed in 
the xsl:param statement?

So, I again tried this xpath in the class.attribute template:


    <xsl:template match="*[@revision]" mode="class.attribute">
        <xsl:param name="class" select="local-name(.)"/>
        <!-- permit customization of class attributes -->
        <!-- Use element name by default -->
        <xsl:attribute name="class">
            <xsl:apply-templates select="." mode="class.value">
                <xsl:with-param name="class" select="concat($class, ' ', 
@revision)"/>
            </xsl:apply-templates>
        </xsl:attribute>
    </xsl:template>

This one keeps my original classes and just adds the @revision value (how come 
my xpath statement works now?), but again, it only works on elements that call 
the class.attribute mode, which many elements do not.

Furthermore, It seems like many of the templates ignore the class.value mode 
and just set the class to local-name(.) anyways (common.html.attributes does 
this for a lot of templates).

Any ideas on how to get this to work?

Eric

On 3/19/14, 9:44 AM, "Bob Stayton" 
<[email protected]<mailto:[email protected]>> wrote:

Hi Eric,
Take a look at this doc, which describes how to use mode="class.value"
to generate custom class attribute values:

http://www.sagehill.net/docbookxsl/HtmlCustomEx.html#CustomClassValues

In your case, you would want to add a custom template starting with:

<xsl:template match="*[@revision]" mode="class.value">

and instead of just outputting the $class template param, you could add
the value of @revision.

Bob Stayton
Sagehill Enterprises
[email protected]<mailto:[email protected]>

On 3/18/2014 4:54 PM, Nordlund, Eric wrote:
Hi, sorry if this is a repeat message, I sent it a few hours ago and I still 
haven’t seen it on the list yet.
—————
Hello, I have a user guide that I am adding new features to and I want to 
signal the new content with a background color (like a light green or something 
like that).

Since all of the content for this feature is profiled with the “revision” 
attribute, I thought a smart way to do this would be to send the revision value 
through as a class and then add a css rule for the class, such as:

.feature-x {
background-color: green;
}

I think I should modify this template here:

<xsl:template match="*" mode="common.html.attributes">
<xsl:param name="class" select="local-name(.)"/>
<xsl:param name="inherit" select="0"/>
<xsl:call-template name="generate.html.lang"/>
<xsl:call-template name="dir">
<xsl:with-param name="inherit" select="$inherit"/>
</xsl:call-template>
<xsl:apply-templates select="." mode="class.attribute">
<xsl:with-param name="class" select="$class"/>
</xsl:apply-templates>
<xsl:call-template name="generate.html.title"/>
</xsl:template>


But I can’t seem to figure out what to put there that works for profiled and 
non-profiled content without stripping the actual class value that should be 
there.


Am I thinking about this the right way, or is there an even easier wa to do 
what I want to accomplish?


Thanks a bunch in advance,


Eric


Reply via email to