Add ability to change cover image

Fixes #125
This commit is contained in:
rubenwardy
2020-12-10 22:40:20 +00:00
parent fb1d33d27a
commit 5a0aa636f3
6 changed files with 63 additions and 4 deletions

View File

@@ -19,6 +19,7 @@ from flask import *
from flask_wtf import FlaskForm
from flask_login import login_required
from wtforms import *
from wtforms.ext.sqlalchemy.fields import QuerySelectField
from wtforms.validators import *
from app.utils import *
@@ -37,6 +38,11 @@ class EditScreenshotForm(FlaskForm):
submit = SubmitField("Save")
class EditPackageScreenshotsForm(FlaskForm):
cover_image = QuerySelectField("Cover Image", [DataRequired()], allow_blank=True, get_pk=lambda a: a.id, get_label=lambda a: a.title)
submit = SubmitField("Save")
@bp.route("/packages/<author>/<name>/screenshots/", methods=["GET", "POST"])
@login_required
@is_package_page
@@ -47,6 +53,9 @@ def screenshots(package):
if package.screenshots.count() == 0:
return redirect(package.getNewScreenshotURL())
form = EditPackageScreenshotsForm(obj=package)
form.cover_image.query = package.screenshots
if request.method == "POST":
order = request.form.get("order")
if order:
@@ -62,7 +71,11 @@ def screenshots(package):
db.session.commit()
return redirect(package.getDetailsURL())
return render_template("packages/screenshots.html", package=package)
if form.validate_on_submit():
form.populate_obj(package)
db.session.commit()
return render_template("packages/screenshots.html", package=package, form=form)
@bp.route("/packages/<author>/<name>/screenshots/new/", methods=["GET", "POST"])
@@ -99,6 +112,7 @@ def create_screenshot(package):
return render_template("packages/screenshot_new.html", package=package, form=form)
@bp.route("/packages/<author>/<name>/screenshots/<id>/edit/", methods=["GET", "POST"])
@login_required
@is_package_page

View File

@@ -308,9 +308,12 @@ class Package(db.Model):
releases = db.relationship("PackageRelease", back_populates="package",
lazy="dynamic", order_by=db.desc("package_release_releaseDate"), cascade="all, delete, delete-orphan")
screenshots = db.relationship("PackageScreenshot", back_populates="package",
screenshots = db.relationship("PackageScreenshot", back_populates="package", foreign_keys="PackageScreenshot.package_id",
lazy="dynamic", order_by=db.asc("package_screenshot_order"), cascade="all, delete, delete-orphan")
cover_image_id = db.Column(db.Integer, db.ForeignKey("package_screenshot.id"), nullable=True, default=None)
cover_image = db.relationship("PackageScreenshot", uselist=False, foreign_keys=[cover_image_id])
maintainers = db.relationship("User", secondary=maintainers)
threads = db.relationship("Thread", back_populates="package", order_by=db.desc("thread_created_at"),

View File

@@ -63,6 +63,17 @@
{{ _("Reordering requires JavaScript.") }}
</p>
</noscript>
<h2>{{ _("Cover Image") }}</h2>
{% from "macros/forms.html" import render_submit_field, render_field %}
<form action="" method="POST" class="form" role="form">
{{ form.hidden_tag() }}
{{ render_field(form.cover_image, tabindex=220) }}
{{ render_submit_field(form.submit, tabindex=280) }}
</form>
{% endblock %}
{% block scriptextra %}

View File

@@ -27,8 +27,9 @@
{% set release = package.getDownloadRelease() %}
<main>
{% set cover_image = package.cover_image.url or package.getMainScreenshotURL() %}
<header class="jumbotron pb-3"
style="background: linear-gradient(rgba(0, 0, 0, 0.4), rgba(0, 0, 0, 0.7)), url('{{ package.getMainScreenshotURL() }}');
style="background: linear-gradient(rgba(0, 0, 0, 0.4), rgba(0, 0, 0, 0.7)), url('{{ cover_image }}');
background-size: cover;
background-repeat: no-repeat;
background-position: center;">