add js files to flake

This commit is contained in:
Markbeep
2025-04-04 15:12:57 +02:00
parent c834eb2058
commit 9e5e21746a
7 changed files with 60 additions and 24 deletions

View File

@@ -1,4 +1,4 @@
name: Build and Deploy Dockerfile
name: Build Nix Docker Image
on:
push:

View File

@@ -111,7 +111,8 @@ async def redirect_to_init(request: Request, call_next: Any):
global user_exists
if (
not user_exists
and request.url.path not in ["/init", "/globals.css"]
and request.url.path != "/init"
and not request.url.path.startswith("/static")
and request.method == "GET"
):
with open_session() as session:

View File

@@ -23,59 +23,59 @@ router = APIRouter()
root = Path("static")
@router.get("/globals.css")
@router.get("/static/globals.css")
def read_globals_css():
return FileResponse(root / "globals.css", media_type="text/css")
@router.get("/nouislider.css")
@router.get("/static/nouislider.css")
def read_nouislider_css():
return FileResponse(root / "nouislider.min.css", media_type="text/css")
@router.get("/nouislider.js")
@router.get("/static/nouislider.js")
def read_nouislider_js():
return FileResponse(root / "nouislider.min.js", media_type="text/javascript")
@router.get("/apple-touch-icon.png")
@router.get("/static/apple-touch-icon.png")
def read_apple_touch_icon():
return FileResponse(root / "apple-touch-icon.png", media_type="image/png")
@router.get("/favicon-32x32.png")
@router.get("/static/favicon-32x32.png")
def read_favicon_32():
return FileResponse(root / "favicon-32x32.png", media_type="image/png")
@router.get("/favicon-16x16.png")
@router.get("/static/favicon-16x16.png")
def read_favicon_16():
return FileResponse(root / "favicon-16x16.png", media_type="image/png")
@router.get("/site.webmanifest")
@router.get("/static/site.webmanifest")
def read_site_webmanifest():
return FileResponse(
root / "site.webmanifest", media_type="application/manifest+json"
)
@router.get("/htmx.js")
@router.get("/static/htmx.js")
def read_htmx():
return FileResponse(root / "htmx.js", media_type="application/javascript")
@router.get("/htmx-preload.js")
@router.get("/static/htmx-preload.js")
def read_htmx_preload():
return FileResponse(root / "htmx-preload.js", media_type="application/javascript")
@router.get("/alpine.js")
@router.get("/static/alpine.js")
def read_alpinejs():
return FileResponse(root / "alpine.js", media_type="application/javascript")
@router.get("/favicon.svg")
@router.get("/static/favicon.svg")
def read_favicon_svg():
return FileResponse(root / "favicon.svg", media_type="image/svg+xml")

View File

@@ -81,6 +81,18 @@
exec ${default}/bin/fastapi run --port $ABR_APP__PORT
'';
gitignore = pkgs.nix-gitignore.gitignoreSource [ ] ./.;
htmx-preload = builtins.fetchurl {
url = "https://unpkg.com/htmx-ext-preload@2.1.0/preload.js";
sha256 = "sha256:1bfkr60i20aj16vbwz2nv1q5fmmmzmc52i2aqn5cx6xihbmwy7nd";
};
htmx = builtins.fetchurl {
url = "https://unpkg.com/htmx.org@2.0.4/dist/htmx.min.js";
sha256 = "sha256:0ixlixv36rrfzj97g2w0q6jxbg0x1rswgvvd2vrpjm13r2jxs2g2";
};
alpinejs = builtins.fetchurl {
url = "https://cdn.jsdelivr.net/npm/alpinejs@3.x.x/dist/cdn.min.js";
sha256 = "sha256:1lqa3v5p7pwz3599xnxf5bwxf17bbmqxcqz3cpgj32a8ab9fxl9y";
};
in
pkgs.dockerTools.buildImage {
@@ -97,6 +109,10 @@
cp -r ${gitignore}/templates $out/app/templates
cp -r ${gitignore}/static/* $out/app/static
cp -r ${gitignore}/app $out/app/app
cp ${htmx-preload} $out/app/static/htmx-preload.js
cp ${htmx} $out/app/static/htmx.js
cp ${alpinejs} $out/app/static/alpine.js
'';
};

View File

@@ -5,9 +5,9 @@
{% block head %}
<title>AudioBookRequest</title>
{% endblock %}
<link rel="stylesheet" href="/globals.css" />
<script src="/htmx.js"></script>
<script defer src="/htmx-preload.js"></script>
<link rel="stylesheet" href="/static/globals.css" />
<script src="/static/htmx.js"></script>
<script defer src="/static/htmx-preload.js"></script>
<script>
const setTheme = theme => {
if (!theme) {
@@ -39,11 +39,30 @@
</script>
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png" />
<link rel="icon" sizes="any" type="image/svg+xml" href="/favicon.svg" />
<link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png" />
<link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png" />
<link rel="manifest" href="/site.webmanifest" />
<link
rel="apple-touch-icon"
sizes="180x180"
href="/static/apple-touch-icon.png"
/>
<link
rel="icon"
sizes="any"
type="image/svg+xml"
href="/static/favicon.svg"
/>
<link
rel="icon"
type="image/png"
sizes="32x32"
href="/static/favicon-32x32.png"
/>
<link
rel="icon"
type="image/png"
sizes="16x16"
href="/static/favicon-16x16.png"
/>
<link rel="manifest" href="/static/site.webmanifest" />
{% include 'scripts/toast.html' %}
</head>

View File

@@ -1 +1 @@
<script defer src="/alpine.js"></script>
<script defer src="/static/alpine.js"></script>

View File

@@ -1,7 +1,7 @@
{% extends "settings_page/base.html" %} {% block head %}
<title>Settings - Download</title>
<link href="/nouislider.css" rel="stylesheet" />
<script src="/nouislider.js"></script>
<link href="/static/nouislider.css" rel="stylesheet" />
<script src="/static/nouislider.js"></script>
<script>
const createSlider = (sliderId, fromId, toId, start, stop) => {
const slider = document.getElementById(sliderId);