mirror of
https://github.com/gethomepage/homepage.git
synced 2025-12-07 09:35:54 -08:00
Compare commits
7 Commits
0da75124c6
...
feature/be
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
fb9d7f6f3d | ||
|
|
cd34796b9d | ||
|
|
0d788e3d06 | ||
|
|
ed1dafadde | ||
|
|
96ac9046b3 | ||
|
|
6d5f35f07e | ||
|
|
8887281246 |
@@ -54,7 +54,7 @@ RUN apk add --no-cache su-exec iputils-ping shadow
|
|||||||
USER root
|
USER root
|
||||||
|
|
||||||
ENV NODE_ENV=production
|
ENV NODE_ENV=production
|
||||||
ENV HOSTNAME=0.0.0.0
|
ENV HOSTNAME=::
|
||||||
ENV PORT=3000
|
ENV PORT=3000
|
||||||
EXPOSE $PORT
|
EXPOSE $PORT
|
||||||
|
|
||||||
|
|||||||
@@ -12,6 +12,15 @@ export PGID=${PGID:-0}
|
|||||||
|
|
||||||
export HOMEPAGE_BUILDTIME=$(date +%s)
|
export HOMEPAGE_BUILDTIME=$(date +%s)
|
||||||
|
|
||||||
|
# Try IPv6 first (dual stack when available), but fall back to IPv4 if the bind fails
|
||||||
|
export HOSTNAME=${HOSTNAME:-::}
|
||||||
|
if [ "$HOSTNAME" = "::" ]; then
|
||||||
|
if ! node -e "const server = require('http').createServer(() => {}); const host = '::'; const port = process.env.PORT || 3000; server.once('error', (err) => { console.error('IPv6 bind failed:', err.message); process.exit(1); }); server.listen(port, host, () => server.close(() => process.exit(0)));"; then
|
||||||
|
echo "Falling back to IPv4 bind at 0.0.0.0"
|
||||||
|
export HOSTNAME=0.0.0.0
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
# Check ownership before chown
|
# Check ownership before chown
|
||||||
if [ -e /app/config ]; then
|
if [ -e /app/config ]; then
|
||||||
CURRENT_UID=$(stat -c %u /app/config)
|
CURRENT_UID=$(stat -c %u /app/config)
|
||||||
|
|||||||
@@ -159,6 +159,19 @@ Widgets can tint their metric block text automatically based on rules defined al
|
|||||||
|
|
||||||
Supported numeric operators for the `when` property are `gt`, `gte`, `lt`, `lte`, `eq`, `ne`, `between`, and `outside`. String rules support `equals`, `includes`, `startsWith`, `endsWith`, and `regex`. Each rule can be inverted with `negate: true`, and string rules may pass `caseSensitive: true` or custom regex `flags`. The highlight engine does its best to coerce formatted values, but you will get the most reliable results when you pass plain numbers or strings into `<Block>`.
|
Supported numeric operators for the `when` property are `gt`, `gte`, `lt`, `lte`, `eq`, `ne`, `between`, and `outside`. String rules support `equals`, `includes`, `startsWith`, `endsWith`, and `regex`. Each rule can be inverted with `negate: true`, and string rules may pass `caseSensitive: true` or custom regex `flags`. The highlight engine does its best to coerce formatted values, but you will get the most reliable results when you pass plain numbers or strings into `<Block>`.
|
||||||
|
|
||||||
|
#### Value Only Highlighting
|
||||||
|
|
||||||
|
You can optionally apply highlighting only to the value portion of a block (not the label) by setting `valueOnly: true` on the field configuration. This keeps the label visible while highlighting only the metric value itself.
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
- Sonarr:
|
||||||
|
...
|
||||||
|
highlight:
|
||||||
|
queued:
|
||||||
|
valueOnly: true
|
||||||
|
...
|
||||||
|
```
|
||||||
|
|
||||||
## Descriptions
|
## Descriptions
|
||||||
|
|
||||||
Services may have descriptions,
|
Services may have descriptions,
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ services:
|
|||||||
- 3000:3000
|
- 3000:3000
|
||||||
volumes:
|
volumes:
|
||||||
- /path/to/config:/app/config # Make sure your local config directory exists
|
- /path/to/config:/app/config # Make sure your local config directory exists
|
||||||
- /var/run/docker.sock:/var/run/docker.sock # (optional) For docker integrations
|
- /var/run/docker.sock:/var/run/docker.sock:ro # (optional) For docker integrations
|
||||||
environment:
|
environment:
|
||||||
HOMEPAGE_ALLOWED_HOSTS: gethomepage.dev # required, may need port. See gethomepage.dev/installation/#homepage_allowed_hosts
|
HOMEPAGE_ALLOWED_HOSTS: gethomepage.dev # required, may need port. See gethomepage.dev/installation/#homepage_allowed_hosts
|
||||||
```
|
```
|
||||||
@@ -36,7 +36,7 @@ services:
|
|||||||
- 3000:3000
|
- 3000:3000
|
||||||
volumes:
|
volumes:
|
||||||
- /path/to/config:/app/config # Make sure your local config directory exists
|
- /path/to/config:/app/config # Make sure your local config directory exists
|
||||||
- /var/run/docker.sock:/var/run/docker.sock # (optional) For docker integrations, see alternative methods
|
- /var/run/docker.sock:/var/run/docker.sock:ro # (optional) For docker integrations, see alternative methods
|
||||||
environment:
|
environment:
|
||||||
HOMEPAGE_ALLOWED_HOSTS: gethomepage.dev # required, may need port. See gethomepage.dev/installation/#homepage_allowed_hosts
|
HOMEPAGE_ALLOWED_HOSTS: gethomepage.dev # required, may need port. See gethomepage.dev/installation/#homepage_allowed_hosts
|
||||||
PUID: $PUID
|
PUID: $PUID
|
||||||
|
|||||||
@@ -68,7 +68,7 @@ All service widgets work essentially the same, that is, homepage makes a proxied
|
|||||||
|
|
||||||
If, after correctly adding and mapping your custom icons via the [Icons](../configs/services.md#icons) instructions, you are still unable to see your icons please try recreating your container.
|
If, after correctly adding and mapping your custom icons via the [Icons](../configs/services.md#icons) instructions, you are still unable to see your icons please try recreating your container.
|
||||||
|
|
||||||
## Disabling IPv6
|
## Disabling IPv6 for http requests {#disabling-ipv6}
|
||||||
|
|
||||||
If you are having issues with certain widgets that are unable to reach public APIs (e.g. weather), in certain setups you may need to disable IPv6. You can set the environment variable `HOMEPAGE_PROXY_DISABLE_IPV6` to `true` to disable IPv6 for the homepage proxy.
|
If you are having issues with certain widgets that are unable to reach public APIs (e.g. weather), in certain setups you may need to disable IPv6. You can set the environment variable `HOMEPAGE_PROXY_DISABLE_IPV6` to `true` to disable IPv6 for the homepage proxy.
|
||||||
|
|
||||||
|
|||||||
@@ -759,8 +759,7 @@
|
|||||||
"ghostfolio": {
|
"ghostfolio": {
|
||||||
"gross_percent_today": "Vandag",
|
"gross_percent_today": "Vandag",
|
||||||
"gross_percent_1y": "Een jaar",
|
"gross_percent_1y": "Een jaar",
|
||||||
"gross_percent_max": "Alle tyd",
|
"gross_percent_max": "Alle tyd"
|
||||||
"net_worth": "Net Worth"
|
|
||||||
},
|
},
|
||||||
"audiobookshelf": {
|
"audiobookshelf": {
|
||||||
"podcasts": "Podsendinge",
|
"podcasts": "Podsendinge",
|
||||||
|
|||||||
@@ -759,8 +759,7 @@
|
|||||||
"ghostfolio": {
|
"ghostfolio": {
|
||||||
"gross_percent_today": "Today",
|
"gross_percent_today": "Today",
|
||||||
"gross_percent_1y": "سنة",
|
"gross_percent_1y": "سنة",
|
||||||
"gross_percent_max": "كل الوقت",
|
"gross_percent_max": "كل الوقت"
|
||||||
"net_worth": "Net Worth"
|
|
||||||
},
|
},
|
||||||
"audiobookshelf": {
|
"audiobookshelf": {
|
||||||
"podcasts": "بودكاست",
|
"podcasts": "بودكاست",
|
||||||
|
|||||||
@@ -759,8 +759,7 @@
|
|||||||
"ghostfolio": {
|
"ghostfolio": {
|
||||||
"gross_percent_today": "Today",
|
"gross_percent_today": "Today",
|
||||||
"gross_percent_1y": "Една година",
|
"gross_percent_1y": "Една година",
|
||||||
"gross_percent_max": "All time",
|
"gross_percent_max": "All time"
|
||||||
"net_worth": "Net Worth"
|
|
||||||
},
|
},
|
||||||
"audiobookshelf": {
|
"audiobookshelf": {
|
||||||
"podcasts": "Подкасти",
|
"podcasts": "Подкасти",
|
||||||
|
|||||||
@@ -759,8 +759,7 @@
|
|||||||
"ghostfolio": {
|
"ghostfolio": {
|
||||||
"gross_percent_today": "Today",
|
"gross_percent_today": "Today",
|
||||||
"gross_percent_1y": "Un any",
|
"gross_percent_1y": "Un any",
|
||||||
"gross_percent_max": "Sempre",
|
"gross_percent_max": "Sempre"
|
||||||
"net_worth": "Net Worth"
|
|
||||||
},
|
},
|
||||||
"audiobookshelf": {
|
"audiobookshelf": {
|
||||||
"podcasts": "Pòdcasts",
|
"podcasts": "Pòdcasts",
|
||||||
|
|||||||
@@ -759,8 +759,7 @@
|
|||||||
"ghostfolio": {
|
"ghostfolio": {
|
||||||
"gross_percent_today": "Today",
|
"gross_percent_today": "Today",
|
||||||
"gross_percent_1y": "Jeden rok",
|
"gross_percent_1y": "Jeden rok",
|
||||||
"gross_percent_max": "Za celou dobu",
|
"gross_percent_max": "Za celou dobu"
|
||||||
"net_worth": "Net Worth"
|
|
||||||
},
|
},
|
||||||
"audiobookshelf": {
|
"audiobookshelf": {
|
||||||
"podcasts": "Podcasty",
|
"podcasts": "Podcasty",
|
||||||
|
|||||||
@@ -759,8 +759,7 @@
|
|||||||
"ghostfolio": {
|
"ghostfolio": {
|
||||||
"gross_percent_today": "Today",
|
"gross_percent_today": "Today",
|
||||||
"gross_percent_1y": "Et År",
|
"gross_percent_1y": "Et År",
|
||||||
"gross_percent_max": "Altid",
|
"gross_percent_max": "Altid"
|
||||||
"net_worth": "Net Worth"
|
|
||||||
},
|
},
|
||||||
"audiobookshelf": {
|
"audiobookshelf": {
|
||||||
"podcasts": "Podcasts",
|
"podcasts": "Podcasts",
|
||||||
|
|||||||
@@ -759,8 +759,7 @@
|
|||||||
"ghostfolio": {
|
"ghostfolio": {
|
||||||
"gross_percent_today": "Heute",
|
"gross_percent_today": "Heute",
|
||||||
"gross_percent_1y": "Ein Jahr",
|
"gross_percent_1y": "Ein Jahr",
|
||||||
"gross_percent_max": "Gesamt",
|
"gross_percent_max": "Gesamt"
|
||||||
"net_worth": ""
|
|
||||||
},
|
},
|
||||||
"audiobookshelf": {
|
"audiobookshelf": {
|
||||||
"podcasts": "Podcasts",
|
"podcasts": "Podcasts",
|
||||||
|
|||||||
@@ -759,8 +759,7 @@
|
|||||||
"ghostfolio": {
|
"ghostfolio": {
|
||||||
"gross_percent_today": "Today",
|
"gross_percent_today": "Today",
|
||||||
"gross_percent_1y": "Ένας χρόνος",
|
"gross_percent_1y": "Ένας χρόνος",
|
||||||
"gross_percent_max": "Διαχρονικά",
|
"gross_percent_max": "Διαχρονικά"
|
||||||
"net_worth": "Net Worth"
|
|
||||||
},
|
},
|
||||||
"audiobookshelf": {
|
"audiobookshelf": {
|
||||||
"podcasts": "Podcasts",
|
"podcasts": "Podcasts",
|
||||||
|
|||||||
@@ -759,8 +759,7 @@
|
|||||||
"ghostfolio": {
|
"ghostfolio": {
|
||||||
"gross_percent_today": "Today",
|
"gross_percent_today": "Today",
|
||||||
"gross_percent_1y": "One year",
|
"gross_percent_1y": "One year",
|
||||||
"gross_percent_max": "All time",
|
"gross_percent_max": "All time"
|
||||||
"net_worth": "Net Worth"
|
|
||||||
},
|
},
|
||||||
"audiobookshelf": {
|
"audiobookshelf": {
|
||||||
"podcasts": "Podcasts",
|
"podcasts": "Podcasts",
|
||||||
|
|||||||
@@ -759,8 +759,7 @@
|
|||||||
"ghostfolio": {
|
"ghostfolio": {
|
||||||
"gross_percent_today": "Hoy",
|
"gross_percent_today": "Hoy",
|
||||||
"gross_percent_1y": "Un año",
|
"gross_percent_1y": "Un año",
|
||||||
"gross_percent_max": "Todo el tiempo",
|
"gross_percent_max": "Todo el tiempo"
|
||||||
"net_worth": "Net Worth"
|
|
||||||
},
|
},
|
||||||
"audiobookshelf": {
|
"audiobookshelf": {
|
||||||
"podcasts": "Podcasts",
|
"podcasts": "Podcasts",
|
||||||
|
|||||||
@@ -759,8 +759,7 @@
|
|||||||
"ghostfolio": {
|
"ghostfolio": {
|
||||||
"gross_percent_today": "Today",
|
"gross_percent_today": "Today",
|
||||||
"gross_percent_1y": "One year",
|
"gross_percent_1y": "One year",
|
||||||
"gross_percent_max": "All time",
|
"gross_percent_max": "All time"
|
||||||
"net_worth": "Net Worth"
|
|
||||||
},
|
},
|
||||||
"audiobookshelf": {
|
"audiobookshelf": {
|
||||||
"podcasts": "Podcasts",
|
"podcasts": "Podcasts",
|
||||||
|
|||||||
@@ -759,8 +759,7 @@
|
|||||||
"ghostfolio": {
|
"ghostfolio": {
|
||||||
"gross_percent_today": "Today",
|
"gross_percent_today": "Today",
|
||||||
"gross_percent_1y": "One year",
|
"gross_percent_1y": "One year",
|
||||||
"gross_percent_max": "All time",
|
"gross_percent_max": "All time"
|
||||||
"net_worth": "Net Worth"
|
|
||||||
},
|
},
|
||||||
"audiobookshelf": {
|
"audiobookshelf": {
|
||||||
"podcasts": "Podcasts",
|
"podcasts": "Podcasts",
|
||||||
|
|||||||
@@ -142,8 +142,8 @@
|
|||||||
"connectionStatusDisconnected": "Déconnecté",
|
"connectionStatusDisconnected": "Déconnecté",
|
||||||
"connectionStatusConnected": "Connecté",
|
"connectionStatusConnected": "Connecté",
|
||||||
"uptime": "Démarré depuis",
|
"uptime": "Démarré depuis",
|
||||||
"maxDown": "Réception max",
|
"maxDown": "Réception max.",
|
||||||
"maxUp": "Envoi max",
|
"maxUp": "Envoi max.",
|
||||||
"down": "Réception",
|
"down": "Réception",
|
||||||
"up": "Envoi",
|
"up": "Envoi",
|
||||||
"received": "Reçu",
|
"received": "Reçu",
|
||||||
@@ -229,7 +229,7 @@
|
|||||||
"seed": "En partage"
|
"seed": "En partage"
|
||||||
},
|
},
|
||||||
"develancacheui": {
|
"develancacheui": {
|
||||||
"cachehitbytes": "Octets acquis du cache",
|
"cachehitbytes": "Cache Hit (B)",
|
||||||
"cachemissbytes": "Cache Miss (B)"
|
"cachemissbytes": "Cache Miss (B)"
|
||||||
},
|
},
|
||||||
"downloadstation": {
|
"downloadstation": {
|
||||||
@@ -294,7 +294,7 @@
|
|||||||
"queries": "Requêtes",
|
"queries": "Requêtes",
|
||||||
"blocked": "Bloqué",
|
"blocked": "Bloqué",
|
||||||
"blocked_percent": "% bloqué",
|
"blocked_percent": "% bloqué",
|
||||||
"gravity": "Listes dom. Bloqués"
|
"gravity": "Listes dom. bloqués"
|
||||||
},
|
},
|
||||||
"adguard": {
|
"adguard": {
|
||||||
"queries": "Requêtes",
|
"queries": "Requêtes",
|
||||||
@@ -759,8 +759,7 @@
|
|||||||
"ghostfolio": {
|
"ghostfolio": {
|
||||||
"gross_percent_today": "Aujourd'hui",
|
"gross_percent_today": "Aujourd'hui",
|
||||||
"gross_percent_1y": "Un an",
|
"gross_percent_1y": "Un an",
|
||||||
"gross_percent_max": "Depuis le début",
|
"gross_percent_max": "Depuis le début"
|
||||||
"net_worth": "Patrimoine net"
|
|
||||||
},
|
},
|
||||||
"audiobookshelf": {
|
"audiobookshelf": {
|
||||||
"podcasts": "Podcasts",
|
"podcasts": "Podcasts",
|
||||||
@@ -1092,7 +1091,7 @@
|
|||||||
"NEW_ARRAY": "Nouveau tableau",
|
"NEW_ARRAY": "Nouveau tableau",
|
||||||
"RECON_DISK": "Reconstruction du disque",
|
"RECON_DISK": "Reconstruction du disque",
|
||||||
"DISABLE_DISK": "Disque désactivé",
|
"DISABLE_DISK": "Disque désactivé",
|
||||||
"SWAP_DSBL": "Désactiver le swap",
|
"SWAP_DSBL": "Swap Disable",
|
||||||
"INVALID_EXPANSION": "Extension invalide",
|
"INVALID_EXPANSION": "Extension invalide",
|
||||||
"PARITY_NOT_BIGGEST": "La parité n'est pas la plus grande",
|
"PARITY_NOT_BIGGEST": "La parité n'est pas la plus grande",
|
||||||
"TOO_MANY_MISSING_DISKS": "Trop de disques manquants",
|
"TOO_MANY_MISSING_DISKS": "Trop de disques manquants",
|
||||||
|
|||||||
@@ -759,8 +759,7 @@
|
|||||||
"ghostfolio": {
|
"ghostfolio": {
|
||||||
"gross_percent_today": "היום",
|
"gross_percent_today": "היום",
|
||||||
"gross_percent_1y": "שנה",
|
"gross_percent_1y": "שנה",
|
||||||
"gross_percent_max": "כל הזמן",
|
"gross_percent_max": "כל הזמן"
|
||||||
"net_worth": "Net Worth"
|
|
||||||
},
|
},
|
||||||
"audiobookshelf": {
|
"audiobookshelf": {
|
||||||
"podcasts": "פודקאסטים",
|
"podcasts": "פודקאסטים",
|
||||||
|
|||||||
@@ -759,8 +759,7 @@
|
|||||||
"ghostfolio": {
|
"ghostfolio": {
|
||||||
"gross_percent_today": "Today",
|
"gross_percent_today": "Today",
|
||||||
"gross_percent_1y": "One year",
|
"gross_percent_1y": "One year",
|
||||||
"gross_percent_max": "All time",
|
"gross_percent_max": "All time"
|
||||||
"net_worth": "Net Worth"
|
|
||||||
},
|
},
|
||||||
"audiobookshelf": {
|
"audiobookshelf": {
|
||||||
"podcasts": "Podcasts",
|
"podcasts": "Podcasts",
|
||||||
|
|||||||
@@ -759,8 +759,7 @@
|
|||||||
"ghostfolio": {
|
"ghostfolio": {
|
||||||
"gross_percent_today": "Danas",
|
"gross_percent_today": "Danas",
|
||||||
"gross_percent_1y": "Jedna godina",
|
"gross_percent_1y": "Jedna godina",
|
||||||
"gross_percent_max": "Svo vrijeme",
|
"gross_percent_max": "Svo vrijeme"
|
||||||
"net_worth": "Neto vrijednost"
|
|
||||||
},
|
},
|
||||||
"audiobookshelf": {
|
"audiobookshelf": {
|
||||||
"podcasts": "Podcasti",
|
"podcasts": "Podcasti",
|
||||||
|
|||||||
@@ -759,8 +759,7 @@
|
|||||||
"ghostfolio": {
|
"ghostfolio": {
|
||||||
"gross_percent_today": "Today",
|
"gross_percent_today": "Today",
|
||||||
"gross_percent_1y": "Egy év",
|
"gross_percent_1y": "Egy év",
|
||||||
"gross_percent_max": "Mindig",
|
"gross_percent_max": "Mindig"
|
||||||
"net_worth": "Net Worth"
|
|
||||||
},
|
},
|
||||||
"audiobookshelf": {
|
"audiobookshelf": {
|
||||||
"podcasts": "Podcast",
|
"podcasts": "Podcast",
|
||||||
|
|||||||
@@ -759,8 +759,7 @@
|
|||||||
"ghostfolio": {
|
"ghostfolio": {
|
||||||
"gross_percent_today": "Today",
|
"gross_percent_today": "Today",
|
||||||
"gross_percent_1y": "Satu Tahun",
|
"gross_percent_1y": "Satu Tahun",
|
||||||
"gross_percent_max": "Sepanjang Masa",
|
"gross_percent_max": "Sepanjang Masa"
|
||||||
"net_worth": "Net Worth"
|
|
||||||
},
|
},
|
||||||
"audiobookshelf": {
|
"audiobookshelf": {
|
||||||
"podcasts": "Podcast",
|
"podcasts": "Podcast",
|
||||||
|
|||||||
@@ -168,7 +168,7 @@
|
|||||||
"passes": "Tessere"
|
"passes": "Tessere"
|
||||||
},
|
},
|
||||||
"tautulli": {
|
"tautulli": {
|
||||||
"playing": "In riproduzione",
|
"playing": "Playing",
|
||||||
"transcoding": "Transcoding",
|
"transcoding": "Transcoding",
|
||||||
"bitrate": "Bitrate",
|
"bitrate": "Bitrate",
|
||||||
"no_active": "No Active Streams",
|
"no_active": "No Active Streams",
|
||||||
@@ -313,7 +313,7 @@
|
|||||||
"total": "Total"
|
"total": "Total"
|
||||||
},
|
},
|
||||||
"suwayomi": {
|
"suwayomi": {
|
||||||
"download": "Scaricati",
|
"download": "Downloaded",
|
||||||
"nondownload": "Non Scaricato",
|
"nondownload": "Non Scaricato",
|
||||||
"read": "Read",
|
"read": "Read",
|
||||||
"unread": "Unread",
|
"unread": "Unread",
|
||||||
@@ -759,8 +759,7 @@
|
|||||||
"ghostfolio": {
|
"ghostfolio": {
|
||||||
"gross_percent_today": "Today",
|
"gross_percent_today": "Today",
|
||||||
"gross_percent_1y": "Un anno",
|
"gross_percent_1y": "Un anno",
|
||||||
"gross_percent_max": "Sempre",
|
"gross_percent_max": "Sempre"
|
||||||
"net_worth": "Net Worth"
|
|
||||||
},
|
},
|
||||||
"audiobookshelf": {
|
"audiobookshelf": {
|
||||||
"podcasts": "Podcast",
|
"podcasts": "Podcast",
|
||||||
|
|||||||
@@ -69,7 +69,7 @@
|
|||||||
"docker": {
|
"docker": {
|
||||||
"rx": "受信済み",
|
"rx": "受信済み",
|
||||||
"tx": "送信済み",
|
"tx": "送信済み",
|
||||||
"mem": "メモリ",
|
"mem": "MEM",
|
||||||
"cpu": "CPU",
|
"cpu": "CPU",
|
||||||
"running": "起動中",
|
"running": "起動中",
|
||||||
"offline": "オフライン",
|
"offline": "オフライン",
|
||||||
@@ -83,7 +83,7 @@
|
|||||||
"partial": "部分的"
|
"partial": "部分的"
|
||||||
},
|
},
|
||||||
"ping": {
|
"ping": {
|
||||||
"error": "エラー",
|
"error": "Error",
|
||||||
"ping": "Ping",
|
"ping": "Ping",
|
||||||
"down": "下へ",
|
"down": "下へ",
|
||||||
"up": "稼働",
|
"up": "稼働",
|
||||||
@@ -112,7 +112,7 @@
|
|||||||
"offline_alt": "オフライン",
|
"offline_alt": "オフライン",
|
||||||
"online": "オンライン",
|
"online": "オンライン",
|
||||||
"total": "Total",
|
"total": "Total",
|
||||||
"unknown": "不明"
|
"unknown": "Unknown"
|
||||||
},
|
},
|
||||||
"evcc": {
|
"evcc": {
|
||||||
"pv_power": "発電量",
|
"pv_power": "発電量",
|
||||||
@@ -223,8 +223,8 @@
|
|||||||
"invalid": "無効"
|
"invalid": "無効"
|
||||||
},
|
},
|
||||||
"deluge": {
|
"deluge": {
|
||||||
"download": "ダウンロード",
|
"download": "Download",
|
||||||
"upload": "アップロード",
|
"upload": "Upload",
|
||||||
"leech": "Leech",
|
"leech": "Leech",
|
||||||
"seed": "Seed"
|
"seed": "Seed"
|
||||||
},
|
},
|
||||||
@@ -233,8 +233,8 @@
|
|||||||
"cachemissbytes": "キャッシュミスバイト"
|
"cachemissbytes": "キャッシュミスバイト"
|
||||||
},
|
},
|
||||||
"downloadstation": {
|
"downloadstation": {
|
||||||
"download": "ダウンロード",
|
"download": "Download",
|
||||||
"upload": "アップロード",
|
"upload": "Upload",
|
||||||
"leech": "Leech",
|
"leech": "Leech",
|
||||||
"seed": "Seed"
|
"seed": "Seed"
|
||||||
},
|
},
|
||||||
@@ -251,7 +251,7 @@
|
|||||||
"queued": "Queued",
|
"queued": "Queued",
|
||||||
"movies": "Movies",
|
"movies": "Movies",
|
||||||
"queue": "Queue",
|
"queue": "Queue",
|
||||||
"unknown": "不明"
|
"unknown": "Unknown"
|
||||||
},
|
},
|
||||||
"lidarr": {
|
"lidarr": {
|
||||||
"wanted": "Wanted",
|
"wanted": "Wanted",
|
||||||
@@ -692,8 +692,8 @@
|
|||||||
},
|
},
|
||||||
"diskstation": {
|
"diskstation": {
|
||||||
"days": "Days",
|
"days": "Days",
|
||||||
"uptime": "稼働時間",
|
"uptime": "Uptime",
|
||||||
"volumeAvailable": "利用可能"
|
"volumeAvailable": "Available"
|
||||||
},
|
},
|
||||||
"mylar": {
|
"mylar": {
|
||||||
"series": "Series",
|
"series": "Series",
|
||||||
@@ -754,13 +754,12 @@
|
|||||||
"gatus": {
|
"gatus": {
|
||||||
"up": "Sites Up",
|
"up": "Sites Up",
|
||||||
"down": "Sites Down",
|
"down": "Sites Down",
|
||||||
"uptime": "稼働時間"
|
"uptime": "Uptime"
|
||||||
},
|
},
|
||||||
"ghostfolio": {
|
"ghostfolio": {
|
||||||
"gross_percent_today": "Today",
|
"gross_percent_today": "Today",
|
||||||
"gross_percent_1y": "1年",
|
"gross_percent_1y": "1年",
|
||||||
"gross_percent_max": "全期間",
|
"gross_percent_max": "全期間"
|
||||||
"net_worth": "Net Worth"
|
|
||||||
},
|
},
|
||||||
"audiobookshelf": {
|
"audiobookshelf": {
|
||||||
"podcasts": "ポッドキャスト",
|
"podcasts": "ポッドキャスト",
|
||||||
|
|||||||
@@ -759,8 +759,7 @@
|
|||||||
"ghostfolio": {
|
"ghostfolio": {
|
||||||
"gross_percent_today": "오늘",
|
"gross_percent_today": "오늘",
|
||||||
"gross_percent_1y": "1년",
|
"gross_percent_1y": "1년",
|
||||||
"gross_percent_max": "전체 기간",
|
"gross_percent_max": "전체 기간"
|
||||||
"net_worth": "Net Worth"
|
|
||||||
},
|
},
|
||||||
"audiobookshelf": {
|
"audiobookshelf": {
|
||||||
"podcasts": "팟캐스트",
|
"podcasts": "팟캐스트",
|
||||||
|
|||||||
@@ -759,8 +759,7 @@
|
|||||||
"ghostfolio": {
|
"ghostfolio": {
|
||||||
"gross_percent_today": "Today",
|
"gross_percent_today": "Today",
|
||||||
"gross_percent_1y": "One year",
|
"gross_percent_1y": "One year",
|
||||||
"gross_percent_max": "All time",
|
"gross_percent_max": "All time"
|
||||||
"net_worth": "Net Worth"
|
|
||||||
},
|
},
|
||||||
"audiobookshelf": {
|
"audiobookshelf": {
|
||||||
"podcasts": "Podcasts",
|
"podcasts": "Podcasts",
|
||||||
|
|||||||
@@ -759,8 +759,7 @@
|
|||||||
"ghostfolio": {
|
"ghostfolio": {
|
||||||
"gross_percent_today": "Today",
|
"gross_percent_today": "Today",
|
||||||
"gross_percent_1y": "Satu tahun",
|
"gross_percent_1y": "Satu tahun",
|
||||||
"gross_percent_max": "Sepanjang masa",
|
"gross_percent_max": "Sepanjang masa"
|
||||||
"net_worth": "Net Worth"
|
|
||||||
},
|
},
|
||||||
"audiobookshelf": {
|
"audiobookshelf": {
|
||||||
"podcasts": "Podkas",
|
"podcasts": "Podkas",
|
||||||
|
|||||||
@@ -759,8 +759,7 @@
|
|||||||
"ghostfolio": {
|
"ghostfolio": {
|
||||||
"gross_percent_today": "Vandaag",
|
"gross_percent_today": "Vandaag",
|
||||||
"gross_percent_1y": "Een jaar",
|
"gross_percent_1y": "Een jaar",
|
||||||
"gross_percent_max": "Altijd",
|
"gross_percent_max": "Altijd"
|
||||||
"net_worth": "Net Worth"
|
|
||||||
},
|
},
|
||||||
"audiobookshelf": {
|
"audiobookshelf": {
|
||||||
"podcasts": "Podcasts",
|
"podcasts": "Podcasts",
|
||||||
|
|||||||
@@ -759,8 +759,7 @@
|
|||||||
"ghostfolio": {
|
"ghostfolio": {
|
||||||
"gross_percent_today": "Today",
|
"gross_percent_today": "Today",
|
||||||
"gross_percent_1y": "Ett år",
|
"gross_percent_1y": "Ett år",
|
||||||
"gross_percent_max": "Gjennom tidene",
|
"gross_percent_max": "Gjennom tidene"
|
||||||
"net_worth": "Net Worth"
|
|
||||||
},
|
},
|
||||||
"audiobookshelf": {
|
"audiobookshelf": {
|
||||||
"podcasts": "Podkaster",
|
"podcasts": "Podkaster",
|
||||||
|
|||||||
@@ -759,8 +759,7 @@
|
|||||||
"ghostfolio": {
|
"ghostfolio": {
|
||||||
"gross_percent_today": "Dzisiaj",
|
"gross_percent_today": "Dzisiaj",
|
||||||
"gross_percent_1y": "Rok",
|
"gross_percent_1y": "Rok",
|
||||||
"gross_percent_max": "Od początku",
|
"gross_percent_max": "Od początku"
|
||||||
"net_worth": "Net Worth"
|
|
||||||
},
|
},
|
||||||
"audiobookshelf": {
|
"audiobookshelf": {
|
||||||
"podcasts": "Podcasty",
|
"podcasts": "Podcasty",
|
||||||
|
|||||||
@@ -759,8 +759,7 @@
|
|||||||
"ghostfolio": {
|
"ghostfolio": {
|
||||||
"gross_percent_today": "Today",
|
"gross_percent_today": "Today",
|
||||||
"gross_percent_1y": "Um ano",
|
"gross_percent_1y": "Um ano",
|
||||||
"gross_percent_max": "Desde Sempre",
|
"gross_percent_max": "Desde Sempre"
|
||||||
"net_worth": "Net Worth"
|
|
||||||
},
|
},
|
||||||
"audiobookshelf": {
|
"audiobookshelf": {
|
||||||
"podcasts": "Podcasts",
|
"podcasts": "Podcasts",
|
||||||
|
|||||||
@@ -759,8 +759,7 @@
|
|||||||
"ghostfolio": {
|
"ghostfolio": {
|
||||||
"gross_percent_today": "Hoje",
|
"gross_percent_today": "Hoje",
|
||||||
"gross_percent_1y": "Um ano",
|
"gross_percent_1y": "Um ano",
|
||||||
"gross_percent_max": "Todo o tempo",
|
"gross_percent_max": "Todo o tempo"
|
||||||
"net_worth": "Patrimônio Líquido"
|
|
||||||
},
|
},
|
||||||
"audiobookshelf": {
|
"audiobookshelf": {
|
||||||
"podcasts": "Podcasts",
|
"podcasts": "Podcasts",
|
||||||
|
|||||||
@@ -759,8 +759,7 @@
|
|||||||
"ghostfolio": {
|
"ghostfolio": {
|
||||||
"gross_percent_today": "Today",
|
"gross_percent_today": "Today",
|
||||||
"gross_percent_1y": "Un an",
|
"gross_percent_1y": "Un an",
|
||||||
"gross_percent_max": "Tot timpul",
|
"gross_percent_max": "Tot timpul"
|
||||||
"net_worth": "Net Worth"
|
|
||||||
},
|
},
|
||||||
"audiobookshelf": {
|
"audiobookshelf": {
|
||||||
"podcasts": "Podcasturi",
|
"podcasts": "Podcasturi",
|
||||||
|
|||||||
@@ -759,8 +759,7 @@
|
|||||||
"ghostfolio": {
|
"ghostfolio": {
|
||||||
"gross_percent_today": "Сегодня",
|
"gross_percent_today": "Сегодня",
|
||||||
"gross_percent_1y": "Один год",
|
"gross_percent_1y": "Один год",
|
||||||
"gross_percent_max": "Все время",
|
"gross_percent_max": "Все время"
|
||||||
"net_worth": "Net Worth"
|
|
||||||
},
|
},
|
||||||
"audiobookshelf": {
|
"audiobookshelf": {
|
||||||
"podcasts": "Подкасты",
|
"podcasts": "Подкасты",
|
||||||
|
|||||||
@@ -362,8 +362,8 @@
|
|||||||
},
|
},
|
||||||
"trilium": {
|
"trilium": {
|
||||||
"version": "Verzia",
|
"version": "Verzia",
|
||||||
"notesCount": "Poznámky",
|
"notesCount": "Notes",
|
||||||
"dbSize": "Veľkosť databázy",
|
"dbSize": "Database Size",
|
||||||
"unknown": "Neznáme"
|
"unknown": "Neznáme"
|
||||||
},
|
},
|
||||||
"navidrome": {
|
"navidrome": {
|
||||||
@@ -759,8 +759,7 @@
|
|||||||
"ghostfolio": {
|
"ghostfolio": {
|
||||||
"gross_percent_today": "Dnes",
|
"gross_percent_today": "Dnes",
|
||||||
"gross_percent_1y": "Jeden rok",
|
"gross_percent_1y": "Jeden rok",
|
||||||
"gross_percent_max": "Za celý čas",
|
"gross_percent_max": "Za celý čas"
|
||||||
"net_worth": "Net Worth"
|
|
||||||
},
|
},
|
||||||
"audiobookshelf": {
|
"audiobookshelf": {
|
||||||
"podcasts": "Podcasty",
|
"podcasts": "Podcasty",
|
||||||
@@ -787,7 +786,7 @@
|
|||||||
"downloadCount": "Poradie",
|
"downloadCount": "Poradie",
|
||||||
"downloadBytesRemaining": "Zostávajúce",
|
"downloadBytesRemaining": "Zostávajúce",
|
||||||
"downloadTotalBytes": "Veľkosť",
|
"downloadTotalBytes": "Veľkosť",
|
||||||
"downloadSpeed": "Rýchlosť"
|
"downloadSpeed": "Speed"
|
||||||
},
|
},
|
||||||
"kavita": {
|
"kavita": {
|
||||||
"seriesCount": "Series",
|
"seriesCount": "Series",
|
||||||
@@ -953,7 +952,7 @@
|
|||||||
"loading": "Načítava sa",
|
"loading": "Načítava sa",
|
||||||
"open": "Open - US Market",
|
"open": "Open - US Market",
|
||||||
"closed": "Closed - US Market",
|
"closed": "Closed - US Market",
|
||||||
"invalidConfiguration": "Neplatná konfigurácia"
|
"invalidConfiguration": "Invalid Configuration"
|
||||||
},
|
},
|
||||||
"frigate": {
|
"frigate": {
|
||||||
"cameras": "Kamery",
|
"cameras": "Kamery",
|
||||||
@@ -1023,10 +1022,10 @@
|
|||||||
"loading": "Načítava sa"
|
"loading": "Načítava sa"
|
||||||
},
|
},
|
||||||
"gitlab": {
|
"gitlab": {
|
||||||
"groups": "Skupiny",
|
"groups": "Groups",
|
||||||
"issues": "Problémy",
|
"issues": "Issues",
|
||||||
"merges": "Merge Requests",
|
"merges": "Merge Requests",
|
||||||
"projects": "Projekty"
|
"projects": "Projects"
|
||||||
},
|
},
|
||||||
"apcups": {
|
"apcups": {
|
||||||
"status": "Stav",
|
"status": "Stav",
|
||||||
@@ -1036,7 +1035,7 @@
|
|||||||
},
|
},
|
||||||
"karakeep": {
|
"karakeep": {
|
||||||
"bookmarks": "Bookmarks",
|
"bookmarks": "Bookmarks",
|
||||||
"favorites": "Obľúbené",
|
"favorites": "Favorites",
|
||||||
"archived": "Archived",
|
"archived": "Archived",
|
||||||
"highlights": "Highlights",
|
"highlights": "Highlights",
|
||||||
"lists": "Zoznamy",
|
"lists": "Zoznamy",
|
||||||
@@ -1066,13 +1065,13 @@
|
|||||||
"komodo": {
|
"komodo": {
|
||||||
"total": "Celkom",
|
"total": "Celkom",
|
||||||
"running": "Beží",
|
"running": "Beží",
|
||||||
"stopped": "Zastavené",
|
"stopped": "Stopped",
|
||||||
"down": "Down",
|
"down": "Down",
|
||||||
"unhealthy": "Nezdravý",
|
"unhealthy": "Nezdravý",
|
||||||
"unknown": "Neznáme",
|
"unknown": "Neznáme",
|
||||||
"servers": "Servery",
|
"servers": "Servers",
|
||||||
"stacks": "Stacks",
|
"stacks": "Stacks",
|
||||||
"containers": "Kontajnery"
|
"containers": "Containers"
|
||||||
},
|
},
|
||||||
"filebrowser": {
|
"filebrowser": {
|
||||||
"available": "Dostupné",
|
"available": "Dostupné",
|
||||||
@@ -1081,8 +1080,8 @@
|
|||||||
},
|
},
|
||||||
"wallos": {
|
"wallos": {
|
||||||
"activeSubscriptions": "Subscriptions",
|
"activeSubscriptions": "Subscriptions",
|
||||||
"thisMonthlyCost": "Tento mesiac",
|
"thisMonthlyCost": "This Month",
|
||||||
"nextMonthlyCost": "Ďalší mesiac",
|
"nextMonthlyCost": "Next Month",
|
||||||
"previousMonthlyCost": "Prev. Month",
|
"previousMonthlyCost": "Prev. Month",
|
||||||
"nextRenewingSubscription": "Next Payment"
|
"nextRenewingSubscription": "Next Payment"
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -759,8 +759,7 @@
|
|||||||
"ghostfolio": {
|
"ghostfolio": {
|
||||||
"gross_percent_today": "Today",
|
"gross_percent_today": "Today",
|
||||||
"gross_percent_1y": "Eno leto",
|
"gross_percent_1y": "Eno leto",
|
||||||
"gross_percent_max": "Celoten čas",
|
"gross_percent_max": "Celoten čas"
|
||||||
"net_worth": "Net Worth"
|
|
||||||
},
|
},
|
||||||
"audiobookshelf": {
|
"audiobookshelf": {
|
||||||
"podcasts": "Podcasti",
|
"podcasts": "Podcasti",
|
||||||
|
|||||||
@@ -759,8 +759,7 @@
|
|||||||
"ghostfolio": {
|
"ghostfolio": {
|
||||||
"gross_percent_today": "Данас",
|
"gross_percent_today": "Данас",
|
||||||
"gross_percent_1y": "Једна година",
|
"gross_percent_1y": "Једна година",
|
||||||
"gross_percent_max": "Све време",
|
"gross_percent_max": "Све време"
|
||||||
"net_worth": "Нето вредност"
|
|
||||||
},
|
},
|
||||||
"audiobookshelf": {
|
"audiobookshelf": {
|
||||||
"podcasts": "Подкасти",
|
"podcasts": "Подкасти",
|
||||||
|
|||||||
@@ -759,8 +759,7 @@
|
|||||||
"ghostfolio": {
|
"ghostfolio": {
|
||||||
"gross_percent_today": "Today",
|
"gross_percent_today": "Today",
|
||||||
"gross_percent_1y": "One year",
|
"gross_percent_1y": "One year",
|
||||||
"gross_percent_max": "All time",
|
"gross_percent_max": "All time"
|
||||||
"net_worth": "Net Worth"
|
|
||||||
},
|
},
|
||||||
"audiobookshelf": {
|
"audiobookshelf": {
|
||||||
"podcasts": "Podcasts",
|
"podcasts": "Podcasts",
|
||||||
|
|||||||
@@ -759,8 +759,7 @@
|
|||||||
"ghostfolio": {
|
"ghostfolio": {
|
||||||
"gross_percent_today": "Today",
|
"gross_percent_today": "Today",
|
||||||
"gross_percent_1y": "One year",
|
"gross_percent_1y": "One year",
|
||||||
"gross_percent_max": "All time",
|
"gross_percent_max": "All time"
|
||||||
"net_worth": "Net Worth"
|
|
||||||
},
|
},
|
||||||
"audiobookshelf": {
|
"audiobookshelf": {
|
||||||
"podcasts": "Podcasts",
|
"podcasts": "Podcasts",
|
||||||
|
|||||||
@@ -759,8 +759,7 @@
|
|||||||
"ghostfolio": {
|
"ghostfolio": {
|
||||||
"gross_percent_today": "Today",
|
"gross_percent_today": "Today",
|
||||||
"gross_percent_1y": "One year",
|
"gross_percent_1y": "One year",
|
||||||
"gross_percent_max": "All time",
|
"gross_percent_max": "All time"
|
||||||
"net_worth": "Net Worth"
|
|
||||||
},
|
},
|
||||||
"audiobookshelf": {
|
"audiobookshelf": {
|
||||||
"podcasts": "Podcasts",
|
"podcasts": "Podcasts",
|
||||||
|
|||||||
@@ -759,8 +759,7 @@
|
|||||||
"ghostfolio": {
|
"ghostfolio": {
|
||||||
"gross_percent_today": "Bugün",
|
"gross_percent_today": "Bugün",
|
||||||
"gross_percent_1y": "Bir yıl",
|
"gross_percent_1y": "Bir yıl",
|
||||||
"gross_percent_max": "Tüm zaman",
|
"gross_percent_max": "Tüm zaman"
|
||||||
"net_worth": "Net Worth"
|
|
||||||
},
|
},
|
||||||
"audiobookshelf": {
|
"audiobookshelf": {
|
||||||
"podcasts": "Podcast",
|
"podcasts": "Podcast",
|
||||||
|
|||||||
@@ -759,8 +759,7 @@
|
|||||||
"ghostfolio": {
|
"ghostfolio": {
|
||||||
"gross_percent_today": "Today",
|
"gross_percent_today": "Today",
|
||||||
"gross_percent_1y": "Один рік",
|
"gross_percent_1y": "Один рік",
|
||||||
"gross_percent_max": "Весь час",
|
"gross_percent_max": "Весь час"
|
||||||
"net_worth": "Net Worth"
|
|
||||||
},
|
},
|
||||||
"audiobookshelf": {
|
"audiobookshelf": {
|
||||||
"podcasts": "Подкасти",
|
"podcasts": "Подкасти",
|
||||||
|
|||||||
@@ -759,8 +759,7 @@
|
|||||||
"ghostfolio": {
|
"ghostfolio": {
|
||||||
"gross_percent_today": "Today",
|
"gross_percent_today": "Today",
|
||||||
"gross_percent_1y": "One year",
|
"gross_percent_1y": "One year",
|
||||||
"gross_percent_max": "All time",
|
"gross_percent_max": "All time"
|
||||||
"net_worth": "Net Worth"
|
|
||||||
},
|
},
|
||||||
"audiobookshelf": {
|
"audiobookshelf": {
|
||||||
"podcasts": "Podcasts",
|
"podcasts": "Podcasts",
|
||||||
|
|||||||
@@ -759,8 +759,7 @@
|
|||||||
"ghostfolio": {
|
"ghostfolio": {
|
||||||
"gross_percent_today": "Today",
|
"gross_percent_today": "Today",
|
||||||
"gross_percent_1y": "一年",
|
"gross_percent_1y": "一年",
|
||||||
"gross_percent_max": "所有時間",
|
"gross_percent_max": "所有時間"
|
||||||
"net_worth": "Net Worth"
|
|
||||||
},
|
},
|
||||||
"audiobookshelf": {
|
"audiobookshelf": {
|
||||||
"podcasts": "播客",
|
"podcasts": "播客",
|
||||||
|
|||||||
@@ -759,8 +759,7 @@
|
|||||||
"ghostfolio": {
|
"ghostfolio": {
|
||||||
"gross_percent_today": "Today",
|
"gross_percent_today": "Today",
|
||||||
"gross_percent_1y": "一年",
|
"gross_percent_1y": "一年",
|
||||||
"gross_percent_max": "所有时间",
|
"gross_percent_max": "所有时间"
|
||||||
"net_worth": "Net Worth"
|
|
||||||
},
|
},
|
||||||
"audiobookshelf": {
|
"audiobookshelf": {
|
||||||
"podcasts": "播客",
|
"podcasts": "播客",
|
||||||
|
|||||||
@@ -759,8 +759,7 @@
|
|||||||
"ghostfolio": {
|
"ghostfolio": {
|
||||||
"gross_percent_today": "Today",
|
"gross_percent_today": "Today",
|
||||||
"gross_percent_1y": "一年",
|
"gross_percent_1y": "一年",
|
||||||
"gross_percent_max": "所有時間",
|
"gross_percent_max": "所有時間"
|
||||||
"net_worth": "Net Worth"
|
|
||||||
},
|
},
|
||||||
"audiobookshelf": {
|
"audiobookshelf": {
|
||||||
"podcasts": "Podcasts",
|
"podcasts": "Podcasts",
|
||||||
|
|||||||
@@ -32,6 +32,8 @@ export default function Block({ value, label, field }) {
|
|||||||
return getHighlightClass(highlight.level, highlightConfig);
|
return getHighlightClass(highlight.level, highlightConfig);
|
||||||
}, [highlight, highlightConfig]);
|
}, [highlight, highlightConfig]);
|
||||||
|
|
||||||
|
const applyToValueOnly = highlight?.valueOnly === true;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div
|
<div
|
||||||
className={classNames(
|
className={classNames(
|
||||||
@@ -44,7 +46,11 @@ export default function Block({ value, label, field }) {
|
|||||||
data-highlight-source={highlight?.source}
|
data-highlight-source={highlight?.source}
|
||||||
>
|
>
|
||||||
<div className="font-thin text-sm">{value === undefined || value === null ? "-" : value}</div>
|
<div className="font-thin text-sm">{value === undefined || value === null ? "-" : value}</div>
|
||||||
<div className="font-bold text-xs uppercase">{t(label)}</div>
|
<div
|
||||||
|
className={classNames("font-bold text-xs uppercase", applyToValueOnly && "text-theme-700 dark:text-theme-200")}
|
||||||
|
>
|
||||||
|
{t(label)}
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ export function middleware(req) {
|
|||||||
// Check the Host header, if HOMEPAGE_ALLOWED_HOSTS is set
|
// Check the Host header, if HOMEPAGE_ALLOWED_HOSTS is set
|
||||||
const host = req.headers.get("host");
|
const host = req.headers.get("host");
|
||||||
const port = process.env.PORT || 3000;
|
const port = process.env.PORT || 3000;
|
||||||
let allowedHosts = [`localhost:${port}`, `127.0.0.1:${port}`];
|
let allowedHosts = [`localhost:${port}`, `127.0.0.1:${port}`, `[::1]:${port}`];
|
||||||
const allowAll = process.env.HOMEPAGE_ALLOWED_HOSTS === "*";
|
const allowAll = process.env.HOMEPAGE_ALLOWED_HOSTS === "*";
|
||||||
if (process.env.HOMEPAGE_ALLOWED_HOSTS) {
|
if (process.env.HOMEPAGE_ALLOWED_HOSTS) {
|
||||||
allowedHosts = allowedHosts.concat(process.env.HOMEPAGE_ALLOWED_HOSTS.split(","));
|
allowedHosts = allowedHosts.concat(process.env.HOMEPAGE_ALLOWED_HOSTS.split(","));
|
||||||
|
|||||||
@@ -111,7 +111,7 @@ export async function servicesFromDocker() {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
let substitutedVal = substituteEnvironmentVars(containerLabels[label]);
|
let substitutedVal = substituteEnvironmentVars(containerLabels[label]);
|
||||||
if (value === "widget.version") {
|
if (value === "widget.version" || /^widgets\[\d+\]\.version$/.test(value)) {
|
||||||
substitutedVal = parseInt(substitutedVal, 10);
|
substitutedVal = parseInt(substitutedVal, 10);
|
||||||
}
|
}
|
||||||
shvl.set(constructedService, value, substitutedVal);
|
shvl.set(constructedService, value, substitutedVal);
|
||||||
|
|||||||
@@ -200,7 +200,7 @@ const ensureArray = (value) => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const findHighlightLevel = (ruleSet, numericValue, stringValue) => {
|
const findHighlightLevel = (ruleSet, numericValue, stringValue) => {
|
||||||
const { numeric, string } = ruleSet;
|
const { numeric, string, valueOnly } = ruleSet;
|
||||||
|
|
||||||
if (numeric && numericValue !== undefined) {
|
if (numeric && numericValue !== undefined) {
|
||||||
const numericRules = ensureArray(numeric);
|
const numericRules = ensureArray(numeric);
|
||||||
@@ -208,7 +208,7 @@ const findHighlightLevel = (ruleSet, numericValue, stringValue) => {
|
|||||||
for (const candidate of numericCandidates) {
|
for (const candidate of numericCandidates) {
|
||||||
for (const rule of numericRules) {
|
for (const rule of numericRules) {
|
||||||
if (rule?.level && evaluateNumericRule(candidate, rule)) {
|
if (rule?.level && evaluateNumericRule(candidate, rule)) {
|
||||||
return { level: rule.level, source: "numeric", rule };
|
return { level: rule.level, source: "numeric", rule, valueOnly };
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -218,7 +218,7 @@ const findHighlightLevel = (ruleSet, numericValue, stringValue) => {
|
|||||||
const stringRules = ensureArray(string);
|
const stringRules = ensureArray(string);
|
||||||
for (const rule of stringRules) {
|
for (const rule of stringRules) {
|
||||||
if (rule?.level && evaluateStringRule(stringValue, rule)) {
|
if (rule?.level && evaluateStringRule(stringValue, rule)) {
|
||||||
return { level: rule.level, source: "string", rule };
|
return { level: rule.level, source: "string", rule, valueOnly };
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -111,7 +111,7 @@ export async function cachedRequest(url, duration = 5, ua = "homepage") {
|
|||||||
export async function httpProxy(url, params = {}) {
|
export async function httpProxy(url, params = {}) {
|
||||||
const constructedUrl = new URL(url);
|
const constructedUrl = new URL(url);
|
||||||
const disableIpv6 = process.env.HOMEPAGE_PROXY_DISABLE_IPV6 === "true";
|
const disableIpv6 = process.env.HOMEPAGE_PROXY_DISABLE_IPV6 === "true";
|
||||||
const agentOptions = disableIpv6 ? { family: 4, autoSelectFamily: false } : {};
|
const agentOptions = disableIpv6 ? { family: 4, autoSelectFamily: false } : { autoSelectFamilyAttemptTimeout: 500 };
|
||||||
|
|
||||||
let request = null;
|
let request = null;
|
||||||
if (constructedUrl.protocol === "https:") {
|
if (constructedUrl.protocol === "https:") {
|
||||||
|
|||||||
Reference in New Issue
Block a user