]> git.lizzy.rs Git - cheatdb.git/commitdiff
Add badges/shields support
authorrubenwardy <rw@rubenwardy.com>
Sun, 2 Aug 2020 16:41:06 +0000 (17:41 +0100)
committerrubenwardy <rw@rubenwardy.com>
Sun, 2 Aug 2020 16:41:06 +0000 (17:41 +0100)
app/blueprints/packages/packages.py
app/models.py
app/templates/packages/view.html

index 17a12a17a4d0e97da74b585ce55fb6a94749bfd6..d612f9edf008d2a0b6dd1645075635e1d0eecbaa 100644 (file)
@@ -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):
index f78457357ec64e340b03a323e658f789d2105758..4aa18f067ad233452c62033bce3bab2000d87bf2 100644 (file)
@@ -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 "[![ContentDB]({})]({})" \
+                       .format(self.getShieldURL(type), self.getDetailsURL(True))
+
        def getEditURL(self):
                return url_for("packages.create_edit",
                                author=self.author.username, name=self.name)
index 560ee827a6f0ffb23487bfcfd6bd6b4fdfcb27f7..c03611a9b4dbbbe7f516437c8be612c8c7c6ce0f 100644 (file)
                                {% 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 %}