roundabout,
created on Monday, 22 July 2024, 11:06:39 (1721646399),
received on Wednesday, 31 July 2024, 06:54:51 (1722408891)
Author identity: vlad <vlad.muntoiu@gmail.com>
3cfaa1380c0d0e63bc7ed73b02ba68f8e1199cab
app.py
@@ -1741,6 +1741,20 @@ def repository_settings_post(username, repository):
return flask.redirect(f"/{username}/{repository}/settings", 303)
@repositories.route("/<username>/<repository>/settings/add-label", methods=["POST"])
def repository_settings_add_label(username, repository):
if get_permission_level(flask.session.get("username"), username, repository) != 2:
flask.abort(401)
repo_data = db.session.get(Repo, f"/{username}/{repository}")
label = Label(repo_data, flask.request.form.get("label"), flask.request.form.get("colour"))
db.session.add(label)
db.session.commit()
return flask.redirect(f"/{username}/{repository}/settings", 303)
@repositories.route("/<username>/<repository>/settings/delete", methods=["POST"])
def repository_settings_delete(username, repository):
if username != flask.session.get("username"):
models.py
@@ -13,6 +13,8 @@ __all__ = [
"EmailChangeRequest",
"Comment",
"PullRequestResolvesThread",
"Label",
"PostLabel",
]
import secrets
@@ -248,7 +250,7 @@ with (app.app_context()):
identifier = db.Column(db.String(162), unique=True, nullable=False, primary_key=True)
repo_name = db.Column(db.String(98), db.ForeignKey("repo.route"), nullable=False)
name = db.Column(db.Unicode(64), nullable=False)
colour = db.Column(db.String(7), nullable=False)
colour = db.Column(db.Integer, nullable=False, server_default="0")
repo = db.relationship("Repo", back_populates="labels")
posts = db.relationship("PostLabel", back_populates="label")
@@ -256,9 +258,17 @@ with (app.app_context()):
def __init__(self, repo, name, colour):
self.identifier = f"{repo.route}/" + secrets.token_hex(32) # randomise label IDs
self.name = name
self.colour = colour
self.colour = int(colour.removeprefix("#"), 16)
self.repo_name = repo.route
@property
def colour_hex(self):
return f"#{self.colour:06x}"
@colour_hex.setter
def colour_hex(self, value):
self.colour = int(value.removeprefix("#"), 16)
class PostLabel(db.Model):
id = db.Column(db.Integer, primary_key=True)
templates/post.html
@@ -6,7 +6,38 @@
{% if level %}
<h2><a href="{{ post.number }}">{{ post.subject }}</a> <span class="post-number">#{{ post.number }}</span></h2>
{% else %}
<dialog id="add-label">
<article class="card">
<section class="card-main">
<form method="dialog" id="close-add-label"></form>
<form method="POST" action="{{ post.number }}/label">
<x-vbox>
<label>
{% trans %}Label to add:{% endtrans %}
<select name="label">
{% for label in repo_data.labels %}
<option value="{{ label }}">{{ label }}</option>
{% endfor %}
</select>
</label>
<x-buttonbox>
<button type="submit">{% trans %}Add label{% endtrans %}</button>
<button type="submit" form="close-add-label">{% trans %}Cancel{% endtrans %}</button>
</x-buttonbox>
</x-vbox>
</form>
</section>
</article>
</dialog>
<h2>{{ post.subject }} <span class="post-number">#{{ post.number }}</span></h2>
<x-hbox class="post-labels">
{% for label in post.labels %}
<a href="/label/{{ label }}">{{ label }}</a>
{% endfor %}
<button id="add-label-button" class="button-flat" onclick="document.getElementById('add-label').showModal();">
<iconify-icon icon="mdi:plus"></iconify-icon>
</button>
</x-hbox>
{% endif %}
<p>
{{ post.html | safe }}
templates/repository/repo-settings.html
@@ -66,6 +66,36 @@ Note that only branch names are supported, not other references like tags or com
<p>
{% trans %}Even if this repository is private, the site will not have access control.{% endtrans %}
</p>
<h3>{% trans %}Forum labels{% endtrans %}</h3>
<ul>
{% for label in repo_data.labels %}
<li>
{{ label }}
</li>
{% endfor %}
</ul>
<dialog id="add-label">
<article class="card">
<section class="card-main">
<form method="dialog" id="close-add-label"></form>
<form method="POST" action="/{{ username }}/{{ repository }}/settings/add-label">
<x-vbox>
<label>
{% trans %}Label name{% endtrans %}
<input type="text" name="label" required>
{% trans %}Label colour{% endtrans %}
<input type="color" name="colour" value="#009688">
</label>
<x-buttonbox>
<button type="submit">{% trans %}Add label{% endtrans %}</button>
<button type="submit" form="close-add-label">{% trans %}Cancel{% endtrans %}</button>
</x-buttonbox>
</x-vbox>
</form>
</section>
</article>
</dialog>
<button type="button" onclick="document.getElementById('add-label').showModal()">{% trans %}Add label{% endtrans %}</button>
<button type="submit">{% trans %}Update{% endtrans %}</button>
</form>
{% if logged_in_user == username %}