diff --git a/src/core/templatetags/hub_absolute.py b/src/core/templatetags/hub_absolute.py index 92988b1f58969fadaca8ff607b99fb50a92e2948..4e8db3b4cb5117a8bce128afd7e2817a58eb8ebb 100644 --- a/src/core/templatetags/hub_absolute.py +++ b/src/core/templatetags/hub_absolute.py @@ -1,8 +1,12 @@ +from typing import Optional + from django.conf import settings from django.conf.urls.i18n import i18n_patterns from django.contrib import admin +from django.http import HttpRequest from django.template.defaulttags import register from django.urls import NoReverseMatch, get_script_prefix, include, path, reverse, set_script_prefix +from django.utils import translation PREFIXES = { 'admin': settings.ADMIN_BASE_URL, @@ -42,13 +46,28 @@ URL_CONFIGS = { @register.simple_tag -def hub_absolute(url: str, *args, i18n: bool = True, query_string: str = '', **kwargs): +def hub_absolute(url: str, *args, i18n: bool = True, lang: Optional[str] = None, query_string: str = '', **kwargs): try: app, _ = url.split(':') except ValueError: raise NoReverseMatch('No reverse found, missing namespace') thread_prefix = get_script_prefix() set_script_prefix(PREFIXES[app]) - reverse_url = reverse(url, URL_CONFIGS['i18n' if i18n else 'plain'][app], current_app=app, args=args, kwargs=kwargs) + cur_language = translation.get_language() + try: + if lang: + # switch language if requested + translation.activate(lang) + reverse_url = reverse(url, URL_CONFIGS['i18n' if i18n else 'plain'][app], current_app=app, args=args, kwargs=kwargs) + finally: + translation.activate(cur_language) set_script_prefix(thread_prefix) return reverse_url if not query_string else f'{reverse_url}?{query_string}' + + +@register.simple_tag +def hub_absolute_self(request: HttpRequest, i18n: bool = True, lang: Optional[str] = None): + url = f'{request.resolver_match.app_name}:{request.resolver_match.url_name}' + query_string = request.META.get('QUERY_STRING') + + return hub_absolute(url, i18n=i18n, lang=lang, query_string=query_string, *request.resolver_match.args, **request.resolver_match.kwargs) diff --git a/src/plainui/jinja2.py b/src/plainui/jinja2.py index c33949e63057e6487716b007a34d4eb5ccaf97b0..f06a6148c1e6056b8beed4cfbea9becfe09a7fbb 100644 --- a/src/plainui/jinja2.py +++ b/src/plainui/jinja2.py @@ -1,11 +1,11 @@ import re from datetime import datetime, timedelta -from django.conf import settings from typing import Any from jinja2 import Environment, pass_context from jinja2.runtime import Context +from django.conf import settings from django.contrib.humanize.templatetags.humanize import NaturalTimeFormatter from django.contrib.messages import get_messages from django.http import HttpRequest @@ -22,7 +22,7 @@ from modeltranslation.fields import build_localized_fieldname from modeltranslation.settings import AVAILABLE_LANGUAGES from core.models import PlatformUser, UserBadge -from core.templatetags.hub_absolute import hub_absolute +from core.templatetags.hub_absolute import hub_absolute, hub_absolute_self from core.templatetags.update_parameters import update_parameters from plainui.utils import fetch_wiki_page @@ -284,6 +284,7 @@ def environment(**options): 'get_language': get_language, 'get_messages': get_messages, 'hub_absolute': hub_absolute, + 'hub_absolute_self': hub_absolute_self, 'json_script': json_script, 'num_of_notifications': num_of_notifications, 'num_of_unread_messages': num_of_unread_messages, diff --git a/src/plainui/jinja2/plainui/components/header_buttons.html b/src/plainui/jinja2/plainui/components/header_buttons.html index 4cde1609c239923aa6cd16c90b0252748f5c8280..5d85b6ec889b01e05cb8a9dc0b3ddbe18682c355 100644 --- a/src/plainui/jinja2/plainui/components/header_buttons.html +++ b/src/plainui/jinja2/plainui/components/header_buttons.html @@ -140,7 +140,7 @@ {% macro share(title=_("share this "), color="transparent" ) -%} {% if not disable_share %} <a - href="{{ hub_absolute(request.resolver_match.view_name, i18n=False, query_string=request.META.QUERY_STRING, *view.args, **view.kwargs) if view else hub_absolute(request.resolver_match.view_name, i18n=False, query_string=request.META.QUERY_STRING) }}" + href="{{ hub_absolute_self(request, i18n=False) }}" class="btn-icon-big btn-{{ color }} nav-link" title="{{ title }}" target="_blank"