This commit is contained in:
Lani Aung
2025-06-12 07:48:33 -07:00
parent 015be988ae
commit 8b828f79fd
5 changed files with 95 additions and 22 deletions
+14
View File
@@ -4,4 +4,18 @@ body {
margin: 0; margin: 0;
overflow: hidden; overflow: hidden;
padding: 0; padding: 0;
#weather-panel {
border-radius: 50px;
box-shadow: #999a 0 0 25px;
font-family: Verdana, sans-serif;
height: 500px;
left: calc(50% - 250px);
padding: 40px;
position: absolute;
text-shadow: #fff 0 0 5px, #fff 0 0 5px, #fff 0 0 5px, #fff 0 0 5px;
top: calc(50% - 250px);
width: 500px;
z-index: 10;
}
} }
+27 -11
View File
@@ -5,7 +5,7 @@ export default class Weather {
private readonly options: WeatherOptions private readonly options: WeatherOptions
private readonly dailyVariables = ["temperature_2m_max", "temperature_2m_min", "sunrise", "sunset", "uv_index_max", "precipitation_sum", "precipitation_hours", "wind_speed_10m_max", "wind_gusts_10m_max", "wind_direction_10m_dominant"] private readonly dailyVariables = ["temperature_2m_max", "temperature_2m_min", "sunrise", "sunset", "uv_index_max", "precipitation_sum", "precipitation_hours", "wind_speed_10m_max", "wind_gusts_10m_max", "wind_direction_10m_dominant"]
private readonly hourlyVariables = ["temperature_2m", "precipitation", "precipitation_probability"] private readonly hourlyVariables = ["temperature_2m", "precipitation", "precipitation_probability"]
private readonly currentVariables = ["temperature_2m", "relative_humidity_2m", "apparent_temperature", "precipitation", "wind_speed_10m", "wind_gusts_10m", "wind_direction_10m"] private readonly currentVariables = ["temperature_2m", "relative_humidity_2m", "apparent_temperature", "precipitation", "wind_speed_10m", "wind_gusts_10m", "wind_direction_10m", "cloud_cover"]
private lastFetched: LastFetched private lastFetched: LastFetched
current: CurrentWeather current: CurrentWeather
hourly: HourlyWeather[] = [] hourly: HourlyWeather[] = []
@@ -15,11 +15,11 @@ export default class Weather {
this.options = new WeatherOptions(latitude ?? 47.61002138071677, longitude ?? -122.17906310779568) this.options = new WeatherOptions(latitude ?? 47.61002138071677, longitude ?? -122.17906310779568)
const me = this const me = this
setInterval(() => me.getWeather().then(() => me.setDisplay()), 60 * 1000) setInterval(() => me.fetchWeather().then(() => me.setDisplay()), 60 * 1000)
me.getWeather().then(() => me.setDisplay()) me.fetchWeather().then(() => me.setDisplay())
} }
async getWeather(): Promise<void> { async fetchWeather(): Promise<void> {
const me = this const me = this
const parameters: any = { ...me.options } const parameters: any = { ...me.options }
let getData = false let getData = false
@@ -62,14 +62,15 @@ export default class Weather {
if (current != null) { if (current != null) {
me.current = { me.current = {
time: new Date((Number(current.time()) + utcOffsetSeconds) * 1000), time: new Date(Number(current.time()) * 1000),
temperature: current.variables(0)!.value(), temperature: current.variables(0)!.value(),
humidity: current.variables(1)!.value(), humidity: current.variables(1)!.value(),
feelsLike: current.variables(2)!.value(), feelsLike: current.variables(2)!.value(),
precipitation: current.variables(3)!.value(), precipitation: current.variables(3)!.value(),
windSpeed: current.variables(4)!.value(), windSpeed: current.variables(4)!.value(),
windGusts: current.variables(5)!.value(), windGusts: current.variables(5)!.value(),
windDirection: current.variables(6)!.value() windDirection: current.variables(6)!.value(),
cloudCoverage: current.variables(7)!.value()
} }
} }
@@ -107,11 +108,11 @@ export default class Weather {
for (let i = 0; i < length; i++) { for (let i = 0; i < length; i++) {
me.daily.push({ me.daily.push({
time: new Date((Number(daily.time()) + i * daily.interval() + utcOffsetSeconds) * 1000), time: new Date((Number(daily.time()) + i * daily.interval()) * 1000),
maxTemperature: maxTemperatures[i], maxTemperature: maxTemperatures[i],
minTemperature: minTemperatures[i], minTemperature: minTemperatures[i],
sunrise: new Date((Number(sunrise.valuesInt64(i)) + utcOffsetSeconds) * 1000), sunrise: new Date((Number(sunrise.valuesInt64(i))) * 1000),
sunset: new Date((Number(sunset.valuesInt64(i)) + utcOffsetSeconds) * 1000), sunset: new Date((Number(sunset.valuesInt64(i))) * 1000),
maxUV: maxUVs[i], maxUV: maxUVs[i],
totalPrecipitation: precipitationTotals[i], totalPrecipitation: precipitationTotals[i],
hoursOfPrecipitation: precipitationHours[i], hoursOfPrecipitation: precipitationHours[i],
@@ -121,8 +122,6 @@ export default class Weather {
}) })
} }
} }
console.log(me)
} }
} }
@@ -143,7 +142,23 @@ export default class Weather {
} }
private setDisplayCurrent(section: HTMLElement) { private setDisplayCurrent(section: HTMLElement) {
const header = document.createElement("header")
header.textContent = "Current"
section.appendChild(header)
const list = document.createElement("dl")
for (let key of Object.keys(this.current)) {
const term = document.createElement("dt")
term.textContent = key
const value = document.createElement("dd")
value.textContent = (this.current as any)[key]
list.append(term, value)
}
section.appendChild(list)
} }
} }
@@ -171,6 +186,7 @@ interface CurrentWeather {
windSpeed: number windSpeed: number
windGusts: number windGusts: number
windDirection: number windDirection: number
cloudCoverage: number
} }
interface DailyWeather { interface DailyWeather {
+39 -10
View File
@@ -2315,15 +2315,15 @@ var Weather = /** @class */ (function () {
this.apiUrl = "https://api.open-meteo.com/v1/forecast"; this.apiUrl = "https://api.open-meteo.com/v1/forecast";
this.dailyVariables = ["temperature_2m_max", "temperature_2m_min", "sunrise", "sunset", "uv_index_max", "precipitation_sum", "precipitation_hours", "wind_speed_10m_max", "wind_gusts_10m_max", "wind_direction_10m_dominant"]; this.dailyVariables = ["temperature_2m_max", "temperature_2m_min", "sunrise", "sunset", "uv_index_max", "precipitation_sum", "precipitation_hours", "wind_speed_10m_max", "wind_gusts_10m_max", "wind_direction_10m_dominant"];
this.hourlyVariables = ["temperature_2m", "precipitation", "precipitation_probability"]; this.hourlyVariables = ["temperature_2m", "precipitation", "precipitation_probability"];
this.currentVariables = ["temperature_2m", "relative_humidity_2m", "apparent_temperature", "precipitation", "wind_speed_10m", "wind_gusts_10m", "wind_direction_10m"]; this.currentVariables = ["temperature_2m", "relative_humidity_2m", "apparent_temperature", "precipitation", "wind_speed_10m", "wind_gusts_10m", "wind_direction_10m", "cloud_cover"];
this.hourly = []; this.hourly = [];
this.daily = []; this.daily = [];
this.options = new WeatherOptions(latitude !== null && latitude !== void 0 ? latitude : 47.61002138071677, longitude !== null && longitude !== void 0 ? longitude : -122.17906310779568); this.options = new WeatherOptions(latitude !== null && latitude !== void 0 ? latitude : 47.61002138071677, longitude !== null && longitude !== void 0 ? longitude : -122.17906310779568);
var me = this; var me = this;
setInterval(function () { return me.getWeather(); }, 60 * 1000); setInterval(function () { return me.fetchWeather().then(function () { return me.setDisplay(); }); }, 60 * 1000);
me.getWeather(); me.fetchWeather().then(function () { return me.setDisplay(); });
} }
Weather.prototype.getWeather = function () { Weather.prototype.fetchWeather = function () {
return __awaiter(this, void 0, void 0, function () { return __awaiter(this, void 0, void 0, function () {
var me, parameters, getData, responses, _i, responses_1, response, utcOffsetSeconds, current, hourly, daily, length_1, temperatures, precipitationTotals, precipitationProbabilities, i, length_2, maxTemperatures, minTemperatures, sunrise, sunset, maxUVs, precipitationTotals, precipitationHours, maxWindSpeeds, maxWindGusts, prominentWindDirections, i; var me, parameters, getData, responses, _i, responses_1, response, utcOffsetSeconds, current, hourly, daily, length_1, temperatures, precipitationTotals, precipitationProbabilities, i, length_2, maxTemperatures, minTemperatures, sunrise, sunset, maxUVs, precipitationTotals, precipitationHours, maxWindSpeeds, maxWindGusts, prominentWindDirections, i;
return __generator(this, function (_a) { return __generator(this, function (_a) {
@@ -2370,14 +2370,15 @@ var Weather = /** @class */ (function () {
daily = response.daily(); daily = response.daily();
if (current != null) { if (current != null) {
me.current = { me.current = {
time: new Date((Number(current.time()) + utcOffsetSeconds) * 1000), time: new Date(Number(current.time()) * 1000),
temperature: current.variables(0).value(), temperature: current.variables(0).value(),
humidity: current.variables(1).value(), humidity: current.variables(1).value(),
feelsLike: current.variables(2).value(), feelsLike: current.variables(2).value(),
precipitation: current.variables(3).value(), precipitation: current.variables(3).value(),
windSpeed: current.variables(4).value(), windSpeed: current.variables(4).value(),
windGusts: current.variables(5).value(), windGusts: current.variables(5).value(),
windDirection: current.variables(6).value() windDirection: current.variables(6).value(),
cloudCoverage: current.variables(7).value()
}; };
} }
if (hourly != null) { if (hourly != null) {
@@ -2410,11 +2411,11 @@ var Weather = /** @class */ (function () {
me.daily.length = 0; me.daily.length = 0;
for (i = 0; i < length_2; i++) { for (i = 0; i < length_2; i++) {
me.daily.push({ me.daily.push({
time: new Date((Number(daily.time()) + i * daily.interval() + utcOffsetSeconds) * 1000), time: new Date((Number(daily.time()) + i * daily.interval()) * 1000),
maxTemperature: maxTemperatures[i], maxTemperature: maxTemperatures[i],
minTemperature: minTemperatures[i], minTemperature: minTemperatures[i],
sunrise: new Date((Number(sunrise.valuesInt64(i)) + utcOffsetSeconds) * 1000), sunrise: new Date((Number(sunrise.valuesInt64(i))) * 1000),
sunset: new Date((Number(sunset.valuesInt64(i)) + utcOffsetSeconds) * 1000), sunset: new Date((Number(sunset.valuesInt64(i))) * 1000),
maxUV: maxUVs[i], maxUV: maxUVs[i],
totalPrecipitation: precipitationTotals[i], totalPrecipitation: precipitationTotals[i],
hoursOfPrecipitation: precipitationHours[i], hoursOfPrecipitation: precipitationHours[i],
@@ -2424,13 +2425,41 @@ var Weather = /** @class */ (function () {
}); });
} }
} }
console.log(me);
} }
return [2 /*return*/]; return [2 /*return*/];
} }
}); });
}); });
}; };
Weather.prototype.setDisplay = function () {
var panel = document.getElementById("weather-panel");
if (!panel) {
panel = document.createElement("main");
panel.id = "weather-panel";
document.body.appendChild(panel);
}
while (panel.firstChild)
panel.removeChild(panel.firstChild);
var currentSection = document.createElement("section");
currentSection.id = "current-section";
panel.appendChild(currentSection);
this.setDisplayCurrent(currentSection);
};
Weather.prototype.setDisplayCurrent = function (section) {
var header = document.createElement("header");
header.textContent = "Current";
section.appendChild(header);
var list = document.createElement("dl");
for (var _i = 0, _a = Object.keys(this.current); _i < _a.length; _i++) {
var key = _a[_i];
var term = document.createElement("dt");
term.textContent = key;
var value = document.createElement("dd");
value.textContent = this.current[key];
list.append(term, value);
}
section.appendChild(list);
};
return Weather; return Weather;
}()); }());
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Weather); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Weather);
+1 -1
View File
File diff suppressed because one or more lines are too long
+14
View File
@@ -5,3 +5,17 @@ body {
overflow: hidden; overflow: hidden;
padding: 0; padding: 0;
} }
html #weather-panel,
body #weather-panel {
border-radius: 50px;
box-shadow: #999a 0 0 25px;
font-family: Verdana, sans-serif;
height: 500px;
left: calc(50% - 250px);
padding: 40px;
position: absolute;
text-shadow: #fff 0 0 5px, #fff 0 0 5px, #fff 0 0 5px, #fff 0 0 5px;
top: calc(50% - 250px);
width: 500px;
z-index: 10;
}