From 6fa3d04aad627ffa4786b91acc24e4f3e8b70312 Mon Sep 17 00:00:00 2001 From: Sam Chudnick Date: Thu, 8 Jun 2023 06:41:20 -0400 Subject: Update API to use open-meteo. Further frontend development. --- app.py | 42 +- forms.py | 4 +- library.py | 430 +++------------------ static/icons/backup/celsius.svg | 1 + static/icons/backup/fahrenheit.svg | 1 + static/icons/backup/fog.svg | 1 + static/icons/backup/hail.svg | 1 + static/icons/backup/hazy.svg | 1 + static/icons/backup/humidity.svg | 1 + static/icons/backup/lightning-rainy.svg | 1 + static/icons/backup/lightning.svg | 1 + static/icons/backup/night-clear.svg | 1 + static/icons/backup/night-partly-cloudy.svg | 1 + static/icons/backup/partly-cloudy.svg | 1 + static/icons/backup/partly-rainy.svg | 1 + static/icons/backup/partly-snowy-rainy.svg | 1 + static/icons/backup/pouring.svg | 1 + static/icons/backup/snow.svg | 1 + static/icons/backup/snowy-heavy.svg | 1 + static/icons/backup/snowy.svg | 1 + static/icons/backup/sunny.svg | 1 + static/icons/backup/sunrise.svg | 1 + static/icons/backup/sunset.svg | 1 + static/icons/backup/thermometer.svg | 1 + static/icons/backup/water-percent.svg | 1 + static/icons/backup/windy.svg | 1 + static/icons/clock.svg | 1 + static/icons/directions/east.svg | 1 + static/icons/directions/north-east.svg | 1 + static/icons/directions/north-west.svg | 1 + static/icons/directions/north.svg | 1 + static/icons/directions/south-east.svg | 1 + static/icons/directions/south-west.svg | 1 + static/icons/directions/south.svg | 1 + static/icons/directions/west.svg | 1 + static/icons/svg/wi-alien.svg | 16 + static/icons/svg/wi-barometer.svg | 15 + static/icons/svg/wi-celsius.svg | 18 + static/icons/svg/wi-cloud-down.svg | 18 + static/icons/svg/wi-cloud-refresh.svg | 21 + static/icons/svg/wi-cloud-up.svg | 18 + static/icons/svg/wi-cloud.svg | 13 + static/icons/svg/wi-cloudy-gusts.svg | 22 ++ static/icons/svg/wi-cloudy-windy.svg | 19 + static/icons/svg/wi-cloudy.svg | 18 + static/icons/svg/wi-day-cloudy-gusts.svg | 35 ++ static/icons/svg/wi-day-cloudy-high.svg | 26 ++ static/icons/svg/wi-day-cloudy-windy.svg | 33 ++ static/icons/svg/wi-day-cloudy.svg | 26 ++ static/icons/svg/wi-day-fog.svg | 31 ++ static/icons/svg/wi-day-hail.svg | 42 ++ static/icons/svg/wi-day-haze.svg | 33 ++ static/icons/svg/wi-day-light-wind.svg | 32 ++ static/icons/svg/wi-day-lightning.svg | 29 ++ static/icons/svg/wi-day-rain-mix.svg | 49 +++ static/icons/svg/wi-day-rain-wind.svg | 40 ++ static/icons/svg/wi-day-rain.svg | 35 ++ static/icons/svg/wi-day-showers.svg | 43 +++ static/icons/svg/wi-day-sleet-storm.svg | 40 ++ static/icons/svg/wi-day-sleet.svg | 46 +++ static/icons/svg/wi-day-snow-thunderstorm.svg | 37 ++ static/icons/svg/wi-day-snow-wind.svg | 40 ++ static/icons/svg/wi-day-snow.svg | 40 ++ static/icons/svg/wi-day-sprinkle.svg | 33 ++ static/icons/svg/wi-day-storm-showers.svg | 38 ++ static/icons/svg/wi-day-sunny-overcast.svg | 29 ++ static/icons/svg/wi-day-sunny.svg | 27 ++ static/icons/svg/wi-day-thunderstorm.svg | 34 ++ static/icons/svg/wi-day-windy.svg | 36 ++ static/icons/svg/wi-degrees.svg | 10 + static/icons/svg/wi-direction-down-left.svg | 10 + static/icons/svg/wi-direction-down-right.svg | 9 + static/icons/svg/wi-direction-down.svg | 9 + static/icons/svg/wi-direction-left.svg | 9 + static/icons/svg/wi-direction-right.svg | 10 + static/icons/svg/wi-direction-up-left.svg | 9 + static/icons/svg/wi-direction-up-right.svg | 9 + static/icons/svg/wi-direction-up.svg | 9 + static/icons/svg/wi-dust.svg | 31 ++ static/icons/svg/wi-earthquake.svg | 16 + static/icons/svg/wi-fahrenheit.svg | 13 + static/icons/svg/wi-fire.svg | 22 ++ static/icons/svg/wi-flood.svg | 22 ++ static/icons/svg/wi-fog.svg | 18 + static/icons/svg/wi-gale-warning.svg | 6 + static/icons/svg/wi-hail.svg | 30 ++ static/icons/svg/wi-horizon-alt.svg | 24 ++ static/icons/svg/wi-horizon.svg | 17 + static/icons/svg/wi-hot.svg | 56 +++ static/icons/svg/wi-humidity.svg | 23 ++ static/icons/svg/wi-hurricane-warning.svg | 7 + static/icons/svg/wi-hurricane.svg | 17 + static/icons/svg/wi-lightning.svg | 9 + static/icons/svg/wi-lunar-eclipse.svg | 11 + static/icons/svg/wi-meteor.svg | 17 + static/icons/svg/wi-moon-alt-first-quarter.svg | 10 + static/icons/svg/wi-moon-alt-full.svg | 11 + static/icons/svg/wi-moon-alt-new.svg | 8 + static/icons/svg/wi-moon-alt-third-quarter.svg | 10 + static/icons/svg/wi-moon-alt-waning-crescent-1.svg | 10 + static/icons/svg/wi-moon-alt-waning-crescent-2.svg | 10 + static/icons/svg/wi-moon-alt-waning-crescent-3.svg | 10 + static/icons/svg/wi-moon-alt-waning-crescent-4.svg | 11 + static/icons/svg/wi-moon-alt-waning-crescent-5.svg | 11 + static/icons/svg/wi-moon-alt-waning-crescent-6.svg | 11 + static/icons/svg/wi-moon-alt-waning-gibbous-1.svg | 11 + static/icons/svg/wi-moon-alt-waning-gibbous-2.svg | 12 + static/icons/svg/wi-moon-alt-waning-gibbous-3.svg | 12 + static/icons/svg/wi-moon-alt-waning-gibbous-4.svg | 11 + static/icons/svg/wi-moon-alt-waning-gibbous-5.svg | 11 + static/icons/svg/wi-moon-alt-waning-gibbous-6.svg | 10 + static/icons/svg/wi-moon-alt-waxing-crescent-1.svg | 10 + static/icons/svg/wi-moon-alt-waxing-crescent-2.svg | 10 + static/icons/svg/wi-moon-alt-waxing-crescent-3.svg | 10 + static/icons/svg/wi-moon-alt-waxing-crescent-4.svg | 10 + static/icons/svg/wi-moon-alt-waxing-crescent-5.svg | 10 + static/icons/svg/wi-moon-alt-waxing-crescent-6.svg | 10 + static/icons/svg/wi-moon-alt-waxing-gibbous-1.svg | 11 + static/icons/svg/wi-moon-alt-waxing-gibbous-2.svg | 11 + static/icons/svg/wi-moon-alt-waxing-gibbous-3.svg | 11 + static/icons/svg/wi-moon-alt-waxing-gibbous-4.svg | 11 + static/icons/svg/wi-moon-alt-waxing-gibbous-5.svg | 11 + static/icons/svg/wi-moon-alt-waxing-gibbous-6.svg | 12 + static/icons/svg/wi-moon-first-quarter.svg | 7 + static/icons/svg/wi-moon-full.svg | 8 + static/icons/svg/wi-moon-new.svg | 11 + static/icons/svg/wi-moon-third-quarter.svg | 7 + static/icons/svg/wi-moon-waning-crescent-1.svg | 7 + static/icons/svg/wi-moon-waning-crescent-2.svg | 7 + static/icons/svg/wi-moon-waning-crescent-3.svg | 7 + static/icons/svg/wi-moon-waning-crescent-4.svg | 8 + static/icons/svg/wi-moon-waning-crescent-5.svg | 8 + static/icons/svg/wi-moon-waning-crescent-6.svg | 9 + static/icons/svg/wi-moon-waning-gibbous-1.svg | 8 + static/icons/svg/wi-moon-waning-gibbous-2.svg | 8 + static/icons/svg/wi-moon-waning-gibbous-3.svg | 8 + static/icons/svg/wi-moon-waning-gibbous-4.svg | 8 + static/icons/svg/wi-moon-waning-gibbous-5.svg | 7 + static/icons/svg/wi-moon-waning-gibbous-6.svg | 7 + static/icons/svg/wi-moon-waxing-6.svg | 7 + static/icons/svg/wi-moon-waxing-crescent-1.svg | 9 + static/icons/svg/wi-moon-waxing-crescent-2.svg | 8 + static/icons/svg/wi-moon-waxing-crescent-3.svg | 8 + static/icons/svg/wi-moon-waxing-crescent-4.svg | 8 + static/icons/svg/wi-moon-waxing-crescent-5.svg | 7 + static/icons/svg/wi-moon-waxing-gibbous-1.svg | 7 + static/icons/svg/wi-moon-waxing-gibbous-2.svg | 7 + static/icons/svg/wi-moon-waxing-gibbous-3.svg | 8 + static/icons/svg/wi-moon-waxing-gibbous-4.svg | 8 + static/icons/svg/wi-moon-waxing-gibbous-5.svg | 8 + static/icons/svg/wi-moon-waxing-gibbous-6.svg | 8 + static/icons/svg/wi-moonrise.svg | 13 + static/icons/svg/wi-moonset.svg | 14 + static/icons/svg/wi-na.svg | 8 + static/icons/svg/wi-night-alt-cloudy-gusts.svg | 28 ++ static/icons/svg/wi-night-alt-cloudy-high.svg | 16 + static/icons/svg/wi-night-alt-cloudy-windy.svg | 25 ++ static/icons/svg/wi-night-alt-cloudy.svg | 19 + static/icons/svg/wi-night-alt-hail.svg | 34 ++ static/icons/svg/wi-night-alt-lightning.svg | 21 + static/icons/svg/wi-night-alt-partly-cloudy.svg | 19 + static/icons/svg/wi-night-alt-rain-mix.svg | 42 ++ static/icons/svg/wi-night-alt-rain-wind.svg | 32 ++ static/icons/svg/wi-night-alt-rain.svg | 27 ++ static/icons/svg/wi-night-alt-showers.svg | 34 ++ static/icons/svg/wi-night-alt-sleet-storm.svg | 32 ++ static/icons/svg/wi-night-alt-sleet.svg | 38 ++ .../icons/svg/wi-night-alt-snow-thunderstorm.svg | 30 ++ static/icons/svg/wi-night-alt-snow-wind.svg | 33 ++ static/icons/svg/wi-night-alt-snow.svg | 32 ++ static/icons/svg/wi-night-alt-sprinkle.svg | 26 ++ static/icons/svg/wi-night-alt-storm-showers.svg | 31 ++ static/icons/svg/wi-night-alt-thunderstorm.svg | 25 ++ static/icons/svg/wi-night-clear.svg | 13 + static/icons/svg/wi-night-cloudy-gusts.svg | 25 ++ static/icons/svg/wi-night-cloudy-high.svg | 17 + static/icons/svg/wi-night-cloudy-windy.svg | 22 ++ static/icons/svg/wi-night-cloudy.svg | 15 + static/icons/svg/wi-night-fog.svg | 22 ++ static/icons/svg/wi-night-hail.svg | 32 ++ static/icons/svg/wi-night-lightning.svg | 18 + static/icons/svg/wi-night-partly-cloudy.svg | 16 + static/icons/svg/wi-night-rain-mix.svg | 41 ++ static/icons/svg/wi-night-rain-wind.svg | 29 ++ static/icons/svg/wi-night-rain.svg | 24 ++ static/icons/svg/wi-night-showers.svg | 32 ++ static/icons/svg/wi-night-sleet-storm.svg | 29 ++ static/icons/svg/wi-night-sleet.svg | 34 ++ static/icons/svg/wi-night-snow-thunderstorm.svg | 27 ++ static/icons/svg/wi-night-snow-wind.svg | 29 ++ static/icons/svg/wi-night-snow.svg | 29 ++ static/icons/svg/wi-night-sprinkle.svg | 23 ++ static/icons/svg/wi-night-storm-showers.svg | 28 ++ static/icons/svg/wi-night-thunderstorm.svg | 22 ++ static/icons/svg/wi-rain-mix.svg | 37 ++ static/icons/svg/wi-rain-wind.svg | 28 ++ static/icons/svg/wi-rain.svg | 23 ++ static/icons/svg/wi-raindrop.svg | 9 + static/icons/svg/wi-raindrops.svg | 13 + static/icons/svg/wi-refresh-alt.svg | 11 + static/icons/svg/wi-refresh.svg | 12 + static/icons/svg/wi-sandstorm.svg | 31 ++ static/icons/svg/wi-showers.svg | 31 ++ static/icons/svg/wi-sleet.svg | 35 ++ static/icons/svg/wi-small-craft-advisory.svg | 6 + static/icons/svg/wi-smog.svg | 13 + static/icons/svg/wi-smoke.svg | 17 + static/icons/svg/wi-snow-wind.svg | 27 ++ static/icons/svg/wi-snow.svg | 27 ++ static/icons/svg/wi-snowflake-cold.svg | 30 ++ static/icons/svg/wi-solar-eclipse.svg | 28 ++ static/icons/svg/wi-sprinkle.svg | 20 + static/icons/svg/wi-stars.svg | 15 + static/icons/svg/wi-storm-showers.svg | 26 ++ static/icons/svg/wi-storm-warning.svg | 6 + static/icons/svg/wi-strong-wind.svg | 15 + static/icons/svg/wi-sunrise.svg | 25 ++ static/icons/svg/wi-sunset.svg | 25 ++ static/icons/svg/wi-thermometer-exterior.svg | 12 + static/icons/svg/wi-thermometer-internal.svg | 9 + static/icons/svg/wi-thermometer.svg | 15 + static/icons/svg/wi-thunderstorm.svg | 21 + static/icons/svg/wi-time-1.svg | 13 + static/icons/svg/wi-time-10.svg | 13 + static/icons/svg/wi-time-11.svg | 13 + static/icons/svg/wi-time-12.svg | 12 + static/icons/svg/wi-time-2.svg | 13 + static/icons/svg/wi-time-3.svg | 13 + static/icons/svg/wi-time-4.svg | 13 + static/icons/svg/wi-time-5.svg | 13 + static/icons/svg/wi-time-6.svg | 12 + static/icons/svg/wi-time-7.svg | 13 + static/icons/svg/wi-time-8.svg | 13 + static/icons/svg/wi-time-9.svg | 13 + static/icons/svg/wi-tornado.svg | 25 ++ static/icons/svg/wi-train.svg | 26 ++ static/icons/svg/wi-tsunami.svg | 26 ++ static/icons/svg/wi-umbrella.svg | 23 ++ static/icons/svg/wi-volcano.svg | 23 ++ static/icons/svg/wi-wind-beaufort-0.svg | 21 + static/icons/svg/wi-wind-beaufort-1.svg | 15 + static/icons/svg/wi-wind-beaufort-10.svg | 21 + static/icons/svg/wi-wind-beaufort-11.svg | 16 + static/icons/svg/wi-wind-beaufort-12.svg | 21 + static/icons/svg/wi-wind-beaufort-2.svg | 21 + static/icons/svg/wi-wind-beaufort-3.svg | 22 ++ static/icons/svg/wi-wind-beaufort-4.svg | 16 + static/icons/svg/wi-wind-beaufort-5.svg | 20 + static/icons/svg/wi-wind-beaufort-6.svg | 23 ++ static/icons/svg/wi-wind-beaufort-7.svg | 16 + static/icons/svg/wi-wind-beaufort-8.svg | 26 ++ static/icons/svg/wi-wind-beaufort-9.svg | 23 ++ static/icons/svg/wi-wind-deg.svg | 12 + static/icons/svg/wi-windy.svg | 14 + static/style.css | 137 +++++-- templates/base.html | 31 +- templates/daily.html | 13 - templates/hourly.html | 18 - templates/index.html | 20 +- templates/weather.html | 77 ++++ 260 files changed, 4490 insertions(+), 520 deletions(-) create mode 100644 static/icons/backup/celsius.svg create mode 100644 static/icons/backup/fahrenheit.svg create mode 100644 static/icons/backup/fog.svg create mode 100644 static/icons/backup/hail.svg create mode 100644 static/icons/backup/hazy.svg create mode 100644 static/icons/backup/humidity.svg create mode 100644 static/icons/backup/lightning-rainy.svg create mode 100644 static/icons/backup/lightning.svg create mode 100644 static/icons/backup/night-clear.svg create mode 100644 static/icons/backup/night-partly-cloudy.svg create mode 100644 static/icons/backup/partly-cloudy.svg create mode 100644 static/icons/backup/partly-rainy.svg create mode 100644 static/icons/backup/partly-snowy-rainy.svg create mode 100644 static/icons/backup/pouring.svg create mode 100644 static/icons/backup/snow.svg create mode 100644 static/icons/backup/snowy-heavy.svg create mode 100644 static/icons/backup/snowy.svg create mode 100644 static/icons/backup/sunny.svg create mode 100644 static/icons/backup/sunrise.svg create mode 100644 static/icons/backup/sunset.svg create mode 100644 static/icons/backup/thermometer.svg create mode 100644 static/icons/backup/water-percent.svg create mode 100644 static/icons/backup/windy.svg create mode 100644 static/icons/clock.svg create mode 100644 static/icons/directions/east.svg create mode 100644 static/icons/directions/north-east.svg create mode 100644 static/icons/directions/north-west.svg create mode 100644 static/icons/directions/north.svg create mode 100644 static/icons/directions/south-east.svg create mode 100644 static/icons/directions/south-west.svg create mode 100644 static/icons/directions/south.svg create mode 100644 static/icons/directions/west.svg create mode 100644 static/icons/svg/wi-alien.svg create mode 100644 static/icons/svg/wi-barometer.svg create mode 100644 static/icons/svg/wi-celsius.svg create mode 100644 static/icons/svg/wi-cloud-down.svg create mode 100644 static/icons/svg/wi-cloud-refresh.svg create mode 100644 static/icons/svg/wi-cloud-up.svg create mode 100644 static/icons/svg/wi-cloud.svg create mode 100644 static/icons/svg/wi-cloudy-gusts.svg create mode 100644 static/icons/svg/wi-cloudy-windy.svg create mode 100644 static/icons/svg/wi-cloudy.svg create mode 100644 static/icons/svg/wi-day-cloudy-gusts.svg create mode 100644 static/icons/svg/wi-day-cloudy-high.svg create mode 100644 static/icons/svg/wi-day-cloudy-windy.svg create mode 100644 static/icons/svg/wi-day-cloudy.svg create mode 100644 static/icons/svg/wi-day-fog.svg create mode 100644 static/icons/svg/wi-day-hail.svg create mode 100644 static/icons/svg/wi-day-haze.svg create mode 100644 static/icons/svg/wi-day-light-wind.svg create mode 100644 static/icons/svg/wi-day-lightning.svg create mode 100644 static/icons/svg/wi-day-rain-mix.svg create mode 100644 static/icons/svg/wi-day-rain-wind.svg create mode 100644 static/icons/svg/wi-day-rain.svg create mode 100644 static/icons/svg/wi-day-showers.svg create mode 100644 static/icons/svg/wi-day-sleet-storm.svg create mode 100644 static/icons/svg/wi-day-sleet.svg create mode 100644 static/icons/svg/wi-day-snow-thunderstorm.svg create mode 100644 static/icons/svg/wi-day-snow-wind.svg create mode 100644 static/icons/svg/wi-day-snow.svg create mode 100644 static/icons/svg/wi-day-sprinkle.svg create mode 100644 static/icons/svg/wi-day-storm-showers.svg create mode 100644 static/icons/svg/wi-day-sunny-overcast.svg create mode 100644 static/icons/svg/wi-day-sunny.svg create mode 100644 static/icons/svg/wi-day-thunderstorm.svg create mode 100644 static/icons/svg/wi-day-windy.svg create mode 100644 static/icons/svg/wi-degrees.svg create mode 100644 static/icons/svg/wi-direction-down-left.svg create mode 100644 static/icons/svg/wi-direction-down-right.svg create mode 100644 static/icons/svg/wi-direction-down.svg create mode 100644 static/icons/svg/wi-direction-left.svg create mode 100644 static/icons/svg/wi-direction-right.svg create mode 100644 static/icons/svg/wi-direction-up-left.svg create mode 100644 static/icons/svg/wi-direction-up-right.svg create mode 100644 static/icons/svg/wi-direction-up.svg create mode 100644 static/icons/svg/wi-dust.svg create mode 100644 static/icons/svg/wi-earthquake.svg create mode 100644 static/icons/svg/wi-fahrenheit.svg create mode 100644 static/icons/svg/wi-fire.svg create mode 100644 static/icons/svg/wi-flood.svg create mode 100644 static/icons/svg/wi-fog.svg create mode 100644 static/icons/svg/wi-gale-warning.svg create mode 100644 static/icons/svg/wi-hail.svg create mode 100644 static/icons/svg/wi-horizon-alt.svg create mode 100644 static/icons/svg/wi-horizon.svg create mode 100644 static/icons/svg/wi-hot.svg create mode 100644 static/icons/svg/wi-humidity.svg create mode 100644 static/icons/svg/wi-hurricane-warning.svg create mode 100644 static/icons/svg/wi-hurricane.svg create mode 100644 static/icons/svg/wi-lightning.svg create mode 100644 static/icons/svg/wi-lunar-eclipse.svg create mode 100644 static/icons/svg/wi-meteor.svg create mode 100644 static/icons/svg/wi-moon-alt-first-quarter.svg create mode 100644 static/icons/svg/wi-moon-alt-full.svg create mode 100644 static/icons/svg/wi-moon-alt-new.svg create mode 100644 static/icons/svg/wi-moon-alt-third-quarter.svg create mode 100644 static/icons/svg/wi-moon-alt-waning-crescent-1.svg create mode 100644 static/icons/svg/wi-moon-alt-waning-crescent-2.svg create mode 100644 static/icons/svg/wi-moon-alt-waning-crescent-3.svg create mode 100644 static/icons/svg/wi-moon-alt-waning-crescent-4.svg create mode 100644 static/icons/svg/wi-moon-alt-waning-crescent-5.svg create mode 100644 static/icons/svg/wi-moon-alt-waning-crescent-6.svg create mode 100644 static/icons/svg/wi-moon-alt-waning-gibbous-1.svg create mode 100644 static/icons/svg/wi-moon-alt-waning-gibbous-2.svg create mode 100644 static/icons/svg/wi-moon-alt-waning-gibbous-3.svg create mode 100644 static/icons/svg/wi-moon-alt-waning-gibbous-4.svg create mode 100644 static/icons/svg/wi-moon-alt-waning-gibbous-5.svg create mode 100644 static/icons/svg/wi-moon-alt-waning-gibbous-6.svg create mode 100644 static/icons/svg/wi-moon-alt-waxing-crescent-1.svg create mode 100644 static/icons/svg/wi-moon-alt-waxing-crescent-2.svg create mode 100644 static/icons/svg/wi-moon-alt-waxing-crescent-3.svg create mode 100644 static/icons/svg/wi-moon-alt-waxing-crescent-4.svg create mode 100644 static/icons/svg/wi-moon-alt-waxing-crescent-5.svg create mode 100644 static/icons/svg/wi-moon-alt-waxing-crescent-6.svg create mode 100644 static/icons/svg/wi-moon-alt-waxing-gibbous-1.svg create mode 100644 static/icons/svg/wi-moon-alt-waxing-gibbous-2.svg create mode 100644 static/icons/svg/wi-moon-alt-waxing-gibbous-3.svg create mode 100644 static/icons/svg/wi-moon-alt-waxing-gibbous-4.svg create mode 100644 static/icons/svg/wi-moon-alt-waxing-gibbous-5.svg create mode 100644 static/icons/svg/wi-moon-alt-waxing-gibbous-6.svg create mode 100644 static/icons/svg/wi-moon-first-quarter.svg create mode 100644 static/icons/svg/wi-moon-full.svg create mode 100644 static/icons/svg/wi-moon-new.svg create mode 100644 static/icons/svg/wi-moon-third-quarter.svg create mode 100644 static/icons/svg/wi-moon-waning-crescent-1.svg create mode 100644 static/icons/svg/wi-moon-waning-crescent-2.svg create mode 100644 static/icons/svg/wi-moon-waning-crescent-3.svg create mode 100644 static/icons/svg/wi-moon-waning-crescent-4.svg create mode 100644 static/icons/svg/wi-moon-waning-crescent-5.svg create mode 100644 static/icons/svg/wi-moon-waning-crescent-6.svg create mode 100644 static/icons/svg/wi-moon-waning-gibbous-1.svg create mode 100644 static/icons/svg/wi-moon-waning-gibbous-2.svg create mode 100644 static/icons/svg/wi-moon-waning-gibbous-3.svg create mode 100644 static/icons/svg/wi-moon-waning-gibbous-4.svg create mode 100644 static/icons/svg/wi-moon-waning-gibbous-5.svg create mode 100644 static/icons/svg/wi-moon-waning-gibbous-6.svg create mode 100644 static/icons/svg/wi-moon-waxing-6.svg create mode 100644 static/icons/svg/wi-moon-waxing-crescent-1.svg create mode 100644 static/icons/svg/wi-moon-waxing-crescent-2.svg create mode 100644 static/icons/svg/wi-moon-waxing-crescent-3.svg create mode 100644 static/icons/svg/wi-moon-waxing-crescent-4.svg create mode 100644 static/icons/svg/wi-moon-waxing-crescent-5.svg create mode 100644 static/icons/svg/wi-moon-waxing-gibbous-1.svg create mode 100644 static/icons/svg/wi-moon-waxing-gibbous-2.svg create mode 100644 static/icons/svg/wi-moon-waxing-gibbous-3.svg create mode 100644 static/icons/svg/wi-moon-waxing-gibbous-4.svg create mode 100644 static/icons/svg/wi-moon-waxing-gibbous-5.svg create mode 100644 static/icons/svg/wi-moon-waxing-gibbous-6.svg create mode 100644 static/icons/svg/wi-moonrise.svg create mode 100644 static/icons/svg/wi-moonset.svg create mode 100644 static/icons/svg/wi-na.svg create mode 100644 static/icons/svg/wi-night-alt-cloudy-gusts.svg create mode 100644 static/icons/svg/wi-night-alt-cloudy-high.svg create mode 100644 static/icons/svg/wi-night-alt-cloudy-windy.svg create mode 100644 static/icons/svg/wi-night-alt-cloudy.svg create mode 100644 static/icons/svg/wi-night-alt-hail.svg create mode 100644 static/icons/svg/wi-night-alt-lightning.svg create mode 100644 static/icons/svg/wi-night-alt-partly-cloudy.svg create mode 100644 static/icons/svg/wi-night-alt-rain-mix.svg create mode 100644 static/icons/svg/wi-night-alt-rain-wind.svg create mode 100644 static/icons/svg/wi-night-alt-rain.svg create mode 100644 static/icons/svg/wi-night-alt-showers.svg create mode 100644 static/icons/svg/wi-night-alt-sleet-storm.svg create mode 100644 static/icons/svg/wi-night-alt-sleet.svg create mode 100644 static/icons/svg/wi-night-alt-snow-thunderstorm.svg create mode 100644 static/icons/svg/wi-night-alt-snow-wind.svg create mode 100644 static/icons/svg/wi-night-alt-snow.svg create mode 100644 static/icons/svg/wi-night-alt-sprinkle.svg create mode 100644 static/icons/svg/wi-night-alt-storm-showers.svg create mode 100644 static/icons/svg/wi-night-alt-thunderstorm.svg create mode 100644 static/icons/svg/wi-night-clear.svg create mode 100644 static/icons/svg/wi-night-cloudy-gusts.svg create mode 100644 static/icons/svg/wi-night-cloudy-high.svg create mode 100644 static/icons/svg/wi-night-cloudy-windy.svg create mode 100644 static/icons/svg/wi-night-cloudy.svg create mode 100644 static/icons/svg/wi-night-fog.svg create mode 100644 static/icons/svg/wi-night-hail.svg create mode 100644 static/icons/svg/wi-night-lightning.svg create mode 100644 static/icons/svg/wi-night-partly-cloudy.svg create mode 100644 static/icons/svg/wi-night-rain-mix.svg create mode 100644 static/icons/svg/wi-night-rain-wind.svg create mode 100644 static/icons/svg/wi-night-rain.svg create mode 100644 static/icons/svg/wi-night-showers.svg create mode 100644 static/icons/svg/wi-night-sleet-storm.svg create mode 100644 static/icons/svg/wi-night-sleet.svg create mode 100644 static/icons/svg/wi-night-snow-thunderstorm.svg create mode 100644 static/icons/svg/wi-night-snow-wind.svg create mode 100644 static/icons/svg/wi-night-snow.svg create mode 100644 static/icons/svg/wi-night-sprinkle.svg create mode 100644 static/icons/svg/wi-night-storm-showers.svg create mode 100644 static/icons/svg/wi-night-thunderstorm.svg create mode 100644 static/icons/svg/wi-rain-mix.svg create mode 100644 static/icons/svg/wi-rain-wind.svg create mode 100644 static/icons/svg/wi-rain.svg create mode 100644 static/icons/svg/wi-raindrop.svg create mode 100644 static/icons/svg/wi-raindrops.svg create mode 100644 static/icons/svg/wi-refresh-alt.svg create mode 100644 static/icons/svg/wi-refresh.svg create mode 100644 static/icons/svg/wi-sandstorm.svg create mode 100644 static/icons/svg/wi-showers.svg create mode 100644 static/icons/svg/wi-sleet.svg create mode 100644 static/icons/svg/wi-small-craft-advisory.svg create mode 100644 static/icons/svg/wi-smog.svg create mode 100644 static/icons/svg/wi-smoke.svg create mode 100644 static/icons/svg/wi-snow-wind.svg create mode 100644 static/icons/svg/wi-snow.svg create mode 100644 static/icons/svg/wi-snowflake-cold.svg create mode 100644 static/icons/svg/wi-solar-eclipse.svg create mode 100644 static/icons/svg/wi-sprinkle.svg create mode 100644 static/icons/svg/wi-stars.svg create mode 100644 static/icons/svg/wi-storm-showers.svg create mode 100644 static/icons/svg/wi-storm-warning.svg create mode 100644 static/icons/svg/wi-strong-wind.svg create mode 100644 static/icons/svg/wi-sunrise.svg create mode 100644 static/icons/svg/wi-sunset.svg create mode 100644 static/icons/svg/wi-thermometer-exterior.svg create mode 100644 static/icons/svg/wi-thermometer-internal.svg create mode 100644 static/icons/svg/wi-thermometer.svg create mode 100644 static/icons/svg/wi-thunderstorm.svg create mode 100644 static/icons/svg/wi-time-1.svg create mode 100644 static/icons/svg/wi-time-10.svg create mode 100644 static/icons/svg/wi-time-11.svg create mode 100644 static/icons/svg/wi-time-12.svg create mode 100644 static/icons/svg/wi-time-2.svg create mode 100644 static/icons/svg/wi-time-3.svg create mode 100644 static/icons/svg/wi-time-4.svg create mode 100644 static/icons/svg/wi-time-5.svg create mode 100644 static/icons/svg/wi-time-6.svg create mode 100644 static/icons/svg/wi-time-7.svg create mode 100644 static/icons/svg/wi-time-8.svg create mode 100644 static/icons/svg/wi-time-9.svg create mode 100644 static/icons/svg/wi-tornado.svg create mode 100644 static/icons/svg/wi-train.svg create mode 100644 static/icons/svg/wi-tsunami.svg create mode 100644 static/icons/svg/wi-umbrella.svg create mode 100644 static/icons/svg/wi-volcano.svg create mode 100644 static/icons/svg/wi-wind-beaufort-0.svg create mode 100644 static/icons/svg/wi-wind-beaufort-1.svg create mode 100644 static/icons/svg/wi-wind-beaufort-10.svg create mode 100644 static/icons/svg/wi-wind-beaufort-11.svg create mode 100644 static/icons/svg/wi-wind-beaufort-12.svg create mode 100644 static/icons/svg/wi-wind-beaufort-2.svg create mode 100644 static/icons/svg/wi-wind-beaufort-3.svg create mode 100644 static/icons/svg/wi-wind-beaufort-4.svg create mode 100644 static/icons/svg/wi-wind-beaufort-5.svg create mode 100644 static/icons/svg/wi-wind-beaufort-6.svg create mode 100644 static/icons/svg/wi-wind-beaufort-7.svg create mode 100644 static/icons/svg/wi-wind-beaufort-8.svg create mode 100644 static/icons/svg/wi-wind-beaufort-9.svg create mode 100644 static/icons/svg/wi-wind-deg.svg create mode 100644 static/icons/svg/wi-windy.svg delete mode 100644 templates/daily.html delete mode 100644 templates/hourly.html create mode 100644 templates/weather.html diff --git a/app.py b/app.py index e929032..72e74ca 100644 --- a/app.py +++ b/app.py @@ -10,36 +10,22 @@ def index(): form = forms.WeatherForm() if form.validate_on_submit(): location = form.location.data - days = form.days.data - forecast_type = form.forecast_type.data - print(location) - print(days) - print(forecast_type) - if forecast_type == 'hourly': - return flask.redirect(flask.url_for('hourly', location=location, days=days)) - elif forecast_type == 'daily': - return flask.redirect(flask.url_for('daily', location=location, days=days)) - + return flask.redirect(flask.url_for('weather', location=location)) return flask.render_template("index.html", form=form) -@app.route('/hourly') -def hourly(): - location = flask.request.args.get('location', type=str) - days = flask.request.args.get('days', type=int) - latitude, longitude = library.get_lat_long(location) - grid_data = library.get_grid_data(latitude, longitude) - raw_data = library.get_raw_data(grid_data["grid_id"], grid_data["grid_x"], grid_data["grid_y"]) - data = library.hourly_forecast(raw_data, days) - return flask.render_template("hourly.html", data=data) - -@app.route('/daily') -def daily(): +@app.route('/weather', methods=('GET','POST')) +def weather(): location = flask.request.args.get('location', type=str) - days = flask.request.args.get('days', type=int) latitude, longitude = library.get_lat_long(location) - grid_data = library.get_grid_data(latitude, longitude) - raw_data = library.get_raw_data(grid_data["grid_id"], grid_data["grid_x"], grid_data["grid_y"]) - raw_forecast = library.get_raw_forecast(grid_data["grid_id"], grid_data["grid_x"], grid_data["grid_y"]) - data = library.daily_forecast(raw_data, raw_forecast, days) - return flask.render_template("daily.html", data=data) + data = library.get_data(latitude, longitude) + hour = library.get_current_rounded_time(data["timezone"]).hour + form = forms.WeatherForm() + if form.validate_on_submit(): + location = form.location.data + return flask.redirect(flask.url_for('weather', location=location)) + return flask.render_template("weather.html", data=data, form=form, weather_codes=library.weather_codes, + weather_icons=library.weather_icons, hour=hour) + +if __name__ == "__main__": + app.run() diff --git a/forms.py b/forms.py index 804a0f2..e31befd 100644 --- a/forms.py +++ b/forms.py @@ -1,8 +1,6 @@ import flask_wtf, wtforms class WeatherForm(flask_wtf.FlaskForm): - location = wtforms.StringField("Location", validators=[wtforms.validators.DataRequired()]) - days = wtforms.SelectField("Days", choices=[('1','1'),('2','2'),('3','3'),('4','4'),('5','5'),('6','6'),('7','7')]) - forecast_type = wtforms.RadioField("Type", choices=[('hourly', 'Hourly Forecast'),('daily','Daily Forecast')], default="hourly") + location = wtforms.StringField("Location") submit = wtforms.SubmitField("Submit") diff --git a/library.py b/library.py index 0d490a1..5c17e96 100644 --- a/library.py +++ b/library.py @@ -2,59 +2,68 @@ import datetime, requests, json, pytz, sys from geopy.geocoders import Nominatim, GeoNames +weather_codes = {0:"Clear Sky", 1:"Mainly Clear",2:"Partly Cloudy",3:"Overcast",45:"Fog",48:"Fog",51:"Light Drizzle",\ + 53:"Moderate Drizzle",55:"Dense Drizzle",56:"Light Freezing Drizzle",57:"Freezing Drizzle",\ + 61:"Light Rain",63:"Moderate Rain",65:"Heavy Rain",66:"Light Freezing Rain",67:"Freezing Rain",\ + 71:"Light Snowfall",73:"Moderate Snowfall",75:"Heavy Snowfall",77:"Snow Grains",80:"Slight Rain Showers",\ + 81:"Moderate Rain Showers",82:"Heavy Rain Showers",85:"Slight Snow Showers",86:"Heavy Snow Showers",\ + 95:"Thunderstorm",96:"Strong Thunderstrom",99:"Heavy Thunderstrom"} + +weather_icons = {0:('wi-day-sunny','wi-night-clear'), 1:('wi-day-sunny','wi-night-clear'), 2:('wi-cloudy','wi-night-partly-cloudy'),\ + 3:('wi-day-sunny-overcast','wi-night-cloudy'), 45:('wi-day-fog','wi-night-fog'), 48:('wi-day-fog','wi-night-fog'), \ + 51:('wi-day-rain','wi-night-rain'),53:('wi-day-rain','wi-night-rain'),55:('wi-day-rain','wi-night-rain'),\ + 56:('wi-day-rain','wi-night-rain'),57:('wi-day-rain','wi-night-rain'),61:('wi-day-rain','wi-night-rain'),\ + 63:('wi-day-rain','wi-night-rain'),65:('wi-day-rain','wi-night-rain'),66:('wi-day-rain','wi-night-rain'),\ + 67:('wi-day-rain','wi-night-rain'),71:('wi-day-snow','wi-night-snow'),73:('wi-day-snow','wi-night-snow'),\ + 71:('wi-day-snow','wi-night-snow'),75:('wi-day-snow','wi-night-snow'),77:('wi-day-snow','wi-night-snow'),\ + 80:('wi-day-showers','wi-night-showers'),81:('wi-day-showers','wi-night-showers'),82:('wi-day-showers','wi-night-showers'),\ + 85:('wi-day-snow','wi-night-snow'),86:('wi-day-snow','wi-night-snow'),95:('wi-day-storm-showers','wi-night-storm-showers'),\ + 96:('wi-day-storm-showers','wi-night-storm-showers'),99:('wi-day-storm-showers','wi-night-storm-showers')} + def get_lat_long(location): # Converts a location into latitude and longitude - geolocator = Nominatim(user_agent="pywttr") - location = geolocator.geocode(location) - return location.latitude, location.longitude + url = f"https://geocoding-api.open-meteo.com/v1/search?name={location}&count=1&language=en&format=json" + headers = {"User-Agent": "pywttr 0.1"} + data = requests.get(url, headers=headers).json() + latitude = data["results"][0]["latitude"] + longitude = data["results"][0]["longitude"] + return latitude, longitude -def get_time_zone(latitude, longitude): - #TODO - pass +def get_data(latitude, longitude): + headers = {"User-Agent": "pywttr 0.1"} + now = datetime.datetime.now() + now_str = now.strftime("%Y-%m-%d") + end_str = (now + datetime.timedelta(days=7)).strftime("%Y-%m-%d") -def get_grid_data(latitude, longitude): - # Returns id,x,y for a given latitude and longitude - grid_data = json.loads(requests.get(f"https://api.weather.gov/points/{latitude},{longitude}").text) - grid_id = grid_data["properties"]["gridId"] - grid_x = grid_data["properties"]["gridX"] - grid_y = grid_data["properties"]["gridY"] - return {"grid_id": grid_id, "grid_x": grid_x, "grid_y":grid_y} + url_base = f"https://api.open-meteo.com/v1/forecast?latitude={latitude}&longitude={longitude}" + url_weather_params = "¤t_weather=true&hourly=temperature_2m&hourly=relativehumidity_2m&hourly=apparent_temperature&hourly=precipitation_probability&hourly=precipitation&hourly=weathercode&hourly=windspeed_10m&hourly=winddirection_10m&daily=weathercode&daily=temperature_2m_max&daily=temperature_2m_min&daily=sunrise&daily=sunset&daily=precipitation_sum&daily=precipitation_probability_max&temperature_unit=fahrenheit&windspeed_unit=mph&precipitation_unit=inch&timeformat=iso8601&past_days=0&forecast_days=7" + url_date_time = f"&start_date={now_str}&end_date={end_str}&timezone=auto" + url = url_base + url_weather_params + url_date_time + data = requests.get(url, headers=headers).json() + for i in range(len(data["hourly"]["time"])): + data["hourly"]["time"][i] = datetime.datetime.strptime(data["hourly"]["time"][i], '%Y-%m-%dT%H:%M').strftime('%a %x %I:%M %p') + for i in range(len(data["daily"]["time"])): + data["daily"]["time"][i] = datetime.datetime.strptime(data["daily"]["time"][i], '%Y-%m-%d').strftime('%a %x') + for i in range(len(data["daily"]["sunrise"])): + data["daily"]["sunrise"][i] = datetime.datetime.strptime(data["daily"]["sunrise"][i], '%Y-%m-%dT%H:%M').strftime('%I:%M %p') + for i in range(len(data["daily"]["sunset"])): + data["daily"]["sunset"][i] = datetime.datetime.strptime(data["daily"]["sunset"][i], '%Y-%m-%dT%H:%M').strftime('%I:%M %p') -def get_raw_data(grid_id, grid_x, grid_y): - headers = {"User-Agent": "pywttr 0.1"} - raw_data = json.loads(requests.get(f"https://api.weather.gov/gridpoints/{grid_id}/{grid_x},{grid_y}", headers=headers).text) - return raw_data + data["current_weather"]["time"] = datetime.datetime.strptime(data["current_weather"]["time"], '%Y-%m-%dT%H:%M').strftime('%a %x %I:%M %p') - -def get_raw_forecast(grid_id, grid_x, grid_y): - headers = {"User-Agent": "pywttr 0.1"} - raw_data = json.loads(requests.get(f"https://api.weather.gov/gridpoints/{grid_id}/{grid_x},{grid_y}/forecast", headers=headers).text) - return raw_data + return data -def get_current_rounded_time(): +def get_current_rounded_time(tz_str): # Gets current time rounded down to the hour - - tz = pytz.timezone("America/New_York") #temp + tz = pytz.timezone(tz_str) cur_time = datetime.datetime.now(tz=tz) cur_time_rounded = cur_time.replace(second=0, microsecond=0, minute=0, hour=cur_time.hour) return cur_time_rounded -def set_timezone(values): - # Takes a list of weather data values - # and converts all times to proper timezone - - ret = [] - tz = pytz.timezone("America/New_York") #temp - for val in values: - val["time"] = val["time"].astimezone(tz) - ret.append(val) - return ret - - def make_current(values): # Takes a list of weather data values # and removes items from before the current time @@ -67,349 +76,6 @@ def make_current(values): return ret -def fill_gaps(values): - # Takes a list of weather data values - # and fills gaps left by duration periods of longer - # than 1 hour - ret = [] - for val in values: - ret.append(val) - duration_hours = int((val["duration"].seconds / 3600) + (val["duration"].days * 24)) - if duration_hours > 1: - for i in range(1, duration_hours): - copy = val.copy() - copy["time"] = val["time"] + datetime.timedelta(hours=i) - copy["duration"] = datetime.timedelta(hours=1) - ret.append(copy) - return ret - - -def normalize(values): - values = set_timezone(values) - values = make_current(values) - values = fill_gaps(values) - return values - - -def celcius_to_fahrenheit(celcius): - fahrenheit = int(celcius * 9/5 + 32) - return fahrenheit - - -def parse_duration(duration_str): - #Parses time duration string and returns timedelta - - duration_str = duration_str[1:] # strip off leading P - period_str, time_str = duration_str.split('T') - if len(period_str) > 0: - days = int(period_str[0]) - else: - days = 0 - hours = int(time_str[0:len(time_str)-1]) - delta = datetime.timedelta(hours=hours, days=days) - return delta - - -def get_daily_highs(raw_data): - daily_highs_raw = raw_data["properties"]["maxTemperature"]["values"] - - daily_highs = [] - - for high in daily_highs_raw: - high_celc = high["value"] - high_fahr = celcius_to_fahrenheit(high_celc) - - time_str, duration_str = high["validTime"].split('/') - time = datetime.datetime.strptime(time_str, "%Y-%m-%dT%H:%M:%S%z") - duration = parse_duration(duration_str) - daily_highs.append({"time":time,"duration":duration,"high_celc":high_celc,"high_fahr":high_fahr}) - - return daily_highs - - -def get_daily_lows(raw_data): - daily_lows_raw = raw_data["properties"]["minTemperature"]["values"] - - daily_lows = [] - - for low in daily_lows_raw: - low_celc = low["value"] - low_fahr = celcius_to_fahrenheit(low_celc) - time_str, duration_str = low["validTime"].split('/') - time = datetime.datetime.strptime(time_str, "%Y-%m-%dT%H:%M:%S%z") - duration = parse_duration(duration_str) - daily_lows.append({"time":time,"duration":duration,"low_celc":low_celc,"low_fahr":low_fahr}) - - return daily_lows - - -def get_daily_forecast(raw_data): - daily_forecast_raw = raw_data["properties"]["periods"] - - daily_forecast = [] - for point in daily_forecast_raw: - time_str = point["startTime"] - time = datetime.datetime.strptime(time_str, "%Y-%m-%dT%H:%M:%S%z") - daily_forecast.append({"time":time, "short_forecast":point["shortForecast"], "detailed_forecast":point["detailedForecast"]}) - return make_current(set_timezone(daily_forecast)) - - -def get_temperature(raw_data): - raw_values = raw_data["properties"]["temperature"]["values"] - ret = [] - - for val in raw_values: - val_celc = round(val["value"]) - val_fahr = round(celcius_to_fahrenheit(val_celc)) - time_str, duration_str = val["validTime"].split('/') - time = datetime.datetime.strptime(time_str, "%Y-%m-%dT%H:%M:%S%z") - duration = parse_duration(duration_str) - ret.append({"time":time,"duration":duration,"value_celc":val_celc,"value_fahr":val_fahr}) - - return normalize(ret) - - -def get_apparent_temperature(raw_data): - raw_values = raw_data["properties"]["apparentTemperature"]["values"] - ret = [] - - - for val in raw_values: - val_celc = round(val["value"]) - val_fahr = round(celcius_to_fahrenheit(val_celc)) - time_str, duration_str = val["validTime"].split('/') - time = datetime.datetime.strptime(time_str, "%Y-%m-%dT%H:%M:%S%z") - duration = parse_duration(duration_str) - ret.append({"time":time,"duration":duration,"value_celc":val_celc,"value_fahr":val_far}) - - return normalize(ret) - - -def get_humidity(raw_data): - raw_values = raw_data["properties"]["relativeHumidity"]["values"] - ret = [] - - for val in raw_values: - time_str, duration_str = val["validTime"].split('/') - time = datetime.datetime.strptime(time_str, "%Y-%m-%dT%H:%M:%S%z") - duration = parse_duration(duration_str) - ret.append({"time":time,"duration":duration,"value":round(val["value"])}) - - return normalize(ret) - - -def get_wind_chill(raw_data): - raw_values = raw_data["properties"]["windChill"]["values"] - ret = [] - - for val in raw_values: - val_celc = round(val["value"]) - val_fahr = round(celcius_to_fahrenheit(val_celc)) - time_str, duration_str = val["validTime"].split('/') - time = datetime.datetime.strptime(time_str, "%Y-%m-%dT%H:%M:%S%z") - duration = parse_duration(duration_str) - ret.append({"time":time,"duration":duration,"value_celc":val_celc,"value_fahr":val_fahr}) - - return normalize(ret) - - -def get_wind_speed(raw_data): - raw_values = raw_data["properties"]["windSpeed"]["values"] - ret = [] - - for val in raw_values: - time_str, duration_str = val["validTime"].split('/') - time = datetime.datetime.strptime(time_str, "%Y-%m-%dT%H:%M:%S%z") - duration = parse_duration(duration_str) - ret.append({"time":time,"duration":duration,"value":round(val["value"])}) - - return normalize(ret) - - -def get_wind_gust(raw_data): - raw_values = raw_data["properties"]["windGust"]["values"] - ret = [] - - for val in raw_values: - time_str, duration_str = val["validTime"].split('/') - time = datetime.datetime.strptime(time_str, "%Y-%m-%dT%H:%M:%S%z") - duration = parse_duration(duration_str) - ret.append({"time":time,"duration":duration,"value":round(val["value"])}) - - return normalize(ret) - - -def get_precip_chance(raw_data): - raw_values = raw_data["properties"]["probabilityOfPrecipitation"]["values"] - ret = [] - - for val in raw_values: - time_str, duration_str = val["validTime"].split('/') - time = datetime.datetime.strptime(time_str, "%Y-%m-%dT%H:%M:%S%z") - duration = parse_duration(duration_str) - ret.append({"time":time,"duration":duration,"value":round(val["value"])}) - - return normalize(ret) - - -def get_precip_amount(raw_data): - raw_values = raw_data["properties"]["quantitativePrecipitation"]["values"] - ret = [] - - for val in raw_values: - time_str, duration_str = val["validTime"].split('/') - time = datetime.datetime.strptime(time_str, "%Y-%m-%dT%H:%M:%S%z") - duration = parse_duration(duration_str) - ret.append({"time":time,"duration":duration,"value":round(val["value"])}) - - return normalize(ret) - - -def get_snowfall_amount(raw_data): - raw_values = raw_data["properties"]["snowfallAmount"]["values"] - ret = [] - - for val in raw_values: - time_str, duration_str = val["validTime"].split('/') - time = datetime.datetime.strptime(time_str, "%Y-%m-%dT%H:%M:%S%z") - duration = parse_duration(duration_str) - ret.append({"time":time,"duration":duration,"value":round(val["value"])}) - - return normalize(ret) - - -def get_snow_level(raw_data): - raw_values = raw_data["properties"]["snowLevel"]["values"] - ret = [] - - for val in raw_values: - time_str, duration_str = val["validTime"].split('/') - time = datetime.datetime.strptime(time_str, "%Y-%m-%dT%H:%M:%S%z") - duration = parse_duration(duration_str) - ret.append({"time":time,"duration":duration,"value":round(val["value"])}) - - return normalize(ret) - - -def get_visibility(raw_data): - raw_values = raw_data["properties"]["visibility"]["values"] - ret = [] - - for val in raw_values: - time_str, duration_str = val["validTime"].split('/') - time = datetime.datetime.strptime(time_str, "%Y-%m-%dT%H:%M:%S%z") - duration = parse_duration(duration_str) - ret.append({"time":time,"duration":duration,"value":round(val["value"])}) - - return normalize(ret) - - -def get_wind_direction(raw_data): - raw_values = raw_data["properties"]["windDirection"]["values"] - ret = [] - - for val in raw_values: - time_str, duration_str = val["validTime"].split('/') - time = datetime.datetime.strptime(time_str, "%Y-%m-%dT%H:%M:%S%z") - duration = parse_duration(duration_str) - - def degrees_to_cardinal(d): - dirs = ['N', 'NNE', 'NE', 'ENE', 'E', 'ESE', 'SE', 'SSE', 'S', 'SSW', 'SW', 'WSW', 'W', 'WNW', 'NW', 'NNW'] - ix = round(d / (360. / len(dirs))) - return dirs[ix % len(dirs)] - - direction_str = degrees_to_cardinal(val["value"]) - - ret.append({"time":time,"duration":duration,"value":direction_str}) - - return normalize(ret) - - -def get_dewpoint(raw_data): - raw_values = raw_data["properties"]["dewpoint"]["values"] - ret = [] - - for val in raw_values: - val_celc = round(val["value"]) - val_fahr = round(celcius_to_fahrenheit(val_celc)) - time_str, duration_str = val["validTime"].split('/') - time = datetime.datetime.strptime(time_str, "%Y-%m-%dT%H:%M:%S%z") - duration = parse_duration(duration_str) - ret.append({"time":time,"duration":duration,"value_celc":val_celc,"value_fahr":val_fahr}) - - return normalize(ret) - - -def get_hourly_data(raw_data, end_time): - temps = get_temperature(raw_data) - humidity = get_humidity(raw_data) - precip_chance = get_precip_chance(raw_data) - precip_amount = get_precip_amount(raw_data) - wind_speed = get_wind_speed(raw_data) - wind_direction = get_wind_direction(raw_data) - ret_list = [] - i = 0 - while i < len(temps) and temps[i]["time"] < end_time: - if i >= len(temps): - temps.append({"value":"N/A"}) - if i >= len(humidity): - humidity.append({"value":"N/A"}) - if i >= len(precip_chance): - precip_chance.append({"value":"N/A"}) - if i >= len(precip_amount): - precip_amount.append({"value":"N/A"}) - if i >= len(wind_speed): - wind_speed.append({"value":"N/A"}) - if i >= len(wind_direction): - wind_direction.append({"value":"N/A"}) - - val_dict = { "time": temps[i]["time"], - "temp": temps[i]["value_fahr"], - "humidity": humidity[i]["value"], - "precip_chance": precip_chance[i]["value"], - "precip_amount": precip_amount[i]["value"], - "wind_speed": wind_speed[i]["value"], - "wind_direction": wind_direction[i]["value"] } - ret_list.append(val_dict) - i+=1 - - return ret_list - - -def get_daily_data(raw_data, raw_forecast, end_time): - daily_highs = get_daily_highs(raw_data) - daily_lows = get_daily_lows(raw_data) - daily_forecasts = get_daily_forecast(raw_forecast) - ret_list = [] - i = 0 - while i < len(daily_highs) and daily_highs[i]["time"] < end_time: - val_dict = { "time": daily_highs[i]["time"], - "high": daily_highs[i]["high_fahr"], - "low": daily_lows[i]["low_fahr"], - "short_forecast_am": daily_forecasts[i]["short_forecast"], - "detailed_forecast_am": daily_forecasts[i]["detailed_forecast"], - "short_forecast_pm": daily_forecasts[i+1]["short_forecast"], - "detailed_forecast_pm": daily_forecasts[i+1]["detailed_forecast"] } - ret_list.append(val_dict) - i+=1 - return ret_list - - -def hourly_forecast(raw_data, days): - init_time = get_current_rounded_time() - if days > 0: - delta = datetime.timedelta(days=days) - else: - delta = datetime.timedelta(hours=(24-init_time.hour)) - end_time = init_time + delta - return get_hourly_data(raw_data, end_time) - +def translate_weather_code(weather_code:int): + return weather_codes[weather_code] -def daily_forecast(raw_data, raw_forecast, days): - init_time = get_current_rounded_time() - if days > 0: - delta = datetime.timedelta(days=days) - else: - delta = datetime.timedelta(days=5) - end_time = init_time + delta - return get_daily_data(raw_data, raw_forecast, end_time) diff --git a/static/icons/backup/celsius.svg b/static/icons/backup/celsius.svg new file mode 100644 index 0000000..57db2e9 --- /dev/null +++ b/static/icons/backup/celsius.svg @@ -0,0 +1 @@ +404 \ No newline at end of file diff --git a/static/icons/backup/fahrenheit.svg b/static/icons/backup/fahrenheit.svg new file mode 100644 index 0000000..9e21987 --- /dev/null +++ b/static/icons/backup/fahrenheit.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/icons/backup/fog.svg b/static/icons/backup/fog.svg new file mode 100644 index 0000000..c66e82d --- /dev/null +++ b/static/icons/backup/fog.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/icons/backup/hail.svg b/static/icons/backup/hail.svg new file mode 100644 index 0000000..d8dfb7f --- /dev/null +++ b/static/icons/backup/hail.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/icons/backup/hazy.svg b/static/icons/backup/hazy.svg new file mode 100644 index 0000000..44678b2 --- /dev/null +++ b/static/icons/backup/hazy.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/icons/backup/humidity.svg b/static/icons/backup/humidity.svg new file mode 100644 index 0000000..3835684 --- /dev/null +++ b/static/icons/backup/humidity.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/icons/backup/lightning-rainy.svg b/static/icons/backup/lightning-rainy.svg new file mode 100644 index 0000000..45cd3e0 --- /dev/null +++ b/static/icons/backup/lightning-rainy.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/icons/backup/lightning.svg b/static/icons/backup/lightning.svg new file mode 100644 index 0000000..2ee1433 --- /dev/null +++ b/static/icons/backup/lightning.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/icons/backup/night-clear.svg b/static/icons/backup/night-clear.svg new file mode 100644 index 0000000..ee464aa --- /dev/null +++ b/static/icons/backup/night-clear.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/icons/backup/night-partly-cloudy.svg b/static/icons/backup/night-partly-cloudy.svg new file mode 100644 index 0000000..4f00227 --- /dev/null +++ b/static/icons/backup/night-partly-cloudy.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/icons/backup/partly-cloudy.svg b/static/icons/backup/partly-cloudy.svg new file mode 100644 index 0000000..eaf9db4 --- /dev/null +++ b/static/icons/backup/partly-cloudy.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/icons/backup/partly-rainy.svg b/static/icons/backup/partly-rainy.svg new file mode 100644 index 0000000..ef65f20 --- /dev/null +++ b/static/icons/backup/partly-rainy.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/icons/backup/partly-snowy-rainy.svg b/static/icons/backup/partly-snowy-rainy.svg new file mode 100644 index 0000000..1138075 --- /dev/null +++ b/static/icons/backup/partly-snowy-rainy.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/icons/backup/pouring.svg b/static/icons/backup/pouring.svg new file mode 100644 index 0000000..5fc77b4 --- /dev/null +++ b/static/icons/backup/pouring.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/icons/backup/snow.svg b/static/icons/backup/snow.svg new file mode 100644 index 0000000..f52b984 --- /dev/null +++ b/static/icons/backup/snow.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/icons/backup/snowy-heavy.svg b/static/icons/backup/snowy-heavy.svg new file mode 100644 index 0000000..4602c8c --- /dev/null +++ b/static/icons/backup/snowy-heavy.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/icons/backup/snowy.svg b/static/icons/backup/snowy.svg new file mode 100644 index 0000000..5fc77b4 --- /dev/null +++ b/static/icons/backup/snowy.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/icons/backup/sunny.svg b/static/icons/backup/sunny.svg new file mode 100644 index 0000000..d2e94e4 --- /dev/null +++ b/static/icons/backup/sunny.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/icons/backup/sunrise.svg b/static/icons/backup/sunrise.svg new file mode 100644 index 0000000..c831541 --- /dev/null +++ b/static/icons/backup/sunrise.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/icons/backup/sunset.svg b/static/icons/backup/sunset.svg new file mode 100644 index 0000000..207aa1e --- /dev/null +++ b/static/icons/backup/sunset.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/icons/backup/thermometer.svg b/static/icons/backup/thermometer.svg new file mode 100644 index 0000000..0a332bd --- /dev/null +++ b/static/icons/backup/thermometer.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/icons/backup/water-percent.svg b/static/icons/backup/water-percent.svg new file mode 100644 index 0000000..9e4f40c --- /dev/null +++ b/static/icons/backup/water-percent.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/icons/backup/windy.svg b/static/icons/backup/windy.svg new file mode 100644 index 0000000..8b38bdc --- /dev/null +++ b/static/icons/backup/windy.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/icons/clock.svg b/static/icons/clock.svg new file mode 100644 index 0000000..56c6b94 --- /dev/null +++ b/static/icons/clock.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/icons/directions/east.svg b/static/icons/directions/east.svg new file mode 100644 index 0000000..e708757 --- /dev/null +++ b/static/icons/directions/east.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/icons/directions/north-east.svg b/static/icons/directions/north-east.svg new file mode 100644 index 0000000..a5b842c --- /dev/null +++ b/static/icons/directions/north-east.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/icons/directions/north-west.svg b/static/icons/directions/north-west.svg new file mode 100644 index 0000000..e18211c --- /dev/null +++ b/static/icons/directions/north-west.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/icons/directions/north.svg b/static/icons/directions/north.svg new file mode 100644 index 0000000..cb15d38 --- /dev/null +++ b/static/icons/directions/north.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/icons/directions/south-east.svg b/static/icons/directions/south-east.svg new file mode 100644 index 0000000..b8fb1c9 --- /dev/null +++ b/static/icons/directions/south-east.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/icons/directions/south-west.svg b/static/icons/directions/south-west.svg new file mode 100644 index 0000000..dba0fe1 --- /dev/null +++ b/static/icons/directions/south-west.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/icons/directions/south.svg b/static/icons/directions/south.svg new file mode 100644 index 0000000..4be2792 --- /dev/null +++ b/static/icons/directions/south.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/icons/directions/west.svg b/static/icons/directions/west.svg new file mode 100644 index 0000000..4de4b71 --- /dev/null +++ b/static/icons/directions/west.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/icons/svg/wi-alien.svg b/static/icons/svg/wi-alien.svg new file mode 100644 index 0000000..e9c0226 --- /dev/null +++ b/static/icons/svg/wi-alien.svg @@ -0,0 +1,16 @@ + + + + + diff --git a/static/icons/svg/wi-barometer.svg b/static/icons/svg/wi-barometer.svg new file mode 100644 index 0000000..ced7e29 --- /dev/null +++ b/static/icons/svg/wi-barometer.svg @@ -0,0 +1,15 @@ + + + + + diff --git a/static/icons/svg/wi-celsius.svg b/static/icons/svg/wi-celsius.svg new file mode 100644 index 0000000..31dc639 --- /dev/null +++ b/static/icons/svg/wi-celsius.svg @@ -0,0 +1,18 @@ + + + + + diff --git a/static/icons/svg/wi-cloud-down.svg b/static/icons/svg/wi-cloud-down.svg new file mode 100644 index 0000000..dcd6678 --- /dev/null +++ b/static/icons/svg/wi-cloud-down.svg @@ -0,0 +1,18 @@ + + + + + diff --git a/static/icons/svg/wi-cloud-refresh.svg b/static/icons/svg/wi-cloud-refresh.svg new file mode 100644 index 0000000..3f3888f --- /dev/null +++ b/static/icons/svg/wi-cloud-refresh.svg @@ -0,0 +1,21 @@ + + + + + diff --git a/static/icons/svg/wi-cloud-up.svg b/static/icons/svg/wi-cloud-up.svg new file mode 100644 index 0000000..bff0317 --- /dev/null +++ b/static/icons/svg/wi-cloud-up.svg @@ -0,0 +1,18 @@ + + + + + diff --git a/static/icons/svg/wi-cloud.svg b/static/icons/svg/wi-cloud.svg new file mode 100644 index 0000000..fa77599 --- /dev/null +++ b/static/icons/svg/wi-cloud.svg @@ -0,0 +1,13 @@ + + + + + diff --git a/static/icons/svg/wi-cloudy-gusts.svg b/static/icons/svg/wi-cloudy-gusts.svg new file mode 100644 index 0000000..4300a1c --- /dev/null +++ b/static/icons/svg/wi-cloudy-gusts.svg @@ -0,0 +1,22 @@ + + + + + diff --git a/static/icons/svg/wi-cloudy-windy.svg b/static/icons/svg/wi-cloudy-windy.svg new file mode 100644 index 0000000..013929c --- /dev/null +++ b/static/icons/svg/wi-cloudy-windy.svg @@ -0,0 +1,19 @@ + + + + + diff --git a/static/icons/svg/wi-cloudy.svg b/static/icons/svg/wi-cloudy.svg new file mode 100644 index 0000000..c3eaf41 --- /dev/null +++ b/static/icons/svg/wi-cloudy.svg @@ -0,0 +1,18 @@ + + + + + diff --git a/static/icons/svg/wi-day-cloudy-gusts.svg b/static/icons/svg/wi-day-cloudy-gusts.svg new file mode 100644 index 0000000..287acc9 --- /dev/null +++ b/static/icons/svg/wi-day-cloudy-gusts.svg @@ -0,0 +1,35 @@ + + + + + diff --git a/static/icons/svg/wi-day-cloudy-high.svg b/static/icons/svg/wi-day-cloudy-high.svg new file mode 100644 index 0000000..81649a0 --- /dev/null +++ b/static/icons/svg/wi-day-cloudy-high.svg @@ -0,0 +1,26 @@ + + + + + diff --git a/static/icons/svg/wi-day-cloudy-windy.svg b/static/icons/svg/wi-day-cloudy-windy.svg new file mode 100644 index 0000000..d1a49bf --- /dev/null +++ b/static/icons/svg/wi-day-cloudy-windy.svg @@ -0,0 +1,33 @@ + + + + + diff --git a/static/icons/svg/wi-day-cloudy.svg b/static/icons/svg/wi-day-cloudy.svg new file mode 100644 index 0000000..cf63543 --- /dev/null +++ b/static/icons/svg/wi-day-cloudy.svg @@ -0,0 +1,26 @@ + + + + + diff --git a/static/icons/svg/wi-day-fog.svg b/static/icons/svg/wi-day-fog.svg new file mode 100644 index 0000000..3da78ca --- /dev/null +++ b/static/icons/svg/wi-day-fog.svg @@ -0,0 +1,31 @@ + + + + + diff --git a/static/icons/svg/wi-day-hail.svg b/static/icons/svg/wi-day-hail.svg new file mode 100644 index 0000000..b813a6f --- /dev/null +++ b/static/icons/svg/wi-day-hail.svg @@ -0,0 +1,42 @@ + + + + + diff --git a/static/icons/svg/wi-day-haze.svg b/static/icons/svg/wi-day-haze.svg new file mode 100644 index 0000000..e19bf13 --- /dev/null +++ b/static/icons/svg/wi-day-haze.svg @@ -0,0 +1,33 @@ + + + + + diff --git a/static/icons/svg/wi-day-light-wind.svg b/static/icons/svg/wi-day-light-wind.svg new file mode 100644 index 0000000..535c6a4 --- /dev/null +++ b/static/icons/svg/wi-day-light-wind.svg @@ -0,0 +1,32 @@ + + + + + diff --git a/static/icons/svg/wi-day-lightning.svg b/static/icons/svg/wi-day-lightning.svg new file mode 100644 index 0000000..18413ed --- /dev/null +++ b/static/icons/svg/wi-day-lightning.svg @@ -0,0 +1,29 @@ + + + + + diff --git a/static/icons/svg/wi-day-rain-mix.svg b/static/icons/svg/wi-day-rain-mix.svg new file mode 100644 index 0000000..8a5582d --- /dev/null +++ b/static/icons/svg/wi-day-rain-mix.svg @@ -0,0 +1,49 @@ + + + + + diff --git a/static/icons/svg/wi-day-rain-wind.svg b/static/icons/svg/wi-day-rain-wind.svg new file mode 100644 index 0000000..db5b02b --- /dev/null +++ b/static/icons/svg/wi-day-rain-wind.svg @@ -0,0 +1,40 @@ + + + + + diff --git a/static/icons/svg/wi-day-rain.svg b/static/icons/svg/wi-day-rain.svg new file mode 100644 index 0000000..12b1219 --- /dev/null +++ b/static/icons/svg/wi-day-rain.svg @@ -0,0 +1,35 @@ + + + + + diff --git a/static/icons/svg/wi-day-showers.svg b/static/icons/svg/wi-day-showers.svg new file mode 100644 index 0000000..cd0cb0a --- /dev/null +++ b/static/icons/svg/wi-day-showers.svg @@ -0,0 +1,43 @@ + + + + + diff --git a/static/icons/svg/wi-day-sleet-storm.svg b/static/icons/svg/wi-day-sleet-storm.svg new file mode 100644 index 0000000..a7ff6e6 --- /dev/null +++ b/static/icons/svg/wi-day-sleet-storm.svg @@ -0,0 +1,40 @@ + + + + + diff --git a/static/icons/svg/wi-day-sleet.svg b/static/icons/svg/wi-day-sleet.svg new file mode 100644 index 0000000..42df1df --- /dev/null +++ b/static/icons/svg/wi-day-sleet.svg @@ -0,0 +1,46 @@ + + + + + diff --git a/static/icons/svg/wi-day-snow-thunderstorm.svg b/static/icons/svg/wi-day-snow-thunderstorm.svg new file mode 100644 index 0000000..b1e3f20 --- /dev/null +++ b/static/icons/svg/wi-day-snow-thunderstorm.svg @@ -0,0 +1,37 @@ + + + + + diff --git a/static/icons/svg/wi-day-snow-wind.svg b/static/icons/svg/wi-day-snow-wind.svg new file mode 100644 index 0000000..6a632dc --- /dev/null +++ b/static/icons/svg/wi-day-snow-wind.svg @@ -0,0 +1,40 @@ + + + + + diff --git a/static/icons/svg/wi-day-snow.svg b/static/icons/svg/wi-day-snow.svg new file mode 100644 index 0000000..c1f1c71 --- /dev/null +++ b/static/icons/svg/wi-day-snow.svg @@ -0,0 +1,40 @@ + + + + + diff --git a/static/icons/svg/wi-day-sprinkle.svg b/static/icons/svg/wi-day-sprinkle.svg new file mode 100644 index 0000000..5294fca --- /dev/null +++ b/static/icons/svg/wi-day-sprinkle.svg @@ -0,0 +1,33 @@ + + + + + diff --git a/static/icons/svg/wi-day-storm-showers.svg b/static/icons/svg/wi-day-storm-showers.svg new file mode 100644 index 0000000..0166299 --- /dev/null +++ b/static/icons/svg/wi-day-storm-showers.svg @@ -0,0 +1,38 @@ + + + + + diff --git a/static/icons/svg/wi-day-sunny-overcast.svg b/static/icons/svg/wi-day-sunny-overcast.svg new file mode 100644 index 0000000..4873b05 --- /dev/null +++ b/static/icons/svg/wi-day-sunny-overcast.svg @@ -0,0 +1,29 @@ + + + + + diff --git a/static/icons/svg/wi-day-sunny.svg b/static/icons/svg/wi-day-sunny.svg new file mode 100644 index 0000000..eafcd77 --- /dev/null +++ b/static/icons/svg/wi-day-sunny.svg @@ -0,0 +1,27 @@ + + + + + diff --git a/static/icons/svg/wi-day-thunderstorm.svg b/static/icons/svg/wi-day-thunderstorm.svg new file mode 100644 index 0000000..006a8e5 --- /dev/null +++ b/static/icons/svg/wi-day-thunderstorm.svg @@ -0,0 +1,34 @@ + + + + + diff --git a/static/icons/svg/wi-day-windy.svg b/static/icons/svg/wi-day-windy.svg new file mode 100644 index 0000000..ea09d42 --- /dev/null +++ b/static/icons/svg/wi-day-windy.svg @@ -0,0 +1,36 @@ + + + + + diff --git a/static/icons/svg/wi-degrees.svg b/static/icons/svg/wi-degrees.svg new file mode 100644 index 0000000..ba3de70 --- /dev/null +++ b/static/icons/svg/wi-degrees.svg @@ -0,0 +1,10 @@ + + + + + diff --git a/static/icons/svg/wi-direction-down-left.svg b/static/icons/svg/wi-direction-down-left.svg new file mode 100644 index 0000000..e5a46ff --- /dev/null +++ b/static/icons/svg/wi-direction-down-left.svg @@ -0,0 +1,10 @@ + + + + + diff --git a/static/icons/svg/wi-direction-down-right.svg b/static/icons/svg/wi-direction-down-right.svg new file mode 100644 index 0000000..ecf35cc --- /dev/null +++ b/static/icons/svg/wi-direction-down-right.svg @@ -0,0 +1,9 @@ + + + + + diff --git a/static/icons/svg/wi-direction-down.svg b/static/icons/svg/wi-direction-down.svg new file mode 100644 index 0000000..17d7048 --- /dev/null +++ b/static/icons/svg/wi-direction-down.svg @@ -0,0 +1,9 @@ + + + + + diff --git a/static/icons/svg/wi-direction-left.svg b/static/icons/svg/wi-direction-left.svg new file mode 100644 index 0000000..bf3f5be --- /dev/null +++ b/static/icons/svg/wi-direction-left.svg @@ -0,0 +1,9 @@ + + + + + diff --git a/static/icons/svg/wi-direction-right.svg b/static/icons/svg/wi-direction-right.svg new file mode 100644 index 0000000..8f02b00 --- /dev/null +++ b/static/icons/svg/wi-direction-right.svg @@ -0,0 +1,10 @@ + + + + + diff --git a/static/icons/svg/wi-direction-up-left.svg b/static/icons/svg/wi-direction-up-left.svg new file mode 100644 index 0000000..884b611 --- /dev/null +++ b/static/icons/svg/wi-direction-up-left.svg @@ -0,0 +1,9 @@ + + + + + diff --git a/static/icons/svg/wi-direction-up-right.svg b/static/icons/svg/wi-direction-up-right.svg new file mode 100644 index 0000000..45d8f72 --- /dev/null +++ b/static/icons/svg/wi-direction-up-right.svg @@ -0,0 +1,9 @@ + + + + + diff --git a/static/icons/svg/wi-direction-up.svg b/static/icons/svg/wi-direction-up.svg new file mode 100644 index 0000000..668a152 --- /dev/null +++ b/static/icons/svg/wi-direction-up.svg @@ -0,0 +1,9 @@ + + + + + diff --git a/static/icons/svg/wi-dust.svg b/static/icons/svg/wi-dust.svg new file mode 100644 index 0000000..aa90229 --- /dev/null +++ b/static/icons/svg/wi-dust.svg @@ -0,0 +1,31 @@ + + + + + diff --git a/static/icons/svg/wi-earthquake.svg b/static/icons/svg/wi-earthquake.svg new file mode 100644 index 0000000..c7c752d --- /dev/null +++ b/static/icons/svg/wi-earthquake.svg @@ -0,0 +1,16 @@ + + + + + diff --git a/static/icons/svg/wi-fahrenheit.svg b/static/icons/svg/wi-fahrenheit.svg new file mode 100644 index 0000000..dffa947 --- /dev/null +++ b/static/icons/svg/wi-fahrenheit.svg @@ -0,0 +1,13 @@ + + + + + diff --git a/static/icons/svg/wi-fire.svg b/static/icons/svg/wi-fire.svg new file mode 100644 index 0000000..33b0502 --- /dev/null +++ b/static/icons/svg/wi-fire.svg @@ -0,0 +1,22 @@ + + + + + diff --git a/static/icons/svg/wi-flood.svg b/static/icons/svg/wi-flood.svg new file mode 100644 index 0000000..48e218e --- /dev/null +++ b/static/icons/svg/wi-flood.svg @@ -0,0 +1,22 @@ + + + + + diff --git a/static/icons/svg/wi-fog.svg b/static/icons/svg/wi-fog.svg new file mode 100644 index 0000000..cf06f8f --- /dev/null +++ b/static/icons/svg/wi-fog.svg @@ -0,0 +1,18 @@ + + + + + diff --git a/static/icons/svg/wi-gale-warning.svg b/static/icons/svg/wi-gale-warning.svg new file mode 100644 index 0000000..5e2f40d --- /dev/null +++ b/static/icons/svg/wi-gale-warning.svg @@ -0,0 +1,6 @@ + + + + + diff --git a/static/icons/svg/wi-hail.svg b/static/icons/svg/wi-hail.svg new file mode 100644 index 0000000..26c4b0d --- /dev/null +++ b/static/icons/svg/wi-hail.svg @@ -0,0 +1,30 @@ + + + + + diff --git a/static/icons/svg/wi-horizon-alt.svg b/static/icons/svg/wi-horizon-alt.svg new file mode 100644 index 0000000..ff423f3 --- /dev/null +++ b/static/icons/svg/wi-horizon-alt.svg @@ -0,0 +1,24 @@ + + + + + diff --git a/static/icons/svg/wi-horizon.svg b/static/icons/svg/wi-horizon.svg new file mode 100644 index 0000000..feef2ef --- /dev/null +++ b/static/icons/svg/wi-horizon.svg @@ -0,0 +1,17 @@ + + + + + diff --git a/static/icons/svg/wi-hot.svg b/static/icons/svg/wi-hot.svg new file mode 100644 index 0000000..66faa3a --- /dev/null +++ b/static/icons/svg/wi-hot.svg @@ -0,0 +1,56 @@ + + + + + diff --git a/static/icons/svg/wi-humidity.svg b/static/icons/svg/wi-humidity.svg new file mode 100644 index 0000000..9c75750 --- /dev/null +++ b/static/icons/svg/wi-humidity.svg @@ -0,0 +1,23 @@ + + + + + diff --git a/static/icons/svg/wi-hurricane-warning.svg b/static/icons/svg/wi-hurricane-warning.svg new file mode 100644 index 0000000..1365a44 --- /dev/null +++ b/static/icons/svg/wi-hurricane-warning.svg @@ -0,0 +1,7 @@ + + + + + diff --git a/static/icons/svg/wi-hurricane.svg b/static/icons/svg/wi-hurricane.svg new file mode 100644 index 0000000..3d2b4fd --- /dev/null +++ b/static/icons/svg/wi-hurricane.svg @@ -0,0 +1,17 @@ + + + + + diff --git a/static/icons/svg/wi-lightning.svg b/static/icons/svg/wi-lightning.svg new file mode 100644 index 0000000..0709cf3 --- /dev/null +++ b/static/icons/svg/wi-lightning.svg @@ -0,0 +1,9 @@ + + + + + diff --git a/static/icons/svg/wi-lunar-eclipse.svg b/static/icons/svg/wi-lunar-eclipse.svg new file mode 100644 index 0000000..7e86183 --- /dev/null +++ b/static/icons/svg/wi-lunar-eclipse.svg @@ -0,0 +1,11 @@ + + + + + diff --git a/static/icons/svg/wi-meteor.svg b/static/icons/svg/wi-meteor.svg new file mode 100644 index 0000000..4da65ab --- /dev/null +++ b/static/icons/svg/wi-meteor.svg @@ -0,0 +1,17 @@ + + + + + diff --git a/static/icons/svg/wi-moon-alt-first-quarter.svg b/static/icons/svg/wi-moon-alt-first-quarter.svg new file mode 100644 index 0000000..26d9400 --- /dev/null +++ b/static/icons/svg/wi-moon-alt-first-quarter.svg @@ -0,0 +1,10 @@ + + + + + diff --git a/static/icons/svg/wi-moon-alt-full.svg b/static/icons/svg/wi-moon-alt-full.svg new file mode 100644 index 0000000..20fd7b4 --- /dev/null +++ b/static/icons/svg/wi-moon-alt-full.svg @@ -0,0 +1,11 @@ + + + + + diff --git a/static/icons/svg/wi-moon-alt-new.svg b/static/icons/svg/wi-moon-alt-new.svg new file mode 100644 index 0000000..75b89ac --- /dev/null +++ b/static/icons/svg/wi-moon-alt-new.svg @@ -0,0 +1,8 @@ + + + + + diff --git a/static/icons/svg/wi-moon-alt-third-quarter.svg b/static/icons/svg/wi-moon-alt-third-quarter.svg new file mode 100644 index 0000000..964d559 --- /dev/null +++ b/static/icons/svg/wi-moon-alt-third-quarter.svg @@ -0,0 +1,10 @@ + + + + + diff --git a/static/icons/svg/wi-moon-alt-waning-crescent-1.svg b/static/icons/svg/wi-moon-alt-waning-crescent-1.svg new file mode 100644 index 0000000..5e7d3a4 --- /dev/null +++ b/static/icons/svg/wi-moon-alt-waning-crescent-1.svg @@ -0,0 +1,10 @@ + + + + + diff --git a/static/icons/svg/wi-moon-alt-waning-crescent-2.svg b/static/icons/svg/wi-moon-alt-waning-crescent-2.svg new file mode 100644 index 0000000..8386927 --- /dev/null +++ b/static/icons/svg/wi-moon-alt-waning-crescent-2.svg @@ -0,0 +1,10 @@ + + + + + diff --git a/static/icons/svg/wi-moon-alt-waning-crescent-3.svg b/static/icons/svg/wi-moon-alt-waning-crescent-3.svg new file mode 100644 index 0000000..aa2b4db --- /dev/null +++ b/static/icons/svg/wi-moon-alt-waning-crescent-3.svg @@ -0,0 +1,10 @@ + + + + + diff --git a/static/icons/svg/wi-moon-alt-waning-crescent-4.svg b/static/icons/svg/wi-moon-alt-waning-crescent-4.svg new file mode 100644 index 0000000..bb09c26 --- /dev/null +++ b/static/icons/svg/wi-moon-alt-waning-crescent-4.svg @@ -0,0 +1,11 @@ + + + + + diff --git a/static/icons/svg/wi-moon-alt-waning-crescent-5.svg b/static/icons/svg/wi-moon-alt-waning-crescent-5.svg new file mode 100644 index 0000000..0f5b9be --- /dev/null +++ b/static/icons/svg/wi-moon-alt-waning-crescent-5.svg @@ -0,0 +1,11 @@ + + + + + diff --git a/static/icons/svg/wi-moon-alt-waning-crescent-6.svg b/static/icons/svg/wi-moon-alt-waning-crescent-6.svg new file mode 100644 index 0000000..ff23247 --- /dev/null +++ b/static/icons/svg/wi-moon-alt-waning-crescent-6.svg @@ -0,0 +1,11 @@ + + + + + diff --git a/static/icons/svg/wi-moon-alt-waning-gibbous-1.svg b/static/icons/svg/wi-moon-alt-waning-gibbous-1.svg new file mode 100644 index 0000000..4e7a6f6 --- /dev/null +++ b/static/icons/svg/wi-moon-alt-waning-gibbous-1.svg @@ -0,0 +1,11 @@ + + + + + diff --git a/static/icons/svg/wi-moon-alt-waning-gibbous-2.svg b/static/icons/svg/wi-moon-alt-waning-gibbous-2.svg new file mode 100644 index 0000000..0a363af --- /dev/null +++ b/static/icons/svg/wi-moon-alt-waning-gibbous-2.svg @@ -0,0 +1,12 @@ + + + + + diff --git a/static/icons/svg/wi-moon-alt-waning-gibbous-3.svg b/static/icons/svg/wi-moon-alt-waning-gibbous-3.svg new file mode 100644 index 0000000..a8df601 --- /dev/null +++ b/static/icons/svg/wi-moon-alt-waning-gibbous-3.svg @@ -0,0 +1,12 @@ + + + + + diff --git a/static/icons/svg/wi-moon-alt-waning-gibbous-4.svg b/static/icons/svg/wi-moon-alt-waning-gibbous-4.svg new file mode 100644 index 0000000..8df81ae --- /dev/null +++ b/static/icons/svg/wi-moon-alt-waning-gibbous-4.svg @@ -0,0 +1,11 @@ + + + + + diff --git a/static/icons/svg/wi-moon-alt-waning-gibbous-5.svg b/static/icons/svg/wi-moon-alt-waning-gibbous-5.svg new file mode 100644 index 0000000..9a0354e --- /dev/null +++ b/static/icons/svg/wi-moon-alt-waning-gibbous-5.svg @@ -0,0 +1,11 @@ + + + + + diff --git a/static/icons/svg/wi-moon-alt-waning-gibbous-6.svg b/static/icons/svg/wi-moon-alt-waning-gibbous-6.svg new file mode 100644 index 0000000..fffae24 --- /dev/null +++ b/static/icons/svg/wi-moon-alt-waning-gibbous-6.svg @@ -0,0 +1,10 @@ + + + + + diff --git a/static/icons/svg/wi-moon-alt-waxing-crescent-1.svg b/static/icons/svg/wi-moon-alt-waxing-crescent-1.svg new file mode 100644 index 0000000..a6516f9 --- /dev/null +++ b/static/icons/svg/wi-moon-alt-waxing-crescent-1.svg @@ -0,0 +1,10 @@ + + + + + diff --git a/static/icons/svg/wi-moon-alt-waxing-crescent-2.svg b/static/icons/svg/wi-moon-alt-waxing-crescent-2.svg new file mode 100644 index 0000000..696ea78 --- /dev/null +++ b/static/icons/svg/wi-moon-alt-waxing-crescent-2.svg @@ -0,0 +1,10 @@ + + + + + diff --git a/static/icons/svg/wi-moon-alt-waxing-crescent-3.svg b/static/icons/svg/wi-moon-alt-waxing-crescent-3.svg new file mode 100644 index 0000000..6aff9d5 --- /dev/null +++ b/static/icons/svg/wi-moon-alt-waxing-crescent-3.svg @@ -0,0 +1,10 @@ + + + + + diff --git a/static/icons/svg/wi-moon-alt-waxing-crescent-4.svg b/static/icons/svg/wi-moon-alt-waxing-crescent-4.svg new file mode 100644 index 0000000..b5ef2bc --- /dev/null +++ b/static/icons/svg/wi-moon-alt-waxing-crescent-4.svg @@ -0,0 +1,10 @@ + + + + + diff --git a/static/icons/svg/wi-moon-alt-waxing-crescent-5.svg b/static/icons/svg/wi-moon-alt-waxing-crescent-5.svg new file mode 100644 index 0000000..e6cb75d --- /dev/null +++ b/static/icons/svg/wi-moon-alt-waxing-crescent-5.svg @@ -0,0 +1,10 @@ + + + + + diff --git a/static/icons/svg/wi-moon-alt-waxing-crescent-6.svg b/static/icons/svg/wi-moon-alt-waxing-crescent-6.svg new file mode 100644 index 0000000..8677cc4 --- /dev/null +++ b/static/icons/svg/wi-moon-alt-waxing-crescent-6.svg @@ -0,0 +1,10 @@ + + + + + diff --git a/static/icons/svg/wi-moon-alt-waxing-gibbous-1.svg b/static/icons/svg/wi-moon-alt-waxing-gibbous-1.svg new file mode 100644 index 0000000..41be53a --- /dev/null +++ b/static/icons/svg/wi-moon-alt-waxing-gibbous-1.svg @@ -0,0 +1,11 @@ + + + + + diff --git a/static/icons/svg/wi-moon-alt-waxing-gibbous-2.svg b/static/icons/svg/wi-moon-alt-waxing-gibbous-2.svg new file mode 100644 index 0000000..cc6c51d --- /dev/null +++ b/static/icons/svg/wi-moon-alt-waxing-gibbous-2.svg @@ -0,0 +1,11 @@ + + + + + diff --git a/static/icons/svg/wi-moon-alt-waxing-gibbous-3.svg b/static/icons/svg/wi-moon-alt-waxing-gibbous-3.svg new file mode 100644 index 0000000..2c969dc --- /dev/null +++ b/static/icons/svg/wi-moon-alt-waxing-gibbous-3.svg @@ -0,0 +1,11 @@ + + + + + diff --git a/static/icons/svg/wi-moon-alt-waxing-gibbous-4.svg b/static/icons/svg/wi-moon-alt-waxing-gibbous-4.svg new file mode 100644 index 0000000..4db9816 --- /dev/null +++ b/static/icons/svg/wi-moon-alt-waxing-gibbous-4.svg @@ -0,0 +1,11 @@ + + + + + diff --git a/static/icons/svg/wi-moon-alt-waxing-gibbous-5.svg b/static/icons/svg/wi-moon-alt-waxing-gibbous-5.svg new file mode 100644 index 0000000..68df9e6 --- /dev/null +++ b/static/icons/svg/wi-moon-alt-waxing-gibbous-5.svg @@ -0,0 +1,11 @@ + + + + + diff --git a/static/icons/svg/wi-moon-alt-waxing-gibbous-6.svg b/static/icons/svg/wi-moon-alt-waxing-gibbous-6.svg new file mode 100644 index 0000000..17ac239 --- /dev/null +++ b/static/icons/svg/wi-moon-alt-waxing-gibbous-6.svg @@ -0,0 +1,12 @@ + + + + + diff --git a/static/icons/svg/wi-moon-first-quarter.svg b/static/icons/svg/wi-moon-first-quarter.svg new file mode 100644 index 0000000..22ba6c6 --- /dev/null +++ b/static/icons/svg/wi-moon-first-quarter.svg @@ -0,0 +1,7 @@ + + + + + diff --git a/static/icons/svg/wi-moon-full.svg b/static/icons/svg/wi-moon-full.svg new file mode 100644 index 0000000..75b89ac --- /dev/null +++ b/static/icons/svg/wi-moon-full.svg @@ -0,0 +1,8 @@ + + + + + diff --git a/static/icons/svg/wi-moon-new.svg b/static/icons/svg/wi-moon-new.svg new file mode 100644 index 0000000..20fd7b4 --- /dev/null +++ b/static/icons/svg/wi-moon-new.svg @@ -0,0 +1,11 @@ + + + + + diff --git a/static/icons/svg/wi-moon-third-quarter.svg b/static/icons/svg/wi-moon-third-quarter.svg new file mode 100644 index 0000000..031a231 --- /dev/null +++ b/static/icons/svg/wi-moon-third-quarter.svg @@ -0,0 +1,7 @@ + + + + + diff --git a/static/icons/svg/wi-moon-waning-crescent-1.svg b/static/icons/svg/wi-moon-waning-crescent-1.svg new file mode 100644 index 0000000..7ae5d02 --- /dev/null +++ b/static/icons/svg/wi-moon-waning-crescent-1.svg @@ -0,0 +1,7 @@ + + + + + diff --git a/static/icons/svg/wi-moon-waning-crescent-2.svg b/static/icons/svg/wi-moon-waning-crescent-2.svg new file mode 100644 index 0000000..6e8ed9c --- /dev/null +++ b/static/icons/svg/wi-moon-waning-crescent-2.svg @@ -0,0 +1,7 @@ + + + + + diff --git a/static/icons/svg/wi-moon-waning-crescent-3.svg b/static/icons/svg/wi-moon-waning-crescent-3.svg new file mode 100644 index 0000000..b2224d0 --- /dev/null +++ b/static/icons/svg/wi-moon-waning-crescent-3.svg @@ -0,0 +1,7 @@ + + + + + diff --git a/static/icons/svg/wi-moon-waning-crescent-4.svg b/static/icons/svg/wi-moon-waning-crescent-4.svg new file mode 100644 index 0000000..c5f85fd --- /dev/null +++ b/static/icons/svg/wi-moon-waning-crescent-4.svg @@ -0,0 +1,8 @@ + + + + + diff --git a/static/icons/svg/wi-moon-waning-crescent-5.svg b/static/icons/svg/wi-moon-waning-crescent-5.svg new file mode 100644 index 0000000..350c227 --- /dev/null +++ b/static/icons/svg/wi-moon-waning-crescent-5.svg @@ -0,0 +1,8 @@ + + + + + diff --git a/static/icons/svg/wi-moon-waning-crescent-6.svg b/static/icons/svg/wi-moon-waning-crescent-6.svg new file mode 100644 index 0000000..e3fb6e7 --- /dev/null +++ b/static/icons/svg/wi-moon-waning-crescent-6.svg @@ -0,0 +1,9 @@ + + + + + diff --git a/static/icons/svg/wi-moon-waning-gibbous-1.svg b/static/icons/svg/wi-moon-waning-gibbous-1.svg new file mode 100644 index 0000000..ae14407 --- /dev/null +++ b/static/icons/svg/wi-moon-waning-gibbous-1.svg @@ -0,0 +1,8 @@ + + + + + diff --git a/static/icons/svg/wi-moon-waning-gibbous-2.svg b/static/icons/svg/wi-moon-waning-gibbous-2.svg new file mode 100644 index 0000000..558ba54 --- /dev/null +++ b/static/icons/svg/wi-moon-waning-gibbous-2.svg @@ -0,0 +1,8 @@ + + + + + diff --git a/static/icons/svg/wi-moon-waning-gibbous-3.svg b/static/icons/svg/wi-moon-waning-gibbous-3.svg new file mode 100644 index 0000000..17924cf --- /dev/null +++ b/static/icons/svg/wi-moon-waning-gibbous-3.svg @@ -0,0 +1,8 @@ + + + + + diff --git a/static/icons/svg/wi-moon-waning-gibbous-4.svg b/static/icons/svg/wi-moon-waning-gibbous-4.svg new file mode 100644 index 0000000..2e4c400 --- /dev/null +++ b/static/icons/svg/wi-moon-waning-gibbous-4.svg @@ -0,0 +1,8 @@ + + + + + diff --git a/static/icons/svg/wi-moon-waning-gibbous-5.svg b/static/icons/svg/wi-moon-waning-gibbous-5.svg new file mode 100644 index 0000000..db387c5 --- /dev/null +++ b/static/icons/svg/wi-moon-waning-gibbous-5.svg @@ -0,0 +1,7 @@ + + + + + diff --git a/static/icons/svg/wi-moon-waning-gibbous-6.svg b/static/icons/svg/wi-moon-waning-gibbous-6.svg new file mode 100644 index 0000000..edcc9d6 --- /dev/null +++ b/static/icons/svg/wi-moon-waning-gibbous-6.svg @@ -0,0 +1,7 @@ + + + + + diff --git a/static/icons/svg/wi-moon-waxing-6.svg b/static/icons/svg/wi-moon-waxing-6.svg new file mode 100644 index 0000000..6e9af39 --- /dev/null +++ b/static/icons/svg/wi-moon-waxing-6.svg @@ -0,0 +1,7 @@ + + + + + diff --git a/static/icons/svg/wi-moon-waxing-crescent-1.svg b/static/icons/svg/wi-moon-waxing-crescent-1.svg new file mode 100644 index 0000000..f510a0d --- /dev/null +++ b/static/icons/svg/wi-moon-waxing-crescent-1.svg @@ -0,0 +1,9 @@ + + + + + diff --git a/static/icons/svg/wi-moon-waxing-crescent-2.svg b/static/icons/svg/wi-moon-waxing-crescent-2.svg new file mode 100644 index 0000000..6b86718 --- /dev/null +++ b/static/icons/svg/wi-moon-waxing-crescent-2.svg @@ -0,0 +1,8 @@ + + + + + diff --git a/static/icons/svg/wi-moon-waxing-crescent-3.svg b/static/icons/svg/wi-moon-waxing-crescent-3.svg new file mode 100644 index 0000000..8560f6b --- /dev/null +++ b/static/icons/svg/wi-moon-waxing-crescent-3.svg @@ -0,0 +1,8 @@ + + + + + diff --git a/static/icons/svg/wi-moon-waxing-crescent-4.svg b/static/icons/svg/wi-moon-waxing-crescent-4.svg new file mode 100644 index 0000000..5f78502 --- /dev/null +++ b/static/icons/svg/wi-moon-waxing-crescent-4.svg @@ -0,0 +1,8 @@ + + + + + diff --git a/static/icons/svg/wi-moon-waxing-crescent-5.svg b/static/icons/svg/wi-moon-waxing-crescent-5.svg new file mode 100644 index 0000000..6e9af39 --- /dev/null +++ b/static/icons/svg/wi-moon-waxing-crescent-5.svg @@ -0,0 +1,7 @@ + + + + + diff --git a/static/icons/svg/wi-moon-waxing-gibbous-1.svg b/static/icons/svg/wi-moon-waxing-gibbous-1.svg new file mode 100644 index 0000000..1de651a --- /dev/null +++ b/static/icons/svg/wi-moon-waxing-gibbous-1.svg @@ -0,0 +1,7 @@ + + + + + diff --git a/static/icons/svg/wi-moon-waxing-gibbous-2.svg b/static/icons/svg/wi-moon-waxing-gibbous-2.svg new file mode 100644 index 0000000..842d4ac --- /dev/null +++ b/static/icons/svg/wi-moon-waxing-gibbous-2.svg @@ -0,0 +1,7 @@ + + + + + diff --git a/static/icons/svg/wi-moon-waxing-gibbous-3.svg b/static/icons/svg/wi-moon-waxing-gibbous-3.svg new file mode 100644 index 0000000..9f77ce3 --- /dev/null +++ b/static/icons/svg/wi-moon-waxing-gibbous-3.svg @@ -0,0 +1,8 @@ + + + + + diff --git a/static/icons/svg/wi-moon-waxing-gibbous-4.svg b/static/icons/svg/wi-moon-waxing-gibbous-4.svg new file mode 100644 index 0000000..e472de6 --- /dev/null +++ b/static/icons/svg/wi-moon-waxing-gibbous-4.svg @@ -0,0 +1,8 @@ + + + + + diff --git a/static/icons/svg/wi-moon-waxing-gibbous-5.svg b/static/icons/svg/wi-moon-waxing-gibbous-5.svg new file mode 100644 index 0000000..90860cb --- /dev/null +++ b/static/icons/svg/wi-moon-waxing-gibbous-5.svg @@ -0,0 +1,8 @@ + + + + + diff --git a/static/icons/svg/wi-moon-waxing-gibbous-6.svg b/static/icons/svg/wi-moon-waxing-gibbous-6.svg new file mode 100644 index 0000000..53f9b9e --- /dev/null +++ b/static/icons/svg/wi-moon-waxing-gibbous-6.svg @@ -0,0 +1,8 @@ + + + + + diff --git a/static/icons/svg/wi-moonrise.svg b/static/icons/svg/wi-moonrise.svg new file mode 100644 index 0000000..5d7ddb0 --- /dev/null +++ b/static/icons/svg/wi-moonrise.svg @@ -0,0 +1,13 @@ + + + + + diff --git a/static/icons/svg/wi-moonset.svg b/static/icons/svg/wi-moonset.svg new file mode 100644 index 0000000..d78fa29 --- /dev/null +++ b/static/icons/svg/wi-moonset.svg @@ -0,0 +1,14 @@ + + + + + diff --git a/static/icons/svg/wi-na.svg b/static/icons/svg/wi-na.svg new file mode 100644 index 0000000..0a3d369 --- /dev/null +++ b/static/icons/svg/wi-na.svg @@ -0,0 +1,8 @@ + + + + + diff --git a/static/icons/svg/wi-night-alt-cloudy-gusts.svg b/static/icons/svg/wi-night-alt-cloudy-gusts.svg new file mode 100644 index 0000000..0453d3c --- /dev/null +++ b/static/icons/svg/wi-night-alt-cloudy-gusts.svg @@ -0,0 +1,28 @@ + + + + + diff --git a/static/icons/svg/wi-night-alt-cloudy-high.svg b/static/icons/svg/wi-night-alt-cloudy-high.svg new file mode 100644 index 0000000..6b1777b --- /dev/null +++ b/static/icons/svg/wi-night-alt-cloudy-high.svg @@ -0,0 +1,16 @@ + + + + + diff --git a/static/icons/svg/wi-night-alt-cloudy-windy.svg b/static/icons/svg/wi-night-alt-cloudy-windy.svg new file mode 100644 index 0000000..f6a291e --- /dev/null +++ b/static/icons/svg/wi-night-alt-cloudy-windy.svg @@ -0,0 +1,25 @@ + + + + + diff --git a/static/icons/svg/wi-night-alt-cloudy.svg b/static/icons/svg/wi-night-alt-cloudy.svg new file mode 100644 index 0000000..fcd1496 --- /dev/null +++ b/static/icons/svg/wi-night-alt-cloudy.svg @@ -0,0 +1,19 @@ + + + + + diff --git a/static/icons/svg/wi-night-alt-hail.svg b/static/icons/svg/wi-night-alt-hail.svg new file mode 100644 index 0000000..38550e4 --- /dev/null +++ b/static/icons/svg/wi-night-alt-hail.svg @@ -0,0 +1,34 @@ + + + + + diff --git a/static/icons/svg/wi-night-alt-lightning.svg b/static/icons/svg/wi-night-alt-lightning.svg new file mode 100644 index 0000000..f01d745 --- /dev/null +++ b/static/icons/svg/wi-night-alt-lightning.svg @@ -0,0 +1,21 @@ + + + + + diff --git a/static/icons/svg/wi-night-alt-partly-cloudy.svg b/static/icons/svg/wi-night-alt-partly-cloudy.svg new file mode 100644 index 0000000..2b36834 --- /dev/null +++ b/static/icons/svg/wi-night-alt-partly-cloudy.svg @@ -0,0 +1,19 @@ + + + + + diff --git a/static/icons/svg/wi-night-alt-rain-mix.svg b/static/icons/svg/wi-night-alt-rain-mix.svg new file mode 100644 index 0000000..4ce81bc --- /dev/null +++ b/static/icons/svg/wi-night-alt-rain-mix.svg @@ -0,0 +1,42 @@ + + + + + diff --git a/static/icons/svg/wi-night-alt-rain-wind.svg b/static/icons/svg/wi-night-alt-rain-wind.svg new file mode 100644 index 0000000..f90a680 --- /dev/null +++ b/static/icons/svg/wi-night-alt-rain-wind.svg @@ -0,0 +1,32 @@ + + + + + diff --git a/static/icons/svg/wi-night-alt-rain.svg b/static/icons/svg/wi-night-alt-rain.svg new file mode 100644 index 0000000..b4d8065 --- /dev/null +++ b/static/icons/svg/wi-night-alt-rain.svg @@ -0,0 +1,27 @@ + + + + + diff --git a/static/icons/svg/wi-night-alt-showers.svg b/static/icons/svg/wi-night-alt-showers.svg new file mode 100644 index 0000000..dd917e0 --- /dev/null +++ b/static/icons/svg/wi-night-alt-showers.svg @@ -0,0 +1,34 @@ + + + + + diff --git a/static/icons/svg/wi-night-alt-sleet-storm.svg b/static/icons/svg/wi-night-alt-sleet-storm.svg new file mode 100644 index 0000000..afd111d --- /dev/null +++ b/static/icons/svg/wi-night-alt-sleet-storm.svg @@ -0,0 +1,32 @@ + + + + + diff --git a/static/icons/svg/wi-night-alt-sleet.svg b/static/icons/svg/wi-night-alt-sleet.svg new file mode 100644 index 0000000..3fbdd15 --- /dev/null +++ b/static/icons/svg/wi-night-alt-sleet.svg @@ -0,0 +1,38 @@ + + + + + diff --git a/static/icons/svg/wi-night-alt-snow-thunderstorm.svg b/static/icons/svg/wi-night-alt-snow-thunderstorm.svg new file mode 100644 index 0000000..304a7eb --- /dev/null +++ b/static/icons/svg/wi-night-alt-snow-thunderstorm.svg @@ -0,0 +1,30 @@ + + + + + diff --git a/static/icons/svg/wi-night-alt-snow-wind.svg b/static/icons/svg/wi-night-alt-snow-wind.svg new file mode 100644 index 0000000..f35566a --- /dev/null +++ b/static/icons/svg/wi-night-alt-snow-wind.svg @@ -0,0 +1,33 @@ + + + + + diff --git a/static/icons/svg/wi-night-alt-snow.svg b/static/icons/svg/wi-night-alt-snow.svg new file mode 100644 index 0000000..b314bdd --- /dev/null +++ b/static/icons/svg/wi-night-alt-snow.svg @@ -0,0 +1,32 @@ + + + + + diff --git a/static/icons/svg/wi-night-alt-sprinkle.svg b/static/icons/svg/wi-night-alt-sprinkle.svg new file mode 100644 index 0000000..47dfcb1 --- /dev/null +++ b/static/icons/svg/wi-night-alt-sprinkle.svg @@ -0,0 +1,26 @@ + + + + + diff --git a/static/icons/svg/wi-night-alt-storm-showers.svg b/static/icons/svg/wi-night-alt-storm-showers.svg new file mode 100644 index 0000000..6747df2 --- /dev/null +++ b/static/icons/svg/wi-night-alt-storm-showers.svg @@ -0,0 +1,31 @@ + + + + + diff --git a/static/icons/svg/wi-night-alt-thunderstorm.svg b/static/icons/svg/wi-night-alt-thunderstorm.svg new file mode 100644 index 0000000..0af7a15 --- /dev/null +++ b/static/icons/svg/wi-night-alt-thunderstorm.svg @@ -0,0 +1,25 @@ + + + + + diff --git a/static/icons/svg/wi-night-clear.svg b/static/icons/svg/wi-night-clear.svg new file mode 100644 index 0000000..053b2de --- /dev/null +++ b/static/icons/svg/wi-night-clear.svg @@ -0,0 +1,13 @@ + + + + + diff --git a/static/icons/svg/wi-night-cloudy-gusts.svg b/static/icons/svg/wi-night-cloudy-gusts.svg new file mode 100644 index 0000000..e502c48 --- /dev/null +++ b/static/icons/svg/wi-night-cloudy-gusts.svg @@ -0,0 +1,25 @@ + + + + + diff --git a/static/icons/svg/wi-night-cloudy-high.svg b/static/icons/svg/wi-night-cloudy-high.svg new file mode 100644 index 0000000..8235377 --- /dev/null +++ b/static/icons/svg/wi-night-cloudy-high.svg @@ -0,0 +1,17 @@ + + + + + diff --git a/static/icons/svg/wi-night-cloudy-windy.svg b/static/icons/svg/wi-night-cloudy-windy.svg new file mode 100644 index 0000000..3a6137a --- /dev/null +++ b/static/icons/svg/wi-night-cloudy-windy.svg @@ -0,0 +1,22 @@ + + + + + diff --git a/static/icons/svg/wi-night-cloudy.svg b/static/icons/svg/wi-night-cloudy.svg new file mode 100644 index 0000000..8b76dba --- /dev/null +++ b/static/icons/svg/wi-night-cloudy.svg @@ -0,0 +1,15 @@ + + + + + diff --git a/static/icons/svg/wi-night-fog.svg b/static/icons/svg/wi-night-fog.svg new file mode 100644 index 0000000..a895dac --- /dev/null +++ b/static/icons/svg/wi-night-fog.svg @@ -0,0 +1,22 @@ + + + + + diff --git a/static/icons/svg/wi-night-hail.svg b/static/icons/svg/wi-night-hail.svg new file mode 100644 index 0000000..249ed64 --- /dev/null +++ b/static/icons/svg/wi-night-hail.svg @@ -0,0 +1,32 @@ + + + + + diff --git a/static/icons/svg/wi-night-lightning.svg b/static/icons/svg/wi-night-lightning.svg new file mode 100644 index 0000000..55ac76e --- /dev/null +++ b/static/icons/svg/wi-night-lightning.svg @@ -0,0 +1,18 @@ + + + + + diff --git a/static/icons/svg/wi-night-partly-cloudy.svg b/static/icons/svg/wi-night-partly-cloudy.svg new file mode 100644 index 0000000..e4d2f99 --- /dev/null +++ b/static/icons/svg/wi-night-partly-cloudy.svg @@ -0,0 +1,16 @@ + + + + + diff --git a/static/icons/svg/wi-night-rain-mix.svg b/static/icons/svg/wi-night-rain-mix.svg new file mode 100644 index 0000000..f5883d7 --- /dev/null +++ b/static/icons/svg/wi-night-rain-mix.svg @@ -0,0 +1,41 @@ + + + + + diff --git a/static/icons/svg/wi-night-rain-wind.svg b/static/icons/svg/wi-night-rain-wind.svg new file mode 100644 index 0000000..8d8ccf7 --- /dev/null +++ b/static/icons/svg/wi-night-rain-wind.svg @@ -0,0 +1,29 @@ + + + + + diff --git a/static/icons/svg/wi-night-rain.svg b/static/icons/svg/wi-night-rain.svg new file mode 100644 index 0000000..3d4e6dc --- /dev/null +++ b/static/icons/svg/wi-night-rain.svg @@ -0,0 +1,24 @@ + + + + + diff --git a/static/icons/svg/wi-night-showers.svg b/static/icons/svg/wi-night-showers.svg new file mode 100644 index 0000000..4829c81 --- /dev/null +++ b/static/icons/svg/wi-night-showers.svg @@ -0,0 +1,32 @@ + + + + + diff --git a/static/icons/svg/wi-night-sleet-storm.svg b/static/icons/svg/wi-night-sleet-storm.svg new file mode 100644 index 0000000..7638b54 --- /dev/null +++ b/static/icons/svg/wi-night-sleet-storm.svg @@ -0,0 +1,29 @@ + + + + + diff --git a/static/icons/svg/wi-night-sleet.svg b/static/icons/svg/wi-night-sleet.svg new file mode 100644 index 0000000..0ff3e36 --- /dev/null +++ b/static/icons/svg/wi-night-sleet.svg @@ -0,0 +1,34 @@ + + + + + diff --git a/static/icons/svg/wi-night-snow-thunderstorm.svg b/static/icons/svg/wi-night-snow-thunderstorm.svg new file mode 100644 index 0000000..ec98dd8 --- /dev/null +++ b/static/icons/svg/wi-night-snow-thunderstorm.svg @@ -0,0 +1,27 @@ + + + + + diff --git a/static/icons/svg/wi-night-snow-wind.svg b/static/icons/svg/wi-night-snow-wind.svg new file mode 100644 index 0000000..d34c39f --- /dev/null +++ b/static/icons/svg/wi-night-snow-wind.svg @@ -0,0 +1,29 @@ + + + + + diff --git a/static/icons/svg/wi-night-snow.svg b/static/icons/svg/wi-night-snow.svg new file mode 100644 index 0000000..c4bab74 --- /dev/null +++ b/static/icons/svg/wi-night-snow.svg @@ -0,0 +1,29 @@ + + + + + diff --git a/static/icons/svg/wi-night-sprinkle.svg b/static/icons/svg/wi-night-sprinkle.svg new file mode 100644 index 0000000..2793da3 --- /dev/null +++ b/static/icons/svg/wi-night-sprinkle.svg @@ -0,0 +1,23 @@ + + + + + diff --git a/static/icons/svg/wi-night-storm-showers.svg b/static/icons/svg/wi-night-storm-showers.svg new file mode 100644 index 0000000..1cf5202 --- /dev/null +++ b/static/icons/svg/wi-night-storm-showers.svg @@ -0,0 +1,28 @@ + + + + + diff --git a/static/icons/svg/wi-night-thunderstorm.svg b/static/icons/svg/wi-night-thunderstorm.svg new file mode 100644 index 0000000..b9541cb --- /dev/null +++ b/static/icons/svg/wi-night-thunderstorm.svg @@ -0,0 +1,22 @@ + + + + + diff --git a/static/icons/svg/wi-rain-mix.svg b/static/icons/svg/wi-rain-mix.svg new file mode 100644 index 0000000..51cf189 --- /dev/null +++ b/static/icons/svg/wi-rain-mix.svg @@ -0,0 +1,37 @@ + + + + + diff --git a/static/icons/svg/wi-rain-wind.svg b/static/icons/svg/wi-rain-wind.svg new file mode 100644 index 0000000..aef262a --- /dev/null +++ b/static/icons/svg/wi-rain-wind.svg @@ -0,0 +1,28 @@ + + + + + diff --git a/static/icons/svg/wi-rain.svg b/static/icons/svg/wi-rain.svg new file mode 100644 index 0000000..7ecef3f --- /dev/null +++ b/static/icons/svg/wi-rain.svg @@ -0,0 +1,23 @@ + + + + + diff --git a/static/icons/svg/wi-raindrop.svg b/static/icons/svg/wi-raindrop.svg new file mode 100644 index 0000000..d24aee4 --- /dev/null +++ b/static/icons/svg/wi-raindrop.svg @@ -0,0 +1,9 @@ + + + + + diff --git a/static/icons/svg/wi-raindrops.svg b/static/icons/svg/wi-raindrops.svg new file mode 100644 index 0000000..157ddf0 --- /dev/null +++ b/static/icons/svg/wi-raindrops.svg @@ -0,0 +1,13 @@ + + + + + diff --git a/static/icons/svg/wi-refresh-alt.svg b/static/icons/svg/wi-refresh-alt.svg new file mode 100644 index 0000000..33c9b18 --- /dev/null +++ b/static/icons/svg/wi-refresh-alt.svg @@ -0,0 +1,11 @@ + + + + + diff --git a/static/icons/svg/wi-refresh.svg b/static/icons/svg/wi-refresh.svg new file mode 100644 index 0000000..32e09a8 --- /dev/null +++ b/static/icons/svg/wi-refresh.svg @@ -0,0 +1,12 @@ + + + + + diff --git a/static/icons/svg/wi-sandstorm.svg b/static/icons/svg/wi-sandstorm.svg new file mode 100644 index 0000000..cbdad2a --- /dev/null +++ b/static/icons/svg/wi-sandstorm.svg @@ -0,0 +1,31 @@ + + + + + diff --git a/static/icons/svg/wi-showers.svg b/static/icons/svg/wi-showers.svg new file mode 100644 index 0000000..3cb7e31 --- /dev/null +++ b/static/icons/svg/wi-showers.svg @@ -0,0 +1,31 @@ + + + + + diff --git a/static/icons/svg/wi-sleet.svg b/static/icons/svg/wi-sleet.svg new file mode 100644 index 0000000..b97bc09 --- /dev/null +++ b/static/icons/svg/wi-sleet.svg @@ -0,0 +1,35 @@ + + + + + diff --git a/static/icons/svg/wi-small-craft-advisory.svg b/static/icons/svg/wi-small-craft-advisory.svg new file mode 100644 index 0000000..ab6f45e --- /dev/null +++ b/static/icons/svg/wi-small-craft-advisory.svg @@ -0,0 +1,6 @@ + + + + + diff --git a/static/icons/svg/wi-smog.svg b/static/icons/svg/wi-smog.svg new file mode 100644 index 0000000..a2f0d89 --- /dev/null +++ b/static/icons/svg/wi-smog.svg @@ -0,0 +1,13 @@ + + + + + diff --git a/static/icons/svg/wi-smoke.svg b/static/icons/svg/wi-smoke.svg new file mode 100644 index 0000000..82e8fdc --- /dev/null +++ b/static/icons/svg/wi-smoke.svg @@ -0,0 +1,17 @@ + + + + + diff --git a/static/icons/svg/wi-snow-wind.svg b/static/icons/svg/wi-snow-wind.svg new file mode 100644 index 0000000..950aeac --- /dev/null +++ b/static/icons/svg/wi-snow-wind.svg @@ -0,0 +1,27 @@ + + + + + diff --git a/static/icons/svg/wi-snow.svg b/static/icons/svg/wi-snow.svg new file mode 100644 index 0000000..56afebf --- /dev/null +++ b/static/icons/svg/wi-snow.svg @@ -0,0 +1,27 @@ + + + + + diff --git a/static/icons/svg/wi-snowflake-cold.svg b/static/icons/svg/wi-snowflake-cold.svg new file mode 100644 index 0000000..0f117b9 --- /dev/null +++ b/static/icons/svg/wi-snowflake-cold.svg @@ -0,0 +1,30 @@ + + + + + diff --git a/static/icons/svg/wi-solar-eclipse.svg b/static/icons/svg/wi-solar-eclipse.svg new file mode 100644 index 0000000..19c62a8 --- /dev/null +++ b/static/icons/svg/wi-solar-eclipse.svg @@ -0,0 +1,28 @@ + + + + + diff --git a/static/icons/svg/wi-sprinkle.svg b/static/icons/svg/wi-sprinkle.svg new file mode 100644 index 0000000..c26b207 --- /dev/null +++ b/static/icons/svg/wi-sprinkle.svg @@ -0,0 +1,20 @@ + + + + + diff --git a/static/icons/svg/wi-stars.svg b/static/icons/svg/wi-stars.svg new file mode 100644 index 0000000..76e7003 --- /dev/null +++ b/static/icons/svg/wi-stars.svg @@ -0,0 +1,15 @@ + + + + + diff --git a/static/icons/svg/wi-storm-showers.svg b/static/icons/svg/wi-storm-showers.svg new file mode 100644 index 0000000..df3fe0f --- /dev/null +++ b/static/icons/svg/wi-storm-showers.svg @@ -0,0 +1,26 @@ + + + + + diff --git a/static/icons/svg/wi-storm-warning.svg b/static/icons/svg/wi-storm-warning.svg new file mode 100644 index 0000000..db146c1 --- /dev/null +++ b/static/icons/svg/wi-storm-warning.svg @@ -0,0 +1,6 @@ + + + + + diff --git a/static/icons/svg/wi-strong-wind.svg b/static/icons/svg/wi-strong-wind.svg new file mode 100644 index 0000000..70dda9c --- /dev/null +++ b/static/icons/svg/wi-strong-wind.svg @@ -0,0 +1,15 @@ + + + + + diff --git a/static/icons/svg/wi-sunrise.svg b/static/icons/svg/wi-sunrise.svg new file mode 100644 index 0000000..5718ac3 --- /dev/null +++ b/static/icons/svg/wi-sunrise.svg @@ -0,0 +1,25 @@ + + + + + diff --git a/static/icons/svg/wi-sunset.svg b/static/icons/svg/wi-sunset.svg new file mode 100644 index 0000000..cc82902 --- /dev/null +++ b/static/icons/svg/wi-sunset.svg @@ -0,0 +1,25 @@ + + + + + diff --git a/static/icons/svg/wi-thermometer-exterior.svg b/static/icons/svg/wi-thermometer-exterior.svg new file mode 100644 index 0000000..e0d345d --- /dev/null +++ b/static/icons/svg/wi-thermometer-exterior.svg @@ -0,0 +1,12 @@ + + + + + diff --git a/static/icons/svg/wi-thermometer-internal.svg b/static/icons/svg/wi-thermometer-internal.svg new file mode 100644 index 0000000..b590a9f --- /dev/null +++ b/static/icons/svg/wi-thermometer-internal.svg @@ -0,0 +1,9 @@ + + + + + diff --git a/static/icons/svg/wi-thermometer.svg b/static/icons/svg/wi-thermometer.svg new file mode 100644 index 0000000..a0fa8d0 --- /dev/null +++ b/static/icons/svg/wi-thermometer.svg @@ -0,0 +1,15 @@ + + + + + diff --git a/static/icons/svg/wi-thunderstorm.svg b/static/icons/svg/wi-thunderstorm.svg new file mode 100644 index 0000000..52555ec --- /dev/null +++ b/static/icons/svg/wi-thunderstorm.svg @@ -0,0 +1,21 @@ + + + + + diff --git a/static/icons/svg/wi-time-1.svg b/static/icons/svg/wi-time-1.svg new file mode 100644 index 0000000..c5ea658 --- /dev/null +++ b/static/icons/svg/wi-time-1.svg @@ -0,0 +1,13 @@ + + + + + diff --git a/static/icons/svg/wi-time-10.svg b/static/icons/svg/wi-time-10.svg new file mode 100644 index 0000000..3a02d59 --- /dev/null +++ b/static/icons/svg/wi-time-10.svg @@ -0,0 +1,13 @@ + + + + + diff --git a/static/icons/svg/wi-time-11.svg b/static/icons/svg/wi-time-11.svg new file mode 100644 index 0000000..1625390 --- /dev/null +++ b/static/icons/svg/wi-time-11.svg @@ -0,0 +1,13 @@ + + + + + diff --git a/static/icons/svg/wi-time-12.svg b/static/icons/svg/wi-time-12.svg new file mode 100644 index 0000000..32cc7f0 --- /dev/null +++ b/static/icons/svg/wi-time-12.svg @@ -0,0 +1,12 @@ + + + + + diff --git a/static/icons/svg/wi-time-2.svg b/static/icons/svg/wi-time-2.svg new file mode 100644 index 0000000..9e874a3 --- /dev/null +++ b/static/icons/svg/wi-time-2.svg @@ -0,0 +1,13 @@ + + + + + diff --git a/static/icons/svg/wi-time-3.svg b/static/icons/svg/wi-time-3.svg new file mode 100644 index 0000000..5c0cd90 --- /dev/null +++ b/static/icons/svg/wi-time-3.svg @@ -0,0 +1,13 @@ + + + + + diff --git a/static/icons/svg/wi-time-4.svg b/static/icons/svg/wi-time-4.svg new file mode 100644 index 0000000..7dda4d2 --- /dev/null +++ b/static/icons/svg/wi-time-4.svg @@ -0,0 +1,13 @@ + + + + + diff --git a/static/icons/svg/wi-time-5.svg b/static/icons/svg/wi-time-5.svg new file mode 100644 index 0000000..fb8f8a5 --- /dev/null +++ b/static/icons/svg/wi-time-5.svg @@ -0,0 +1,13 @@ + + + + + diff --git a/static/icons/svg/wi-time-6.svg b/static/icons/svg/wi-time-6.svg new file mode 100644 index 0000000..8bbe6b0 --- /dev/null +++ b/static/icons/svg/wi-time-6.svg @@ -0,0 +1,12 @@ + + + + + diff --git a/static/icons/svg/wi-time-7.svg b/static/icons/svg/wi-time-7.svg new file mode 100644 index 0000000..079551e --- /dev/null +++ b/static/icons/svg/wi-time-7.svg @@ -0,0 +1,13 @@ + + + + + diff --git a/static/icons/svg/wi-time-8.svg b/static/icons/svg/wi-time-8.svg new file mode 100644 index 0000000..6d65af2 --- /dev/null +++ b/static/icons/svg/wi-time-8.svg @@ -0,0 +1,13 @@ + + + + + diff --git a/static/icons/svg/wi-time-9.svg b/static/icons/svg/wi-time-9.svg new file mode 100644 index 0000000..b1437c3 --- /dev/null +++ b/static/icons/svg/wi-time-9.svg @@ -0,0 +1,13 @@ + + + + + diff --git a/static/icons/svg/wi-tornado.svg b/static/icons/svg/wi-tornado.svg new file mode 100644 index 0000000..095ad95 --- /dev/null +++ b/static/icons/svg/wi-tornado.svg @@ -0,0 +1,25 @@ + + + + + diff --git a/static/icons/svg/wi-train.svg b/static/icons/svg/wi-train.svg new file mode 100644 index 0000000..ded2460 --- /dev/null +++ b/static/icons/svg/wi-train.svg @@ -0,0 +1,26 @@ + + + + + diff --git a/static/icons/svg/wi-tsunami.svg b/static/icons/svg/wi-tsunami.svg new file mode 100644 index 0000000..2044e99 --- /dev/null +++ b/static/icons/svg/wi-tsunami.svg @@ -0,0 +1,26 @@ + + + + + diff --git a/static/icons/svg/wi-umbrella.svg b/static/icons/svg/wi-umbrella.svg new file mode 100644 index 0000000..e125bca --- /dev/null +++ b/static/icons/svg/wi-umbrella.svg @@ -0,0 +1,23 @@ + + + + + diff --git a/static/icons/svg/wi-volcano.svg b/static/icons/svg/wi-volcano.svg new file mode 100644 index 0000000..cd8dcf3 --- /dev/null +++ b/static/icons/svg/wi-volcano.svg @@ -0,0 +1,23 @@ + + + + + diff --git a/static/icons/svg/wi-wind-beaufort-0.svg b/static/icons/svg/wi-wind-beaufort-0.svg new file mode 100644 index 0000000..7ec3dba --- /dev/null +++ b/static/icons/svg/wi-wind-beaufort-0.svg @@ -0,0 +1,21 @@ + + + + + diff --git a/static/icons/svg/wi-wind-beaufort-1.svg b/static/icons/svg/wi-wind-beaufort-1.svg new file mode 100644 index 0000000..2bab866 --- /dev/null +++ b/static/icons/svg/wi-wind-beaufort-1.svg @@ -0,0 +1,15 @@ + + + + + diff --git a/static/icons/svg/wi-wind-beaufort-10.svg b/static/icons/svg/wi-wind-beaufort-10.svg new file mode 100644 index 0000000..f1256c6 --- /dev/null +++ b/static/icons/svg/wi-wind-beaufort-10.svg @@ -0,0 +1,21 @@ + + + + + diff --git a/static/icons/svg/wi-wind-beaufort-11.svg b/static/icons/svg/wi-wind-beaufort-11.svg new file mode 100644 index 0000000..d209021 --- /dev/null +++ b/static/icons/svg/wi-wind-beaufort-11.svg @@ -0,0 +1,16 @@ + + + + + diff --git a/static/icons/svg/wi-wind-beaufort-12.svg b/static/icons/svg/wi-wind-beaufort-12.svg new file mode 100644 index 0000000..0cbf35d --- /dev/null +++ b/static/icons/svg/wi-wind-beaufort-12.svg @@ -0,0 +1,21 @@ + + + + + diff --git a/static/icons/svg/wi-wind-beaufort-2.svg b/static/icons/svg/wi-wind-beaufort-2.svg new file mode 100644 index 0000000..740f2af --- /dev/null +++ b/static/icons/svg/wi-wind-beaufort-2.svg @@ -0,0 +1,21 @@ + + + + + diff --git a/static/icons/svg/wi-wind-beaufort-3.svg b/static/icons/svg/wi-wind-beaufort-3.svg new file mode 100644 index 0000000..165b116 --- /dev/null +++ b/static/icons/svg/wi-wind-beaufort-3.svg @@ -0,0 +1,22 @@ + + + + + diff --git a/static/icons/svg/wi-wind-beaufort-4.svg b/static/icons/svg/wi-wind-beaufort-4.svg new file mode 100644 index 0000000..c2143d4 --- /dev/null +++ b/static/icons/svg/wi-wind-beaufort-4.svg @@ -0,0 +1,16 @@ + + + + + diff --git a/static/icons/svg/wi-wind-beaufort-5.svg b/static/icons/svg/wi-wind-beaufort-5.svg new file mode 100644 index 0000000..fc34ea4 --- /dev/null +++ b/static/icons/svg/wi-wind-beaufort-5.svg @@ -0,0 +1,20 @@ + + + + + diff --git a/static/icons/svg/wi-wind-beaufort-6.svg b/static/icons/svg/wi-wind-beaufort-6.svg new file mode 100644 index 0000000..e6471f4 --- /dev/null +++ b/static/icons/svg/wi-wind-beaufort-6.svg @@ -0,0 +1,23 @@ + + + + + diff --git a/static/icons/svg/wi-wind-beaufort-7.svg b/static/icons/svg/wi-wind-beaufort-7.svg new file mode 100644 index 0000000..f77fcec --- /dev/null +++ b/static/icons/svg/wi-wind-beaufort-7.svg @@ -0,0 +1,16 @@ + + + + + diff --git a/static/icons/svg/wi-wind-beaufort-8.svg b/static/icons/svg/wi-wind-beaufort-8.svg new file mode 100644 index 0000000..5f08fed --- /dev/null +++ b/static/icons/svg/wi-wind-beaufort-8.svg @@ -0,0 +1,26 @@ + + + + + diff --git a/static/icons/svg/wi-wind-beaufort-9.svg b/static/icons/svg/wi-wind-beaufort-9.svg new file mode 100644 index 0000000..41b7d41 --- /dev/null +++ b/static/icons/svg/wi-wind-beaufort-9.svg @@ -0,0 +1,23 @@ + + + + + diff --git a/static/icons/svg/wi-wind-deg.svg b/static/icons/svg/wi-wind-deg.svg new file mode 100644 index 0000000..3007410 --- /dev/null +++ b/static/icons/svg/wi-wind-deg.svg @@ -0,0 +1,12 @@ + + + + + diff --git a/static/icons/svg/wi-windy.svg b/static/icons/svg/wi-windy.svg new file mode 100644 index 0000000..de5488a --- /dev/null +++ b/static/icons/svg/wi-windy.svg @@ -0,0 +1,14 @@ + + + + + diff --git a/static/style.css b/static/style.css index 693eee9..d6983a6 100644 --- a/static/style.css +++ b/static/style.css @@ -18,54 +18,118 @@ } -html, body, footer { +html, body, .container { background: var(--bg); color: var(--text); font-family: var(--sans-font); - justify-content: center; + box-sizing: border-box; + height: 100%; + width: 100%; + font-size: 12pt; +} + +.content { + display: flex; align-items: center; + align-content: flex-start; + flex-flow: row wrap; + margin: 2%; + border-radius: 15px; + height: 100%; + justify-content: center; + border: 3px solid var(--accent); +} + +div.searchbar { display: flex; + align-items: left; + justify-content: left; + margin-left: 5px; + width: 100%; + margin-top: 1%; } -div.weather-box { +div.current { + display: flex; + flex-flow: column wrap; + height: 15%; + flex-shrink: 1; +} + +div.current-icon { + width: 100%; height: 100%; - align-items: center; - display: inline-flex; } -div.daily-box { - text-align: center; - padding: 1em; - border: 0.5em solid var(--acent-bg); - border-radius: 5%; - box-shadow: 0 1px 6px rgba(0, 0, 0, 0.12), 0 1px 4px rgba(0, 0, 0, 0.24); - box-sizing: border-box; - width: 20em; - height: 10em; - overflow-wrap: normal; - float: left; +img.weather-icon { + display: inline-block; } -div.hourly-box { - text-align: center; - padding: 1em; - border: 0.5em solid var(--acent-bg); - border-radius: 5%; - box-shadow: 0 1px 6px rgba(0, 0, 0, 0.12), 0 1px 4px rgba(0, 0, 0, 0.24); - box-sizing: border-box; - width: 20em; - height: 10em; - overflow-wrap: normal; +div.current-temp { + display: inline-block; + font-size: 18pt; + text-align: left; + width: 100% +} + +div.current-weather { + display: inline-block; + width: 100%; + font-size: 16pt; + margin-bottom: 5px; + text-align: left; } +div.current-wind { + display: inline-block; + width: 100%; + font-size: 14pt; + text-align: left; +} -/*=== Links */ -a { - color: var(--accent); +div.current-sunrise, div.current-sunset { + display: inline-block; + width: 100%; + font-size: 14pt; } -a:hover { - color: var(--accent); +div.forecast-header { + width: 100%; + display: flex; + flex-grow: 0; + flex-shrink: 1; + max-height: 10%; +} +h2.forecast-header { + margin-left: 5px; + margin-right: 5px; + border-bottom: 1px solid; + width: 100% +} + +.daily, .hourly { + display: flex; + flex-flow: row nowrap; + align-items: center; + overflow-x: scroll; + overflow-y: hidden; + white-space: nowrap; + width: 100%; + +} + +.hourly-box, .daily-box { + display: flex; + flex-flow: column wrap; + flex-grow: 1; + justify-content: center; + align-items: flex-start; + + padding: 1em; + overflow-wrap: normal; + min-width: 15%; + white-space: normal; + margin: 5px; } input, select, textarea { @@ -89,14 +153,3 @@ input:disabled, select:disabled { button { font-family: var(--sans-font); } - -button.as-link, -button.as-link:hover, -button.as-link:active { - background: transparent; - /* background-color: var(--bg);A*/ -} - -button.as-link[disabled] { - color: #ddd !important; -} diff --git a/templates/base.html b/templates/base.html index d464a5a..6fe776a 100644 --- a/templates/base.html +++ b/templates/base.html @@ -1,21 +1,20 @@ - - - {% block title %} {% endblock %} - - - - + + + {% block title %} {% endblock %} + + + + -
- {% block content %} {% endblock %} -
+
+ {% block content %} {% endblock %} +
- -{% block scripts %}{% endblock %} - + + diff --git a/templates/daily.html b/templates/daily.html deleted file mode 100644 index 5eb765e..0000000 --- a/templates/daily.html +++ /dev/null @@ -1,13 +0,0 @@ -{% extends 'base.html' %} -{% block content %} -
-{% for item in data %} -
- {{ item.time.strftime("%a %x") }}
- {{ item.high }}°F / {{ item.low }}°F
- {{ item.short_forecast_am }}

