2.0.6
Soil moisture shades
This commit is contained in:
+24
-1
@@ -656,6 +656,29 @@ ${(isPro ? (activeProfile === 'custom' || activeProfile === 'showall' || activeC
|
||||
const a = 0.035 + x * maxAlpha;
|
||||
return `rgba(${rgb},${a.toFixed(3)})`;
|
||||
};
|
||||
const soilMoistureBg = (v) => {
|
||||
if (v == null || isNaN(v)) return { bg: 'transparent', fg: '#555' };
|
||||
const pct = v * 100;
|
||||
// stops: [pct, r, g, b]
|
||||
const stops = [
|
||||
[0, 212, 180, 131], // sandy tan – bone dry
|
||||
[10, 160, 120, 64], // mid brown – dry
|
||||
[22, 138, 122, 80], // olive-brown – damp/firm
|
||||
[32, 200, 160, 64], // amber – soft, caution
|
||||
[38, 58, 138, 92], // green – wet
|
||||
[50, 42, 106, 144], // blue – saturated
|
||||
];
|
||||
let s0 = stops[0], s1 = stops[stops.length - 1];
|
||||
for (let i = 0; i < stops.length - 1; i++) {
|
||||
if (pct >= stops[i][0] && pct <= stops[i+1][0]) { s0 = stops[i]; s1 = stops[i+1]; break; }
|
||||
}
|
||||
const t = s1[0] === s0[0] ? 1 : Math.max(0, Math.min(1, (pct - s0[0]) / (s1[0] - s0[0])));
|
||||
const r = Math.round(s0[1] + t * (s1[1] - s0[1]));
|
||||
const g = Math.round(s0[2] + t * (s1[2] - s0[2]));
|
||||
const b = Math.round(s0[3] + t * (s1[3] - s0[3]));
|
||||
const lum = 0.299*r + 0.587*g + 0.114*b;
|
||||
return { bg: `rgba(${r},${g},${b},0.18)`, fg: '#3a2a10' };
|
||||
};
|
||||
const deltaBg = (v) => {
|
||||
if (v == null || isNaN(v)) return 'transparent';
|
||||
if (Math.abs(v) < 1) return 'transparent';
|
||||
@@ -734,7 +757,7 @@ ${(isPro ? (activeProfile === 'custom' || activeProfile === 'showall' || activeC
|
||||
${visibleCols.soilT6 && html`
|
||||
<td class=${groupStart('soilT6')} style=${{ color: airTempFontColor(), background: airTempBg(r.soilT6, rPrev?.soilT6, rNext?.soilT6) }}>${fmt(r.soilT6)}${u('°C')}</td>`}
|
||||
${visibleCols.soilM && html`
|
||||
<td class=${groupStart('soilM')} style=${{ color: '#2a6a90', background: scaleBg(r.soilM, 0.12, 0.45, '50,125,190') }}>${r.soilM != null ? fmt(r.soilM * 100, 1) + u('%') : '—'}</td>`}
|
||||
<td class=${groupStart('soilM')} style=${(() => { const sm = soilMoistureBg(r.soilM); return { color: sm.fg, background: sm.bg }; })()}>${r.soilM != null ? fmt(r.soilM * 100, 1) + u('%') : '—'}</td>`}
|
||||
${visibleCols.air && html`<td class=${groupStart('air')} style=${{ background: airTempBg(r.Ta, rPrev?.Ta, rNext?.Ta), color: airTempFontColor() }}>${fmt(r.Ta)}${u('°C')}</td>`}
|
||||
${visibleCols.rh && html`<td class=${groupStart('rh')} style=${{ background: scaleBg(r.RH, 30, 100, '70,145,200') }}>${Math.round(r.RH)}${u('%')}</td>`}
|
||||
${visibleCols.dew && html`<td class=${groupStart('dew')} style=${{ background: airTempBg(r.dew, rPrev?.dew, rNext?.dew), color: airTempFontColor() }}>${fmt(r.dew)}${u('°C')}</td>`}
|
||||
|
||||
Reference in New Issue
Block a user