From 05161749e8575cfded25f381617efc9dcb17c971 Mon Sep 17 00:00:00 2001 From: shmyga Date: Tue, 13 Aug 2024 20:54:12 +0300 Subject: [PATCH] feat: add common view module --- gallery/easel/__init__.py | 2 + gallery/easel/route/view/common/__init__.py | 9 +++ .../{schedule => common}/static/favicon.ico | Bin .../easel/route/view/common/static/style.css | 76 ++++++++++++++++++ .../route/view/{weather => common}/util.py | 0 gallery/easel/route/view/schedule/__init__.py | 12 ++- gallery/easel/route/view/schedule/filters.py | 5 ++ .../easel/route/view/schedule/static/index.js | 0 .../route/view/schedule/static/style.css | 18 +---- .../route/view/schedule/templates/index.html | 8 +- .../view/schedule/templates/schedule.html | 22 +++-- gallery/easel/route/view/weather/__init__.py | 9 ++- .../route/view/weather/static/favicon.ico | Bin 15406 -> 0 bytes .../easel/route/view/weather/static/style.css | 44 ---------- .../route/view/weather/templates/index.html | 8 +- .../route/view/weather/templates/weather.html | 6 +- gallery/painting/matchtv/api.py | 22 +++-- gallery/sketch/schedule/model.py | 1 + gallery/version.py | 1 + 19 files changed, 155 insertions(+), 88 deletions(-) create mode 100644 gallery/easel/route/view/common/__init__.py rename gallery/easel/route/view/{schedule => common}/static/favicon.ico (100%) create mode 100644 gallery/easel/route/view/common/static/style.css rename gallery/easel/route/view/{weather => common}/util.py (100%) create mode 100644 gallery/easel/route/view/schedule/filters.py delete mode 100644 gallery/easel/route/view/schedule/static/index.js delete mode 100644 gallery/easel/route/view/weather/static/favicon.ico create mode 100644 gallery/version.py diff --git a/gallery/easel/__init__.py b/gallery/easel/__init__.py index 79bc2e3..6782fcf 100644 --- a/gallery/easel/__init__.py +++ b/gallery/easel/__init__.py @@ -8,6 +8,7 @@ from gallery.sketch.weather.api import WeatherApi from .route import doc from .route.api import schedule as schedule_api_route from .route.api import weather as weather_api_route +from .route.view import common as common_view_route from .route.view import schedule as schedule_view_route from .route.view import weather as weather_view_route @@ -26,6 +27,7 @@ def build_app( doc.mount(app) weather_api_route.mount(app) schedule_api_route.mount(app) + common_view_route.mount(app) weather_view_route.mount(app) schedule_view_route.mount(app) return app diff --git a/gallery/easel/route/view/common/__init__.py b/gallery/easel/route/view/common/__init__.py new file mode 100644 index 0000000..2e78bc5 --- /dev/null +++ b/gallery/easel/route/view/common/__init__.py @@ -0,0 +1,9 @@ +from pathlib import Path + +from fastapi import FastAPI +from fastapi.staticfiles import StaticFiles + + +def mount(app: FastAPI): + base_dir = Path(__file__).parent + app.mount("/static/common", StaticFiles(directory=base_dir / "static")) diff --git a/gallery/easel/route/view/schedule/static/favicon.ico b/gallery/easel/route/view/common/static/favicon.ico similarity index 100% rename from gallery/easel/route/view/schedule/static/favicon.ico rename to gallery/easel/route/view/common/static/favicon.ico diff --git a/gallery/easel/route/view/common/static/style.css b/gallery/easel/route/view/common/static/style.css new file mode 100644 index 0000000..ce3160a --- /dev/null +++ b/gallery/easel/route/view/common/static/style.css @@ -0,0 +1,76 @@ +/* +base +*/ +body { + font-size: 1.5rem; +} + +h3 { + margin: 0.5rem 0; +} + +/* +table +*/ +table { + table-layout: fixed; + border-collapse: collapse; +} + +table, +th, +td { + text-align: center; +} + +td { + padding: 0.1rem 0.4rem; +} + +/* +a.button +*/ +a.button { + text-decoration: none; + color: inherit; +} + +.button.disabled { + pointer-events: none; + cursor: default; + color: gray; + filter: grayscale(100%); +} + +/* +app +*/ +.app-container { + display: flex; + flex-direction: column; + flex-wrap: nowrap; + align-items: center; +} + +ul.app-list { + list-style: none; +} + +ul.app-list > li { + border: 1px solid lightgrey; +} + +ul.app-list > li > a { + display: block; + padding: 0.5rem 2rem; + text-decoration: none; + color: inherit; +} + +ul.app-list > li:hover { + border-color: blue; +} + +ul.app-list > li:hover > a { + color: blue; +} diff --git a/gallery/easel/route/view/weather/util.py b/gallery/easel/route/view/common/util.py similarity index 100% rename from gallery/easel/route/view/weather/util.py rename to gallery/easel/route/view/common/util.py diff --git a/gallery/easel/route/view/schedule/__init__.py b/gallery/easel/route/view/schedule/__init__.py index 9d23d11..16e8c38 100644 --- a/gallery/easel/route/view/schedule/__init__.py +++ b/gallery/easel/route/view/schedule/__init__.py @@ -6,16 +6,18 @@ from fastapi.responses import HTMLResponse, RedirectResponse from fastapi.staticfiles import StaticFiles from fastapi.templating import Jinja2Templates -from gallery.easel.route.view.weather.util import TagType, TagUtil from gallery.sketch.schedule.api import ScheduleApi +from gallery.version import __version__ + +from ..common.util import TagType, TagUtil +from .filters import timedelta_format def mount(app: FastAPI): base_dir = Path(__file__).parent - app.mount( - "/schedule/static", StaticFiles(directory=base_dir / "static"), name="static" - ) + app.mount("/static/schedule", StaticFiles(directory=base_dir / "static")) templates = Jinja2Templates(directory=base_dir / "templates") + templates.env.filters["timedelta_format"] = timedelta_format @app.get("/schedule", response_class=HTMLResponse) async def get_schedule_list(request: Request): @@ -25,6 +27,7 @@ def mount(app: FastAPI): request=request, name="index.html", context={ + "version": __version__, "channels": channels, }, ) @@ -45,6 +48,7 @@ def mount(app: FastAPI): request=request, name="schedule.html", context={ + "version": __version__, "tag_util": TagUtil, "datetime": datetime, "response": response, diff --git a/gallery/easel/route/view/schedule/filters.py b/gallery/easel/route/view/schedule/filters.py new file mode 100644 index 0000000..5a13680 --- /dev/null +++ b/gallery/easel/route/view/schedule/filters.py @@ -0,0 +1,5 @@ +import datetime + + +def timedelta_format(value: datetime.timedelta) -> str: + return ":".join(str(value).split(":")[:2]) diff --git a/gallery/easel/route/view/schedule/static/index.js b/gallery/easel/route/view/schedule/static/index.js deleted file mode 100644 index e69de29..0000000 diff --git a/gallery/easel/route/view/schedule/static/style.css b/gallery/easel/route/view/schedule/static/style.css index e435974..7dff605 100644 --- a/gallery/easel/route/view/schedule/static/style.css +++ b/gallery/easel/route/view/schedule/static/style.css @@ -1,21 +1,7 @@ -body { - font-size: 1.5rem; -} - -.app-container { - display: flex; - flex-direction: column; - flex-wrap: nowrap; - align-items: center; -} - -table, -th, td { - /* border: 1px solid rgba(0, 0, 0, 0.2); */ text-align: left; } -td { - padding: 0.1rem 0.4rem; +tr.live { + font-weight: bold; } diff --git a/gallery/easel/route/view/schedule/templates/index.html b/gallery/easel/route/view/schedule/templates/index.html index e6acc56..b9c64fa 100644 --- a/gallery/easel/route/view/schedule/templates/index.html +++ b/gallery/easel/route/view/schedule/templates/index.html @@ -9,14 +9,16 @@ content="ie=edge"> ТВ + href="/static/common/style.css?v={{version}}"> + -