From 2e8b4c568a8fefb4f340a7ef81be248381ce321d Mon Sep 17 00:00:00 2001
From: jh-RLI
Date: Thu, 12 Feb 2026 14:30:07 +0100
Subject: [PATCH 01/17] #1911: move to ontology app
---
oeo_viewer/frontend/src/pages/OeoIriPages.jsx | 2 --
1 file changed, 2 deletions(-)
delete mode 100644 oeo_viewer/frontend/src/pages/OeoIriPages.jsx
diff --git a/oeo_viewer/frontend/src/pages/OeoIriPages.jsx b/oeo_viewer/frontend/src/pages/OeoIriPages.jsx
deleted file mode 100644
index 7874f7115..000000000
--- a/oeo_viewer/frontend/src/pages/OeoIriPages.jsx
+++ /dev/null
@@ -1,2 +0,0 @@
-// SPDX-FileCopyrightText: 2025 Jonas Huber © Reiner Lemoine Institut
-// SPDX-License-Identifier: AGPL-3.0-or-later
From 6a7caf2f333cadc330d957d3562a06ded9526a2f Mon Sep 17 00:00:00 2001
From: jh-RLI
Date: Fri, 13 Feb 2026 15:40:11 +0100
Subject: [PATCH 02/17] #1911: Add the new/reworked oeo iri pages and migrate
to the vite setup
---
vite.config.mjs | 1 +
1 file changed, 1 insertion(+)
diff --git a/vite.config.mjs b/vite.config.mjs
index dcef0617c..b95de1438 100644
--- a/vite.config.mjs
+++ b/vite.config.mjs
@@ -66,6 +66,7 @@ export default defineConfig({
factsheet: resolve("./factsheet/frontend/src/index.jsx"),
opr_review: resolve("./dataedit/static/peer_review/main.js"),
oeo_viewer: resolve("./oeo_viewer/frontend/src/index.jsx"),
+ ontology: resolve("./ontology/frontend/src/index.jsx"),
wizard: resolve("./dataedit/static/wizard/wizard.js"),
metaedit: resolve("./dataedit/static/metaedit/metaedit.js"),
},
From 655ebfa3d95f7b8dc0858a768f5c2aa767934ae6 Mon Sep 17 00:00:00 2001
From: jh-RLI
Date: Fri, 13 Feb 2026 15:42:39 +0100
Subject: [PATCH 03/17] #1911: Update the id of the oeo iri page django url
---
base/templates/base/_header.html | 2 +-
modelview/templates/modelview/modellist.html | 12 ++++++------
ontology/templates/ontology/class.html | 6 +++---
.../ontology/partial_ontology_sidebar_content.html | 2 +-
4 files changed, 11 insertions(+), 11 deletions(-)
diff --git a/base/templates/base/_header.html b/base/templates/base/_header.html
index a9b46bc6a..7d7378f75 100644
--- a/base/templates/base/_header.html
+++ b/base/templates/base/_header.html
@@ -76,7 +76,7 @@
@@ -32,7 +32,7 @@ Back to the super classes:
@@ -108,7 +108,7 @@ Sub classes:
href="#collapse{{ forloop.counter }}">{{ sub_class.name }}
diff --git a/ontology/templates/ontology/partial_ontology_sidebar_content.html b/ontology/templates/ontology/partial_ontology_sidebar_content.html
index f28dd0a57..0111c7f6b 100644
--- a/ontology/templates/ontology/partial_ontology_sidebar_content.html
+++ b/ontology/templates/ontology/partial_ontology_sidebar_content.html
@@ -22,7 +22,7 @@
View the oeo version {{ version }}
From 30bd59569f3adf5efa90ce5259aaf9d227375319 Mon Sep 17 00:00:00 2001
From: jh-RLI
Date: Fri, 13 Feb 2026 16:06:52 +0100
Subject: [PATCH 04/17] #1911: Update the nav menu to reflect all available oeo
pages with updates url path id's
---
base/templates/base/_header.html | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/base/templates/base/_header.html b/base/templates/base/_header.html
index 7d7378f75..e21af2de6 100644
--- a/base/templates/base/_header.html
+++ b/base/templates/base/_header.html
@@ -76,7 +76,9 @@
} />
+
+
+
+
+ );
+};
diff --git a/ontology/frontend/src/features/terminology/config/TssConfigProvider.jsx b/ontology/frontend/src/features/terminology/config/TssConfigProvider.jsx
new file mode 100644
index 000000000..16359e744
--- /dev/null
+++ b/ontology/frontend/src/features/terminology/config/TssConfigProvider.jsx
@@ -0,0 +1,28 @@
+// SPDX-FileCopyrightText: 2025 Jonas Huber © Reiner Lemoine Institut
+// SPDX-License-Identifier: AGPL-3.0-or-later
+
+import React, { createContext, useContext, useMemo } from "react";
+
+const TssConfigCtx = createContext(null);
+
+export function TssConfigProvider({
+ children,
+ // read from Vite env (fallback to OLS API + OEO)
+ apiBase = import.meta.env.VITE_TSS_API_BASE ?? "",
+ ontology = import.meta.env.VITE_TSS_DEFAULT_ONTOLOGY ?? "",
+ lang = import.meta.env.VITE_TSS_LANG ?? "en",
+ requestHeaders = {},
+}) {
+ const value = useMemo(() => ({ apiBase, ontology, lang, requestHeaders }), [
+ apiBase, ontology, lang, requestHeaders,
+ ]);
+ return {children};
+}
+
+export function useTssConfigCtx() {
+ const ctx = useContext(TssConfigCtx);
+ if (!ctx) throw new Error("useTssConfigCtx must be used within ");
+ return ctx;
+}
+
+export default TssConfigProvider;
diff --git a/ontology/frontend/src/features/terminology/hooks/useTssConfig.js b/ontology/frontend/src/features/terminology/hooks/useTssConfig.js
new file mode 100644
index 000000000..31023752e
--- /dev/null
+++ b/ontology/frontend/src/features/terminology/hooks/useTssConfig.js
@@ -0,0 +1,9 @@
+// SPDX-FileCopyrightText: 2025 Jonas Huber © Reiner Lemoine Institut
+// SPDX-License-Identifier: AGPL-3.0-or-later
+
+import { useTssConfigCtx } from "../config/TssConfigProvider";
+
+export function useTssConfig() {
+ // later you can read from env and merge, but for now just return the ctx
+ return useTssConfigCtx();
+}
diff --git a/ontology/frontend/src/features/terminology/services/tssClient.js b/ontology/frontend/src/features/terminology/services/tssClient.js
new file mode 100644
index 000000000..0858fa09d
--- /dev/null
+++ b/ontology/frontend/src/features/terminology/services/tssClient.js
@@ -0,0 +1,20 @@
+// SPDX-FileCopyrightText: 2025 Jonas Huber © Reiner Lemoine Institut
+// SPDX-License-Identifier: AGPL-3.0-or-later
+
+import axios from "axios";
+
+// Small helper to build a client bound to the current config
+export function makeTssClient({ apiBase, requestHeaders = {} }) {
+ const http = axios.create({
+ baseURL: apiBase.replace(/\/+$/, "/"), // ensure trailing slash
+ headers: { ...requestHeaders },
+ timeout: 20_000,
+ });
+
+ return {
+ // Example endpoints – adjust to the suite/gateway you use
+ search: (params) => http.get("search", { params }),
+ concept: (iri) => http.get("concept", { params: { iri } }),
+ hierarchy: (iri) => http.get("hierarchy", { params: { iri } }),
+ };
+}
diff --git a/ontology/frontend/src/index.jsx b/ontology/frontend/src/index.jsx
new file mode 100644
index 000000000..69e3ffaa7
--- /dev/null
+++ b/ontology/frontend/src/index.jsx
@@ -0,0 +1,44 @@
+// SPDX-FileCopyrightText: 2025 Jonas Huber © Reiner Lemoine Institut
+// SPDX-License-Identifier: AGPL-3.0-or-later
+
+import React, { StrictMode } from "react";
+import { createRoot } from "react-dom/client";
+import App from "./App.jsx";
+
+import { QueryClient, QueryClientProvider } from "react-query";
+import { EuiProvider } from "@elastic/eui";
+
+import { TssConfigProvider } from "./features/terminology/config/TssConfigProvider";
+
+
+
+// one client for the whole app
+const queryClient = new QueryClient({
+ defaultOptions: {
+ queries: {
+ staleTime: 60_000,
+ refetchOnWindowFocus: false,
+ retry: 1,
+ },
+ },
+});
+
+function mount() {
+ const el = document.getElementById("main");
+ if (!el || el.dataset.mounted) return;
+ el.dataset.mounted = "1";
+ createRoot(el).render(
+
+
+
+
+
+
+
+
+
+ );
+}
+
+if (document.readyState === "loading") document.addEventListener("DOMContentLoaded", mount);
+else mount();
From d12db50df2979cb4e5aeafecdaf41348314c90b6 Mon Sep 17 00:00:00 2001
From: jh-RLI
Date: Fri, 13 Feb 2026 16:16:37 +0100
Subject: [PATCH 09/17] #1911: Add oeo iri page with components for IRI,
Navigation, Entity info and Relation info for all Entity types -> Class,
Property & Individuals
---
ontology/frontend/src/pages/OeoIriPages.jsx | 139 ++++++++++++++++++++
1 file changed, 139 insertions(+)
create mode 100644 ontology/frontend/src/pages/OeoIriPages.jsx
diff --git a/ontology/frontend/src/pages/OeoIriPages.jsx b/ontology/frontend/src/pages/OeoIriPages.jsx
new file mode 100644
index 000000000..b12d184e1
--- /dev/null
+++ b/ontology/frontend/src/pages/OeoIriPages.jsx
@@ -0,0 +1,139 @@
+// SPDX-FileCopyrightText: 2025 Jonas Huber © Reiner Lemoine Institut
+// SPDX-License-Identifier: AGPL-3.0-or-later
+
+import React, { useState } from "react";
+import { useNavigate, useParams } from "react-router-dom";
+import {
+ EuiPageTemplate,
+ EuiPanel,
+ EuiSpacer,
+ EuiTitle,
+ EuiTabs,
+ EuiTab,
+ EuiFlexGroup,
+ EuiFlexItem,
+ EuiCallOut,
+} from "@elastic/eui";
+
+import TssEntityInfo from "../features/terminology/components/TssEntityInfo";
+import TssEntityRelations from "../features/terminology/components/TssEntityRelations";
+import TssIriWidget from "../features/terminology/components/TssIriWidget";
+import TssEntityNavButtons from "../features/terminology/components/TssEntityNavButtons";
+
+function resolveIri(ontology, shortForm) {
+ if (!shortForm) return "";
+
+ const oboPrefixes = ["UO", "BFO", "RO", "IAO", "PATO", "ENVO", "CHEBI", "NCBITaxon"];
+ const prefix = shortForm.split("_")[0];
+
+ if (oboPrefixes.includes(prefix)) {
+ return `http://purl.obolibrary.org/obo/${shortForm}`;
+ }
+
+ return `https://openenergyplatform.org/ontology/${ontology}/${shortForm}`;
+}
+
+export default function OeoIriPages() {
+ const { ontology, short_form } = useParams();
+ const navigate = useNavigate();
+
+ const fetchIri = resolveIri(ontology, short_form);
+ const displayIri = `https://openenergyplatform.org/ontology/${ontology}/${short_form}`;
+
+ const [entityType, setEntityType] = useState("class");
+
+ const tabs = [
+ { id: 'class', name: 'Class' },
+ { id: 'property', name: 'Property' },
+ { id: 'individual', name: 'Individual' },
+ ];
+
+ const handleNavigateToEntity = (event) => {
+ let nextId = event.short_form;
+
+ if (!nextId && event.iri) {
+ const parts = event.iri.split("/");
+ nextId = parts[parts.length - 1];
+ }
+
+ if (nextId) {
+ navigate(`/${ontology}/${nextId}`);
+ window.scrollTo(0, 0);
+ }
+ };
+
+ return (
+
+
+
+
+ {/* Quick Navigation Buttons */}
+
+
+
+
+
+
+
+ {ontology ? ontology.toUpperCase() : "Ontology"} Entity: {short_form}
+
+
+
+
+
+
+
+
+ Try selecting a different entity type below.
+
+
+
+ {tabs.map((tab) => (
+ setEntityType(tab.id)}
+ >
+ {tab.name}
+
+ ))}
+
+
+
+
+
+
+
+ Entity Information
+
+
+
+
+
+ Relations & Hierarchy
+
+
+
+
+
+ );
+}
From ea5281e21d250ddddbfa98bdbd6bf81543ac5eef Mon Sep 17 00:00:00 2001
From: jh-RLI
Date: Fri, 13 Feb 2026 16:17:40 +0100
Subject: [PATCH 10/17] #1911: Add oeo search page to browse the oeo and filter
by Entity types. The Widget also shows the listings and provides a link to
navigate to an Entity IRI
---
.../frontend/src/pages/EntitySearchPage.jsx | 47 +++++++++++++++++++
1 file changed, 47 insertions(+)
create mode 100644 ontology/frontend/src/pages/EntitySearchPage.jsx
diff --git a/ontology/frontend/src/pages/EntitySearchPage.jsx b/ontology/frontend/src/pages/EntitySearchPage.jsx
new file mode 100644
index 000000000..2ef6ac942
--- /dev/null
+++ b/ontology/frontend/src/pages/EntitySearchPage.jsx
@@ -0,0 +1,47 @@
+// SPDX-FileCopyrightText: 2025 Jonas Huber © Reiner Lemoine Institut
+// SPDX-License-Identifier: AGPL-3.0-or-later
+
+import React from "react";
+import { useParams, useNavigate } from "react-router-dom";
+import { EuiPageTemplate, EuiPanel, EuiTitle, EuiSpacer } from "@elastic/eui";
+import TssSearchResultsList from "../features/terminology/components/TssSearchResultsList";
+
+export default function EntitySearchPage() {
+ const { ontology } = useParams(); // Gets 'oeo', 'mrel', etc. from URL
+ const navigate = useNavigate();
+
+ const handleNavigateToEntity = (event) => {
+ // 1. Try to get the short_form (e.g., OEO_00000123)
+ let shortForm = event.short_form;
+
+ // 2. Fallback: Parse IRI if short_form is missing
+ if (!shortForm && event.iri) {
+ const parts = event.iri.split("/");
+ shortForm = parts[parts.length - 1];
+ }
+
+ if (shortForm) {
+ // Navigate to the Detail Page within this app
+ navigate(`/${ontology}/${shortForm}`);
+ }
+ };
+
+ return (
+
+
+
+ {ontology ? ontology.toUpperCase() : ""} Entity Search
+
+
+
+
+ {/* The configured wrapper handles the TSS widgets specifics */}
+
+
+
+
+ );
+}
From 020e85dbc065539755a08dc0464a01f41b0262b5 Mon Sep 17 00:00:00 2001
From: jh-RLI
Date: Fri, 13 Feb 2026 16:20:30 +0100
Subject: [PATCH 11/17] #1911: Setup TSS components for usage: - Wrap TSS
WIdgets: EntityInfoWIdget, EntityRelationWidget, IriWidget,
SearchResultWidget - Add custom WIdget for navigation to Parent / Child
entities
---
.../terminology/components/TssEntityInfo.jsx | 37 ++++++++
.../components/TssEntityNavButtons.jsx | 95 +++++++++++++++++++
.../components/TssEntityRelations.jsx | 32 +++++++
.../terminology/components/TssIriWidget.jsx | 19 ++++
.../components/TssSearchResultsList.jsx | 39 ++++++++
5 files changed, 222 insertions(+)
create mode 100644 ontology/frontend/src/features/terminology/components/TssEntityInfo.jsx
create mode 100644 ontology/frontend/src/features/terminology/components/TssEntityNavButtons.jsx
create mode 100644 ontology/frontend/src/features/terminology/components/TssEntityRelations.jsx
create mode 100644 ontology/frontend/src/features/terminology/components/TssIriWidget.jsx
create mode 100644 ontology/frontend/src/features/terminology/components/TssSearchResultsList.jsx
diff --git a/ontology/frontend/src/features/terminology/components/TssEntityInfo.jsx b/ontology/frontend/src/features/terminology/components/TssEntityInfo.jsx
new file mode 100644
index 000000000..a612fbc61
--- /dev/null
+++ b/ontology/frontend/src/features/terminology/components/TssEntityInfo.jsx
@@ -0,0 +1,37 @@
+// SPDX-FileCopyrightText: 2025 Jonas Huber © Reiner Lemoine Institut
+// SPDX-License-Identifier: AGPL-3.0-or-later
+
+// ontology/frontend/src/features/terminology/components/TssEntityInfo.jsx
+import React from "react";
+import { EntityInfoWidget } from "@ts4nfdi/terminology-service-suite";
+import { useTssConfig } from "../hooks/useTssConfig";
+
+export default function TssEntityInfo({
+ iri,
+ ontologyId,
+ entityType = "class", // Default, but can be overridden
+ onNavigateToEntity,
+ onNavigateToOntology
+}) {
+ const { apiBase, ontology: configOntology } = useTssConfig();
+ // const activeOntology = ontologyId || configOntology;
+
+ // Check if it's an external term by looking at the IRI
+ const isExternal = iri.includes("purl.obolibrary.org");
+
+ return (
+ { }}
+ onNavigateToEntity={onNavigateToEntity || (() => { })}
+ onNavigateToOntology={onNavigateToOntology || (() => { })}
+ />
+ );
+}
diff --git a/ontology/frontend/src/features/terminology/components/TssEntityNavButtons.jsx b/ontology/frontend/src/features/terminology/components/TssEntityNavButtons.jsx
new file mode 100644
index 000000000..8c974ca78
--- /dev/null
+++ b/ontology/frontend/src/features/terminology/components/TssEntityNavButtons.jsx
@@ -0,0 +1,95 @@
+// SPDX-FileCopyrightText: 2025 Jonas Huber © Reiner Lemoine Institut
+// SPDX-License-Identifier: AGPL-3.0-or-later
+
+import React from "react";
+import { useQuery } from "react-query";
+import { EuiButton, EuiFlexGroup, EuiFlexItem, EuiLoadingSpinner, EuiText } from "@elastic/eui";
+import { useTssConfig } from "../hooks/useTssConfig";
+
+export default function TssEntityNavButtons({ iri, ontologyId, onNavigate }) {
+ const { apiBase } = useTssConfig();
+
+ // URL-encode the IRI as required by the TIB API path
+ const encodedIri = encodeURIComponent(encodeURIComponent(iri));
+
+ // Construct base URL (handle global vs specific ontology routing)
+ const baseUrl = ontologyId
+ ? `${apiBase}ontologies/${ontologyId}/terms/${encodedIri}`
+ : `${apiBase}terms/${encodedIri}`;
+
+ // Fetch Parents
+ const { data: parents, isLoading: loadingParents } = useQuery(
+ ["entityParents", ontologyId, iri],
+ () => fetch(`${baseUrl}/parents`).then((res) => (res.ok ? res.json() : null)),
+ { enabled: !!iri }
+ );
+
+ // Fetch Children
+ const { data: children, isLoading: loadingChildren } = useQuery(
+ ["entityChildren", ontologyId, iri],
+ () => fetch(`${baseUrl}/children`).then((res) => (res.ok ? res.json() : null)),
+ { enabled: !!iri }
+ );
+
+ // Extract the arrays from the HAL JSON response format
+ const parentTerms = parents?._embedded?.terms || [];
+ const childTerms = children?._embedded?.terms || [];
+
+ if (loadingParents || loadingChildren) {
+ return ;
+ }
+
+ if (parentTerms.length === 0 && childTerms.length === 0) {
+ return null; // Don't render anything if no hierarchy exists
+ }
+
+ return (
+
+ {/* Parents (Up) */}
+ {parentTerms.length > 0 && (
+
+
+ {parentTerms.map((parent) => (
+
+ onNavigate(parent)}
+ >
+ {parent.label || parent.short_form}
+
+
+ ))}
+
+
+ )}
+
+ {/* Separator if both exist */}
+ {parentTerms.length > 0 && childTerms.length > 0 && (
+
+ |
+
+ )}
+
+ {/* Children (Down) */}
+ {childTerms.length > 0 && (
+
+
+ {childTerms.map((child) => (
+
+ onNavigate(child)}
+ >
+ {child.label || child.short_form}
+
+
+ ))}
+
+
+ )}
+
+ );
+}
diff --git a/ontology/frontend/src/features/terminology/components/TssEntityRelations.jsx b/ontology/frontend/src/features/terminology/components/TssEntityRelations.jsx
new file mode 100644
index 000000000..adda93e78
--- /dev/null
+++ b/ontology/frontend/src/features/terminology/components/TssEntityRelations.jsx
@@ -0,0 +1,32 @@
+// SPDX-FileCopyrightText: 2025 Jonas Huber © Reiner Lemoine Institut
+// SPDX-License-Identifier: AGPL-3.0-or-later
+
+// ontology/frontend/src/features/terminology/components/TssEntityRelations.jsx
+import React from "react";
+import { EntityRelationsWidget } from "@ts4nfdi/terminology-service-suite";
+import { useTssConfig } from "../hooks/useTssConfig";
+
+export default function TssEntityRelations({
+ iri,
+ ontologyId,
+ entityType = "term", // "term" often works best for relations to show instances too
+ onNavigateToEntity
+}) {
+ const { apiBase, ontology: configOntology } = useTssConfig();
+ const activeOntology = ontologyId || configOntology;
+
+ return (
+ { }}
+ onNavigateToEntity={onNavigateToEntity || (() => { })}
+ onNavigateToOntology={() => { }}
+ />
+ );
+}
diff --git a/ontology/frontend/src/features/terminology/components/TssIriWidget.jsx b/ontology/frontend/src/features/terminology/components/TssIriWidget.jsx
new file mode 100644
index 000000000..bc7504784
--- /dev/null
+++ b/ontology/frontend/src/features/terminology/components/TssIriWidget.jsx
@@ -0,0 +1,19 @@
+// SPDX-FileCopyrightText: 2025 Jonas Huber © Reiner Lemoine Institut
+// SPDX-License-Identifier: AGPL-3.0-or-later
+
+import React from "react";
+import { IriWidget } from "@ts4nfdi/terminology-service-suite";
+
+export default function TssIriWidget({ iri }) {
+ return (
+
+ );
+}
diff --git a/ontology/frontend/src/features/terminology/components/TssSearchResultsList.jsx b/ontology/frontend/src/features/terminology/components/TssSearchResultsList.jsx
new file mode 100644
index 000000000..383d50d35
--- /dev/null
+++ b/ontology/frontend/src/features/terminology/components/TssSearchResultsList.jsx
@@ -0,0 +1,39 @@
+// SPDX-FileCopyrightText: 2025 Jonas Huber © Reiner Lemoine Institut
+// SPDX-License-Identifier: AGPL-3.0-or-later
+
+import React, { useMemo } from "react";
+import { SearchResultsListWidget } from "@ts4nfdi/terminology-service-suite";
+import { useTssConfig } from "../hooks/useTssConfig";
+
+export default function TssSearchResultsList({
+ ontologyId,
+ query = "d*",
+ onNavigateToEntity,
+ onNavigateToOntology,
+}) {
+ const { apiBase, ontology: configOntology } = useTssConfig();
+
+ const activeOntology = ontologyId || configOntology;
+
+ const parameter = useMemo(() => {
+ return `collection=nfdi4energy&ontology=${activeOntology}&fieldList=description,label,iri,ontology_name,type,short_form`;
+ }, [activeOntology]);
+
+ return (
+ href behavior in the TSS widget,
+ // allowing our custom onNavigateToEntity handler to process the click and route locally.
+ targetLink=""
+ onNavigateToEntity={onNavigateToEntity}
+ onNavigateToOntology={onNavigateToOntology || (() => { })}
+ />
+ );
+}
From ee900f65dc238bc7a7cfb251c7781cf079176005 Mon Sep 17 00:00:00 2001
From: jh-RLI
Date: Fri, 13 Feb 2026 16:21:06 +0100
Subject: [PATCH 12/17] #1911: Link the oeo search and the oeo iri pages in the
OEO overview page
---
ontology/templates/ontology/about.html | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/ontology/templates/ontology/about.html b/ontology/templates/ontology/about.html
index e9c8d07b2..b375e20f3 100644
--- a/ontology/templates/ontology/about.html
+++ b/ontology/templates/ontology/about.html
@@ -45,8 +45,8 @@ Open Energy Ontology
system modeling, updated regularly following a release cycle.
- Access the latest version {{ version }}
- here.
+ Access the latest version {{ version }} using the
+ OEO viewer or browse its content in the OEO search. All entities available in the OEO can be accessed in the OEO entity detail pages when navigating to their IRI.
Domain ontology: What is that?
From 539c5823ce4d30487e2f313650722bd72794202f Mon Sep 17 00:00:00 2001
From: jh-RLI
Date: Fri, 13 Feb 2026 16:21:27 +0100
Subject: [PATCH 13/17] #1911: Fix updated url path id
---
ontology/tests/test_views.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/ontology/tests/test_views.py b/ontology/tests/test_views.py
index 5d155ef73..f637c01af 100644
--- a/ontology/tests/test_views.py
+++ b/ontology/tests/test_views.py
@@ -21,7 +21,7 @@ def test_views(self):
self.get("ontology:index")
self.get(
- "ontology:oeo-classes",
+ "ontology:oeo-class-detail",
kwargs={"ontology": "oeo", "module_or_id": "BFO_0000001"},
)
self.get("ontology:oeo-s-c")
From 38cf47bd594cdf4ca584011c38d8f0a00b54b9c9 Mon Sep 17 00:00:00 2001
From: jh-RLI
Date: Fri, 13 Feb 2026 16:43:44 +0100
Subject: [PATCH 14/17] #1911 Update changelog
---
versions/changelogs/current.md | 29 +++++++++++++++++++++++++++--
1 file changed, 27 insertions(+), 2 deletions(-)
diff --git a/versions/changelogs/current.md b/versions/changelogs/current.md
index 60855a501..b3cd02c87 100644
--- a/versions/changelogs/current.md
+++ b/versions/changelogs/current.md
@@ -8,11 +8,36 @@ SPDX-License-Identifier: CC0-1.0
# Changes to the oeplatform code
+## Features
+
+- Add a new OEO search page for simple search and browsing of OEO entities
+ [(#2234)](https://github.com/OpenEnergyPlatform/oeplatform/pull/2234)
+- Add interactive parent/child hierarchy navigation and IRI copy functionality
+ to entity detail pages
+ [(#2234)](https://github.com/OpenEnergyPlatform/oeplatform/pull/2234)
+
## Changes
-### Features
+- Reworked the former OEO Class pages into OEO Entity pages, now supporting
+ details for Classes, Properties, and Individuals
+ [(#2234)](https://github.com/OpenEnergyPlatform/oeplatform/pull/2234)
+- Integrated NFDI4Energy Terminology Service Suite (TSS) React widgets for
+ standardized search, metadata, and relations displays
+ [(#2234)](https://github.com/OpenEnergyPlatform/oeplatform/pull/2234)
+- Improved IRI resolution to seamlessly handle and route external/imported
+ ontology terms (e.g., OBO Foundry)
+ [(#2234)](https://github.com/OpenEnergyPlatform/oeplatform/pull/2234)
+- Implemented client-side React routing (SPA) for seamless transitions between
+ search results and entity details
+ [(#2234)](https://github.com/OpenEnergyPlatform/oeplatform/pull/2234)
+
+## Removed
+
+- Removed the previous custom backend and frontend implementation for the OEO
+ Class / IRI pages
+ [(#2234)](https://github.com/OpenEnergyPlatform/oeplatform/pull/2234)
-### Bugs
+## Bugs
## Documentation updates
From c7219f6e110eeea96c0b1ad6fe3c3ad24537703b Mon Sep 17 00:00:00 2001
From: jh-RLI
Date: Fri, 13 Feb 2026 16:46:39 +0100
Subject: [PATCH 15/17] fix reuse
---
ontology/templates/react/entities.html | 2 ++
1 file changed, 2 insertions(+)
diff --git a/ontology/templates/react/entities.html b/ontology/templates/react/entities.html
index 074578fda..7b72f6a94 100644
--- a/ontology/templates/react/entities.html
+++ b/ontology/templates/react/entities.html
@@ -1,3 +1,5 @@
+
+
{% extends "base/base-wide-react.html" %}
{% load django_bootstrap5 %}
{% load django_vite %}
From 7787b8283c2412d46168caab80a52e1674b9b0a1 Mon Sep 17 00:00:00 2001
From: jh-RLI
Date: Fri, 13 Feb 2026 17:56:19 +0100
Subject: [PATCH 16/17] #1911: Fix parameter name
---
ontology/tests/test_views.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/ontology/tests/test_views.py b/ontology/tests/test_views.py
index f637c01af..d005d8034 100644
--- a/ontology/tests/test_views.py
+++ b/ontology/tests/test_views.py
@@ -22,7 +22,7 @@ def test_views(self):
self.get("ontology:index")
self.get(
"ontology:oeo-class-detail",
- kwargs={"ontology": "oeo", "module_or_id": "BFO_0000001"},
+ kwargs={"ontology": "oeo", "term_id": "BFO_0000001"},
)
self.get("ontology:oeo-s-c")
self.get("ontology:oeo-steering-committee")
From ece276d2cb186e9e30abaa78fcd1c53263e06911 Mon Sep 17 00:00:00 2001
From: "pre-commit-ci[bot]"
<66853113+pre-commit-ci[bot]@users.noreply.github.com>
Date: Fri, 13 Feb 2026 16:58:39 +0000
Subject: [PATCH 17/17] [pre-commit.ci] auto fixes from pre-commit.com hooks
for more information, see https://pre-commit.ci
---
versions/changelogs/current.md | 1 -
1 file changed, 1 deletion(-)
diff --git a/versions/changelogs/current.md b/versions/changelogs/current.md
index d4957845c..cb72bd9c2 100644
--- a/versions/changelogs/current.md
+++ b/versions/changelogs/current.md
@@ -48,7 +48,6 @@ SPDX-License-Identifier: CC0-1.0
- Removed the legacy custom backend and frontend implementation of the OEO
Viewer. [(#2222)](https://github.com/OpenEnergyPlatform/oeplatform/pull/2222)
-
## Bugs
- Fixed an issue related to the Bootstrap vs EUI which lead to strange styling