diff --git a/searx/templates/oscar/about.html b/searx/templates/oscar/about.html deleted file mode 100644 index a644761b6..000000000 --- a/searx/templates/oscar/about.html +++ /dev/null @@ -1,6 +0,0 @@ -{% extends "oscar/base.html" %} -{% block title %}{{ _('about') }} - {% endblock %} -{% block content %} -{{ help.about | safe }} -{% include "__common__/aboutextend.html" ignore missing %} -{% endblock %} diff --git a/searx/templates/oscar/help.html b/searx/templates/oscar/help.html new file mode 100644 index 000000000..7865f6649 --- /dev/null +++ b/searx/templates/oscar/help.html @@ -0,0 +1,5 @@ +{% extends "oscar/base.html" %} +{% block title %}{{ page.title }} - {% endblock %} +{% block content %} +{{ page.content | safe }} +{% endblock %} diff --git a/searx/templates/simple/about.html b/searx/templates/simple/about.html deleted file mode 100644 index f6a0a96a9..000000000 --- a/searx/templates/simple/about.html +++ /dev/null @@ -1,5 +0,0 @@ -{% extends 'simple/page_with_header.html' %} -{% block content %} -{{ help.about | safe }} -{% include "__common__/aboutextend.html" ignore missing %} -{% endblock %} diff --git a/searx/templates/simple/help.html b/searx/templates/simple/help.html new file mode 100644 index 000000000..0be59f495 --- /dev/null +++ b/searx/templates/simple/help.html @@ -0,0 +1,5 @@ +{% extends 'simple/page_with_header.html' %} +{% block title %}{{ page.title }} - {% endblock %} +{% block content %} +{{ page.content | safe }} +{% endblock %} diff --git a/searx/user_help.py b/searx/user_help.py index bb2c1b1ca..62628ab40 100644 --- a/searx/user_help.py +++ b/searx/user_help.py @@ -1,5 +1,5 @@ # pyright: basic -from typing import Dict +from typing import Dict, NamedTuple import os.path import pkg_resources @@ -10,8 +10,14 @@ import mistletoe from . import get_setting from .version import GIT_URL -HELP: Dict[str, str] = {} -""" Maps a filename under help/ without the file extension to the rendered HTML. """ + +class HelpPage(NamedTuple): + title: str + content: str + + +PAGES: Dict[str, HelpPage] = {} +""" Maps a filename under help/ without the file extension to the rendered page. """ def render(app: flask.Flask): @@ -44,6 +50,15 @@ def render(app: flask.Flask): if ext != '.md': continue - markdown = pkg_resources.resource_string(__name__, 'help/' + filename).decode() - markdown = define_link_targets + markdown - HELP[rootname] = mistletoe.markdown(markdown) + file_content = pkg_resources.resource_string(__name__, 'help/' + filename).decode() + markdown = define_link_targets + file_content + assert file_content.startswith('# ') + title = file_content.split('\n', maxsplit=1)[0].strip('# ') + content: str = mistletoe.markdown(markdown) + + if filename == 'about.md': + try: + content += pkg_resources.resource_string(__name__, 'templates/__common__/aboutextend.html').decode() + except FileNotFoundError: + pass + PAGES[rootname] = HelpPage(title=title, content=content) diff --git a/searx/webapp.py b/searx/webapp.py index 2e6e388e5..bd296cddc 100755 --- a/searx/webapp.py +++ b/searx/webapp.py @@ -877,8 +877,19 @@ def __get_translated_errors(unresponsive_engines: Iterable[UnresponsiveEngine]): @app.route('/about', methods=['GET']) def about(): - """Render about page""" - return render('about.html', help=user_help.HELP) + """Redirect to about page""" + return redirect(url_for('help_page', pagename='about')) + + +@app.route('/help/en/', methods=['GET']) +def help_page(pagename): + """Render help page""" + page = user_help.PAGES.get(pagename) + + if page is None: + flask.abort(404) + + return render('help.html', page=user_help.PAGES[pagename]) @app.route('/autocompleter', methods=['GET', 'POST']) diff --git a/tests/unit/test_webapp.py b/tests/unit/test_webapp.py index 60d59ccf8..cd9472135 100644 --- a/tests/unit/test_webapp.py +++ b/tests/unit/test_webapp.py @@ -174,7 +174,7 @@ class ViewsTestCase(SearxTestCase): self.assertIn(b'first test content', result.data) def test_about(self): - result = self.app.get('/about') + result = self.app.get('/help/en/about') self.assertEqual(result.status_code, 200) self.assertIn(b'

About SearXNG

', result.data)