Skip to content

Commit bad8a2c

Browse files
committed
Promise thunk refactoring
1 parent 09a4a90 commit bad8a2c

4 files changed

Lines changed: 159 additions & 65 deletions

File tree

src/main/webapp/static/com/atomgraph/linkeddatahub/xsl/bootstrap/2.3.2/client/block/chart.xsl

Lines changed: 104 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -203,7 +203,8 @@ exclude-result-prefixes="#all"
203203
</xsl:template>
204204

205205
<!-- render chart block -->
206-
<!-- <xsl:template match="*[@typeof = ('&ldh;ResultSetChart', '&ldh;GraphChart')][descendant::*[@property = '&spin;query'][@resource]][descendant::*[@property = '&ldh;chartType'][@resource]]" mode="ldh:RenderRow" priority="2"> prioritize above block.xsl
206+
207+
<xsl:template match="*[@typeof = ('&ldh;ResultSetChart', '&ldh;GraphChart')][descendant::*[@property = '&spin;query'][@resource]][descendant::*[@property = '&ldh;chartType'][@resource]]" mode="ldh:RenderRow" as="function(item()?) as map(*)" priority="2"> <!-- prioritize above block.xsl -->
207208
<xsl:param name="block" select="ancestor-or-self::div[contains-token(@class, 'block')][1]" as="element()"/>
208209
<xsl:param name="about" select="$block/@about" as="xs:anyURI"/>
209210
<xsl:param name="container" select="." as="element()"/>
@@ -240,6 +241,97 @@ exclude-result-prefixes="#all"
240241
<ixsl:set-style name="width" select="'66%'" object="."/>
241242
</xsl:for-each>
242243

