roundabout,
created on Tuesday, 16 April 2024, 18:17:41 (1713291461),
received on Wednesday, 31 July 2024, 06:54:45 (1722408885)
Author identity: vlad <vlad.muntoiu@gmail.com>
5e10dc030affe87ad8aa118138d42f994ec8560a
app.py
@@ -190,6 +190,35 @@ def favourites():
return flask.render_template("favourites.html", favourites=relationships)
@app.route("/favourites/<int:id>", methods=["POST"])
def favourite_edit(id):
if not flask.session.get("username"):
flask.abort(401)
favourite = db.session.get(RepoFavourite, id)
if favourite.user_username != flask.session.get("username"):
flask.abort(403)
data = flask.request.form
print(data)
favourite.notify_commit = js_to_bool(data.get("commit"))
favourite.notify_forum = js_to_bool(data.get("forum"))
favourite.notify_pr = js_to_bool(data.get("pull_request"))
favourite.notify_admin = js_to_bool(data.get("administrative"))
print(favourite.notify_commit, favourite.notify_forum, favourite.notify_pr, favourite.notify_admin)
db.session.commit()
return flask.render_template_string(
"""
<tr hx-post="/favourites/{{ favourite.id }}" hx-trigger="change" hx-include="#commit-{{ favourite.id }}, #forum-{{ favourite.id }}, #pull_request-{{ favourite.id }}, #administrative-{{ favourite.id }}" hx-headers='{"Content-Type": "application/json"}' hx-swap="outerHTML">
<td><a href="{{ favourite.repo.route }}">{{ favourite.repo.owner.username }}/{{ favourite.repo.name }}</a></td>
<td style="text-align: center;"><input type="checkbox" name="commit" id="commit-{{ favourite.id }}" value="true" {% if favourite.notify_commit %}checked{% endif %}></td>
<td style="text-align: center;"><input type="checkbox" name="forum" id="forum-{{ favourite.id }}" value="true" {% if favourite.notify_forum %}checked{% endif %}></td>
<td style="text-align: center;"><input type="checkbox" name="pull_request" id="pull_request-{{ favourite.id }}" value="true" {% if favourite.notify_pr %}checked{% endif %}></td>
<td style="text-align: center;"><input type="checkbox" name="administrative" id="administrative-{{ favourite.id }}" value="true" {% if favourite.notify_admin %}checked{% endif %}></td>
</tr>
""",
favourite=favourite
)
@app.route("/notifications/", methods=["GET", "POST"])
def notifications():
if not flask.session.get("username"):
misc_utils.py
@@ -90,3 +90,7 @@ def convert_to_html(path):
with open(path, "r") as f:
contents = f.read()
return contents
def js_to_bool(js):
return js.lower() == "true" if isinstance(js, str) else bool(js)
models.py
@@ -48,10 +48,10 @@ with (app.app_context()):
user_username = db.Column(db.String(32), db.ForeignKey("user.username"), nullable=False)
repo_route = db.Column(db.String(98), db.ForeignKey("repo.route"), nullable=False)
notify_commit = db.Column(db.Boolean)
notify_forum = db.Column(db.Boolean)
notify_pr = db.Column(db.Boolean)
notify_admin = db.Column(db.Boolean)
notify_commit = db.Column(db.Boolean, default=False, nullable=False)
notify_forum = db.Column(db.Boolean, default=False, nullable=False)
notify_pr = db.Column(db.Boolean, default=False, nullable=False)
notify_admin = db.Column(db.Boolean, default=False, nullable=False)
user = db.relationship("User", back_populates="favourites")
repo = db.relationship("Repo", back_populates="favourites")
static/efficient-ui/THEME.css
@@ -648,13 +648,8 @@ th, ol.table > li.list-header {
border: none;
}
tbody th {
text-align: end;
}
thead th {
vertical-align: bottom;
text-align: center;
th, td {
text-align: start;
}
.chat-bubble::before {
templates/favourites.html
@@ -10,13 +10,24 @@
<x-frame style="--width: 896px;" class="flexible-space">
<x-vbox>
{% if favourites.count() > 0 %}
{% for favourite in favourites %}
<article class="card card-horizontal">
<section class="card-main flexible-space">
<h3><a href="{{ favourite.repo.route }}">{{ favourite.repo.owner.username }}/{{ favourite.repo.name }}</a></h3>
</section>
</article>
{% endfor %}
<table>
<tr style="text-align: start;">
<th>{% trans %}Repository{% endtrans %}</th>
<th style="text-align: center;">{% trans %}Commit{% endtrans %}</th>
<th style="text-align: center;">{% trans %}Forum{% endtrans %}</th>
<th style="text-align: center;">{% trans %}Pull request{% endtrans %}</th>
<th style="text-align: center;">{% trans %}Administrative{% endtrans %}</th>
</tr>
{% for favourite in favourites %}
<tr hx-post="/favourites/{{ favourite.id }}" hx-trigger="change" hx-include="#commit-{{ favourite.id }}, #forum-{{ favourite.id }}, #pull_request-{{ favourite.id }}, #administrative-{{ favourite.id }}" hx-headers='{"Content-Type": "application/json"}' hx-swap="outerHTML">
<td><a href="{{ favourite.repo.route }}">{{ favourite.repo.owner.username }}/{{ favourite.repo.name }}</a></td>
<td style="text-align: center;"><input type="checkbox" name="commit" id="commit-{{ favourite.id }}" value="true" {% if favourite.notify_commit %}checked{% endif %}></td>
<td style="text-align: center;"><input type="checkbox" name="forum" id="forum-{{ favourite.id }}" value="true" {% if favourite.notify_forum %}checked{% endif %}></td>
<td style="text-align: center;"><input type="checkbox" name="pull_request" id="pull_request-{{ favourite.id }}" value="true" {% if favourite.notify_pr %}checked{% endif %}></td>
<td style="text-align: center;"><input type="checkbox" name="administrative" id="administrative-{{ favourite.id }}" value="true" {% if favourite.notify_admin %}checked{% endif %}></td>
</tr>
{% endfor %}
</table>
{% else %}
<p>{% trans %}When you add favourite repositories, you can manage them from here.{% endtrans %}</p>
{% endif %}