mirror of
https://github.com/netbymatt/ws4kp.git
synced 2026-04-17 09:09:30 -07:00
@@ -14,6 +14,7 @@ import {
|
||||
import { debugFlag } from './utils/debug.mjs';
|
||||
import { isDataStale, enhanceObservationWithMapClick } from './utils/mapclick.mjs';
|
||||
import { DateTime } from '../vendor/auto/luxon.mjs';
|
||||
import settings from './settings.mjs';
|
||||
|
||||
// some stations prefixed do not provide all the necessary data
|
||||
const skipStations = ['U', 'C', 'H', 'W', 'Y', 'T', 'S', 'M', 'O', 'L', 'A', 'F', 'B', 'N', 'V', 'R', 'D', 'E', 'I', 'G', 'J'];
|
||||
@@ -192,7 +193,9 @@ class CurrentWeather extends WeatherDisplay {
|
||||
const wind = (typeof this.data.WindSpeed === 'number') ? this.data.WindDirection.padEnd(3, '') + this.data.WindSpeed.toString().padStart(3, ' ') : this.data.WindSpeed;
|
||||
|
||||
// get location (city name) from StationInfo if available (allows for overrides)
|
||||
const location = (StationInfo[this.data.station.properties.stationIdentifier]?.city ?? locationCleanup(this.data.station.properties.name)).substr(0, 20);
|
||||
// longer name allowed if in wide-enhanced
|
||||
const locationLimit = (settings.wide?.value && settings.enhancedScreens?.value) ? 25 : 20;
|
||||
const location = (StationInfo[this.data.station.properties.stationIdentifier]?.city ?? locationCleanup(this.data.station.properties.name)).substr(0, locationLimit);
|
||||
|
||||
const fill = {
|
||||
temp: this.data.Temperature + String.fromCharCode(176),
|
||||
|
||||
@@ -159,12 +159,17 @@ class LatestObservations extends WeatherDisplay {
|
||||
const windDirection = directionToNSEW(condition.windDirection.value);
|
||||
|
||||
const Temperature = temperatureConverter(condition.temperature.value);
|
||||
const Like = likeTemperature(condition.heatIndex?.value, condition.windChill?.value, Temperature, temperatureConverter);
|
||||
const WindSpeed = windConverter(condition.windSpeed.value);
|
||||
|
||||
const locationLimit = (settings.wide?.value && settings.enhancedScreens?.value) ? 20 : 14;
|
||||
const weatherLimit = (settings.wide?.value && settings.enhancedScreens?.value) ? 10 : 9;
|
||||
|
||||
const fill = {
|
||||
location: locationCleanup(condition.city).substr(0, 14),
|
||||
location: locationCleanup(condition.city).substr(0, locationLimit),
|
||||
temp: Temperature,
|
||||
weather: shortenCurrentConditions(condition.textDescription).substr(0, 9),
|
||||
like: Like.value,
|
||||
weather: shortenCurrentConditions(condition.textDescription).substr(0, weatherLimit),
|
||||
};
|
||||
|
||||
if (WindSpeed > 0) {
|
||||
@@ -175,7 +180,12 @@ class LatestObservations extends WeatherDisplay {
|
||||
fill.wind = 'Calm';
|
||||
}
|
||||
|
||||
return this.fillTemplate('observation-row', fill);
|
||||
const filledRow = this.fillTemplate('observation-row', fill);
|
||||
|
||||
// add the feels like class
|
||||
filledRow.querySelector('.like').classList.add(Like.cssClass);
|
||||
|
||||
return filledRow;
|
||||
});
|
||||
|
||||
const linesContainer = this.elem.querySelector('.observation-lines');
|
||||
@@ -186,6 +196,25 @@ class LatestObservations extends WeatherDisplay {
|
||||
}
|
||||
}
|
||||
|
||||
// generate a "feels like" temperature from heat index and wind chill.
|
||||
const likeTemperature = (heat, wind, actual, converter) => {
|
||||
// figure out the feels like value
|
||||
let value = '';
|
||||
if (heat) value = converter(heat);
|
||||
if (wind) value = converter(wind);
|
||||
|
||||
// determine if there's a red/blue color class to add
|
||||
let cssClass;
|
||||
if (value !== '') {
|
||||
if (value > actual) cssClass = 'heat-index';
|
||||
if (value < actual) cssClass = 'wind-chill';
|
||||
}
|
||||
return {
|
||||
value,
|
||||
cssClass,
|
||||
};
|
||||
};
|
||||
|
||||
const shortenCurrentConditions = (_condition) => {
|
||||
let condition = _condition;
|
||||
condition = condition.replace(/Light/, 'L');
|
||||
|
||||
@@ -14,6 +14,12 @@
|
||||
padding-top: 10px;
|
||||
position: absolute;
|
||||
|
||||
.wide.enhanced & {
|
||||
width: 300px;
|
||||
margin-left: 25px;
|
||||
margin-right: 25px;
|
||||
}
|
||||
|
||||
@include u.text-shadow();
|
||||
|
||||
&.left {
|
||||
|
||||
@@ -84,11 +84,11 @@
|
||||
left: 425px;
|
||||
|
||||
&.heat-index {
|
||||
color: #e00;
|
||||
color: c.$heat-index;
|
||||
}
|
||||
|
||||
&.wind-chill {
|
||||
color: c.$extended-low;
|
||||
color: c.$wind-chill;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -46,6 +46,39 @@
|
||||
left: 430px;
|
||||
}
|
||||
|
||||
.like {
|
||||
display: none;
|
||||
}
|
||||
|
||||
// wide and enhanced moves the columns and enables the like column
|
||||
.wide.enhanced & {
|
||||
.temp {
|
||||
left: 320px;
|
||||
}
|
||||
|
||||
.like {
|
||||
left: 380px;
|
||||
display: block;
|
||||
|
||||
&.heat-index {
|
||||
color: c.$heat-index;
|
||||
}
|
||||
|
||||
&.wind-chill {
|
||||
color: c.$wind-chill;
|
||||
}
|
||||
}
|
||||
|
||||
.weather {
|
||||
left: 470px;
|
||||
}
|
||||
|
||||
.wind {
|
||||
left: 630px;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
.observation-lines {
|
||||
min-height: 338px;
|
||||
padding-top: 10px;
|
||||
|
||||
@@ -13,5 +13,7 @@ $gradient-loading-3: #4f99f9;
|
||||
$gradient-loading-4: #8ffdfa;
|
||||
|
||||
$extended-low: #8080FF;
|
||||
$wind-chill: #8080FF;
|
||||
$heat-index: #e00;
|
||||
|
||||
$blue-box: #26235a;
|
||||
2
server/styles/ws.min.css
vendored
2
server/styles/ws.min.css
vendored
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1,5 +1,5 @@
|
||||
<%- include('header.ejs', {titleDual:{ top: 'Current' , bottom: 'Conditions' }, noaaLogo: true, hasTime: true}) %>
|
||||
<div class="main has-scroll has-box current-weather">
|
||||
<div class="main has-scroll has-box current-weather can-enhance">
|
||||
<div class="weather template">
|
||||
<div class="left col">
|
||||
<div class="temp center"></div>
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
<%- include('header.ejs', {titleDual:{ top: 'Latest' , bottom: 'Observations' }, noaaLogo: true, hasTime: true }) %>
|
||||
<div class="main has-scroll latest-observations has-box">
|
||||
<div class="main has-scroll latest-observations has-box can-enhance">
|
||||
<div class="container">
|
||||
<div class="column-headers">
|
||||
<div class="temp english">°F</div>
|
||||
<div class="temp metric">°C</div>
|
||||
<div class="like">Like</div>
|
||||
<div class="weather">Weather</div>
|
||||
<div class="wind">Wind</div>
|
||||
</div>
|
||||
@@ -11,6 +12,7 @@
|
||||
<div class="observation-row template">
|
||||
<div class="location"></div>
|
||||
<div class="temp"></div>
|
||||
<div class="like"></div>
|
||||
<div class="weather"></div>
|
||||
<div class="wind"></div>
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user