-
-{% endfor %} -
-{% endblock %} - diff --git a/templates/hourly.html b/templates/hourly.html deleted file mode 100644 index 56f9d9b..0000000 --- a/templates/hourly.html +++ /dev/null @@ -1,18 +0,0 @@ -{% extends 'base.html' %} - -{% block content %} -
-{% for item in data %} -
- {{ item.time.strftime("%a %x %I:%M %p") }}
- {{ item.temp }}°F
- {{ item.humidity }}%
- {{ item.precip_chance }}%
- {{ item.precip_amount }}in
- {{ item.wind_speed }}MPH
- {{ item.wind_direction }}

-
-{% endfor %} -
-{% endblock %} - diff --git a/templates/index.html b/templates/index.html index 2d97379..a877fef 100644 --- a/templates/index.html +++ b/templates/index.html @@ -4,23 +4,7 @@

{% block title %} Enter a Location {% endblock %}

{{ form.csrf_token }} -

- {{ form.location.label }}
- {{ form.location }} -

-

- {{ form.days.label }}
- {{ form.days }} -

-

- {{ form.forecast_type.label }}
- {{ form.forecast_type }} -

-

{{ form.submit() }}

+ {{ form.location }} + {{ form.submit() }}
{% endblock %} - -
- {{ form.name.label }} {{ form.name(size=20) }} - -
diff --git a/templates/weather.html b/templates/weather.html new file mode 100644 index 0000000..24819dc --- /dev/null +++ b/templates/weather.html @@ -0,0 +1,77 @@ +{% extends 'base.html' %} +{% block content %} +{% set is_day = data["current_weather"]["is_day"] %} +
+ +
+ {% set weather_code = data["current_weather"]["weathercode"] %} +
+
{{ weather_codes[weather_code] }}
+
{{ data["current_weather"]["temperature"]}}°F
+
Wind: {{ data["current_weather"]["windspeed"] }} MPH {{ data["current_weather"]["winddirection"] }}
+
Sunrise: {{ data["daily"]["sunrise"][0] }}
+
Sunset: {{ data["daily"]["sunset"][0] }}
+
+
+ +
+
+

