gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[taler-taler-merchant-demos] branch master updated: refactor base templa


From: gnunet
Subject: [taler-taler-merchant-demos] branch master updated: refactor base template, language selector
Date: Thu, 22 Apr 2021 13:57:49 +0200

This is an automated email from the git hooks/post-receive script.

dold pushed a commit to branch master
in repository taler-merchant-demos.

The following commit(s) were added to refs/heads/master by this push:
     new 58a059b  refactor base template, language selector
58a059b is described below

commit 58a059b94afee29767303b399b48629985a48942
Author: Florian Dold <florian@dold.me>
AuthorDate: Thu Apr 22 13:57:43 2021 +0200

    refactor base template, language selector
---
 talermerchantdemos/blog/blog.py                    | 25 ++--------
 talermerchantdemos/donations/donations.py          | 31 +++---------
 talermerchantdemos/httpcommon/__init__.py          | 56 ++++++++++++++++++++++
 talermerchantdemos/landing/landing.py              | 51 ++++----------------
 talermerchantdemos/survey/survey.py                | 36 ++++----------
 talermerchantdemos/templates/common-base.html.j2   | 19 +++++++-
 .../templates/language-switcher.html.j2            | 52 --------------------
 7 files changed, 102 insertions(+), 168 deletions(-)

diff --git a/talermerchantdemos/blog/blog.py b/talermerchantdemos/blog/blog.py
index d1a2865..2981f05 100644
--- a/talermerchantdemos/blog/blog.py
+++ b/talermerchantdemos/blog/blog.py
@@ -40,6 +40,7 @@ from talermerchantdemos.httpcommon import (
     self_localized,
     Deadline,
     BackendException,
+    make_utility_processor,
 )
 
 
@@ -105,27 +106,9 @@ LOGGER.info(
     "Operating with the following translations available: " + " 
".join(translations)
 )
 
-app.add_template_global(self_localized)
-
-
-##
-# Extends the templating language with a function (@c env)
-# that fetches values from the environment.
-#
-# @return a @a dict containing the extension.
-@app.context_processor
-def utility_processor():
-    # These helpers will be available in templates
-    def env(name, default=None):
-        return os.environ.get(name, default)
-
-    def getactive():
-        return "blog"
-
-    def getlang():
-        return get_locale()
-
-    return dict(env=env, getactive=getactive, getlang=getlang)
+# Add context processor that will make additional variables
+# and functions available in the template.
+app.context_processor(make_utility_processor("blog"))
 
 
 ##
diff --git a/talermerchantdemos/donations/donations.py 
b/talermerchantdemos/donations/donations.py
index 85ab9ec..903952c 100644
--- a/talermerchantdemos/donations/donations.py
+++ b/talermerchantdemos/donations/donations.py
@@ -31,7 +31,7 @@ import traceback
 import urllib
 from taler.util.talerconfig import TalerConfig, ConfigurationError
 from urllib.parse import urljoin
-from ..httpcommon import backend_post, backend_get, self_localized
+from ..httpcommon import backend_post, backend_get, make_utility_processor
 import sys
 
 if not sys.version_info.major == 3 and sys.version_info.minor >= 6:
@@ -89,24 +89,9 @@ def get_locale():
     return "en"
 
 
-##
-# Extend the templating language with a function
-# that fetches values from the environment.
-#
-# @return the environment-reading function.
-@app.context_processor
-def utility_processor():
-    def env(name, default=None):
-        return os.environ.get(name, default)
-
-    def getactive():
-        return "donations"
-
-    def getlang():
-        return get_locale()
-
-    return dict(env=env, getlang=getlang, getactive=getactive)
-
+# Add context processor that will make additional variables
+# and functions available in the template.
+app.context_processor(make_utility_processor("donations"))
 
 ##
 # Return a error response to the client.
@@ -201,9 +186,7 @@ def index():
 # @return response object of the index page.
 @app.route("/<lang>/")
 def start(lang):
