]> git.ipfire.org Git - pbs.git/commitdiff
mirrors: Group mirrors by country
authorMichael Tremer <michael.tremer@ipfire.org>
Mon, 17 Feb 2025 11:43:23 +0000 (11:43 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Mon, 17 Feb 2025 11:43:23 +0000 (11:43 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/templates/mirrors/index.html
src/web/base.py
src/web/filters.py

index f6ac4362e127c088a20ca07a3932cb1c4d305f3f..2d423885c9d0c2bb8ca5d8ec80788f4d05085d96 100644 (file)
 
        <section class="section">
                <div class="container">
-                       <div class="block">
-                               {{ MirrorList(mirrors) }}
-                       </div>
+                       {% for country_code, mirrors in mirrors | groupby("country_code") %}
+                               <div class="block">
+                                       <h5 class="title is-5">
+                                               {{ country_code | format_country_code }}
+                                       </h5>
+
+                                       {{ MirrorList(mirrors) }}
+                               </div>
+                       {% endfor %}
 
                        {% if current_user and current_user.is_admin() %}
                                <div class="block">
index 9540e1358f69c0905882e6fefeeeef3fc759393d..c9d80399a581a7c59d5f127df2270d0f8020bcc6 100644 (file)
@@ -305,24 +305,25 @@ class BaseHandler(tornado.web.RequestHandler):
 
                # Custom Filters
                env.filters |= {
-                       "avatar_url"    : filters.avatar_url,
-                       "email_address" : filters.email_address,
-                       "email_name"    : filters.email_name,
-                       "file_mode"     : filters.file_mode,
-                       "format_asn"    : filters.format_asn,
-                       "format_date"   : filters.format_date,
-                       "format_day"    : filters.format_day,
-                       "format_time"   : filters.format_time,
-                       "highlight"     : filters.highlight,
-                       "hostname"      : filters.hostname,
-                       "markdown"      : filters._markdown,
-                       "static_url"    : filters.static_url,
-                       "summary"       : filters.summary,
+                       "avatar_url"          : filters.avatar_url,
+                       "email_address"       : filters.email_address,
+                       "email_name"          : filters.email_name,
+                       "file_mode"           : filters.file_mode,
+                       "format_asn"          : filters.format_asn,
+                       "format_country_code" : filters.format_country_code,
+                       "format_date"         : filters.format_date,
+                       "format_day"          : filters.format_day,
+                       "format_time"         : filters.format_time,
+                       "highlight"           : filters.highlight,
+                       "hostname"            : filters.hostname,
+                       "markdown"            : filters._markdown,
+                       "static_url"          : filters.static_url,
+                       "summary"             : filters.summary,
 
                        # Add some Python built-ins
-                       "dir"           : dir,
-                       "enumerate"     : enumerate,
-                       "range"         : range,
+                       "dir"                 : dir,
+                       "enumerate"           : enumerate,
+                       "range"               : range,
                }
 
                return JinjaTemplateLoader(env)
index ce349d85538618566e55c2295567ce31d0f33bc3..4e81bdd5a4a8ca1357b7d39bcd7b5e28550b7105 100644 (file)
@@ -18,6 +18,7 @@
 #                                                                             #
 ###############################################################################
 
+import babel
 import babel.dates
 import datetime
 import email.utils
@@ -65,6 +66,22 @@ def format_asn(ctx, asn):
 
        return "%s" % (o or asn)
 
+@jinja2.pass_context
+def format_country_code(ctx, country_code):
+       # Fetch locale
+       locale = ctx.get("locale")
+
+       # Fetch the translation function
+       _ = locale.translate
+
+       # Fetch the Babel locale
+       locale = babel.Locale(locale.code)
+
+       try:
+               return locale.territories[country_code]
+       except KeyError:
+               return _("- Unknown Country -")
+
 @jinja2.pass_context
 def format_date(ctx, *args, **kwargs):
        # Fetch locale