Skip to content

Commit c8275a2

Browse files
committed
Improved callback promise composition
1 parent ddd84f4 commit c8275a2

2 files changed

Lines changed: 60 additions & 59 deletions

File tree

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

Lines changed: 45 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -85,11 +85,12 @@ exclude-result-prefixes="#all"
8585
'container': $container,
8686
'mode': $mode,
8787
'refresh-content': $refresh-content,
88-
'query-uri': $query-uri,
89-
'ldh:on-success-function': QName('&ldh;', 'ldh:view-query-load')
88+
'query-uri': $query-uri
9089
}"/>
9190
<xsl:variable name="request" select="map:merge(($http-request, $callback-context))" as="map(*)"/>
92-
<xsl:sequence select="ldh:send-request($request, ())[current-date() lt xs:date('2000-01-01')]"/>
91+
<xsl:sequence select="ixsl:http-request($request, ()) =>
92+
ixsl:then(ldh:handle-response($request, ?)) =>
93+
ixsl:then(ldh:view-query-load($request, ?))"/>
9394
</xsl:template>
9495

9596
<!-- hide type control -->
@@ -247,11 +248,12 @@ exclude-result-prefixes="#all"
247248
<xsl:variable name="callback-context" as="map(*)" select="
248249
map {
249250
'container': .,
250-
'count-var-name': $count-var-name,
251-
'ldh:on-success-function': QName('&ldh;', 'ldh:result-count-results-load')
251+
'count-var-name': $count-var-name
252252
}"/>
253253
<xsl:variable name="request" select="map:merge(($http-request, $callback-context))" as="map(*)"/>
254-
<xsl:sequence select="ldh:send-request($request, ())[current-date() lt xs:date('2000-01-01')]"/>
254+
<xsl:sequence select="ixsl:http-request($request, ()) =>
255+
ixsl:then(ldh:handle-response($request, ?)) =>
256+
ixsl:then(ldh:result-count-results-load($request, ?))"/>
255257
</xsl:template>
256258

257259
<!-- order by -->
@@ -446,11 +448,12 @@ exclude-result-prefixes="#all"
446448
'select-xml': $select-xml,
447449
'initial-var-name': $initial-var-name,
448450
'focus-var-name': $focus-var-name,
449-
'endpoint': $endpoint,
450-
'ldh:on-success-function': QName('&ldh;', 'ldh:on-container-results-load')
451+
'endpoint': $endpoint
451452
}"/>
452453
<xsl:variable name="request" select="map:merge(($http-request, $callback-context))" as="map(*)"/>
453-
<xsl:sequence select="ldh:send-request($request, ())[current-date() lt xs:date('2000-01-01')]"/>
454+
<xsl:sequence select="ixsl:http-request($request, ()) =>
455+
ixsl:then(ldh:handle-response($request, ?)) =>
456+
ixsl:then(ldh:on-container-results-load($request, ?))"/>
454457
</xsl:template>
455458

456459
<!-- $container here is the inner result container, not the content container! -->
@@ -646,11 +649,12 @@ exclude-result-prefixes="#all"
646649
'container': $sub-container,
647650
'subject-var-name': $subject-var-name,
648651
'predicate': $predicate,
649-
'object-var-name': $object-var-name,
650-
'ldh:on-success-function': QName('&ldh;', 'ldh:facet-filter-results-load')
652+
'object-var-name': $object-var-name
651653
}"/>
652654
<xsl:variable name="request" select="map:merge(($http-request, $callback-context))" as="map(*)"/>
653-
<xsl:sequence select="ldh:send-request($request, ())[current-date() lt xs:date('2000-01-01')]"/>
655+
<xsl:sequence select="ixsl:http-request($request, ()) =>
656+
ixsl:then(ldh:handle-response($request, ?)) =>
657+
ixsl:then(ldh:facet-filter-results-load($request, ?))"/>
654658
</xsl:if>
655659
</xsl:for-each>
656660
</xsl:if>
@@ -867,11 +871,12 @@ exclude-result-prefixes="#all"
867871
map{
868872
'container': id($properties-container-id, ixsl:page()),
869873
'var-name': $focus-var-name,
870-
'results': $results,
871-
'ldh:on-success-function': QName('&ldh;', 'ldh:parallax-results-load')
874+
'results': $results
872875
}"/>
873876
<xsl:variable name="request" select="map:merge(($http-request, $callback-context))" as="map(*)"/>
874-
<xsl:sequence select="ldh:send-request($request, ())[current-date() lt xs:date('2000-01-01')]"/>
877+
<xsl:sequence select="ixsl:http-request($request, ()) =>
878+
ixsl:then(ldh:handle-response($request, ?)) =>
879+
ixsl:then(ldh:parallax-results-load($request, ?))"/>
875880
</xsl:if>
876881
</xsl:template>
877882

