I'm working on converting from XML to Vue.js templates.
However, I ran into trouble when I tried to create Vuetify's v-tooltip
component.
This XSLT code:
<xsl:element name="v-tooltip"> <xsl:attribute name="bottom"/> <xsl:element name="template"> <xsl:attribute name="v-slot:activator">{ on , attrs}</xsl:attribute> <xsl:element name="v-icon"> <xsl:attribute name="v-bind">attrs</xsl:attribute> <xsl:attribute name="v-on">on</xsl:attribute> mdi-home </xsl:element> </xsl:element> <xsl:element name="span">ToolTip</xsl:element> </xsl:element>
Estimated generation:
<v-tooltip bottom> <template v-slot:activator="{ on, attrs }"> <v-icon v-bind="attrs" v-on="on" > mdi-home </v-icon> </template> <span>Tooltip</span> </v-tooltip>
But it causes an error due to colon in <xsl:attribute name="v-slot:activator">
When I remove the colon like <xsl:attribute name="v-slotactivator">
I confirm that the XSLT transformation occurs, so the only cause of the error is definitely the colon.
Several other articles point out using variant inserts like <xsl:attribute name="v-slot:activator">
:activator<xsl:text> or
<xs l :text disable output escape="yes" ">v-slot:activator<xsl:text>, or
name ="{concat('v-slot',':','activator')}", none of them work.
Thanks,
Actually, I kind of figured it out on my own, although this is more of a workaround.
I use XSLTProcessor in JS to generate Vue.js code. By using this class I can get the DOM as the conversion result. I managed to manipulate DOM after XSLT transformation.
This is what I did:
First, in the XSLT code, I added an
id
attribute with a value ofvslot
(for example) to thetemplate
element. In short, I replaced<xsl:attribute name="v-slot:activator">{ on , attrs}</xsl:attribute>
with<xsl: attribute name="id">vslot</xsl:attribute >
.Secondly, in the JS code, I changed the attribute and value using the
setAttribute()
method with theid
value set in the XSLT (andremoveAttribute()
method and remove theid
attribute) as follows:And, voila!
v-icon
appears on the browser andv-tooltip
is working!