feat: build the Russian responsive web interface

This commit is contained in:
2026-08-29 21:11:36 +03:00
parent 03b283f892
commit e77d9d62c7
8 changed files with 409 additions and 74 deletions
+66
View File
@@ -0,0 +1,66 @@
Import("env")
import gzip
import re
from pathlib import Path
ROOT = Path(env.subst("$PROJECT_DIR"))
DATA = ROOT / "data"
ASSETS = ("index.html", "styles.css", "app.js")
def minify_html(source):
return re.sub(r">\s+<", "><", source).strip()
def minify_css(source):
source = re.sub(r"/\*.*?\*/", "", source, flags=re.S)
return re.sub(r"\s*([{}:;,>])\s*", r"\1", source).strip()
def minify_js(source):
output = []
quote = ""
escaped = False
pending_space = False
for character in source:
if quote:
output.append(character)
if escaped:
escaped = False
elif character == "\\":
escaped = True
elif character == quote:
quote = ""
continue
if character in ("'", '"', "`"):
if pending_space and output and (output[-1].isalnum() or output[-1] in "_$"):
output.append(" ")
pending_space = False
quote = character
output.append(character)
elif character.isspace():
pending_space = True
else:
if pending_space and output and (output[-1].isalnum() or output[-1] in "_$") and (character.isalnum() or character in "_$"):
output.append(" ")
pending_space = False
output.append(character)
return "".join(output)
def compress_assets():
for asset in ASSETS:
path = DATA / asset
text = path.read_text(encoding="utf-8")
if asset.endswith(".html"):
text = minify_html(text)
elif asset.endswith(".css"):
text = minify_css(text)
else:
text = minify_js(text)
(DATA / f"{asset}.gz").write_bytes(gzip.compress(text.encode("utf-8"), mtime=0))
compress_assets()