-
- API
-
- Learn how to download and publish open data on the OEP using the
- API.
-
- Learn more
-
-
-
- Open Science
-
- Good scientific practice needs open licenses for software, data and
- content.
-
- Learn more
-
-
-
- Open Energy Community
-
- Collaborate and contribute to the development on GitHub.
-
- Learn
- more
-
+
+
+
+
+
+
+ API
+
+ Learn how to download and publish open data on the OEP using the
+ API.
+
+ Learn more
+
+
+
+ Open Science
+
+ Good scientific practice needs open licenses for software, data and
+ content.
+
+ Learn more
+
+
+
+ Open Energy Community
+
+ Collaborate and contribute to the development on GitHub.
+
+ Learn
+ more
+
{% endblock %}
diff --git a/base/templatetags/base_tags.py b/base/templatetags/base_tags.py
index 4ff288fa8..981b5b743 100644
--- a/base/templatetags/base_tags.py
+++ b/base/templatetags/base_tags.py
@@ -3,7 +3,12 @@
SPDX-License-Identifier: AGPL-3.0-or-later
""" # noqa: 501
+from pathlib import Path, PurePosixPath
+
+import markdown2
from django import template
+from django.contrib.staticfiles import finders
+from django.utils.safestring import mark_safe
register = template.Library()
@@ -11,3 +16,34 @@
@register.filter(name="addclass")
def addclass(field, css):
return field.as_widget(attrs={"class": css})
+
+
+def _is_safe_static_path(filename):
+ path = PurePosixPath(filename)
+ return not path.is_absolute() and ".." not in path.parts
+
+
+@register.simple_tag
+def render_markdown(filename):
+ """Find a markdown file in staticfiles and render it as HTML.
+
+ The staticfiles lookup allows markdown content to live in any Django app's
+ static directory. The fallback keeps the old ``base/static/content`` lookup
+ behaviour for existing callers that pass only a filename.
+ """
+ if not _is_safe_static_path(filename):
+ return ""
+
+ md_path = finders.find(filename)
+ if not md_path:
+ md_path = (
+ Path(__file__).resolve().parent.parent / "static" / "content" / filename
+ )
+
+ try:
+ content = Path(md_path).read_text(encoding="utf-8")
+ except OSError:
+ return ""
+
+ markdowner = markdown2.Markdown()
+ return mark_safe(markdowner.convert(content))
diff --git a/dataedit/static/release_info_startpage/release_v1.8.0.md b/dataedit/static/release_info_startpage/release_v1.8.0.md
new file mode 100644
index 000000000..650b912e8
--- /dev/null
+++ b/dataedit/static/release_info_startpage/release_v1.8.0.md
@@ -0,0 +1,28 @@
+
+
+### ✨ Highlights
+
+- **Redesigned Tables listings & Search:** Introduced a dedicated search field
+ for user tables and reworked the table listing UI to display additional
+ metadata directly on the table cards.
+- **Updated OEO Viewer & Entity Pages:** Reorganized the OEO Viewer layout for
+ better hierarchy and mobile responsiveness. Added a language toggle for
+ English/German synonyms, automatic entity-type detection, and an updated Graph
+ View widget that supports graph comparisons.
+- **Scenario Comparison App (Prototype) Update:** Refactored the quantitative
+ scenario comparison prototype to work with the updated OEKG and OEO. The app
+ now uses E-Charts as its graph library.
+- **Automated Metadata Syncing:** The metadata API now synchronizes the
+ documented data schema in the metadata with the actual table schema available
+ in the database.
+- **Bug Fixes & General Improvements:** Fixed an issue in the oemetaBuilder tool
+ that removed specific references on save, corrected the Reviewer & Contributor
+ progress calculations to account for empty fields, and patched an OEO loading
+ bug related to version 2.12.0.
+
+👉 **Check out the full changelog and explore what’s new!**
+[Full Changelog](https://github.com/OpenEnergyPlatform/oeplatform/blob/master/versions/changelogs/1_8_0.md)