• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

knowledgepixels / nanodash / 19271424594

11 Nov 2025 04:05PM UTC coverage: 13.961% (+0.2%) from 13.774%
19271424594

Pull #283

github

web-flow
Merge bf1649aac into cbe3edb76
Pull Request #283: Fix the HTML rendering in `QueryResultList`

519 of 4716 branches covered (11.01%)

Branch coverage included in aggregate %.

1355 of 8707 relevant lines covered (15.56%)

0.69 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

0.0
src/main/java/com/knowledgepixels/nanodash/component/QueryResultList.java
1
package com.knowledgepixels.nanodash.component;
2

3
import com.knowledgepixels.nanodash.GrlcQuery;
4
import com.knowledgepixels.nanodash.Utils;
5
import com.knowledgepixels.nanodash.ViewDisplay;
6
import com.knowledgepixels.nanodash.page.ExplorePage;
7
import org.apache.wicket.behavior.AttributeAppender;
8
import org.apache.wicket.markup.html.basic.Label;
9
import org.apache.wicket.markup.html.link.BookmarkablePageLink;
10
import org.apache.wicket.markup.html.panel.Panel;
11
import org.apache.wicket.markup.repeater.RepeatingView;
12
import org.apache.wicket.request.mapper.parameter.PageParameters;
13
import org.nanopub.extra.services.ApiResponse;
14
import org.nanopub.extra.services.ApiResponseEntry;
15

16
import java.util.Arrays;
17
import java.util.stream.Collectors;
18

19
public class QueryResultList extends Panel {
20

21
    QueryResultList(String markupId, GrlcQuery grlcQuery, ApiResponse response, ViewDisplay viewDisplay) {
22
        super(markupId);
×
23

24
        add(new AttributeAppender("class", " col-" + viewDisplay.getDisplayWidth()));
×
25

26
        String label = grlcQuery.getLabel();
×
27
        if (viewDisplay.getView().getTitle() != null) {
×
28
            label = viewDisplay.getView().getTitle();
×
29
        }
30
        add(new Label("label", label));
×
31
        if (viewDisplay.getNanopubId() != null) {
×
32
            add(new BookmarkablePageLink<Void>("np", ExplorePage.class, new PageParameters().set("id", viewDisplay.getNanopubId())));
×
33
        } else {
34
            add(new Label("np").setVisible(false));
×
35
        }
36
        RepeatingView listItems = new RepeatingView("listItems");
×
37
        boolean hasExternalLink = Arrays.stream(response.getHeader()).toList().contains("link");
×
38
        for (ApiResponseEntry entry : response.getData()) {
×
39
            String labelText;
40
            if (hasExternalLink && entry.get("link") != null && !entry.get("link").isBlank()) {
×
41
                labelText = "<a href=\"" + entry.get("link") + "\">";
×
42
                labelText = labelText.concat(entry.get(response.getHeader()[0]));
×
43
                labelText = labelText.concat("</a>");
×
44
            } else {
45
                labelText = buildInlineLabel(entry, response);
×
46
            }
47
            listItems.add(new Label(listItems.newChildId(), labelText).setEscapeModelStrings(false));
×
48
        }
×
49
        add(listItems);
×
50
    }
×
51

52
    private String buildInlineLabel(ApiResponseEntry entry, ApiResponse response) {
53
        return Arrays.stream(response.getHeader())
×
54
                .map(entry::get)
×
55
                .filter(entryValue -> entryValue != null && !entryValue.isBlank())
×
56
                .map(entryValue -> Utils.looksLikeHtml(entryValue) ? Utils.sanitizeHtml(entryValue) : entryValue)
×
57
                .collect(Collectors.joining(", "));
×
58
    }
59

60
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc