Skip to content

Commit 6001561

Browse files
namedgraphclaude
andcommitted
Remove services fetch, service dropdown, and refactor navbar into separate templates
The client-side getResourceWithRetry(servicesRequestUri) fetch and ldh:apps stylesheet parameter were unused — remove them along with the service select dropdown and related onServiceLoad/RenderServices templates. Refactor the navbar into bs2:NavBarLeft, bs2:NavBarMain, and bs2:NavBarRight templates. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent cff9deb commit 6001561

3 files changed

Lines changed: 59 additions & 120 deletions

File tree

src/main/webapp/static/com/atomgraph/linkeddatahub/css/bootstrap.css

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,9 @@ ul.dropdown-menu ul { margin: 0; }
2424
.dropdown-menu .btn-app-settings { background-color: inherit; display: block; text-align: left; width: 100%; padding-left: 20px; }
2525
.dropdown-menu li form { margin-bottom: 0; }
2626
.dropdown-menu li form button { width: 100%; text-align: left; }
27-
.navbar-form .input-append { margin-top: 10px; }
28-
.navbar-form .input-append select { margin-top: 0; height: 34px; }
27+
#collapsing-top-navbar .brand { float: none; display: inline-block; margin-left: 0; padding: 10px 20px 10px 0; }
28+
#collapsing-top-navbar .brand.context { display: inline-block; vertical-align: middle; }
29+
.navbar-form input#uri { width: calc(100% - 50px); }
2930
.navbar-form .btn-search { background-image: url('../icons/ic_search_white_24px.svg'); background-position: center center; background-repeat: no-repeat; width: 34px; height: 34px; }
3031
.action-bar { position: sticky; top: var(--action-bar-top, 55px); z-index: 999; background: #dfdfdf; padding: 0; box-shadow: none; }
3132
.action-bar form { margin-bottom: 0; }

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

Lines changed: 54 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -444,23 +444,13 @@ exclude-result-prefixes="#all">
444444
SaxonJS.getResource({text: content, type: "xml"})
445445
)
446446
);
447-
const servicesRequestUri = "]]></xsl:text><xsl:value-of select="$app-request-uri"/><xsl:text disable-output-escaping="yes"><![CDATA[";
448447
const stylesheetParams = {
449448
"Q{https://w3id.org/atomgraph/client#}contextUri": contextUri, // servlet context URI
450-
"Q{http://www.w3.org/ns/auth/acl#}agent": agentUri,
451-
"Q{}app-request-uri": servicesRequestUri
449+
"Q{http://www.w3.org/ns/auth/acl#}agent": agentUri
452450
};
453451
454452
SaxonJS.setConfigurationProperty("nativeGetElementById", true);
455-
getResourceWithRetry(servicesRequestUri, { "Accept": "application/rdf+xml" }).then(content =>
456-
SaxonJS.getResource({text: content, type: "xml"})
457-
).
458-
then(resource => {
459-
stylesheetParams["Q{https://w3id.org/atomgraph/linkeddatahub#}apps"] = resource;
460-
return Promise.all(docPromises);
461-
}, error => {
462-
return Promise.all(docPromises);
463-
}).
453+
Promise.all(docPromises).
464454
then(resources => {
465455
const cache = {};
466456
for (var i = 0; i < resources.length; i++) {
@@ -529,26 +519,64 @@ exclude-result-prefixes="#all">
529519
<span class="icon-bar"></span>
530520
</button>
531521

532-
<xsl:if test="$ldt:base">
533-
<xsl:if test="not($ldt:base = $ac:contextUri)">
534-
<a class="brand context" href="{ldh:parent-origin($ldt:base)}"/>
535-
</xsl:if>
536-
</xsl:if>
537-
538-
<xsl:apply-templates select="." mode="bs2:Brand"/>
522+
<div id="collapsing-top-navbar" class="nav-collapse collapse">
523+
<div class="row-fluid">
524+
<xsl:apply-templates select="." mode="bs2:NavBarLeft"/>
539525

540-
<div id="collapsing-top-navbar" class="nav-collapse collapse" style="margin-left: 17%;">
541-
<xsl:if test="$ldh:ajaxRendering">
542-
<xsl:apply-templates select="." mode="bs2:SearchBar"/>
543-
</xsl:if>
526+
<xsl:apply-templates select="." mode="bs2:NavBarMain"/>
544527

545-
<xsl:apply-templates select="." mode="bs2:NavBarNavList"/>
528+
<xsl:apply-templates select="." mode="bs2:NavBarRight"/>
529+
</div>
546530
</div>
547531
</div>
548532
</div>
549533
</div>
550534
</xsl:template>
551535

536+
<xsl:template match="rdf:RDF | srx:sparql" mode="bs2:NavBarLeft">
537+
<xsl:param name="class" select="'span2'" as="xs:string?"/>
538+
539+
<div>
540+
<xsl:if test="$class">
541+
<xsl:attribute name="class" select="$class"/>
542+
</xsl:if>
543+
544+
<xsl:if test="$ldt:base">
545+
<xsl:if test="not($ldt:base = $ac:contextUri)">
546+
<a class="brand context" href="{ldh:parent-origin($ldt:base)}"/>
547+
</xsl:if>
548+
</xsl:if>
549+
550+
<xsl:apply-templates select="." mode="bs2:Brand"/>
551+
</div>
552+
</xsl:template>
553+
554+
<xsl:template match="rdf:RDF | srx:sparql" mode="bs2:NavBarMain">
555+
<xsl:param name="class" select="'span7'" as="xs:string?"/>
556+
557+
<div>
558+
<xsl:if test="$class">
559+
<xsl:attribute name="class" select="$class"/>
560+
</xsl:if>
561+
562+
<xsl:if test="$ldh:ajaxRendering">
563+
<xsl:apply-templates select="." mode="bs2:SearchBar"/>
564+
</xsl:if>
565+
</div>
566+
</xsl:template>
567+
568+
<xsl:template match="rdf:RDF | srx:sparql" mode="bs2:NavBarRight">
569+
<xsl:param name="class" select="'span3'" as="xs:string?"/>
570+
571+
<div>
572+
<xsl:if test="$class">
573+
<xsl:attribute name="class" select="$class"/>
574+
</xsl:if>
575+
576+
<xsl:apply-templates select="." mode="bs2:NavBarNavList"/>
577+
</div>
578+
</xsl:template>
579+
552580
<xsl:template match="rdf:RDF | srx:sparql" mode="bs2:Brand">
553581
<a class="brand" href="{$ldt:base}">
554582
<xsl:for-each select="key('apps-by-origin', $lapp:origin, $lapp:Context)">
@@ -565,18 +593,8 @@ exclude-result-prefixes="#all">
565593

566594
<!-- check if agent has access to the user endpoint by executing a dummy query ASK {} -->
567595
<xsl:template match="rdf:RDF[doc-available(resolve-uri('sparql?query=ASK%20%7B%7D', $ldt:base))] | srx:sparql[doc-available(resolve-uri('sparql?query=ASK%20%7B%7D', $ldt:base))]" mode="bs2:SearchBar" priority="1">
568-
<form action="{ac:absolute-path(ldh:request-uri())}" method="get" class="navbar-form pull-left" accept-charset="UTF-8" title="{ac:label(key('resources', 'search-title', document('translations.rdf')))}">
569-
<div class="input-append">
570-
<select id="search-service" name="service">
571-
<option value="">
572-
<xsl:value-of>
573-
<xsl:text>[</xsl:text>
574-
<xsl:apply-templates select="key('resources', 'sparql-service', document('translations.rdf'))" mode="ac:label"/>
575-
<xsl:text>]</xsl:text>
576-
</xsl:value-of>
577-
</option>
578-
</select>
579-
596+
<form action="{ac:absolute-path(ldh:request-uri())}" method="get" class="navbar-form" accept-charset="UTF-8" title="{ac:label(key('resources', 'search-title', document('translations.rdf')))}">
597+
<div>
580598
<input type="text" id="uri" name="uri" class="input-xxlarge typeahead"/>
581599
<!-- placeholder used by the client-side typeahead -->
582600
<ul id="ul-{generate-id()}" class="search-typeahead typeahead dropdown-menu" style="display: none"/>

src/main/webapp/static/com/atomgraph/linkeddatahub/xsl/client.xsl

Lines changed: 2 additions & 82 deletions
Original file line numberDiff line numberDiff line change
@@ -119,12 +119,6 @@ extension-element-prefixes="ixsl"
119119
<xsl:param name="ldt:ontology" as="xs:anyURI?"/> <!-- used in Web-Client TO-DO: remove -->
120120
<xsl:param name="acl:agent" as="xs:anyURI?"/>
121121
<xsl:param name="foaf:Agent" select="if ($acl:agent) then document(ac:document-uri($acl:agent)) else ()" as="document-node()?"/> <!-- should be in SaxonJS documentPool -->
122-
<xsl:param name="app-request-uri" as="xs:anyURI"/>
123-
<xsl:param name="ldh:apps" as="document-node()">
124-
<xsl:document>
125-
<rdf:RDF></rdf:RDF>
126-
</xsl:document>
127-
</xsl:param>
128122
<xsl:param name="ac:lang" select="ixsl:get(ixsl:get(ixsl:page(), 'documentElement'), 'lang')" as="xs:string"/>
129123
<xsl:param name="ac:forClass" as="xs:anyURI?"/> <!-- used by Web-Client -->
130124
<xsl:param name="ac:query" select="ixsl:query-params()?query" as="xs:string?"/>
@@ -237,7 +231,6 @@ WHERE
237231
<xsl:message>saxon:platform: <xsl:value-of select="system-property('saxon:platform')"/></xsl:message>
238232
<xsl:message>$ac:contextUri: <xsl:value-of select="$ac:contextUri"/></xsl:message>
239233
<xsl:message>$acl:agent: <xsl:value-of select="$acl:agent"/></xsl:message>
240-
<xsl:message>count($ldh:apps//*[rdf:type/@rdf:resource = '&sd;Service']): <xsl:value-of select="count($ldh:apps//*[rdf:type/@rdf:resource = '&sd;Service'])"/></xsl:message>
241234
<xsl:message>ac:uri(): <xsl:value-of select="ac:uri()"/></xsl:message>
242235
<xsl:message>UTC offset: <xsl:value-of select="implicit-timezone()"/></xsl:message>
243236

@@ -274,15 +267,6 @@ WHERE
274267
</xsl:result-document>
275268
</xsl:for-each>
276269
</xsl:if>
277-
<!-- initialize LinkedDataHub.apps (and the search dropdown, if it's shown) -->
278-
<ixsl:set-property name="apps" select="$ldh:apps" object="ixsl:get(ixsl:window(), 'LinkedDataHub')"/>
279-
<!-- #search-service may be missing (e.g. suppressed by extending stylesheet) -->
280-
<xsl:for-each select="id('search-service', ixsl:page())">
281-
<xsl:call-template name="ldh:RenderServices">
282-
<xsl:with-param name="select" select="."/>
283-
<xsl:with-param name="apps" select="$ldh:apps"/>
284-
</xsl:call-template>
285-
</xsl:for-each>
286270
<!-- initialize navigation (e.g. the left sidebar) -->
287271
<xsl:for-each select="id('left-sidebar', ixsl:page())">
288272
<xsl:result-document href="?." method="ixsl:replace-content">
@@ -532,15 +516,14 @@ WHERE
532516

533517
<xsl:call-template name="ldh:AddTabNavBarListItem">
534518
<xsl:with-param name="uri" select="$uri"/>
535-
<xsl:with-param name="label" select="ac:label(key('resources', $uri, $results))"/>
519+
<xsl:with-param name="label" select="if (exists(key('resources', $uri, $results))) then ac:label(key('resources', $uri, $results)) else $uri"/>
536520
<xsl:with-param name="endpoint" select="$endpoint"/>
537521
<xsl:with-param name="application" select="$application"/>
538522
</xsl:call-template>
539523

540524
<xsl:variable name="local-tab-pane" select="id('tab-content', ixsl:page())/div[contains-token(@class, 'tab-pane')][./div[contains-token(@class, 'content-body')]/@about = ac:absolute-path(ldh:request-uri())]" as="element()"/>
541525
<ixsl:set-style name="display" select="'none'" object="$local-tab-pane"/>
542526

543-
<xsl:message>CREATE EXTERNAL TAB PANE</xsl:message>
544527
<!-- create external pane for this URI if it doesn't exist yet (scales to N panes, one per URI) -->
545528
<xsl:result-document href="#tab-content" method="ixsl:append-content">
546529
<xsl:sequence select="$tab-body"/>
@@ -555,16 +538,6 @@ WHERE
555538
<xsl:with-param name="refresh-content" select="$refresh-content"/>
556539
</xsl:call-template>
557540

558-
<!-- is a new instance of Service was created, reload the LinkedDataHub.apps data and re-render the service dropdown -->
559-
<xsl:if test="//ldt:base or //sd:endpoint">
560-
<xsl:variable name="request" as="item()*">
561-
<ixsl:schedule-action http-request="map{ 'method': 'GET', 'href': $app-request-uri, 'headers': map{ 'Accept': 'application/rdf+xml' } }">
562-
<xsl:call-template name="onServiceLoad"/>
563-
</ixsl:schedule-action>
564-
</xsl:variable>
565-
<xsl:sequence select="$request[current-date() lt xs:date('2000-01-01')]"/>
566-
</xsl:if>
567-
568541
<!-- initialize maps -->
569542
<xsl:if test="key('elements-by-class', 'map-canvas', ixsl:page())">
570543
<xsl:variable name="block-uri" select="$uri" as="xs:anyURI"/>
@@ -652,7 +625,6 @@ WHERE
652625

653626
<!-- append the new tab <li> to the tab bar -->
654627
<xsl:result-document href="#tab-bar-list" method="ixsl:append-content">
655-
<xsl:message>APPEND NEW TAB TO TAB BAR</xsl:message>
656628
<li data-uri="{$uri}">
657629
<xsl:if test="$endpoint">
658630
<xsl:attribute name="data-endpoint" select="$endpoint"/>
@@ -675,8 +647,6 @@ WHERE
675647
<!-- activate an existing tab -->
676648
<xsl:template match="ul[@id = 'tab-bar-list']/li" mode="ldh:ActivateTab">
677649
<xsl:param name="uri" select="xs:anyURI(ixsl:get(., 'dataset.uri'))" as="xs:anyURI"/>
678-
<xsl:param name="endpoint" select="xs:anyURI(ixsl:get(., 'dataset.endpoint'))" as="xs:anyURI"/>
679-
<xsl:message>ldh:ActivateTab id: <xsl:value-of select="@id"/> dataset.uri: <xsl:value-of select="ixsl:get(., 'dataset.uri')"/> endpoint: <xsl:value-of select="$endpoint"/></xsl:message>
680650

681651
<!-- deactivate all tab <li>s -->
682652
<xsl:for-each select="id('tab-bar-list', ixsl:page())/li">
@@ -733,23 +703,6 @@ WHERE
733703
</xsl:if>
734704
</xsl:template>
735705

736-
<xsl:template name="onServiceLoad">
737-
<xsl:context-item as="map(*)" use="required"/>
738-
739-
<xsl:if test="?status = 200 and ?media-type = 'application/rdf+xml'">
740-
<xsl:for-each select="?body">
741-
<ixsl:set-property name="apps" select="." object="ixsl:get(ixsl:window(), 'LinkedDataHub')"/>
742-
743-
<xsl:variable name="service-uri" select="if (id('search-service', ixsl:page())) then xs:anyURI(ixsl:get(id('search-service', ixsl:page()), 'value')) else ()" as="xs:anyURI?"/>
744-
<xsl:call-template name="ldh:RenderServices">
745-
<xsl:with-param name="select" select="id('search-service', ixsl:page())"/>
746-
<xsl:with-param name="apps" select="."/>
747-
<xsl:with-param name="selected-service" select="$service-uri"/>
748-
</xsl:call-template>
749-
</xsl:for-each>
750-
</xsl:if>
751-
</xsl:template>
752-
753706
<!-- push state -->
754707

755708
<xsl:template name="ldh:PushState">
@@ -794,35 +747,6 @@ WHERE
794747
ixsl:then(ldh:rdf-document-response#1)"
795748
on-failure="ldh:promise-failure#1"/>
796749
</xsl:template>
797-
798-
<!-- service select -->
799-
800-
<xsl:template name="ldh:RenderServices">
801-
<xsl:param name="select" as="element()"/>
802-
<xsl:param name="apps" as="document-node()"/>
803-
<xsl:param name="selected-service" as="xs:anyURI?"/>
804-
805-
<xsl:for-each select="$select">
806-
<xsl:result-document href="?." method="ixsl:replace-content">
807-
<option value="">
808-
<xsl:value-of>
809-
<xsl:text>[</xsl:text>
810-
<xsl:apply-templates select="key('resources', 'sparql-service', document(resolve-uri('static/com/atomgraph/linkeddatahub/xsl/bootstrap/2.3.2/translations.rdf', $ac:contextUri)))" mode="ac:label"/>
811-
<xsl:text>]</xsl:text>
812-
</xsl:value-of>
813-
</option>
814-
815-
<xsl:for-each select="$apps//*[rdf:type/@rdf:resource = '&sd;Service']">
816-
<xsl:sort select="ac:label(.)"/>
817-
818-
<xsl:apply-templates select="." mode="xhtml:Option">
819-
<xsl:with-param name="value" select="@rdf:about"/>
820-
<xsl:with-param name="selected" select="@rdf:about = $selected-service"/>
821-
</xsl:apply-templates>
822-
</xsl:for-each>
823-
</xsl:result-document>
824-
</xsl:for-each>
825-
</xsl:template>
826750

827751
<!-- Linked Data browser -->
828752

@@ -831,8 +755,6 @@ WHERE
831755
<xsl:message>ldh:xhtml-document-loaded</xsl:message>
832756

833757
<xsl:variable name="href" select="$context('href')" as="xs:anyURI?"/> <!-- absolute URI! -->
834-
<xsl:variable name="service-uri" select="if (id('search-service', ixsl:page())) then xs:anyURI(ixsl:get(id('search-service', ixsl:page()), 'value')) else ()" as="xs:anyURI?"/>
835-
<xsl:variable name="service" select="if ($service-uri) then key('resources', $service-uri, document(ldh:href(ac:document-uri($service-uri), map{ 'accept': 'application/rdf+xml' }, ()))) else ()" as="element()?"/> <!-- TO-DO: refactor asynchronously -->
836758
<xsl:variable name="push-state" select="$context('push-state')" as="xs:boolean"/>
837759
<xsl:variable name="refresh-content" as="xs:boolean?"/>
838760
<xsl:variable name="response" select="$context('response')" as="map(*)"/>
@@ -1227,9 +1149,7 @@ WHERE
12271149
<xsl:variable name="query-json-string" select="xml-to-json($query-xml)" as="xs:string"/>
12281150
<xsl:variable name="query-json" select="ixsl:call(ixsl:get(ixsl:window(), 'JSON'), 'parse', [ $query-json-string ])"/>
12291151
<xsl:variable name="query-string" select="ixsl:call(ixsl:call(ixsl:get(ixsl:get(ixsl:window(), 'SPARQLBuilder'), 'SelectBuilder'), 'fromQuery', [ $query-json ]), 'toString', [])" as="xs:string"/>
1230-
<xsl:variable name="service-uri" select="xs:anyURI(ixsl:get(id('search-service'), 'value'))" as="xs:anyURI?"/>
1231-
<xsl:variable name="service" select="if ($service-uri) then key('resources', $service-uri, document(ldh:href(ac:document-uri($service-uri), map{ 'accept': 'application/rdf+xml' }, ()))) else ()" as="element()?"/> <!-- TO-DO: refactor asynchronously -->
1232-
<xsl:variable name="endpoint" select="($service/sd:endpoint/@rdf:resource/xs:anyURI(.), resolve-uri('sparql', ldt:base()))[1]" as="xs:anyURI"/>
1152+
<xsl:variable name="endpoint" select="sd:endpoint()" as="xs:anyURI"/>
12331153
<xsl:variable name="results-uri" select="ac:build-uri($endpoint, map{ 'query': string($query-string) })" as="xs:anyURI"/>
12341154
<xsl:variable name="request-uri" select="ldh:href($results-uri, map{})" as="xs:anyURI"/>
12351155

0 commit comments

Comments
 (0)