Hourly Forecast

+
+ {% for i in range(hour, hour + 24) %} +
+
+
{{ data["hourly"]["time"][i] }}
+
+ {{ weather_codes[data["hourly"]["weathercode"][i]] }} + {% if data["hourly"]["weathercode"][i] > 50 %} + ({{ data["hourly"]["precipitation"][i] }}in, {{ data["hourly"]["precipitation_probability"][i] }}%) + {% endif %} +
+
{{ data["hourly"]["temperature_2m"][i]}}°F
+
Humidity: {{ data["hourly"]["relativehumidity_2m"][i] }}%
+
Wind: {{ data["hourly"]["windspeed_10m"][i] }}MPH {{ data["hourly"]["winddirection_10m"][i] }}
+
+
+ {% set weather_code = data["hourly"]["weathercode"][i] %} + +
+
+ {% endfor %} +
+
+

Daily Forecast

+
+
+ {% for i in range(7) %} +
+
+
{{ data["daily"]["time"][i] }}
+
+ {{ weather_codes[data["daily"]["weathercode"][i]] }} + {% if data["daily"]["weathercode"][i] > 50 %} + ({{ data["daily"]["precipitation_sum"][i] }}in, {{ data["daily"]["precipitation_probability_max"][i] }}%) + {% endif %} +
+
High: {{ data["daily"]["temperature_2m_max"][i] }}°F
+
Low: {{ data["daily"]["temperature_2m_min"][i] }}°F
+
Sunrise: {{ data["daily"]["sunrise"][i] }}
+
Sunset: {{ data["daily"]["sunset"][i] }}
+
+
+ {% set weather_code = data["daily"]["weathercode"][i] %} + +
+
+ {% endfor %} +
+ +
+{% endblock %} + -- cgit v1.2.3