the greatest

This commit is contained in:
thrhymes
2025-12-24 23:07:56 +01:00
parent b7cb257d05
commit 4605b51236
5 changed files with 160 additions and 132 deletions

View File

@@ -4,7 +4,7 @@
* - Install/Update Overlay mit beforeinstallprompt.prompt() * - Install/Update Overlay mit beforeinstallprompt.prompt()
*/ */
const APP_VERSION = "2025.12.24.12"; const APP_VERSION = "2025.12.24.19";
const TOKEN = "T9e7WESBXxy6rSD"; const TOKEN = "T9e7WESBXxy6rSD";
const BASE = "https://home.x-s.at"; const BASE = "https://home.x-s.at";
const SHARE_DAV = `${BASE}/public.php/dav/files/${TOKEN}`; const SHARE_DAV = `${BASE}/public.php/dav/files/${TOKEN}`;
@@ -247,10 +247,12 @@ function renderList(items, currentDir) {
if (pdfs.length === 0) { if (pdfs.length === 0) {
setStatus("Keine PDFs gefunden."); setStatus("Keine PDFs gefunden.");
const cnt = $("titleCount"); if (cnt) cnt.textContent = "(0)";
return; return;
} }
setStatus(`PDFs: ${pdfs.length}`); setStatus("");
const cnt = $("titleCount"); if (cnt) cnt.textContent = `(${pdfs.length})`;
for (const it of pdfs) { for (const it of pdfs) {
const a = document.createElement("a"); const a = document.createElement("a");
@@ -308,6 +310,7 @@ async function loadList() {
} catch (e) { } catch (e) {
console.error(e); console.error(e);
setStatus("Fehler"); setStatus("Fehler");
const cnt = $("titleCount"); if (cnt) cnt.textContent = "";
showError(String(e && e.message ? e.message : e)); showError(String(e && e.message ? e.message : e));
} }
} }

View File

