diff --git a/apollo/server/server.py b/apollo/server/server.py index 5bfb5b0..22a88e9 100644 --- a/apollo/server/server.py +++ b/apollo/server/server.py @@ -6,7 +6,7 @@ Tortoise.init_models(["apollo.db"], "models") # noqa # pylint: disable=wrong-im from fastapi import FastAPI, Request, Depends from fastapi.openapi.utils import get_openapi -from fastapi.responses import JSONResponse +from fastapi.responses import JSONResponse, RedirectResponse from starlette.middleware.sessions import SessionMiddleware from fastapi_pagination import add_pagination @@ -88,6 +88,23 @@ async def health(): return {"status": "ok"} +@app.get("/_/set_color") +async def set_color(request: Request): + valid_colors = ["dark", "light"] + color = request.query_params.get("color") + response = RedirectResponse( + request.headers["referer"] if "referer" in request.headers else "/" + ) + + # First check if the color is valid + # If valid, set the color in the cookie, then + # redirect back to referrer + if color in valid_colors: + response.set_cookie("color", color) + + return response + + @app.exception_handler(404) async def not_found_handler(request, exc): # pylint: disable=unused-argument if request.url.path.startswith("/api" diff --git a/apollo/server/static/theme.scss b/apollo/server/static/theme.scss index 11e0a93..0dd624b 100644 --- a/apollo/server/static/theme.scss +++ b/apollo/server/static/theme.scss @@ -6,12 +6,56 @@ $feature-flags: ( @use 'carbon-components/scss/globals/scss/vendor/@carbon/elements/scss/themes/generated/themes'; @import 'carbon-components/scss/globals/scss/styles.scss'; -:root { - @include carbon--theme($carbon--theme--g90, true); +@mixin dark-mode-non-root { + a { + color: map-get($carbon--theme--g90, 'link-01'); + } + + #color-switcher-dark { + display: var(--display-dark-switcher); + } } -a { - color: map-get($carbon--theme--g90, 'link-01'); +@mixin dark-mode { + :root { + @include carbon--theme($carbon--theme--g90, true); + --display-dark-switcher: none; + --display-light-switcher: block; + } + + @include dark-mode-non-root; +} + +@mixin light-mode { + :root, + :root.light { + @include carbon--theme($carbon--theme--white, true); + --display-light-switcher: none; + --display-dark-switcher: block; + } + + bx-side-nav { + border-right: 1px solid var(--cds-ui-03); + } + + #color-switcher-light { + display: var(--display-light-switcher); + } +} + +@include light-mode; + +@media (prefers-color-scheme: dark) { + @include dark-mode; +} + +:root.dark { + @include carbon--theme($carbon--theme--g90, true); + + @include dark-mode-non-root; + + --display-dark-switcher: none; + --display-light-switcher: block; } .bx--inline-notification__text-wrapper { diff --git a/apollo/server/templates/advisory.jinja b/apollo/server/templates/advisory.jinja index bb92270..a41559a 100644 --- a/apollo/server/templates/advisory.jinja +++ b/apollo/server/templates/advisory.jinja @@ -40,19 +40,19 @@
{{ advisory.synopsis }}
{{ line }}
{% endfor %}{{ advisory.synopsis }}
{{ line }}
{% endfor %}