@@ -937,11 +942,12 @@ exclude-result-prefixes="#all"
937942
'results': $results,
938943
'active-mode': $active-mode,
939944
'select-xml': $select-xml,
940-
'base-uri': ldh:base-uri(.),
941-
'ldh:on-success-function': QName('&ldh;', 'ldh:container-object-metadata-results-load')
945+
'base-uri': ldh:base-uri(.)
942946
}"/>
943947
<xsl:variable name="request" select="map:merge(($http-request, $callback-context))" as="map(*)"/>
944-
<xsl:sequence select="ldh:send-request($request, ())[current-date() lt xs:date('2000-01-01')]"/>
948+
<xsl:sequence select="ixsl:http-request($request, ()) =>
949+
ixsl:then(ldh:handle-response($request, ?)) =>
950+
ixsl:then(ldh:container-object-metadata-results-load($request, ?))"/>
945951
</xsl:template>
946952

947953
<!-- pager prev links -->
@@ -1175,11 +1181,12 @@ exclude-result-prefixes="#all"
11751181
'predicate': $predicate,
11761182
'object-var-name': $object-var-name,
11771183
'count-var-name': $count-var-name,
1178-
'label-sample-var-name': $label-sample-var-name,
1179-
'ldh:on-success-function': QName('&ldh;', 'ldh:facet-value-results-load')
1184+
'label-sample-var-name': $label-sample-var-name
11801185
}"/>
11811186
<xsl:variable name="request" select="map:merge(($http-request, $callback-context))" as="map(*)"/>
1182-
<xsl:sequence select="ldh:send-request($request, ())[current-date() lt xs:date('2000-01-01')]"/>
1187+
<xsl:sequence select="ixsl:http-request($request, ()) =>
1188+
ixsl:then(ldh:handle-response($request, ?)) =>
1189+
ixsl:then(ldh:facet-value-results-load($request, ?))"/>
11831190
</xsl:for-each>
11841191
</xsl:when>
11851192
<xsl:otherwise>
@@ -1526,11 +1533,12 @@ exclude-result-prefixes="#all"
15261533
'container': id($order-by-container-id, ixsl:page()),
15271534
'id': $id,
15281535
'predicate': $predicate,
1529-
'order-by-predicate': $order-by-predicate,
1530-
'ldh:on-success-function': QName('&ldh;', 'ldh:order-by-results-load')
1536+
'order-by-predicate': $order-by-predicate
15311537
}"/>
15321538
<xsl:variable name="request" select="map:merge(($http-request, $callback-context))" as="map(*)"/>
1533-
<xsl:sequence select="ldh:send-request($request, ())[current-date() lt xs:date('2000-01-01')]"/>
1539+
<xsl:sequence select="ixsl:http-request($request) =>
1540+
ixsl:then(ldh:handle-response($request, ?)) =>
1541+
ixsl:then(ldh:order-by-results-load($request, ?))"/>
15341542
</xsl:if>
15351543
</xsl:for-each>
15361544
</xsl:if>
@@ -1547,12 +1555,13 @@ exclude-result-prefixes="#all"
15471555
'results': $sorted-results,
15481556
'active-mode': $active-mode,
15491557
'select-xml': $select-xml,
1550-
'base-uri': ldh:base-uri(.),
1551-
'ldh:on-success-function': QName('&ldh;', 'ldh:container-object-metadata-results-load')
1558+
'base-uri': ldh:base-uri(.)
15521559
}"/>
15531560
<xsl:variable name="request" select="map:merge(($http-request, $callback-context))" as="map(*)"/>
1554-
<xsl:sequence select="ldh:send-request($request, ())[current-date() lt xs:date('2000-01-01')]"/>
1555-
1561+
<xsl:sequence select="ixsl:http-request($request, ()) =>
1562+
ixsl:then(ldh:handle-response($request, ?)) =>
1563+
ixsl:then(ldh:container-object-metadata-results-load($request, ?))"/>
1564+
15561565
<!-- hide progress bar -->
15571566
<xsl:for-each select="$container//div[@class = 'progress-bar']">
15581567
<ixsl:set-style name="display" select="'none'" object="."/>
@@ -1648,11 +1657,12 @@ exclude-result-prefixes="#all"
16481657
<xsl:variable name="callback-context" as="map(*)" select="
16491658
map{
16501659
'container': $container,
1651-
'predicate': $predicate,
1652-
'ldh:on-success-function': QName('&ldh;', 'ldh:parallax-property-load')
1660+
'predicate': $predicate
16531661
}"/>
16541662
<xsl:variable name="request" select="map:merge(($http-request, $callback-context))" as="map(*)"/>
1655-
<xsl:sequence select="ldh:send-request($request, ())[current-date() lt xs:date('2000-01-01')]"/>
1663+
<xsl:sequence select="ixsl:http-request($request, ()) =>
1664+
ixsl:then(ldh:handle-response($request, ?)) =>
1665+
ixsl:then(ldh:parallax-property-load($request, ?))"/>
16561666
</xsl:for-each-group>
16571667
</xsl:for-each>
16581668
</xsl:when>
@@ -1765,11 +1775,12 @@ exclude-result-prefixes="#all"
17651775
'object-var-name': $object-var-name,
17661776
'count-var-name': $count-var-name,
17671777
'object-type': $object-type,
1768-
'value-result': $value-result,
1769-
'ldh:on-success-function': QName('&ldh;', 'ldh:facet-value-type-load')
1778+
'value-result': $value-result
17701779
}"/>
17711780
<xsl:variable name="request" select="map:merge(($http-request, $callback-context))" as="map(*)"/>
1772-
<xsl:sequence select="ldh:send-request($request, ())[current-date() lt xs:date('2000-01-01')]"/>
1781+
<xsl:sequence select="ixsl:http-request($request, ()) =>
1782+
ixsl:then(ldh:handle-response($request, ?)) =>
1783+
ixsl:then(ldh:facet-value-type-load($request, ?))"/>
17731784
</xsl:for-each>
17741785
</xsl:when>
17751786
<xsl:otherwise>

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