@@ -11,139 +11,19 @@
<link rel="manifest" href="./manifest.webmanifest"> <link rel="manifest" href="./manifest.webmanifest">
<link rel="icon" href="./icons/icon-192.png"> <link rel="icon" href="./icons/icon-192.png">
<link rel="apple-touch-icon" href="./icons/icon-192.png"> <link rel="apple-touch-icon" href="./icons/icon-192.png">
<link rel="stylesheet" href="./style.css">
<title>WFW-Aushang</title> <title>WFW-Aushang</title>
<style>
:root,
:root[data-theme="dark"]{
--bg:#0b1020; --card:#121a33; --text:#e8eeff; --muted:#9fb0ff;
--line:rgba(255,255,255,.12); --btn:#2b60ff; --btn2:#1c254b;
--ok:#2bff9f; --warn:#ffd36b;
}
:root[data-theme="light"]{
--bg:#f6f7fb; --card:#ffffff; --text:#0b1020; --muted:#5060a8;
--line:rgba(0,0,0,.10); --btn:#2b60ff; --btn2:#eef1ff;
}
*{ box-sizing:border-box; }
body{
margin:0; font-family: system-ui, -apple-system, Segoe UI, Roboto, Ubuntu, Cantarell, Arial;
background:var(--bg); color:var(--text);
}
.wrap{
max-width: 860px; margin: 0 auto; padding: 16px 16px 92px;
}
h1{ font-size: 20px; margin: 8px 0 14px; letter-spacing:.3px; }
.list{
display:flex; flex-direction:column; gap:10px;
}
.row{
display:flex; align-items:center; gap:12px;
background:var(--card); border:1px solid var(--line);
border-radius:16px; padding:12px 14px;
text-decoration:none; color:inherit;
}
.row:active{ transform: scale(0.995); }
.ico{
width:38px; height:38px; border-radius:12px;
display:grid; place-items:center;
background:rgba(43,96,255,.16);
border:1px solid rgba(43,96,255,.22);
flex:0 0 auto;
}
.name{ font-size: 16px; line-height:1.2; }
.sub{ font-size: 12px; color: var(--muted); margin-top:3px; }
.spacer{ flex:1; }
.badge{
font-size:12px; color:var(--muted);
border:1px solid var(--line); padding:6px 10px; border-radius:999px;
background:rgba(0,0,0,.08);
}
.footer{
position:fixed; left:0; right:0; bottom:0;
padding:12px 12px calc(12px + env(safe-area-inset-bottom));
background:linear-gradient(to top, rgba(11,16,32,.95), rgba(11,16,32,.55), rgba(11,16,32,0));
pointer-events:none;
}
@media (prefers-color-scheme: light){
.footer{ background:linear-gradient(to top, rgba(246,247,251,.95), rgba(246,247,251,.55), rgba(246,247,251,0)); }
}
.footerInner{
max-width: 860px; margin:0 auto; display:flex; gap:10px; pointer-events:auto;
}
/* BIG BUTTONS */
.btn{
border:0; border-radius:18px;
padding:18px 18px; /* bigger */
font-size:18px; /* bigger */
font-weight:800;
min-height:64px; /* bigger */
display:flex; align-items:center; justify-content:center;
cursor:pointer;
box-shadow: 0 10px 30px rgba(0,0,0,.22);
text-decoration:none;
user-select:none;
-webkit-tap-highlight-color: transparent;
}
.btnPrimary{ background:var(--btn); color:white; flex:1; }
.btnSecondary{ background:var(--btn2); color:var(--text); flex:1; border:1px solid var(--line); box-shadow:none; }
.btn:active{ transform: scale(0.995); }
.status{
margin: 8px 0 14px; color: var(--muted); font-size: 13px;
}
.error{
background: rgba(255,80,80,.12);
border:1px solid rgba(255,80,80,.25);
color: #ffb7b7;
padding: 10px 12px;
border-radius: 14px;
font-size: 13px;
white-space: pre-wrap;
}
/* INSTALL/UPDATE OVERLAY */
#installOverlay{
position:fixed; inset:0;
display:none;
z-index:2147483647;
background: rgba(0,0,0,.55);
backdrop-filter: blur(10px);
pointer-events:auto;
padding: 18px 14px;
}
#installOverlay *{ pointer-events:auto; }
.ovCard{
max-width: 560px;
margin: 10vh auto 0;
background: var(--card);
border: 1px solid var(--line);
border-radius: 22px;
padding: 18px 16px;
box-shadow: 0 20px 70px rgba(0,0,0,.35);
}
.ovTitle{ font-size: 18px; font-weight: 850; margin: 6px 0 6px; }
.ovText{ color: var(--muted); font-size: 14px; line-height: 1.35; margin: 0 0 14px; }
.ovBtns{ display:flex; gap:12px; margin-top: 10px; }
.ovBtns .btn{ flex:1; }
.ovHint{
margin-top: 12px;
font-size: 12px;
color: var(--muted);
border-top: 1px solid var(--line);
padding-top: 12px;
line-height: 1.35;
}
</style>
</head> </head>
<body> <body>
<div class="wrap"> <div class="wrap">
<h1>WFW-Aushang</h1> <div class="titleRow">
<div class="titleIcon" aria-hidden="true"></div>
<h1>WFW-Aushang</h1>
<span id="titleCount" class="titleCount"></span>
</div>
<div id="status" class="status">Lade Liste…</div> <div id="status" class="status">Lade Liste…</div>
<div id="err" class="error" style="display:none"></div> <div id="err" class="error" style="display:none"></div>
<div id="list" class="list"></div> <div id="list" class="list"></div>
@@ -169,6 +49,6 @@
</div> </div>
</div> </div>
<script src="./app.js?v=2025.12.24.12"></script> <script src="./app.js?v=2025.12.24.19"></script>
</body> </body>
</html> </html>

144
zuss/style.css Normal file
View File

