feat: endorsement badge icon only

pull/56/head
db0 2023-10-16 11:16:04 +02:00
parent 06843812c8
commit fdd5949a74
5 changed files with 24 additions and 5 deletions

View File

@ -1,5 +1,9 @@
# Changelog # Changelog
# 0.21.1
Allow to display endorsement badge without text
# 0.21.0 # 0.21.0
* Added rebuttals * Added rebuttals

View File

@ -4,6 +4,7 @@ from sqlalchemy.orm import aliased
from fediseer.classes.instance import Guarantee, Endorsement from fediseer.classes.instance import Guarantee, Endorsement
from flask import make_response from flask import make_response
from sqlalchemy import func from sqlalchemy import func
from fediseer import enums
class GuaranteeBadge(Resource): class GuaranteeBadge(Resource):
@ -31,10 +32,16 @@ class GuaranteeBadge(Resource):
return response return response
class EndorsementBadge(Resource): class EndorsementBadge(Resource):
get_parser = reqparse.RequestParser()
get_parser.add_argument("Client-Agent", default="unknown:0:unknown", type=str, required=False, help="The client name and version.", location="headers")
get_parser.add_argument("style", required=False, default=enums.BadgeStyle.FULL.name, type=str, help=f"The style the text should take. 'FULL' (default) means icon, text and counter. 'ICON' means just icon and counter.", location="args")
@api.expect(get_parser)
def get(self, domain): def get(self, domain):
'''Retrieve Endorsement Badge SVG '''Retrieve Endorsement Badge SVG
''' '''
self.args = self.get_parser.parse_args()
style = enums.BadgeStyle[self.args.style]
query = db.session.query( query = db.session.query(
Instance.domain, Instance.domain,
func.count(Endorsement.id) # Count the number of endorsements func.count(Endorsement.id) # Count the number of endorsements
@ -47,9 +54,9 @@ class EndorsementBadge(Resource):
) )
endorsements = query.first() endorsements = query.first()
if endorsements is None: if endorsements is None:
svg = generate_endorsements_badge(domain, 0) svg = generate_endorsements_badge(domain, 0, style)
else: else:
svg = generate_endorsements_badge(domain, endorsements[1]) svg = generate_endorsements_badge(domain, endorsements[1], style)
response = make_response(svg) response = make_response(svg)
response.headers['Content-Type'] = 'image/svg+xml' response.headers['Content-Type'] = 'image/svg+xml'
return response return response

View File

@ -1,5 +1,6 @@
from pybadges import badge from pybadges import badge
from loguru import logger from loguru import logger
from fediseer import enums
import base64 import base64
with open('fediseer/assets/crossed-chains.svg', 'rb') as file: with open('fediseer/assets/crossed-chains.svg', 'rb') as file:
@ -32,14 +33,17 @@ def generate_guarantee_badge(domain: str, guarantor: str):
) )
return guarantee_badge return guarantee_badge
def generate_endorsements_badge(domain: str, count: int): def generate_endorsements_badge(domain: str, count: int, style: enums.BadgeStyle = enums.BadgeStyle.FULL):
left_color = "DarkSlateGray " left_color = "DarkSlateGray "
right_color = "DarkOliveGreen" right_color = "DarkOliveGreen"
right_text=str(count) right_text=str(count)
left_text = "Endorsements"
if style == enums.BadgeStyle.ICON:
left_text = ''
if count == 0: if count == 0:
right_color = "DarkRed" right_color = "DarkRed"
endorsements_badge = badge( endorsements_badge = badge(
left_text="Endorsements", left_text=left_text,
right_text=right_text, right_text=right_text,
left_color=left_color, left_color=left_color,
right_color=right_color, right_color=right_color,

View File

@ -1,4 +1,4 @@
FEDISEER_VERSION = "0.22.0" FEDISEER_VERSION = "0.22.1"
SUPPORTED_SOFTWARE = { SUPPORTED_SOFTWARE = {
"lemmy", "lemmy",
"mastodon", "mastodon",

View File

@ -33,3 +33,7 @@ class InstanceState(enum.Enum):
class InstanceFlags(enum.Enum): class InstanceFlags(enum.Enum):
RESTRICTED = 0 RESTRICTED = 0
MUTED = 1 MUTED = 1
class BadgeStyle(enum.Enum):
FULL = 0
ICON = 1