#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ HTML шаблон WiFi GPS Mapper Report. Все страницы используют единый шаблон. В дальнейшем здесь будет располагаться: • CSS • JavaScript • Навигация • Каркас страниц • Footer """ from datetime import datetime, timezone from reports.utils import ( format_datetime as format_report_datetime, ) # ============================================================ # Report context # ============================================================ class ReportContext: def __init__( self, mode="static", page="root", ): if mode not in ( "static", "server", ): raise ValueError( f"Unknown report mode: {mode}" ) if page not in ( "root", "session", "trips", ): raise ValueError( f"Unknown report page: {page}" ) self.mode = mode self.page = page def session_page(self): return ReportContext( mode=self.mode, page="session", ) def home_url(self): if self.mode == "server": return "/" if self.page == "session": return "../index.html" return "index.html" def dashboard_url(self): if self.mode == "server": return "/reports/" if self.page == "session": return "../index.html" return "index.html" def capture_sessions_url(self): if self.mode == "server": return "/reports/sessions/" if self.page == "session": return "../capture_sessions.html" return "capture_sessions.html" def trips_url( self, ): if self.mode == "server": return "/reports/trips/" return "index.html" def search_url( self, ): if self.mode == "server": return "/reports/search/" return "index.html" def session_url( self, session_id, ): if self.mode == "server": return ( f"/reports/session/{session_id}" ) return ( f"sessions/{session_id}.html" ) def asset_url( self, path, ): path = str(path).lstrip("/") if self.mode == "server": return ( f"/reports/static/{path}" ) if self.page == "session": return ( f"../static/{path}" ) return ( f"static/{path}" ) # ============================================================ # HTML Header # ============================================================ def html_header( context=None, ): if context is None: context = ReportContext() return f"""