-    return flask.render_template(
-        "donations-index.html.j2", merchant_currency=CURRENCY
-    )
+    return flask.render_template("donations-index.html.j2", 
merchant_currency=CURRENCY)
 
 
 ##
@@ -272,9 +255,7 @@ def donate(lang):
     )
     order_id = order_resp["order_id"]
     return flask.redirect(
-        flask.url_for(
-            "fulfillment", receiver=donation_receiver, order_id=order_id
-        )
+        flask.url_for("fulfillment", receiver=donation_receiver, 
order_id=order_id)
     )
 
 
diff --git a/talermerchantdemos/httpcommon/__init__.py 
b/talermerchantdemos/httpcommon/__init__.py
index 39cd696..785494b 100644
--- a/talermerchantdemos/httpcommon/__init__.py
+++ b/talermerchantdemos/httpcommon/__init__.py
@@ -5,6 +5,8 @@ from flask import request
 from datetime import datetime
 import time
 from flask_babel import gettext
+import os
+import re
 
 
 class BackendException(Exception):
@@ -129,3 +131,57 @@ class Deadline:
             )
         )
         return now > self.value
+
+
+all_languages = {
+    "en": "English [en]",
+    "ar": "Arabic [ar]",
+    "zh_Hant": "Chinese [zh]",
+    "fr": "French [fr]",
+    "de": "German [de]",
+    "hi": "Hindi [hi]",
+    "it": "Italian [it]",
+    "ja": "Japanese [ja]",
+    "ko": "Korean [ko]",
+    "pt": "Portuguese [pt]",
+    "pt_BR": "Portuguese (Brazil) [pt_BR]",
+    "ru": "Russian [ru]",
+    "es": "Spanish [es]",
+    "sv": "Swedish [sv]",
+    "tr": "Turkish [tr]",
+}
+
+
+
+##
+# Make the environment available into templates.
+#
+# @return the environment-reading function
+def make_utility_processor(pagename):
+    def utility_processor():
+        def getactive():
+            return pagename
+
+        def getlang():
+            return get_locale()
+
+        def env(name, default=None):
+            return os.environ.get(name, default)
+
+        def prettydate(talerdate):
+            parsed_time = re.search(r"/Date\(([0-9]+)\)/", talerdate)
+            if not parsed_time:
+                return "malformed date given"
+            parsed_time = int(parsed_time.group(1))
+            timestamp = datetime.datetime.fromtimestamp(parsed_time)
+            # returns the YYYY-MM-DD date format.
+            return timestamp.strftime("%Y-%b-%d")
+
+        return dict(
+            env=env,
+            prettydate=prettydate,
+            getactive=getactive,
+            getlang=getlang,
+            all_languages=all_languages,
+        )
+    return utility_processor
diff --git a/talermerchantdemos/landing/landing.py 
b/talermerchantdemos/landing/landing.py
index 3c1f304..5b6376e 100644
--- a/talermerchantdemos/landing/landing.py
+++ b/talermerchantdemos/landing/landing.py
@@ -29,7 +29,12 @@ from flask_babel import force_locale
 from flask_babel import gettext
 import traceback
 from taler.util.talerconfig import TalerConfig, ConfigurationError
-from ..httpcommon import backend_get, backend_post, self_localized
+from ..httpcommon import (
+    backend_get,
+    backend_post,
+    self_localized,
+    make_utility_processor,
+)
 import sys
 
 if not sys.version_info.major == 3 and sys.version_info.minor >= 6:
@@ -68,47 +73,9 @@ LOGGER.info(
     "Operating with the following translations available: " + " 
".join(translations)
 )
 
