Auf dem Handy war die Seite bisher nur mit der Desktopversion des Browsers brauchbar. Drei Ursachen, alle nachgemessen bei 375 px: Die Diagramme standen im Hochformat, 301 x 400 px - die Zeitachse lag auf der kurzen Seite. Die Hoehe kam nicht aus dem Container: .chart-container hatte inline height:100% in einem Elternelement ohne Hoehe, und die Canvas trugen height="400px;", was kein gueltiger Zahlenwert ist. Die Hoehe steht jetzt im Stylesheet, 400 px am Rechner und 250 px unter 768 px Breite, die Beschriftung dort 8 statt 10 px. Das Meteogramm hat sich nicht angepasst, sondern gequetscht. meteoblue legt sein Bild einmal beim Laden fest und zeichnet es bei einer Breitenaenderung nicht neu; unter etwa 600 px ueberlagern sich Wochentage und Stundenachse. Es wird jetzt in mindestens 640 px Breite geladen - auf breiten Karten gleich in Kartenbreite, dort aendert sich nichts - und, wenn die Karte schmaler ist, als Ganzes verkleinert. Zuschnitt und Skalierung setzt das Skript direkt am Element, nicht ueber das Stylesheet: sonst haengt die Darstellung an einer womoeglich veralteten solar.css im Browser-Cache, und der breit geladene Rahmen ragt ungeschnitten aus der Karte. Passend dazu bekommt solar.css eine Versionskennung aus filemtime(), wie sie die Skripte in footer.php und adminlte.min.css laengst tragen. Ohne sie kam auf schon einmal besuchten Geraeten die alte Datei aus dem Cache. Die Statistik-Kacheln lagen in nackten .col ohne Breitenangabe; Bootstrap laesst sie dann nach Textlaenge umbrechen, mal zwei, mal drei je Zeile und unterschiedlich breit. Die Breite kommt jetzt aus row-cols-2/row-cols-md-4, und die Karte fuellt die Zeilenhoehe, damit die Werte trotz ein- oder zweizeiliger Titel auf einer Linie stehen. Zuletzt sind die Abstaende unter 768 px enger gefasst - auf .app-content beschraenkt, damit Seitenleiste, Kopfzeile und Modals unberuehrt bleiben: Spaltenabstand 24 -> 8 px, Kartenabstand 24 -> 12 px, Polsterung 16 -> 8 px. Die nutzbare Breite steigt damit von 301 auf 317 px. Geprueft bei 375 und 1200 px auf Solar, Historie, Heizung, Home und Wetter: kein Querlauf, am Rechner unveraenderte Werte. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
179 lines
8.8 KiB
PHP
179 lines
8.8 KiB
PHP
|
|
<!doctype html>
|
|
<html lang="en">
|
|
<!--begin::Head-->
|
|
<?php
|
|
// $_GET["action"] ist von index.php bereits auf eine gueltige Seite gesetzt.
|
|
if (!isset($_GET["floor"]))
|
|
$_GET["floor"] = "OG";
|
|
?>
|
|
<head>
|
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
|
<title>Smarthome control</title>
|
|
<!--begin::Accessibility Meta Tags-->
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
|
|
<meta name="color-scheme" content="light dark" />
|
|
<meta name="theme-color" content="#007bff" media="(prefers-color-scheme: light)" />
|
|
<meta name="theme-color" content="#1a1a1a" media="(prefers-color-scheme: dark)" />
|
|
<link rel="icon" type="image/png" href="assets/img/favicon.png">
|
|
<!--end::Accessibility Meta Tags-->
|
|
|
|
<!--begin::Primary Meta Tags-->
|
|
<meta name="title" content="Smarthome control" />
|
|
<meta name="author" content="ColorlibHQ" />
|
|
<meta name="description" content="Smarthome control panel by m0." />
|
|
<meta name="keywords" content="smarthome dashboard, admin panel" />
|
|
<!--end::Primary Meta Tags-->
|
|
|
|
<!--begin::Accessibility Features-->
|
|
<!-- Skip links will be dynamically added by accessibility.js -->
|
|
<meta name="supported-color-schemes" content="light dark" />
|
|
<link rel="preload" href="./css/adminlte.min.css?v=2" as="style" />
|
|
<link rel="stylesheet" href="./css/solar.css?v=<?= filemtime("css/solar.css") ?>" />
|
|
<!--end::Accessibility Features-->
|
|
|
|
<!--begin::Fonts-->
|
|
<link rel="stylesheet" href="assets/fonts/font_poppins.css" media="print" onload="this.media='all'" />
|
|
<!--end::Fonts-->
|
|
|
|
<!--begin::Third Party Plugin(Bootstrap Icons)-->
|
|
<link rel="stylesheet" href="css/bootstrap-icons.min.css" />
|
|
<!--end::Third Party Plugin(Bootstrap Icons)-->
|
|
|
|
<!--begin::Required Plugin(AdminLTE)-->
|
|
<link rel="stylesheet" href="./css/adminlte.min.css?v=2" />
|
|
<!--end::Required Plugin(AdminLTE)-->
|
|
|
|
|
|
</head>
|
|
<!--end::Head-->
|
|
<!--begin::Body-->
|
|
|
|
<body class="layout-fixed sidebar-expand-lg bg-body-tertiary" data-bs-theme="dark">
|
|
<!--begin::App Wrapper-->
|
|
<div class="app-wrapper">
|
|
<!--begin::Header-->
|
|
<nav class="app-header navbar navbar-expand bg-body">
|
|
<!--begin::Container-->
|
|
<div class="container-fluid">
|
|
<!--begin::Start Navbar Links-->
|
|
<ul class="navbar-nav">
|
|
<li class="nav-item">
|
|
<a class="nav-link" data-lte-toggle="sidebar" href="#" role="button">
|
|
<i class="bi bi-list"></i>
|
|
</a>
|
|
</li>
|
|
</ul>
|
|
<!--end::Start Navbar Links-->
|
|
|
|
<!--begin::End Navbar Links-->
|
|
<ul class="navbar-nav ms-auto">
|
|
<!--begin::Fullscreen Toggle-->
|
|
<li class="nav-item">
|
|
<a class="nav-link" href="#" data-lte-toggle="fullscreen">
|
|
<i data-lte-icon="maximize" class="bi bi-arrows-fullscreen"></i>
|
|
<i data-lte-icon="minimize" class="bi bi-fullscreen-exit" style="display: none"></i>
|
|
</a>
|
|
</li>
|
|
<?php
|
|
if ($_SESSION["local"] == true)
|
|
echo "<li class='nav-item'><a class='nav-link' href='addUser.php'><i data-lte-icon='Add user' class='bi bi-person-add'></i></a></li>";
|
|
?>
|
|
<!--end::Fullscreen Toggle-->
|
|
</ul>
|
|
<!--end::End Navbar Links-->
|
|
</div>
|
|
<!--end::Container-->
|
|
</nav>
|
|
<!--end::Header-->
|
|
<!--begin::Sidebar-->
|
|
<aside class="app-sidebar bg-body-secondary shadow">
|
|
<!--begin::Sidebar Brand-->
|
|
<div class="sidebar-brand">
|
|
<!--begin::Brand Link-->
|
|
<a href="./index.php" class="brand-link">
|
|
<!--begin::Brand Image-->
|
|
<img src="./assets/img/AdminLTELogo.png" alt="Logo"
|
|
class="brand-image opacity-75 shadow" />
|
|
<!--end::Brand Image-->
|
|
<!--begin::Brand Text-->
|
|
<span class="brand-text fw-light">Smart controller</span>
|
|
<!--end::Brand Text-->
|
|
</a>
|
|
<!--end::Brand Link-->
|
|
</div>
|
|
<!--end::Sidebar Brand-->
|
|
<!--begin::Sidebar Wrapper-->
|
|
<div class="sidebar-wrapper">
|
|
<nav class="mt-2">
|
|
<!--begin::Sidebar Menu-->
|
|
<ul class="nav sidebar-menu flex-column" data-lte-toggle="treeview" role="navigation"
|
|
aria-label="Main navigation" data-accordion="false" id="navigation">
|
|
<li class="nav-item menu-open">
|
|
<a href="#" class="nav-link active">
|
|
<i class="nav-icon bi bi-speedometer"></i>
|
|
<p>
|
|
Dashboards
|
|
<i class="nav-arrow bi bi-chevron-right"></i>
|
|
</p>
|
|
</a>
|
|
<ul class="nav nav-treeview ps-4">
|
|
<li class="nav-item">
|
|
<a href="?action=solar" class="nav-link<?php if($_GET["action"]=="solar"){echo " active";} ?>">
|
|
<i class="nav-icon bi bi-brightness-alt-high"></i>
|
|
<p>Solar</p>
|
|
</a>
|
|
</li>
|
|
<li class="nav-item">
|
|
<a href="?action=heat" class="nav-link <?php if($_GET["action"]=="heat"){echo " active";} ?>">
|
|
<i class="nav-icon bi bi-fire"></i>
|
|
<p>Heizung</p>
|
|
</a>
|
|
</li>
|
|
<li class="nav-item">
|
|
<a href="?action=history" class="nav-link <?php if($_GET["action"]=="history"){echo " active";} ?>">
|
|
<i class="nav-icon bi bi-graph-up"></i>
|
|
<p>Historie</p>
|
|
</a>
|
|
</li>
|
|
<li class="nav-item">
|
|
<a href="?action=weather" class="nav-link <?php if($_GET["action"]=="weather"){echo " active";} ?>">
|
|
<i class="nav-icon bi bi-cloud-sun"></i>
|
|
<p>Wetter</p>
|
|
</a>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li class="nav-item menu-open">
|
|
<a href="#" class="nav-link active">
|
|
<i class="nav-icon bi bi-house"></i>
|
|
<p>
|
|
Home
|
|
<i class="nav-arrow bi bi-chevron-right"></i>
|
|
</p>
|
|
</a>
|
|
<ul class="nav nav-treeview ps-4">
|
|
<li class="nav-item">
|
|
<a href="?action=home&floor=OG" class="nav-link <?php if($_GET["action"]=="home" && $_GET["floor"] == "OG"){echo " active";} ?>">
|
|
<p> OG</p>
|
|
</a>
|
|
</li>
|
|
<li class="nav-item">
|
|
<a href="?action=home&floor=EG" class="nav-link <?php if($_GET["action"]=="home" && $_GET["floor"] == "EG"){echo " active";} ?>">
|
|
<p> EG</p>
|
|
</a>
|
|
</li>
|
|
<li class="nav-item">
|
|
<a href="?action=home&floor=UG" class="nav-link <?php if($_GET["action"]=="home" && $_GET["floor"] == "UG"){echo " active";} ?>">
|
|
<p> UG</p>
|
|
</a>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
<!--end::Sidebar Menu-->
|
|
</nav>
|
|
</div>
|
|
<!--end::Sidebar Wrapper-->
|
|
</aside>
|
|
<!--end::Sidebar-->
|