From f05a6a962f8566abf8478e14d20be1366f0b9e36 Mon Sep 17 00:00:00 2001 From: Ari Archer Date: Tue, 11 Jun 2024 21:26:34 +0300 Subject: [PATCH] improve badges, js, and metadata Signed-off-by: Ari Archer --- src/aw/__init__.py | 53 ++++++++++++++++++++++++++++++++++++- src/aw/views.py | 17 ++++++++++++ src/static/badges/badge.txt | 12 +++++++++ src/static/css/base.css | 9 +++++++ src/static/js/particles.js | 27 ++++++++++--------- src/templates/index.j2 | 26 ++++++++++-------- 6 files changed, 119 insertions(+), 25 deletions(-) create mode 100644 src/static/badges/badge.txt diff --git a/src/aw/__init__.py b/src/aw/__init__.py index 5b92054..d28e213 100644 --- a/src/aw/__init__.py +++ b/src/aw/__init__.py @@ -4,6 +4,7 @@ import datetime import os +import re import sys from base64 import b64encode from functools import lru_cache @@ -22,6 +23,56 @@ def min_css(css: str) -> str: return web_mini.css.minify_css(css) +def assign_http(app: flask.Flask) -> flask.Flask: + """assign http file stuff""" + + # robots + + @app.route("/robots.txt", methods=["GET", "POST"]) + def __robots__() -> flask.Response: + """favicon""" + + robots: str = ( + f"User-agent: *\nSitemap: {app.config['PREFERRED_URL_SCHEME']}://{app.config['DOMAIN']}/sitemap.xml\n" + ) + + return flask.Response(robots, mimetype="text/plain") + + # sitemap + + rule: flask.Rule + + pat: re.Pattern[str] = re.compile(r"<.+?:(.+?)>") + + sitemap: str = ( + '\ +' + ) + + def surl(loc: str) -> str: + """sitemap url""" + + u: str = "" + + u += f'{app.config["PREFERRED_URL_SCHEME"]}://{app.config["DOMAIN"]}{loc}' + u += "1.0" + + return u + "" + + sitemap += surl("/robots.txt") + + for rule in app.url_map.iter_rules(): + url: str = pat.sub(r"\1", rule.rule) + sitemap += surl(url) + + @app.route("/sitemap.xml", methods=["GET", "POST"]) + def __sitemap__() -> flask.Response: + """sitemap""" + return flask.Response(sitemap + "", mimetype="application/xml") + + return app + + def create_app(name: str) -> flask.Flask: """create ari.lt app""" @@ -125,4 +176,4 @@ def create_app(name: str) -> flask.Flask: "b64encode": b64encode, } - return app + return assign_http(app) diff --git a/src/aw/views.py b/src/aw/views.py index 9ffa9eb..ca55360 100644 --- a/src/aw/views.py +++ b/src/aw/views.py @@ -312,6 +312,23 @@ def badge_yellow() -> Response: return r +@views.get("/badge.txt") +def badge_txt() -> Response: + """Website badge""" + + r: Response = flask.redirect( + flask.url_for( + "static", + filename="badges/badge.txt", + ) + ) + + r.headers["Access-Control-Allow-Origin"] = "*" + r.headers["Access-Control-Allow-Methods"] = "GET, POST, OPTIONS, HEAD" + + return r + + @views.get("/captcha.png") def captcha() -> Response: """CAPTCHA""" diff --git a/src/static/badges/badge.txt b/src/static/badges/badge.txt new file mode 100644 index 0000000..9981607 --- /dev/null +++ b/src/static/badges/badge.txt @@ -0,0 +1,12 @@ + .;l. + ';..,lxOx' + .:dxl.lxOOOx,..... b. .o + 'dkOkxdxkOOOkxxxxxddl; ok + .:loxOOOxlcoOOOOkxxxxxdc. .::c. ,c:c c: :, l. ': ;::. xX;:c, + .,,'.cOOO: ;OOOkd'..... co cO xM'' 0k.==.lK .Nd Kl k0..K kM,.,X. + dOOO;..dOOOkxlccc:;'. kc :K xX 0k.==. Od0,ooO NO; kM 0, + .,;lOOOOxxkOOOOkxc:;,.. o::\ :o lc .k: .k. 'o-:/ cd:;lo + .;cccxOOOk',dkOOOx: + dOOOo .dxOOko. https://ari.lt/ + dkdc. .ooo:'. + ''. .. diff --git a/src/static/css/base.css b/src/static/css/base.css index a2a8ede..c2a72cc 100644 --- a/src/static/css/base.css +++ b/src/static/css/base.css @@ -108,6 +108,15 @@ a { text-decoration: none; } +input[type=checkbox] { + cursor: pointer; +} + +textarea { + cursor: text; +} + + a:hover { text-decoration: underline; } diff --git a/src/static/js/particles.js b/src/static/js/particles.js index 37cc4ab..6ffa5c0 100644 --- a/src/static/js/particles.js +++ b/src/static/js/particles.js @@ -41,8 +41,8 @@ document.addEventListener("DOMContentLoaded", function () { const connection_radius = 192; let mouse = { - x: null, - y: null, + x: -1, + y: -1, }; let animation_frame_id = null; @@ -57,9 +57,6 @@ document.addEventListener("DOMContentLoaded", function () { } } - window.addEventListener("mousemove", update_pointer); - window.addEventListener("touchmove", update_pointer); - function debounce(func, wait, immediate) { let timeout; return function () { @@ -76,16 +73,20 @@ document.addEventListener("DOMContentLoaded", function () { }; } - function handle_resize() { - canvas.width = window.innerWidth; - canvas.height = window.innerHeight; + window.addEventListener("mousemove", update_pointer); + window.addEventListener("touchmove", update_pointer); - cancelAnimationFrame(animation_frame_id); - init(); - animate(); - } + window.addEventListener( + "resize", + debounce(() => { + canvas.width = window.innerWidth; + canvas.height = window.innerHeight; - window.addEventListener("resize", debounce(handle_resize, 250)); + cancelAnimationFrame(animation_frame_id); + init(); + animate(); + }, 250), + ); class Particle { constructor() { diff --git a/src/templates/index.j2 b/src/templates/index.j2 index 59d744e..f196de7 100644 --- a/src/templates/index.j2 +++ b/src/templates/index.j2 @@ -131,7 +131,7 @@
- A illustration (sketch) of Ari Archer with medium length red-black split dyed hair + A illustration (sketch) of Ari Archer with medium length red-black split dyed hair
    @@ -234,31 +234,35 @@
    • - Normal: ari-web badge + Normal: ari-web badge
      • - Embed: + Embed:
    • - Yellow: ari-web badge + Yellow: ari-web badge
      • - Embed: + Embed:
    • + +
    • + Text: badge.txt. +

    Also, friends:

      -
    • FSKY: FSKY badge
    • -
    • LDA: Freetards badge
    • -
    • Hydrogen: H2.gay's badge
    • -
    • DOSKEL: Doskel.net's badge
    • +
    • FSKY: FSKY badge
    • +
    • LDA: Freetards badge
    • +
    • Hydrogen: H2.gay's badge
    • +
    • DOSKEL: Doskel.net's badge

    @@ -468,7 +472,7 @@

- An image CAPTCHA + An image CAPTCHA Click the image above to reload and get a new CAPTCHA.
@@ -492,7 +496,7 @@
{% for comment in comments %}
-

#{{ comment.id }}: {{ comment.name | escape }} {% if comment.website %}({{ comment.website | escape }}){% endif %} <show email> at says...

+

#{{ comment.id }}: {{ comment.name | escape }} {% if comment.website %}({{ comment.website | escape }}){% endif %} <show email> at says...

{{ comment.comment | markdown }}
{% endfor %}