-app.add_template_global(self_localized)
-
-
-@babel.localeselector
-def get_locale():
-    parts = request.path.split("/", 2)
-    if 2 >= len(parts):
-        # Totally unexpected path format, do not localize
-        return "en"
-    lang = parts[1]
-    if lang in translations:
-        return lang
-    return "en"
-
-##
-# Make the environment available into templates.
-#
-# @return the environment-reading function.
-@app.context_processor
-def utility_processor():
-
-    def getactive():
-        return "landing"
-
-    def getlang():
-        return get_locale()
-
-    def env(name, default=None):
-        return os.environ.get(name, default)
-
-    def prettydate(talerdate):
-        parsed_time = re.search(r"/Date\(([0-9]+)\)/", talerdate)
-        if not parsed_time:
-            return "malformed date given"
-        parsed_time = int(parsed_time.group(1))
-        timestamp = datetime.datetime.fromtimestamp(parsed_time)
-        # returns the YYYY-MM-DD date format.
-        return timestamp.strftime("%Y-%b-%d")
-
-    return dict(env=env, prettydate=prettydate, getactive=getactive, 
getlang=getlang)
-
+# Add context processor that will make additional variables
+# and functions available in the template.
+app.context_processor(make_utility_processor("landing"))
 
 ##
 # Exception handler to capture all the unmanaged errors.
diff --git a/talermerchantdemos/survey/survey.py 
b/talermerchantdemos/survey/survey.py
index 1b06218..466c14d 100644
--- a/talermerchantdemos/survey/survey.py
+++ b/talermerchantdemos/survey/survey.py
@@ -30,7 +30,13 @@ from flask_babel import force_locale
 from flask_babel import gettext
 import traceback
 from taler.util.talerconfig import TalerConfig, ConfigurationError
-from ..httpcommon import backend_get, backend_post, self_localized, 
BackendException
+from ..httpcommon import (
+    backend_get,
+    backend_post,
+    self_localized,
+    BackendException,
+    make_utility_processor,
+)
 import sys
 
 if not sys.version_info.major == 3 and sys.version_info.minor >= 6:
@@ -85,31 +91,9 @@ def get_locale():
     return "en"
 
 
-##
-# Make the environment available into templates.
-#
-# @return the environment-reading function.
-@app.context_processor
-def utility_processor():
-    def env(name, default=None):
-        return os.environ.get(name, default)
-
-    def prettydate(talerdate):
-        parsed_time = re.search(r"/Date\(([0-9]+)\)/", talerdate)
-        if not parsed_time:
-            return "malformed date given"
-        parsed_time = int(parsed_time.group(1))
-        timestamp = datetime.datetime.fromtimestamp(parsed_time)
-        # returns the YYYY-MM-DD date format.
-        return timestamp.strftime("%Y-%b-%d")
-
-    def getactive():
-        return "survey"
-
-    def getlang():
-        return get_locale()
-
-    return dict(env=env, prettydate=prettydate, getactive=getactive, 
getlang=getlang)
+# Add context processor that will make additional variables
+# and functions available in the template.
+app.context_processor(make_utility_processor("survey"))
 
 
 ##
diff --git a/talermerchantdemos/templates/common-base.html.j2 
b/talermerchantdemos/templates/common-base.html.j2
index 17e27c6..6c5502b 100644
--- a/talermerchantdemos/templates/common-base.html.j2
+++ b/talermerchantdemos/templates/common-base.html.j2
@@ -1,7 +1,7 @@
 <!DOCTYPE html>
 <!--
   This file is part of GNU TALER.
-  Copyright (C) 2014, 2015, 2016, 2020 Taler Systems SA
+  Copyright (C) 2014, 2015, 2016, 2020, 2021 Taler Systems SA
 
   TALER is free software; you can redistribute it and/or modify it under the
   terms of the GNU Lesser General Public License as published by the Free 
Software
@@ -58,6 +58,21 @@
              {% if getactive() == 'survey' %} class="active" {% endif %}
             >{{gettext("Tipping/Survey")}}</a>
     {% include 'language-switcher.html.j2' %}