Lines changed: 15 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -448,18 +448,8 @@ exclude-result-prefixes="#all"
448448
</xsl:function>
449449

450450
<!-- generic HTTP client promises (SaxonJS 3) -->
451-
452-
<xsl:function name="ldh:send-request" ixsl:updating="yes">
453-
<xsl:param name="request" as="map(*)"/>
454-
<xsl:param name="sleep-result" as="item()?"/> <!-- not used but has to be declared: https://saxonica.plan.io/issues/6727 -->
455451

456-
<ixsl:promise
457-
select="ixsl:http-request($request)"
458-
on-completion="ldh:handle-response($request, ?)"
459-
on-failure="ldh:fail#1"/>
460-
</xsl:function>
461-
462-
<xsl:function name="ldh:handle-response" ixsl:updating="yes">
452+
<xsl:function name="ldh:handle-response" as="item()*" ixsl:updating="yes">
463453
<xsl:param name="request" as="map(*)"/>
464454
<xsl:param name="response" as="map(*)"/>
465455
<xsl:variable name="default-retry-after" select="1" as="xs:integer"/>
@@ -470,26 +460,26 @@ exclude-result-prefixes="#all"
470460
if (map:contains($response?headers, 'Retry-After'))
471461
then xs:integer($response?headers('Retry-After'))
472462
else $default-retry-after"/>
473-
<ixsl:promise
474-
select="ixsl:sleep($retry-after * 1000)"
475-
on-completion="ldh:send-request($request, ?)"/>
476-
</xsl:when>
477-
<xsl:otherwise>
478-
<!-- Dynamically invoke the callback function -->
479-
<xsl:variable name="callback-name" select="$request('ldh:on-success-function')" as="xs:QName"/>
480-
<xsl:variable name="callback-func" select="function-lookup($callback-name, 2)"/>
481-
482-
<xsl:message>Callback function: <xsl:value-of select="string($callback-name)"/></xsl:message>
483463

484-
<xsl:sequence select="$callback-func($request, $response)"/>
464+
<xsl:sequence select="
465+
ixsl:sleep($retry-after * 1000)
466+
=> ixsl:then(ldh:retry-request($request, ?))
467+
"/>
468+
</xsl:when>
469+
<xsl:otherwise>
470+
<xsl:sequence select="$response"/>
485471
</xsl:otherwise>
486472
</xsl:choose>
487473
</xsl:function>
488474

489-
<xsl:function name="ldh:fail">
490-
<xsl:param name="error" as="map(*)"/>
475+
<xsl:function name="ldh:retry-request" as="item()*" ixsl:updating="yes">
476+
<xsl:param name="request" as="map(*)"/>
477+
<xsl:param name="sleep-result" as="item()?"/>
491478

492-
<xsl:message>ldh:fail $error: <xsl:value-of select="serialize($error, map{ 'method': 'json' })"/></xsl:message>
479+
<xsl:sequence select="
480+
ixsl:http-request($request)
481+
=> ixsl:then(ldh:handle-response($request, ?))
482+
"/>
493483
</xsl:function>
494484

495485
</xsl:stylesheet>

0 commit comments

Comments
 (0)