244+
<xsl:variable name="child-thunk" as="function(map(*)) as item()*?">
245+
<xsl:apply-templates mode="#current"/>
246+
</xsl:variable>
247+
248+
<xsl:variable name="request-uri" select="ldh:href($ldt:base, ac:absolute-path(ldh:base-uri(.)), map{}, $query-uri)" as="xs:anyURI"/>
249+
<xsl:variable name="request" select="map{ 'method': 'GET', 'href': $request-uri, 'headers': map{ 'Accept': 'application/rdf+xml' } }" as="map(*)"/>
250+
<xsl:variable name="context" as="map(*)" select="
251+
map{
252+
'request': $request,
253+
'this': $about,
254+
'block': $block,
255+
'container': $container,
256+
'container-id': $container-id,
257+
'method': $method,
258+
'action': $action,
259+
'accept-charset': $accept-charset,
260+
'enctype': $enctype,
261+
'chart-type-id': $chart-type-id,
262+
'category-id': $category-id,
263+
'series-id': $series-id,
264+
'query-uri': $query-uri,
265+
'chart-type': $chart-type,
266+
'category': $category,
267+
'series': $series,
268+
'canvas-id': $canvas-id,
269+
'canvas-class': $canvas-class,
270+
'form-actions': $form-actions
271+
}"/>
272+
273+
<xsl:sequence select="
274+
ldh:load-block#4(
275+
$context,
276+
ldh:chart-self-thunk#1,
277+
$child-thunk,
278+
?
279+
)
280+
"/>
281+
</xsl:template>
282+
283+
<!-- this is the one thunk you hand to load-block#4 -->
284+
<xsl:function name="ldh:chart-self-thunk" as="item()*" ixsl:updating="yes">
285+
<xsl:param name="context" as="map(*)"/>
286+
<xsl:message>ldh:chart-self-thunk</xsl:message>
287+
<xsl:sequence select="
288+
ixsl:resolve($context)
289+
=> ixsl:then(ldh:render-chart#1) (: scaffold the chart UI :)
290+
=> ixsl:then(ldh:chart-query-thunk#1) (: first HTTP → query :)
291+
=> ixsl:then(ldh:chart-results-thunk#1) (: second HTTP → results :)
292+
"/>
293+
</xsl:function>
294+
295+
<!-- only the first HTTP → query‐response lives here -->
296+
<xsl:function name="ldh:chart-query-thunk" as="item()*" ixsl:updating="yes">
297+
<xsl:param name="context" as="map(*)"/>
298+
<xsl:message>ldh:chart-query-thunk</xsl:message>
299+
<xsl:sequence select="
300+
ixsl:http-request($context('request'))
301+
=> ixsl:then(ldh:rethread-response($context, ?))
302+
=> ixsl:then(ldh:handle-response#1)
303+
=> ixsl:then(ldh:chart-query-response#1)
304+
"/>
305+
</xsl:function>
306+
307+
<xsl:function name="ldh:chart-results-thunk" as="item()*" ixsl:updating="yes">
308+
<xsl:param name="context" as="map(*)"/>
309+
<xsl:message>ldh:chart-results-thunk</xsl:message>
310+
<xsl:sequence select="
311+
ixsl:http-request($context('request'))
312+
=> ixsl:then(ldh:rethread-response($context, ?))
313+
=> ixsl:then(ldh:handle-response#1)
314+
=> ixsl:then(ldh:chart-results-response#1)
315+
"/>
316+
</xsl:function>
317+
318+
<xsl:function name="ldh:render-chart" ixsl:updating="yes">
319+
<xsl:param name="context" as="map(*)"/>
320+
<xsl:variable name="container" select="$context('container')" as="element()"/>
321+
<xsl:variable name="method" select="$context('method')" as="xs:string"/>
322+
<xsl:variable name="action" select="$context('action')" as="xs:anyURI"/>
323+
<xsl:variable name="accept-charset" select="$context('accept-charset')" as="xs:string?"/>
324+
<xsl:variable name="enctype" select="$context('enctype')" as="xs:string?"/>
325+
<xsl:variable name="chart-type-id" select="$context('chart-type-id')" as="xs:string"/>
326+
<xsl:variable name="category-id" select="$context('category-id')" as="xs:string"/>
327+
<xsl:variable name="series-id" select="$context('series-id')" as="xs:string"/>
328+
<xsl:variable name="chart-type" select="$context('chart-type')" as="xs:anyURI?"/>
329+
<xsl:variable name="canvas-id" select="$context('canvas-id')" as="xs:string?"/>
330+
<xsl:variable name="canvas-class" select="$context('canvas-class')" as="xs:string?"/>
331+
<xsl:variable name="form-actions" select="$context('form-actions')" as="element()?"/>
332+
333+
<xsl:message>ldh:render-chart</xsl:message>
334+
243335
<xsl:for-each select="$container//div[contains-token(@class, 'main')]">
244336
<xsl:variable name="header" select="./div/div[@class = 'well']" as="element()"/>
245337

@@ -262,7 +354,7 @@ exclude-result-prefixes="#all"
262354
<xsl:apply-templates select="key('resources', '&ldh;chartType', document(ac:document-uri('&ldh;')))" mode="ac:label"/>
263355
</xsl:value-of>
264356
</label>
265-
TO-DO: replace with xsl:apply-templates on ac:Chart subclasses as in imports/ldh.xsl
357+
<!-- TO-DO: replace with xsl:apply-templates on ac:Chart subclasses as in imports/ldh.xsl -->
266358
<select id="{$chart-type-id}" name="ou" class="input-medium chart-type">
267359
<option value="&ac;Table">
268360
<xsl:if test="$chart-type = '&ac;Table'">
@@ -325,28 +417,9 @@ exclude-result-prefixes="#all"
325417
</form>
326418
</xsl:result-document>
327419
</xsl:for-each>
328-
329-
<xsl:variable name="request-uri" select="ldh:href($ldt:base, ac:absolute-path(ldh:base-uri(.)), map{}, $query-uri)" as="xs:anyURI"/>
330-
<xsl:variable name="request" select="map{ 'method': 'GET', 'href': $request-uri, 'headers': map{ 'Accept': 'application/rdf+xml' } }" as="map(*)"/>
331-
<xsl:variable name="context" as="map(*)" select="
332-
map{
333-
'request': $request,
334-
'this': $about,
335-
'block': $block,
336-
'container': $container,
337-
'container-id': $container-id,
338-
'query-uri': $query-uri,
339-
'chart-type': $chart-type,
340-
'category': $category,
341-
'series': $series,
342-
'canvas-id': $canvas-id
343-
}"/>
344-
<ixsl:promise select="ixsl:http-request($context('request')) =>
345-
ixsl:then(ldh:rethread-response($context, ?)) =>
346-
ixsl:then(ldh:handle-response#1) =>
347-
ixsl:then(ldh:chart-query-response#1)"
348-
on-failure="ldh:promise-failure#1"/>
349-
</xsl:template>-->
420+
421+
<xsl:sequence select="$context"/>
422+
</xsl:function>
350423

351424
<!-- EVENT LISTENERS -->
352425

@@ -576,6 +649,8 @@ exclude-result-prefixes="#all"
576649
<xsl:variable name="series" select="$context('series')" as="xs:string*"/>
577650
<xsl:variable name="canvas-id" select="$context('canvas-id')" as="xs:string"/>
578651

652+
<xsl:message>ldh:chart-query-response</xsl:message>
653+
579654
<xsl:for-each select="$response">
580655
<xsl:variable name="response" select="." as="map(*)"/>
581656
<xsl:choose>
@@ -597,7 +672,7 @@ exclude-result-prefixes="#all"
597672
</xsl:for-each>
598673

599674
<xsl:variable name="request" select="map{ 'method': 'GET', 'href': $request-uri, 'headers': map{ 'Accept': 'application/sparql-results+xml,application/rdf+xml;q=0.9' } }" as="map(*)"/>
600-
<xsl:variable name="context" as="map(*)" select="
675+
<xsl:sequence select="
601676
map{
602677
'request': $request,
603678
'endpoint': $endpoint,
@@ -613,11 +688,6 @@ exclude-result-prefixes="#all"
613688
'show-chart-save': false(),
614689
'results-container-id': $container-id || '-query-results'
615690
}"/>
616-
<ixsl:promise select="ixsl:http-request($context('request')) =>
617-
ixsl:then(ldh:rethread-response($context, ?)) =>
618-
ixsl:then(ldh:handle-response#1) =>
619-
ixsl:then(ldh:chart-results-response#1)"
620-
on-failure="ldh:promise-failure#1"/>
621691
</xsl:for-each>
622692
</xsl:when>
623693
<xsl:otherwise>
@@ -639,11 +709,11 @@ exclude-result-prefixes="#all"
639709
</div>
640710
</xsl:result-document>
641711
</xsl:for-each>
712+
713+
<xsl:sequence select="$context"/>
642714
</xsl:otherwise>
643715
</xsl:choose>
644716
</xsl:for-each>
645-
646-
<xsl:sequence select="$context"/>
647717
</xsl:function>
648718

649719
<!-- SPARQL results response -->
@@ -664,6 +734,8 @@ exclude-result-prefixes="#all"
664734
<xsl:variable name="show-chart-save" select="$context('show-chart-save')" as="xs:boolean"/>
665735
<xsl:variable name="results-container-id" select="$context('results-container-id')" as="xs:string"/>
666736

737+
<xsl:message>ldh:chart-results-response</xsl:message>
738+
667739
<xsl:for-each select="$response">
668740
<ixsl:set-style name="cursor" select="'default'" object="ixsl:page()//body"/>
669741

@@ -694,23 +766,9 @@ exclude-result-prefixes="#all"
694766
<xsl:with-param name="category" select="$category"/>
695767
<xsl:with-param name="series" select="$series"/>
696768
</xsl:call-template>
697-
698-
<!-- hide the progress bar - either of this block (if it contains a progress bar) or of the parent block -->
699-
<xsl:for-each select="($block//div[contains-token(@class, 'span12')][contains-token(@class, 'progress')][contains-token(@class, 'active')], $block/ancestor::div[contains-token(@class, 'block')]//div[contains-token(@class, 'span12')][contains-token(@class, 'progress')][contains-token(@class, 'active')])[1]">
700-
<xsl:sequence select="ixsl:call(ixsl:get(., 'classList'), 'toggle', [ 'progress', false() ])[current-date() lt xs:date('2000-01-01')]"/>
701-
<xsl:sequence select="ixsl:call(ixsl:get(., 'classList'), 'toggle', [ 'progress-striped', false() ])[current-date() lt xs:date('2000-01-01')]"/>
702-
<xsl:sequence select="ixsl:call(ixsl:get(., 'classList'), 'toggle', [ 'active', false() ])[current-date() lt xs:date('2000-01-01')]"/>
703-
</xsl:for-each>
704769
</xsl:for-each>
705770
</xsl:when>
706771
<xsl:otherwise>
707-
<!-- hide the progress bar - either of this block (if it contains a progress bar) or of the parent block -->
708-
<xsl:for-each select="($block//div[contains-token(@class, 'span12')][contains-token(@class, 'progress')][contains-token(@class, 'active')], $block/ancestor::div[contains-token(@class, 'block')]//div[contains-token(@class, 'span12')][contains-token(@class, 'progress')][contains-token(@class, 'active')])[1]">
709-
<xsl:sequence select="ixsl:call(ixsl:get(., 'classList'), 'toggle', [ 'progress', false() ])[current-date() lt xs:date('2000-01-01')]"/>
710-
<xsl:sequence select="ixsl:call(ixsl:get(., 'classList'), 'toggle', [ 'progress-striped', false() ])[current-date() lt xs:date('2000-01-01')]"/>
711-
<xsl:sequence select="ixsl:call(ixsl:get(., 'classList'), 'toggle', [ 'active', false() ])[current-date() lt xs:date('2000-01-01')]"/>
712-
</xsl:for-each>
713-
714772
<!-- error response - could not load query results -->
715773
<xsl:for-each select="$container">
716774
<xsl:result-document href="?." method="ixsl:replace-content">

src/main/webapp/static/com/atomgraph/linkeddatahub/xsl/bootstrap/2.3.2/client/block/query.xsl

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ exclude-result-prefixes="#all"
105105

106106
<!-- render query block -->
107107

108-
<xsl:template match="*[@typeof = ('&sp;Ask', '&sp;Select', '&sp;Describe', '&sp;Construct')][descendant::*[@property = '&sp;text'][pre/text()]]" mode="ldh:RenderRow" as="function(item()?) as item()*" priority="2 "> <!-- prioritize above block.xsl -->
108+
<xsl:template match="*[@typeof = ('&sp;Ask', '&sp;Select', '&sp;Describe', '&sp;Construct')][descendant::*[@property = '&sp;text'][pre/text()]]" mode="ldh:RenderRow" as="function(item()?) as map(*)" priority="2 "> <!-- prioritize above block.xsl -->
109109
<xsl:param name="block" select="ancestor-or-self::div[contains-token(@class, 'block')][1]" as="element()"/>
110110
<xsl:param name="about" select="$block/@about" as="xs:anyURI"/>
111111
<xsl:param name="block-uri" select="$about" as="xs:anyURI"/>
@@ -177,12 +177,13 @@ exclude-result-prefixes="#all"
177177
</xsl:function>
178178

179179
<xsl:function name="ldh:hide-block-progress-bar1" as="map(*)" ixsl:updating="yes">
180-
<xsl:param name="context" as="map(*)"/>
180+
<xsl:param name="context" as="map(*)"/>
181181
<xsl:param name="results" as="array(*)"/>
182-
<xsl:message>ldh:hide-block-progress-bar</xsl:message>
183-
182+
184183
<xsl:variable name="container" select="$context('container')" as="element()"/>
185184

185+
<xsl:message>ldh:hide-block-progress-bar $container/@typeof: <xsl:value-of select="$container/@typeof"/></xsl:message>
186+
186187
<!-- hide the progress bar -->
187188
<xsl:for-each select="$container/ancestor::div[contains-token(@class, 'span12')][contains-token(@class, 'progress')][contains-token(@class, 'active')]">
188189
<xsl:sequence select="ixsl:call(ixsl:get(., 'classList'), 'toggle', [ 'progress', false() ])[current-date() lt xs:date('2000-01-01')]"/>
@@ -204,15 +205,12 @@ exclude-result-prefixes="#all"
204205
<xsl:variable name="service-uri" select="$context('service-uri')" as="xs:anyURI?"/>
205206
<xsl:variable name="forClass" select="$context('forClass')" as="xs:anyURI"/>
206207

207-
<xsl:message>ldh:render-query exists($container//div[contains-token(@class, 'main')]): <xsl:value-of select="exists($container//div[contains-token(@class, 'main')])"/></xsl:message>
208-
<xsl:message>ldh:render-query $container/@id: <xsl:value-of select="$container/@id"/> $container: <xsl:value-of select="serialize($container)"/></xsl:message>
209-
<xsl:message>ldh:render-query $container//div[contains-token(@class, 'main')]: <xsl:value-of select="serialize($container//div[contains-token(@class, 'main')])"/></xsl:message>
210-
208+
<xsl:message>ldh:render-query</xsl:message>
209+
211210
<xsl:for-each select="$container//div[contains-token(@class, 'main')]">
212211
<xsl:variable name="header" select="./div/div[@class = 'well']" as="element()"/>
213212

214213
<xsl:message>contains(.): <xsl:value-of select="ixsl:call(ixsl:page(), 'contains', [ . ])"/></xsl:message>
215-
<!-- <xsl:sequence select="ixsl:call(., 'remove', [])[current-date() lt xs:date('2000-01-01')]"/>-->
216214
<xsl:result-document href="?." method="ixsl:replace-content">
217215
<xsl:copy-of select="$header"/>
218216

0 commit comments

Comments
 (0)