From e3fe49bed750f8eb7249dcc6a96087853ee0f8fb Mon Sep 17 00:00:00 2001 From: Hazel Noack Date: Mon, 19 May 2025 15:05:37 +0200 Subject: [PATCH] feat: added linked article to context --- pyproject.toml | 2 +- src/templates/article_translation.html | 28 ++++++++++++++++++++++++++ stsg/build.py | 19 +++++++++++++++++ 3 files changed, 48 insertions(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index d01c54f..a40f6f8 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ dependencies = [ "watchdog~=6.0.0", "markdown~=3.3.6", "bs4~=0.0.2", - "toml~0.10.2", + "toml~=0.10.2", "jinja2~=3.1.6", ] dynamic = [] diff --git a/src/templates/article_translation.html b/src/templates/article_translation.html index a397dbc..c98dbe4 100644 --- a/src/templates/article_translation.html +++ b/src/templates/article_translation.html @@ -30,6 +30,34 @@ + {% if linked|length %} +
+
+
+ {% for c in linked %} + + {% endfor %} +
+
+
+ {% endif %} + {% if children|length %}
diff --git a/stsg/build.py b/stsg/build.py index c7276d8..6c854bc 100644 --- a/stsg/build.py +++ b/stsg/build.py @@ -178,13 +178,25 @@ class ArticleTranslation: if self.language_code in c.article_translations_map ] + self.linked_context = self.context["linked"] = [] + def __init_content_context__(self): template = jinja2.Template(self.html_content) + template.environment.accessed_keys = [] + template.environment.context_class = ContextDict + self.html_content = template.render({ **CROSS_ARTICLE_CONTEXT, **TRANSLATED_CROSS_ARTICLE_CONTEXT[self.language_code], }) + template.environment.context_class = jinja2.runtime.Context + accessed_keys = template.environment.accessed_keys + for key in accessed_keys: + a = ARTICLE_LAKE[key] + if self.language_code in a.article_translations_map: + self.linked_context.append(a.article_translations_map[self.language_code].context) + self.context["content"] = self.html_content self.context["preview"] = get_preview_text(html_string=self.html_content) @@ -297,6 +309,13 @@ class Article: ac.build() +class ContextDict(jinja2.runtime.Context): + def resolve_or_missing(self, key: str) -> Any: + self.environment.accessed_keys.append(key) + return super().resolve_or_missing(key) + + + # GLOBALS logger = logging.getLogger("stsg.build") CROSS_ARTICLE_CONTEXT: Dict[str, Dict[str, Any]] = {}