feat: add custom Pivoine Rose theme with Bootstrap 4 styling and SVG favicon

This commit is contained in:
2025-11-09 08:34:02 +01:00
parent 73b4fec389
commit 428fd70ac3
4 changed files with 358 additions and 0 deletions

View File

@@ -15,3 +15,58 @@ config :asciinema, Asciinema.Emails.Mailer,
verify: :verify_none,
versions: [:"tlsv1.2", :"tlsv1.3"]
]
# Custom theme configuration - inject custom CSS and favicon
defmodule AsciinemaWeb.CustomThemePlug do
@moduledoc """
Plug to inject custom CSS and favicon into HTML responses
"""
import Plug.Conn
def init(opts), do: opts
def call(conn, _opts) do
register_before_send(conn, fn conn ->
if html_response?(conn) do
inject_custom_theme(conn)
else
conn
end
end)
end
defp html_response?(conn) do
case get_resp_header(conn, "content-type") do
[content_type | _] -> String.contains?(content_type, "text/html")
[] -> false
end
end
defp inject_custom_theme(conn) do
custom_head = """
<link rel="stylesheet" href="/theme/custom.css">
<link rel="icon" type="image/svg+xml" href="/theme/favicon.svg">
"""
case conn.resp_body do
body when is_binary(body) ->
new_body = String.replace(body, "</head>", "#{custom_head}</head>")
%{conn | resp_body: new_body}
_ ->
conn
end
end
end
# Configure Phoenix endpoint to serve custom theme files
config :asciinema, AsciinemaWeb.Endpoint,
# Serve theme files from /opt/app/etc/theme
static_dirs: %{
at: "/theme",
from: "/opt/app/etc/theme",
gzip: false
}
# Inject the custom theme Plug into the endpoint
config :asciinema, AsciinemaWeb.Endpoint,
plug: AsciinemaWeb.CustomThemePlug