@@ -0,0 +1,144 @@
:root,
:root[data-theme="dark"]{
--bg:#0b1020; --card:#121a33; --text:#e8eeff; --muted:#9fb0ff;
--line:rgba(255,255,255,.12); --btn:#2b60ff; --btn2:#1c254b;
--ok:#2bff9f; --warn:#ffd36b;
}
:root[data-theme="light"]{
--bg:#f6f7fb; --card:#ffffff; --text:#0b1020; --muted:#5060a8;
--line:rgba(0,0,0,.10); --btn:#2b60ff; --btn2:#eef1ff;
}
*{ box-sizing:border-box; }
body{
margin:0; font-family: system-ui, -apple-system, Segoe UI, Roboto, Ubuntu, Cantarell, Arial;
background:var(--bg); color:var(--text);
}
.wrap{
max-width: 860px; margin: 0 auto; padding: 16px 16px 92px;
}
.titleRow{
display:flex; align-items:center; gap:10px;
margin: 6px 0 12px;
}
.titleIcon{
width:54px; height:54px; border-radius:18px;
display:grid; place-items:center; flex:0 0 auto;
background:rgba(43,96,255,.16); border:1px solid rgba(43,96,255,.22);
background-image: url("https://home.x-s.at/zuss/icons/icon-192.png");
background-size: cover;
background-position: center;
background-repeat: no-repeat;
overflow:hidden;
}
h1{ font-size: 20px; margin: 0; letter-spacing:.3px; }
.titleCount{
font-size:12px; color:var(--muted);
border:1px solid var(--line);
padding:6px 10px;
border-radius:999px;
background:rgba(0,0,0,.08);
margin-left:4px;
}
.list{
display:flex; flex-direction:column; gap:10px;
}
.row{
display:flex; align-items:center; gap:12px;
background:var(--card); border:1px solid var(--line);
border-radius:16px; padding:12px 14px;
text-decoration:none; color:inherit;
}
.row:active{ transform: scale(0.995); }
.ico{
width:38px; height:38px; border-radius:12px;
display:grid; place-items:center;
background:rgba(43,96,255,.16);
border:1px solid rgba(43,96,255,.22);
flex:0 0 auto;
}
.name{ font-size: 16px; line-height:1.2; }
.sub{ font-size: 12px; color: var(--muted); margin-top:3px; }
.spacer{ flex:1; }
.badge{
font-size:12px; color:var(--muted);
border:1px solid var(--line); padding:6px 10px; border-radius:999px;
background:rgba(0,0,0,.08);
}
.footer{
position:fixed; left:0; right:0; bottom:0;
padding:12px 12px calc(12px + env(safe-area-inset-bottom));
background:linear-gradient(to top, rgba(11,16,32,.95), rgba(11,16,32,.55), rgba(11,16,32,0));
pointer-events:none;
}
@media (prefers-color-scheme: light){
.footer{ background:linear-gradient(to top, rgba(246,247,251,.95), rgba(246,247,251,.55), rgba(246,247,251,0)); }
}
.footerInner{
max-width: 860px; margin:0 auto; display:flex; gap:10px; pointer-events:auto;
}
/* BIG BUTTONS */
.btn{
border:0; border-radius:18px;
padding:18px 18px; /* bigger */
font-size:18px; /* bigger */
font-weight:800;
min-height:64px; /* bigger */
display:flex; align-items:center; justify-content:center;
cursor:pointer;
box-shadow: 0 10px 30px rgba(0,0,0,.22);
text-decoration:none;
user-select:none;
-webkit-tap-highlight-color: transparent;
}
.btnPrimary{ background:var(--btn); color:white; flex:1; }
.btnSecondary{ background:var(--btn2); color:var(--text); flex:1; border:1px solid var(--line); box-shadow:none; }
.btn:active{ transform: scale(0.995); }
.status{
margin: 8px 0 14px; color: var(--muted); font-size: 13px;
}
.error{
background: rgba(255,80,80,.12);
border:1px solid rgba(255,80,80,.25);
color: #ffb7b7;
padding: 10px 12px;
border-radius: 14px;
font-size: 13px;
white-space: pre-wrap;
}
/* INSTALL/UPDATE OVERLAY */
#installOverlay{
position:fixed; inset:0;
display:none;
z-index:2147483647;
background: rgba(0,0,0,.55);
backdrop-filter: blur(10px);
pointer-events:auto;
padding: 18px 14px;
}
#installOverlay *{ pointer-events:auto; }
.ovCard{
max-width: 560px;
margin: 10vh auto 0;
background: var(--card);
border: 1px solid var(--line);
border-radius: 22px;
padding: 18px 16px;
box-shadow: 0 20px 70px rgba(0,0,0,.35);
}
.ovTitle{ font-size: 18px; font-weight: 850; margin: 6px 0 6px; }
.ovText{ color: var(--muted); font-size: 14px; line-height: 1.35; margin: 0 0 14px; }
.ovBtns{ display:flex; gap:12px; margin-top: 10px; }
.ovBtns .btn{ flex:1; }
.ovHint{
margin-top: 12px;
font-size: 12px;
color: var(--muted);
border-top: 1px solid var(--line);
padding-top: 12px;
line-height: 1.35;
}

View File

@@ -1,9 +1,10 @@
const CACHE = "wfw-aushang-2025.12.24.12"; const CACHE = "wfw-aushang-2025.12.24.19";
const ASSETS = [ const ASSETS = [
"/zuss/", "/zuss/",
"/zuss/index.html", "/zuss/index.html",
"/zuss/app.js", "/zuss/app.js",
"/zuss/style.css",
"/zuss/manifest.webmanifest", "/zuss/manifest.webmanifest",
"/zuss/version.json", "/zuss/version.json",
"/zuss/icons/icon-192.png", "/zuss/icons/icon-192.png",
@@ -40,7 +41,7 @@ self.addEventListener("fetch", (event) => {
return fresh; return fresh;
} catch { } catch {
const cached = await caches.match(req); const cached = await caches.match(req);
return cached || new Response('{"version":"2025.12.24.12"}', { headers: { "Content-Type": "application/json" } }); return cached || new Response('{"version":"2025.12.24.19"}', { headers: { "Content-Type": "application/json" } });
} }
})()); })());
return; return;

View File

@@ -1 +1 @@
{ "version": "2025.12.24.12" } { "version": "2025.12.24.19" }