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

knowledgepixels / nanodash / 21642716107

03 Feb 2026 06:31PM UTC coverage: 14.255% (-0.08%) from 14.333%
21642716107

push

github

ashleycaselli
feat(KPXL_TERMS): add ITEM_LIST_VIEW to supported view types

582 of 5240 branches covered (11.11%)

Branch coverage included in aggregate %.

1522 of 9520 relevant lines covered (15.99%)

2.09 hits per line

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

0.0
src/main/java/com/knowledgepixels/nanodash/page/HomePage.java
1
package com.knowledgepixels.nanodash.page;
2

3
import com.knowledgepixels.nanodash.*;
4
import com.knowledgepixels.nanodash.component.*;
5
import com.knowledgepixels.nanodash.template.Template;
6
import com.knowledgepixels.nanodash.template.TemplateData;
7
import org.apache.wicket.markup.html.basic.Label;
8
import org.apache.wicket.markup.repeater.Item;
9
import org.apache.wicket.markup.repeater.data.DataView;
10
import org.apache.wicket.markup.repeater.data.ListDataProvider;
11
import org.apache.wicket.request.mapper.parameter.PageParameters;
12
import org.eclipse.rdf4j.model.IRI;
13
import org.nanopub.extra.services.ApiResponseEntry;
14
import org.nanopub.extra.services.QueryRef;
15

16
import java.util.ArrayList;
17
import java.util.List;
18

19
/**
20
 * The home page of Nanodash, which shows the most recent nanopublications
21
 * and the latest accepted nanopublications.
22
 */
23
public class HomePage extends NanodashPage {
24

25
    /**
26
     * The mount path for this page.
27
     */
28
    public static final String MOUNT_PATH = "/";
29

30
    /**
31
     * {@inheritDoc}
32
     */
33
    @Override
34
    public String getMountPath() {
35
        return MOUNT_PATH;
×
36
    }
37

38
    /**
39
     * Constructor for the home page.
40
     *
41
     * @param parameters the page parameters
42
     */
43
    public HomePage(final PageParameters parameters) {
44
        super(parameters);
×
45

46
        add(new TitleBar("titlebar", this, null));
×
47
        final NanodashSession session = NanodashSession.get();
×
48
        String v = WicketApplication.getThisVersion();
×
49
        String lv = WicketApplication.getLatestVersion();
×
50
        if (NanodashPreferences.get().isOrcidLoginMode()) {
×
51
            add(new Label("warning", ""));
×
52
        } else if (v.endsWith("-SNAPSHOT")) {
×
53
            add(new Label("warning", "You are running a temporary snapshot version of Nanodash (" + v + "). The latest public version is " + lv + "."));
×
54
        } else if (lv != null && !v.equals(lv)) {
×
55
            add(new Label("warning", "There is a new version available: " + lv + ". You are currently using " + v + ". " +
×
56
                                     "Run 'update' (Unix/Mac) or 'update-under-windows.bat' (Windows) to update to the latest version, or manually download it " +
57
                                     "<a href=\"" + WicketApplication.LATEST_RELEASE_URL + "\">here</a>.").setEscapeModelStrings(false));
×
58
        } else {
59
            add(new Label("warning", ""));
×
60
        }
61
        if (NanodashPreferences.get().isReadOnlyMode()) {
×
62
            add(new Label("text", "This is a read-only instance, so you cannot publish new nanopublications here."));
×
63
        } else if (NanodashSession.get().isProfileComplete()) {
×
64
            add(new Label("text", ""));
×
65
        } else if (NanodashPreferences.get().isOrcidLoginMode() && session.getUserIri() == null) {
×
66
            String loginUrl = OrcidLoginPage.getOrcidLoginUrl(".");
×
67
            add(new Label("text", "In order to see your own nanopublications and publish new ones, <a href=\"" + loginUrl + "\">login to ORCID</a> first.").setEscapeModelStrings(false));
×
68
        } else {
×
69
            add(new Label("text", "Before you can start, you first need to <a href=\"" + ProfilePage.MOUNT_PATH + "\">complete your profile</a>.").setEscapeModelStrings(false));
×
70
        }
71

72
        setOutputMarkupId(true);
×
73

74
        final QueryRef rQueryRef = new QueryRef(QueryApiAccess.GET_MOST_RECENT_NANOPUBS);
×
75
        View mostRecentNanopubsView = View.get("https://w3id.org/np/RA85WirEeiXnxKdoL5IJMgnz9J5KcQLivapXLzTrupT6k/most-recent-nanopubs");
×
76
        add(new DataView<ViewDisplay>("mostrecent", new ListDataProvider<ViewDisplay>(List.of(new ViewDisplay(mostRecentNanopubsView)))) {
×
77

78
            @Override
79
            protected void populateItem(Item<ViewDisplay> item) {
80
                item.add(QueryResultNanopubSetBuilder.create("view", rQueryRef, item.getModelObject())
×
81
                        .build());
×
82
            }
×
83
        });
84

85
        View topCreatorsView = View.get("https://w3id.org/np/RAuv15ISgaPadgIj_LCSQNd2QRKmMcPulun6NyiblzEOs/top-creators-last-30days");
×
86
        add(new DataView<ViewDisplay>("topCreators", new ListDataProvider<ViewDisplay>(List.of(new ViewDisplay(topCreatorsView)))) {
×
87

88
            @Override
89
            protected void populateItem(Item<ViewDisplay> item) {
90
                item.add(new ItemListPanel<IRI>(
×
91
                        "creatorsView",
92
                        topCreatorsView.getTitle(),
×
93
                        new QueryRef(topCreatorsView.getQuery().getQueryId()),
×
94
                        (apiResponse) -> {
95
                            List<IRI> users = new ArrayList<>();
×
96
                            for (ApiResponseEntry e : apiResponse.getData()) {
×
97
                                users.add(Utils.vf.createIRI(e.get("userid")));
×
98
                            }
×
99
                            return users;
×
100
                        },
101
                        (userIri) -> new ItemListElement("item", UserPage.class, new PageParameters().set("id", userIri), User.getShortDisplayName(userIri))
×
102
                ));
103
            }
×
104
        });
105

106
        View getStartedView = View.get("https://w3id.org/np/RAx2ljM4FrwsW9evtQj5LJWlL21tJR3Z-b__PdOpws2lY/suggested-templates-get-started");
×
107
        add(new DataView<ViewDisplay>("getStartedTemplates", new ListDataProvider<ViewDisplay>(List.of(new ViewDisplay(topCreatorsView)))) {
×
108

109
            @Override
110
            protected void populateItem(Item<ViewDisplay> item) {
111
                item.add(new ItemListPanel<Template>(
×
112
                        "getStartedTemplatesView",
113
                        getStartedView.getTitle(),
×
114
                        new QueryRef(getStartedView.getQuery().getQueryId()),
×
115
                        TemplateData::getTemplateList,
116
                        (template) -> new TemplateItem("item", template)
×
117
                ));
118
            }
×
119
        });
120

121
    }
×
122

123
}
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