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 @@
-
+
-
+
Click the image above to reload and get a new CAPTCHA.
@@ -492,7 +496,7 @@
#{{ 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...