roundabout,
created on Sunday, 8 September 2024, 10:48:01 (1725792481),
received on Sunday, 8 September 2024, 10:58:33 (1725793113)
Author identity: vlad <vlad.muntoiu@gmail.com>
0c597c146bef0c460c1d1679a2d1b41f6e886785
app.py
@@ -560,6 +560,48 @@ def delete_picture(id):
return flask.redirect("/")
@app.route("/picture/<int:id>/mark-replacement", methods=["POST"])
def mark_replacement(id):
resource = db.session.get(PictureResource, id)
if resource is None:
flask.abort(404)
current_user = db.session.get(User, flask.session.get("username"))
if current_user is None:
flask.abort(401)
if resource.copied_from.author != current_user and not current_user.admin:
flask.abort(403)
resource.copied_from.replaced_by = resource
resource.replaces = resource.copied_from
db.session.commit()
return flask.redirect("/picture/" + str(resource.copied_from.id))
@app.route("/picture/<int:id>/remove-replacement", methods=["POST"])
def remove_replacement(id):
resource = db.session.get(PictureResource, id)
if resource is None:
flask.abort(404)
current_user = db.session.get(User, flask.session.get("username"))
if current_user is None:
flask.abort(401)
if resource.author != current_user and not current_user.admin:
flask.abort(403)
resource.replaced_by.replaces = None
resource.replaced_by = None
db.session.commit()
return flask.redirect("/picture/" + str(resource.id))
@app.route("/picture/<int:id>/edit-metadata")
def edit_picture(id):
resource = db.session.get(PictureResource, id)
static/style.css
@@ -332,13 +332,20 @@ small {
background: var(--color-card);
}
.thumbnail-list > li > a {
.thumbnail-list > li > a, .thumbnail-list > li {
display: flex;
flex-direction: column;
justify-content: space-between;
height: 100%;
}
.thumbnail-list > li > .list-more {
display: flex;
justify-content: space-between;
align-items: center;
padding: 8px;
}
.thumbnail-list > li:is(:hover, :focus, :has(:focus)) {
position: relative;
transform: scale(1.5);
@@ -350,3 +357,7 @@ small {
padding: 8px;
display: block;
}
a.button {
text-decoration: none;
}
templates/picture.html
@@ -11,6 +11,17 @@
<x-frame style="--width: 768px">
<h1>{{ resource.title }}</h1>
<p>{{ resource.description }}</p>
{% if resource.replaced_by %}
<h2>Obsolete</h2>
<p>
This picture has been replaced by <a href="/picture/{{ resource.replaced_by.id }}">{{ resource.replaced_by.title }}</a>.
</p>
{% if have_permission %}
<form method="POST" action="/picture/{{ resource.id }}/remove-replacement">
<button class="button-flat" type="submit">Remove replacement</button>
</form>
{% endif %}
{% endif %}
<p>
<a href="{{ resource.origin_url }}">Original source</a> |
<a href="/raw/picture/{{ resource.id }}">View</a> |
@@ -156,6 +167,11 @@
{{ copy.title }}
</div>
</a>
<div class="list-more">
<form method="POST" action="/picture/{{ copy.id }}/mark-replacement">
<button type="submit">Designate replacement</button>
</form>
</div>
</li>
{% endfor %}
</x-vbox>