Browse Source

[help] stop rendering documentation with Jinja2

To facilitate translation of the user documentation we move
the templating logic outside of the user documentation.
Martin Fischer 3 years ago
parent
commit
105c5a6a98
4 changed files with 24 additions and 22 deletions
  1. 0 9
      searx/help/about.md
  2. 1 0
      searx/templates/oscar/about.html
  3. 1 0
      searx/templates/simple/about.html
  4. 22 13
      searx/user_help.py

+ 0 - 9
searx/help/about.md

@@ -64,17 +64,8 @@ decentralized the Internet is, the more freedom we have!
 
 See the [SearXNG docs][brand.docs_url] and [SearXNG sources][brand.git_url]
 
-[url_for:index]: {{ url_for('index') }}
-[url_for:preferences]: {{ url_for('preferences') }}
-[url_for:stats]: {{ url_for('stats') }}
-[brand.git_url]: {{ searx_git_url }}
-[brand.public_instances]: {{ get_setting('brand.public_instances') }}
-[brand.docs_url]: {{ get_setting('brand.docs_url') }}
-
 [searx]: https://github.com/searx/searx
 [metasearch engine]: https://en.wikipedia.org/wiki/Metasearch_engine
 [weblate]: https://weblate.bubu1.eu/projects/searxng/
 [seeks project]: https://beniz.github.io/seeks/
 [OpenSearch]: https://github.com/dewitt/opensearch/blob/master/opensearch-1-1-draft-6.md
-
-{% include "__common__/aboutextend.html" ignore missing %}

+ 1 - 0
searx/templates/oscar/about.html

@@ -2,4 +2,5 @@
 {% block title %}{{ _('about') }} - {% endblock %}
 {% block content %}
 {{ help.about | safe }}
+{% include "__common__/aboutextend.html" ignore missing %}
 {% endblock %}

+ 1 - 0
searx/templates/simple/about.html

@@ -1,4 +1,5 @@
 {% extends 'simple/base.html' %}
 {% block content %}
 {{ help.about | safe }}
+{% include "__common__/aboutextend.html" ignore missing %}
 {% endblock %}

+ 22 - 13
searx/user_help.py

@@ -3,6 +3,7 @@ import os.path
 import pkg_resources
 
 import flask
+from flask.helpers import url_for
 import mistletoe
 
 from . import get_setting
@@ -19,21 +20,29 @@ def render(app: flask.Flask):
 
     We render the user documentation once on startup to improve performance.
     """
-    for filename in pkg_resources.resource_listdir(__name__, 'help'):
-        rootname, ext = os.path.splitext(filename)
-        if ext != '.md':
-            continue
 
-        text = pkg_resources.resource_string(__name__, 'help/' + filename).decode()
+    link_targets = {
+        'brand.git_url': GIT_URL,
+        'brand.public_instances': get_setting('brand.public_instances'),
+        'brand.docs_url': get_setting('brand.docs_url'),
+    }
+
+    base_url = get_setting('server.base_url') or None
+    # we specify base_url so that url_for works for base_urls that have a non-root path
 
-        base_url = get_setting('server.base_url') or None
-        # we specify base_url so that url_for works for base_urls that have a non-root path
+    with app.test_request_context(base_url=base_url):
+        link_targets['url_for:index'] = url_for('index')
+        link_targets['url_for:preferences'] = url_for('preferences')
+        link_targets['url_for:stats'] = url_for('stats')
 
-        with app.test_request_context(base_url=base_url):
-            # the request context is needed for Flask's url_for
-            # (otherwise we'd need to set app.config['SERVER_NAME'],
-            # which we don't want)
+    define_link_targets = ''.join(f'[{name}]: {url}\n' for name, url in link_targets.items())
 
-            interpolated = flask.render_template_string(text, get_setting=get_setting, searx_git_url=GIT_URL)
+    for filename in pkg_resources.resource_listdir(__name__, 'help'):
+        rootname, ext = os.path.splitext(filename)
+
+        if ext != '.md':
+            continue
 
-            HELP[rootname] = mistletoe.markdown(interpolated)
+        markdown = pkg_resources.resource_string(__name__, 'help/' + filename).decode()
+        markdown = define_link_targets + markdown
+        HELP[rootname] = mistletoe.markdown(markdown)