Feature #5142
openNew <ixsl:add-listener> instruction
0%
Description
Hi. I think there is a generic use case that shows up especially when integrating Saxon-JS with JS libraries. For example, with Google Maps one needs to use this to add an onlick
listener for a marker:
marker.addListener("click", () => {
infowindow.open({
anchor: marker,
map,
shouldFocus: false,
});
});
It requires a JS callback function, which is anonymous ()
in this case. I would like to use IXSL to handle the marker onclick
event instead.
The native IXSL way would be:
<xsl:template match="a[@class = 'marker']" mode="ixsl:onclick">
but the problem is that the DOM generated by Google Maps, including marker IDs or class names, cannot be relied upon. So the match pattern approach does not really work.
I propose a second, generalized mechanism to handle events using a new extension instruction <ixsl:add-listener>
. It could be used like this:
<ixsl:add-listener name="click" object="$marker">
<xsl:call-template name="onMarkerClick"/>
</ixsl:add-listener>
<xsl:template name="onMarkerClick" mode="ixsl:onclick">
<xsl:variable name="event" select="ixsl:event()"/> <!-- MapMouseEvent -->
<xsl:variable name="lat-lng" select="ixsl:get(ixsl:event(), 'latLng')"/>
...
</xsl:template>
If the native match
/mode
/ approach can be used instead, one could replace the name="onMarkerClick"
with mode="ixsl:onclick"
and the same template body should still work.
The <ixsl:add-listener>
call would translate to this pseudo-JS:
marker.addListener('click', (event) => { SaxonJS.callTemplate('onMarkerClick', event); });
Please register to edit this issue
Also available in: Atom PDF Tracking page