Re: [Saxon-JS 2] Creating and referencing an element
Martynas Jusevičius <martynas-tyFqBaoSXPC1Z/[email protected]>
| Newsgroups | gmane.text.xml.saxon.help |
|---|---|
| Message-ID | <CAE35Vmx7Ut6F+LsUFpbEtO6a3mp9GoCJ3N0JKJw71j=dWBxc_g@mail.gmail.com> |
I take it back -- it looks like moving object creation after the <xsl:result-document> did work after all :) On Sun, Aug 30, 2020 at 12:01 AM Martynas Jusevičius <[email protected]> wrote: > > Hi, > > with Saxon-CE I used this kind of approach within <xsl:result-document>: > - output a <div> element with ID > - look it up by ID using document.getElementById() > - pass it to Google Maps object constructor > > The same code doesn't work with Saxon-JS -- I get "Map: Expected > mapDiv of type Element but was passed null." > > I guess it only worked because of the <ixsl:schedule-action wait="0"> > (see the Saxon-CE code below). > > The only relevant mention I could find in the documentation is this: > > Saxon-CE implemented a "pending update list" so that HTML page > modifications such as xsl:result-document and ixsl:set-attribute were > deferred until the end of the current transformation phase. This is > not implemented in this release of Saxon-JS. > > Not sure exactly what it means -- that <ixsl:schedule-action wait="0"> > should not be required anymore? > > I tried moving the object creation after the <xsl:result-document>, > but that didn't help -- no error but the map object is left undefined > (with or without <ixsl:schedule-action wait="0">). > > What is the solution here? > > === Code === > > <xsl:template match="*[@id = 'container-pane']/div/ul[@class = 'nav > nav-tabs']/li/a" mode="ixsl:onclick"> > <xsl:result-document href="?." method="ixsl:replace-content"> > <xsl:call-template name="container-mode"/> > </xsl:result-document> > </xsl:template> > > <xsl:template name="container-mode"> > <xsl:param name="canvas-id" select="'map-canvas'" as="xs:string"/> > > <div id="{$canvas-id}"></div> > > <ixsl:schedule-action wait="0"> > <xsl:call-template name="create-google-map"> > <xsl:with-param name="map" > select="ac:create-map($canvas-id, 56, 10, 4)"/> > </xsl:call-template> > </ixsl:schedule-action> > </xsl:template> > > <xsl:template name="create-google-map"> > <xsl:param name="map"/> > > <ixsl:set-property name="map" select="$map" > object="ixsl:get(ixsl:window(), 'LinkedDataHub')"/> > </xsl:template> > > <xsl:function name="ac:create-map"> > <xsl:param name="id" as="xs:string"/> > <xsl:param name="lat" as="xs:float"/> > <xsl:param name="lng" as="xs:float"/> > <xsl:param name="zoom" as="xs:integer"/> > > <xsl:variable name="js-statement" as="element()"> > <root statement="new > google.maps.Map(document.getElementById('{$id}'), {{ center: new > google.maps.LatLng({$lat}, {$lng}), zoom: {$zoom} }})"/> > </xsl:variable> > <xsl:sequence select="ixsl:eval(string($js-statement/@statement))"/> > </xsl:function> > > > Martynas _______________________________________________ saxon-help mailing list archived at http://saxon.markmail.org/ [email protected] https://lists.sourceforge.net/lists/listinfo/saxon-help