+
+    {# Language Selector #}}
+    <span class="right">
+      {{ all_languages[getlang()] | default("en") }}
+      <div class="nav">
+        <br>
+        {% for lang_code, lang_display in all_languages.items() %}
+          {% if lang_code != getlang() %}
+          <a href="/{{ lang_code }}/" class="navbtn">{{ lang_display }}</a>
+          <br>
+          {% endif %}
+        {% endfor %}   
+      </div>
+    </span>
+
   </nav>
   </div>
 
@@ -73,7 +88,7 @@
         }}
       </p>
       <div style="flex-grow:1"></div>
-      <p>Copyright &copy; 2014&mdash;2020 Taler Systems SA</p>
+      <p>Copyright &copy; 2014&mdash;2021 Taler Systems SA</p>
     </div>
   </section>
 </body>
diff --git a/talermerchantdemos/templates/language-switcher.html.j2 
b/talermerchantdemos/templates/language-switcher.html.j2
deleted file mode 100644
index 66c5405..0000000
--- a/talermerchantdemos/templates/language-switcher.html.j2
+++ /dev/null
@@ -1,52 +0,0 @@
- <span class="right">
-  {{ {"en": "English [en]", "ar": "Arabic [ar]", "zh_Hant": "Chinese [zh]", 
"fr": "French [fr]", "de": "German [de]", "hi": "Hindi [hi]", "it": "Italian 
[it]", "ja": "Japanese [ja]", "ko": "Korean [ko]", "pt": "Portuguese [pt]", 
"pt_BR": "Portuguese (Brazil) [pt_BR]", "ru": "Russian [ru]", "es": "Spanish 
[es]", "sv": "Swedish [sv]", "tr": "Turkish [tr]"}[getlang()] | default("en") }}
-  <div class="nav">
-  <br>
-    {% if getlang() != 'en' %}
-      <a href="/en/" class="navbtn">English [en]</a><br>
-    {% endif %}
-    {% if getlang() != 'ar' %}
-      <a href="/ar/" class="navbtn">Arabic [ar]</a><br>
-    {% endif %}
-    {% if getlang() != 'zh_Hant' %}
-      <a href="/zh_Hant/" class="navbtn">Chinese [zh]</a><br>
-    {% endif %}
-    {% if getlang() != 'fr' %}
-      <a href="/fr/" class="navbtn">Fran&ccedil;ais [fr]</a><br>
-    {% endif %}
-    {% if getlang() != 'de' %}
-      <a href="/de/" class="navbtn">Deutsch [de]</a><br>
-    {% endif %}
-    {% if getlang() != 'hi' %}
-      <a href="/hi/" class="navbtn">Hindi [hi]</a><br>
-    {% endif %}
-    {% if getlang() != 'it' %}
-      <a href="/it/" class="navbtn">Italiano [it]</a><br>
-    {% endif %}
-    {% if getlang() != 'ja' %}
-      <a href="/ja/" class="navbtn">Japanese [ja]</a><br>
-    {% endif %}
-    {% if getlang() != 'ko' %}
-      <a href="/ko/" class="navbtn">Korean [ko]</a><br>
-    {% endif %}
-    {% if getlang() != 'pt' %}
-      <a href="/pt/" class="navbtn">Português [pt]</a><br>
-    {% endif %}
-    {% if getlang() != 'pt_BR' %}
-      <a href="/pt_BR/" class="navbtn">Português (Brazil) [pt_BR]</a><br>
-    {% endif %}
-    {% if getlang() != 'ru' %}
-      <a href="/ru/" class="navbtn">Russian [pt]</a><br>
-    {% endif %}
-    {% if getlang() != 'es' %}
-      <a href="/es/" class="navbtn">Espa&ntilde;ol [es]</a><br>
-    {% endif %}
-    {% if getlang() != 'sv' %}
-      <a href="/sv/" class="navbtn">Svenska [sv]</a><br>
-    {% endif %}
-    {% if getlang() != 'tr' %}
-      <a href="/tr/" class="navbtn">Turkish [tr]</a><br>
-    {% endif %}
-   
-  </div>
-</span>

-- 
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]