roundabout,
created on Monday, 11 November 2024, 19:52:01 (1731354721),
received on Monday, 11 November 2024, 19:52:04 (1731354724)
Author identity: vlad <vlad.muntoiu@gmail.com>
06f7d8c8570ff2659546b78c4cb5d7cbc49b269f
app.py
@@ -186,6 +186,37 @@ def search():
num_pages=results.pages) @app.route("/user-search") def user_search(): query = flask.request.args.get("q") page_number = flask.request.args.get("page", 1, type=int) if flask.session.get("username"): default_page_length = db.session.get(User, flask.session.get("username")).default_page_length else: default_page_length = 16 page_length = flask.request.args.get("per_page", default_page_length, type=int) results = User.query.filter(User.username.ilike(f"%{query}%")).paginate( page=page_number, per_page=page_length) if results.has_next: next_page = results.next_num else: next_page = None if results.has_prev: prev_page = results.prev_num else: prev_page = None return flask.render_template("user-search.html", results=results, query=query, page_number=page_number, page_length=page_length, next_page=next_page, prev_page=prev_page, num_pages=results.pages) @app.route("/language", methods=["POST"]) def set_locale(): response = flask.redirect(flask.request.referrer if flask.request.referrer else "/",
config.py
@@ -25,7 +25,7 @@ MAX_PAYLOAD_SIZE: int = 4 * 1024**3
AVATAR_SIZE: tuple = (192, 192) HASHING_ROUNDS: int = 11 RESERVED_NAMES: tuple = ("git", "settings", "logout", "accounts", "info", "notifications", "about", "newrepo", "favourites", "data-api", "language", "help")RESERVED_NAMES: tuple = ("git", "settings", "logout", "accounts", "info", "notifications", "about", "newrepo", "favourites", "data-api", "language", "help", "search", "user-search")suggest_https: bool = False # this config is intended for a test server port: int = 8080 # currently not shown in the UI, only used for critical communications
templates/home.html
@@ -13,7 +13,11 @@
<h1>{{ config.site_name }}</h1> <h2>{% trans %}Search{% endtrans %}</h2> <form action="/search" method="get" role="search" class="buttonbox"> <input type="text" name="q" placeholder="{% trans %}Search repositories...{% endtrans %}"><input type="text" name="q" placeholder="{% trans %}Search repositories...{% endtrans %}" aria-label="Repository search"> <button type="submit">{% trans %}Search{% endtrans %}</button> </form> <form action="/user-search" method="get" role="search" class="buttonbox"> <input type="text" name="q" placeholder="{% trans %}Search users...{% endtrans %}" aria-label="User search"><button type="submit">{% trans %}Search{% endtrans %}</button> </form> </x-frame>
templates/search.html
@@ -1,10 +1,7 @@
{% extends "default.html" %} {% block title %}{% trans %}Search repositories{% endtrans %}{% endblock %}{% block title %} {% trans username=username, repository=repository %}Repository listing: {{ query }}{% endtrans %}{% trans query=query %}Repository listing: {{ query }}{% endtrans %}{% endblock %} {% block content %} <x-vbox>
@@ -20,7 +17,7 @@
{% endif %} {% if result.url %} <p> Homepage: <a href="{{ result.url }}">{{ result.url }}</a>{% trans %}Homepage:{% endtrans %} <a href="{{ result.url }}">{{ result.url }}</a></p> {% endif %} </section>
templates/user-search.html
@@ -0,0 +1,26 @@
{% extends "default.html" %} {% block title %} {% trans query=query %}User listing: {{ query }}{% endtrans %} {% endblock %} {% block content %} <x-vbox> <x-frame style="--width: 896px;" class="flexible-space"> <ul style="list-style: none;" class="noindent"> {% for result in results %} <li> <article class="card" style="flex: 0 1 auto;"> <section class="card-main"> <a href="{{ result.username }}"><h3>{{ result.username }}</h3></a> {% if result.bio %} <p>{{ result.bio }}</p> {% endif %} </section> </article> </li> {% endfor %} </ul> {% include "pagination.html" %} </x-frame> </x-vbox> {% endblock %}