From b1485ba3d4917fbc090f4cabbc2ea2efb6d75685 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mih=C3=A1ly=20Andr=C3=A1s=20T=C3=B3th?= Date: Tue, 8 Jul 2025 13:42:34 +0200 Subject: [PATCH] icon and label text color harmonize --- README.md | 2 +- index.js | 27 +++++++++++++++++++++++---- 2 files changed, 24 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index d40aef0..62411fa 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ Az alábbi paraméterekkel szabályozhatod a `/badge` végpont működését: | `icon` | `portainer` | A SimpleIcons ikon neve (kisbetű, kötőjellel). | `github`, `docker`, `nginx` | | `label` | `Portainer` | A badge-en megjelenő szöveg. | `MyApp`, `Status` | | `bg` | `#f0f0f0` | Háttérszín (hex vagy CSS színnév). | `#fff`, `#222`, `red` | -| `color` | `#000000` | Szöveg színe (hex vagy CSS színnév). | `#333`, `white` | +| `color` | `#000000` | Szöveg színe (hex vagy CSS színnév). Harmonizál az icon szinével ha nem kérünk külön. | `#333`, `white` | | `size` | `24` | Ikon (és badge) magassága pixelben. | `16`, `32`, `64` | | `labelpos` | `right` | Szöveg pozíciója az ikonhoz képest: `right`, `left`, `above`, `below`. | `left`, `above` | | `fontweight`| `normal` | Szöveg vastagsága (`normal`, `bold`, `lighter`, szám is lehet pl. `600`). | `bold`, `600` | diff --git a/index.js b/index.js index 26032f3..8e74e13 100644 --- a/index.js +++ b/index.js @@ -24,6 +24,25 @@ app.get('/badge', async (req, res) => { } const iconSVG = iconResponse.data; + // Ha a color paraméter nincs megadva, próbáljuk kinyerni az ikon színét + let effectiveColor = color; + if (!req.query.color || req.query.color === '#000000') { + // Próbáljuk kinyerni az ikon fő színét a SimpleIcons API-ból + try { + const iconMetaUrl = `https://cdn.simpleicons.org/${icon}`; + const iconMetaResp = await axios.get(iconMetaUrl, { responseType: 'text' }); + // Kikeressük az első "fill=" attribútumot + const match = iconMetaResp.data.match(/fill="([^"]+)"/); + if (match && match[1]) { + effectiveColor = match[1]; + } else { + effectiveColor = "#222"; // fallback + } + } catch { + effectiveColor = "#222"; + } + } + // Badge méretek const padding = 10; const iconSize = parseInt(size); @@ -44,25 +63,25 @@ app.get('/badge', async (req, res) => { height = padding * 2 + iconSize + textPadding + fontSize; if (labelpos === 'above') { // Szöveg felül, ikon alul - textElem = `${label}`; + textElem = `${label}`; iconGroup = `${iconSVG}`; } else { // Szöveg alul, ikon felül iconGroup = `${iconSVG}`; - textElem = `${label}`; + textElem = `${label}`; } } else if (labelpos === 'left') { width = padding * 2 + iconSize + textPadding + textWidth; height = Math.max(iconSize + padding * 2, fontSize + padding * 2); // Szöveg balra, ikon jobbra (függőleges közép) - textElem = `${label}`; + textElem = `${label}`; iconGroup = `${iconSVG}`; } else { width = padding * 2 + iconSize + textPadding + textWidth; height = Math.max(iconSize + padding * 2, fontSize + padding * 2); // Alapértelmezett: ikon balra, szöveg jobbra (függőleges közép) iconGroup = `${iconSVG}`; - textElem = `${label}`; + textElem = `${label}`; } // SVG badge string összefűzéssel, szöveg árnyékkal