diff options
author | rubenwardy <rw@rubenwardy.com> | 2020-08-02 17:41:06 +0100 |
---|---|---|
committer | rubenwardy <rw@rubenwardy.com> | 2020-08-02 17:41:06 +0100 |
commit | 9a648095427b4d2bdd6811f5e19a8e5d51a3c6dc (patch) | |
tree | c30318bed8112f00846181af0efd6a042cf0170a | |
parent | ce034fddd4d7e1d27e542bed0d11dcad79a21f5b (diff) | |
download | cheatdb-9a648095427b4d2bdd6811f5e19a8e5d51a3c6dc.tar.xz |
Add badges/shields support
-rw-r--r-- | app/blueprints/packages/packages.py | 19 | ||||
-rw-r--r-- | app/models.py | 9 | ||||
-rw-r--r-- | app/templates/packages/view.html | 20 |
3 files changed, 48 insertions, 0 deletions
diff --git a/app/blueprints/packages/packages.py b/app/blueprints/packages/packages.py index 17a12a1..d612f9e 100644 --- a/app/blueprints/packages/packages.py +++ b/app/blueprints/packages/packages.py @@ -33,6 +33,7 @@ from wtforms.validators import * from wtforms.ext.sqlalchemy.fields import QuerySelectField, QuerySelectMultipleField from sqlalchemy import or_, func from sqlalchemy.orm import joinedload, subqueryload +from urllib.parse import quote as urlescape from celery import uuid @@ -182,6 +183,24 @@ def view(package): threads=threads.all(), has_review=has_review) +@bp.route("/packages/<author>/<name>/shields/<type>/") +@is_package_page +def shield(package, type): + if type == "title": + url = "https://img.shields.io/badge/ContentDB-{}-{}" \ + .format(urlescape(package.title), urlescape("#375a7f")) + elif type == "downloads": + #api_url = abs_url_for("api.package", author=package.author.username, name=package.name) + api_url = "https://content.minetest.net" + url_for("api.package", author=package.author.username, name=package.name) + url = "https://img.shields.io/badge/dynamic/json?color={}&label=ContentDB&query=downloads&suffix=+downloads&url={}" \ + .format(urlescape("#375a7f"), urlescape(api_url)) + else: + abort(404) + + return redirect(url) + + + @bp.route("/packages/<author>/<name>/download/") @is_package_page def download(package): diff --git a/app/models.py b/app/models.py index f784573..4aa18f0 100644 --- a/app/models.py +++ b/app/models.py @@ -658,6 +658,15 @@ class Package(db.Model): return url_for("packages.view", author=self.author.username, name=self.name) + def getShieldURL(self, type): + from app.utils import abs_url_for + return abs_url_for("packages.shield", + author=self.author.username, name=self.name, type=type) + + def makeShield(self, type): + return "[]({})" \ + .format(self.getShieldURL(type), self.getDetailsURL(True)) + def getEditURL(self): return url_for("packages.create_edit", author=self.author.username, name=self.name) diff --git a/app/templates/packages/view.html b/app/templates/packages/view.html index 560ee82..c03611a 100644 --- a/app/templates/packages/view.html +++ b/app/templates/packages/view.html @@ -530,5 +530,25 @@ {% endfor %} </ul> {% endif %} + + {% if package.checkPerm(current_user, "EDIT_PACKAGE") %} + <h3>Badges</h3> + + <p> + {{ package.makeShield("title") | markdown }} + </p> + + <p> + <pre><code>{{ package.makeShield("title") }}</code></pre> + </p> + + <p> + {{ package.makeShield("downloads") | markdown }} + </p> + + <p> + <pre><code>{{ package.makeShield("downloads") }}</code></pre> + </p> + {% endif %} </main> {% endblock %} |