From 9d50b7694b40e139f6a1271f68f6b6722645d4cd Mon Sep 17 00:00:00 2001 From: Pabloader Date: Sat, 11 Apr 2026 14:36:53 +0000 Subject: [PATCH] Worker cards design --- build/assets/global.css | 3 ++ src/common/storage.ts | 31 ++++--------------- .../hordeseer/assets/worker-card.module.css | 25 +++++++-------- .../hordeseer/components/worker-card.tsx | 14 ++++----- 4 files changed, 28 insertions(+), 45 deletions(-) diff --git a/build/assets/global.css b/build/assets/global.css index e7894cd..3d816c7 100644 --- a/build/assets/global.css +++ b/build/assets/global.css @@ -10,10 +10,13 @@ --text: #f8f8f2; --text-muted: #75715e; --text-dim: #cfcfc2; + --text-dark: #1a1a1a; --yellow: #e6db74; --orange: #fd971f; --blue: #66d9ef; --purple: #ae81ff; + --green: #a3be8c; + --red: #e06c75; --radius: 4px; --transition: 0.15s ease; diff --git a/src/common/storage.ts b/src/common/storage.ts index 29e02be..6b6196f 100644 --- a/src/common/storage.ts +++ b/src/common/storage.ts @@ -1,5 +1,3 @@ -const API_KEY = 'awoorwa32'; - const saveThrottleDelay = 2000; const pendingSaves = new Map>(); @@ -15,12 +13,10 @@ export const loadObject = async (key: string, defaultObject: T): Promise = let remoteObject: Partial = {}; try { - const response = await fetch(`https://demo.pabloader.ru/storage/${key}?_=${Math.random()}`); - if (response.ok) { - const compressedData = await response.blob(); - const decompressedData = await decompressBlob(compressedData); - remoteObject = JSON.parse(await decompressedData.text()); - } + // TODO loading from a remote source + const compressedData = new Blob([]); + const decompressedData = await decompressBlob(compressedData); + remoteObject = JSON.parse(await decompressedData.text()); } catch { } return { ...defaultObject, ...localObject, ...remoteObject }; @@ -43,22 +39,9 @@ const doSaveObject = async (key: string, obj: T) => { } catch { } try { - const url = new URL('https://demo.pabloader.ru/storage/index.php'); - url.searchParams.set('filename', key); - const compressedData = await compressBlob(saveData); - - const response = await fetch(url, { - method: 'POST', - headers: { - 'Content-Type': 'application/gzip', - 'Authorization': `Bearer ${API_KEY}`, - }, - body: compressedData, - }); - if (!response.ok) { - throw new Error('Failed to save context'); - } + // TODO saving to remote storage + void compressedData; } catch { } } @@ -68,14 +51,12 @@ export const compressBlob = async (blob: Blob | string): Promise => { blob = new Blob([blob]); } const cs = new CompressionStream("gzip"); - // @ts-ignore const compressedStream = blob.stream().pipeThrough(cs); return await new Response(compressedStream).blob(); } export const decompressBlob = async (blob: Blob): Promise => { const ds = new DecompressionStream("gzip"); - // @ts-ignore const decompressedStream = blob.stream().pipeThrough(ds); return await new Response(decompressedStream).blob(); } diff --git a/src/games/hordeseer/assets/worker-card.module.css b/src/games/hordeseer/assets/worker-card.module.css index 760257f..22d5658 100644 --- a/src/games/hordeseer/assets/worker-card.module.css +++ b/src/games/hordeseer/assets/worker-card.module.css @@ -17,6 +17,15 @@ border-color: var(--accent-alt) !important; } +.maintenanceBorder { + border-color: var(--yellow) !important; +} + +.ownBadge { + background: var(--accent-alt); + color: var(--text-dark); +} + .offline { opacity: 0.5; } @@ -65,24 +74,14 @@ text-transform: uppercase; } -.online { - background: var(--accent-alt); - color: #1a1a1a; -} - -.offlineBadge { - background: var(--bg-active); - color: var(--text-muted); -} - .maintenance { background: var(--yellow); - color: #1a1a1a; + color: var(--text-dark); } .trusted { - background: var(--blue); - color: #1a1a1a; + background: var(--accent); + color: var(--text-dark); } .info { diff --git a/src/games/hordeseer/components/worker-card.tsx b/src/games/hordeseer/components/worker-card.tsx index ac702b7..292280a 100644 --- a/src/games/hordeseer/components/worker-card.tsx +++ b/src/games/hordeseer/components/worker-card.tsx @@ -15,6 +15,7 @@ export const WorkerCard = ({ worker, isOwn }: Props) => { return (
@@ -29,14 +30,9 @@ export const WorkerCard = ({ worker, isOwn }: Props) => { {worker.info ? {expanded.value ? ' ▲' : ' ▼'} : null}
- - {worker.online ? 'online' : 'offline'} - + {isOwn && own} {worker.maintenance_mode && maintenance} - {worker.trusted && trusted} + {!worker.trusted && not trusted}
@@ -77,6 +73,10 @@ export const WorkerCard = ({ worker, isOwn }: Props) => {
Kudos earned
{formatNumber(worker.kudos_rewards)}
+
+
Kudos/hour
+
{worker.uptime > 0 ? formatNumber(Math.round((worker.kudos_details.generated / worker.uptime) * 3600)) : '0'}
+
);