mirror of
https://git.ari.lt/ari.lt/ari.lt.git
synced 2025-02-04 17:49:24 +01:00
add counter.svg
Signed-off-by: Ari Archer <ari@ari.lt>
This commit is contained in:
parent
dd15783241
commit
8ab5ca1f79
2 changed files with 60 additions and 1 deletions
|
@ -2,6 +2,8 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
"""utilities"""
|
"""utilities"""
|
||||||
|
|
||||||
|
from html import escape as html_escape
|
||||||
|
|
||||||
import bleach
|
import bleach
|
||||||
from markdown import markdown
|
from markdown import markdown
|
||||||
from markupsafe import Markup
|
from markupsafe import Markup
|
||||||
|
@ -23,3 +25,43 @@ def markdown_to_html(text: str) -> Markup:
|
||||||
protocols={"http", "https"},
|
protocols={"http", "https"},
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def text2svg(
|
||||||
|
text: str,
|
||||||
|
fill: str = "#fff",
|
||||||
|
font: str = "sans-serif",
|
||||||
|
size: float = 16,
|
||||||
|
baseline: float = 1,
|
||||||
|
padding: float = 1,
|
||||||
|
ratio: float = 1, # usually 2 for monospace
|
||||||
|
) -> str:
|
||||||
|
"""convert count to svg
|
||||||
|
|
||||||
|
fill -- text colour
|
||||||
|
font -- font family
|
||||||
|
size -- font size in pixels
|
||||||
|
baseline -- baseline offset
|
||||||
|
padding -- padding of characters
|
||||||
|
ratio -- character ratio
|
||||||
|
|
||||||
|
embedding :
|
||||||
|
|
||||||
|
<img
|
||||||
|
id="my-stuff"
|
||||||
|
src="..."
|
||||||
|
style="display:inline;height:1em;vertical-align:top"
|
||||||
|
alt="my stuff :3"
|
||||||
|
/>
|
||||||
|
"""
|
||||||
|
|
||||||
|
fill = html_escape(fill)
|
||||||
|
font = html_escape(font)
|
||||||
|
|
||||||
|
svg: str = (
|
||||||
|
f'<svg xmlns="http://www.w3.org/2000/svg" width="{len(text) + padding * ratio}ch" height="{size}" font-size="{size}">'
|
||||||
|
)
|
||||||
|
svg += f'<text x="50%" y="{size - baseline}" text-anchor="middle" fill="{fill}" font-family="{font}">{html_escape(text)}</text>'
|
||||||
|
svg += "</svg>"
|
||||||
|
|
||||||
|
return svg
|
||||||
|
|
|
@ -10,7 +10,7 @@ import flask
|
||||||
import validators
|
import validators
|
||||||
from werkzeug.wrappers import Response
|
from werkzeug.wrappers import Response
|
||||||
|
|
||||||
from . import email, models
|
from . import email, models, util
|
||||||
from .c import c
|
from .c import c
|
||||||
from .routing import Bp
|
from .routing import Bp
|
||||||
|
|
||||||
|
@ -229,6 +229,23 @@ def favicon() -> Response:
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@views.get("/counter.svg")
|
||||||
|
def counter() -> flask.Response:
|
||||||
|
"""counter"""
|
||||||
|
return flask.Response(
|
||||||
|
util.text2svg(
|
||||||
|
text=str(models.Counter.first().inc().count),
|
||||||
|
fill=flask.request.args.get("fill", "#fff"),
|
||||||
|
font=flask.request.args.get("font", "sans-serif"),
|
||||||
|
size=float(flask.request.args.get("size", 16)),
|
||||||
|
baseline=float(flask.request.args.get("baseline", 1)),
|
||||||
|
padding=float(flask.request.args.get("padding", 1)),
|
||||||
|
ratio=float(flask.request.args.get("radio", 1)),
|
||||||
|
),
|
||||||
|
mimetype="image/svg+xml",
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
@views.get("/captcha.png")
|
@views.get("/captcha.png")
|
||||||
def captcha() -> flask.Response:
|
def captcha() -> flask.Response:
|
||||||
"""CAPTCHA"""
|
"""CAPTCHA"""
|
||||||
|
|
Loading…
Add table
Reference in a new issue