diff --git a/api_fonction.py b/api_fonction.py index c12c198..15b57da 100644 --- a/api_fonction.py +++ b/api_fonction.py @@ -79,6 +79,31 @@ def getCurrent(query, METEOCONCEPT_TOKEN, WEATHERSTACK_TOKEN): } } +def getForecast(query, METEOCONCEPT_TOKEN, WEATHERSTACK_TOKEN): + if METEOCONCEPT_TOKEN is None and WEATHERSTACK_TOKEN is None: + log('Env variable METEOCONCEPT_TOKEN and WEATHERSTACK_TOKEN not passed') + return 'Env variable METEOCONCEPT_TOKEN and WEATHERSTACK_TOKEN not passed' + elif query is None: + log('GET/POST query variable not passed') + return 'GET/POST query variable not passed' + else: + log('Env variable METEOCONCEPT_TOKEN or/and WEATHERSTACK_TOKEN passed') + if query.isnumeric(): + insee = int(query) + with closing(urlopen( + API_FORECAST_CITY_METEOCONCEPT + + API_TOKEN_METEOCONCEPT + + METEOCONCEPT_TOKEN + + API_INSEE_METEOCONCEPT + + str(insee))) as f: + forecast_METEOCONCEPT = json.loads(f.read()) + return {"query": insee, "forecast": { + "METEOCONCEPT": forecast_METEOCONCEPT, + "WEATHERSTACK": None + } + } + else: + return 'WEATHERSTACK not implemented' def getCity(query, METEOCONCEPT_TOKEN, WEATHERSTACK_TOKEN): if METEOCONCEPT_TOKEN is None and WEATHERSTACK_TOKEN is None: diff --git a/app.py b/app.py index 031e06a..c896fb2 100644 --- a/app.py +++ b/app.py @@ -12,4 +12,4 @@ if __name__ == '__main__': app.config['METEOCONCEPT_TOKEN'] = os.environ.get('METEOCONCEPT_TOKEN', METEOCONCEPT_TOKEN) app.config['WEATHERSTACK_TOKEN'] = os.environ.get('WEATHERSTACK_TOKEN', WEATHERSTACK_TOKEN) app.config['SECRET_KEY'] = 'secret_key' - app.run(host='0.0.0.0', port=PORT, debug=True) \ No newline at end of file + app.run(host='0.0.0.0', port=PORT, debug=False) \ No newline at end of file diff --git a/config.py b/config.py index c84aa8e..ee83be3 100644 --- a/config.py +++ b/config.py @@ -8,6 +8,7 @@ API_TOKEN_METEOCONCEPT = '?token=' API_SEARCH_METEOCONCEPT = '&search=' API_INSEE_METEOCONCEPT = '&insee=' API_RADIUS_METEOCONCEPT = '&radius=' +API_FORECAST_CITY_METEOCONCEPT = BASE_API_URL_METEOCONCEPT + 'forecast/daily' API_LOCATION_CITIES_METEOCONCEPT = BASE_API_URL_METEOCONCEPT + 'location/cities' API_LOCATION_CITY_METEOCONCEPT = BASE_API_URL_METEOCONCEPT + 'location/city' API_EPHEMERIDE_METEOCONCEPT = BASE_API_URL_METEOCONCEPT + 'ephemeride/1' diff --git a/flask_route.py b/flask_route.py index df6da70..9ed8205 100644 --- a/flask_route.py +++ b/flask_route.py @@ -1,4 +1,4 @@ -from flask import Flask, request +from flask import Flask, request, render_template from api_fonction import * app = Flask(__name__) @@ -42,6 +42,15 @@ def current(): # put application's code here query = request.args.get('query') return app_response(getCurrent(query, app.config['METEOCONCEPT_TOKEN'], app.config['WEATHERSTACK_TOKEN'])) +# Prévision pour une ville +@app.route('/forecast', methods=['POST', 'GET']) +def forecast(): # put application's code here + if request.method == 'POST': + query = request.form['query'] + else: + query = request.args.get('query') + return app_response(getForecast(query, app.config['METEOCONCEPT_TOKEN'], app.config['WEATHERSTACK_TOKEN'])) + # Informations sur la Ville @app.route('/city', methods=['POST', 'GET']) @@ -53,28 +62,6 @@ def city(): # put application's code here return app_response(getCity(query, app.config['METEOCONCEPT_TOKEN'], app.config['WEATHERSTACK_TOKEN'])) -# @app.route('/', methods=['POST', 'GET']) -# def index(): -# response_cities = False -# response_ephemeride = False -# response_around = False -# -# search = Search() -# city = City() -# around = Around() -# -# if search.submit_search.data and search.validate_on_submit(): -# return render_template('index.html', cities=getApiCity(search)) -# -# if city.submit_city.data and city.validate_on_submit(): -# return render_template('index.html', ephemeride=getEphemeride(city)) -# -# if around.submit_around.data and around.validate_on_submit(): -# return render_template('index.html', around=getAround(around, 1)) -# -# # TODO Multiple form for insee ? or ajax ? -# insee = request.form['insee'] -# response_ephemeride = getEphemeride(insee) -# response_around = getAround(insee, 1) -# -# return render_template('index.html', cities=response_cities, ephemeride=response_ephemeride, around=response_around) \ No newline at end of file +@app.route('/', methods=['POST', 'GET']) +def index(): + return render_template('index.html') \ No newline at end of file diff --git a/static/css/style.css b/static/css/style.css index 2999f36..f4ce51e 100644 --- a/static/css/style.css +++ b/static/css/style.css @@ -1,27 +1,79 @@ -h1{ - color: black; +a { + color: white; + opacity: 0.6; + text-decoration: none; } -form{ +a:hover, a:active, a:focus{ + color: white; + text-decoration: none; + opacity: 1; } -ul{ - +.active { + color: white; + text-decoration: none; + opacity: 1; } -li{ - +body{ + background-color: #F4F6F7; } -.meteoAPI{ - border: 2px #eee solid; - padding: 10px; - text-align: center; +#wrapper { + background-color: #28688C; + box-shadow: 1px 5px 25px 3px #444; + border-radius: 10px; + margin: 100px auto; + max-width: 720px; + padding: 0px; + color: white; } -.response{ +#current-weather{ + padding: 15px; } -.error{ - color: red; +#mainTemperature{ + font-size: 5.5em; + line-height: 0.7; } + +#tempDescription { + margin-top: 10px; + text-align: center; +} + +.day-weather-box { + border: 1px solid #28688C; + background-color: #2E7FA1; + border-radius: 5px; + height: 5em; +} + +.day-weather-box p{ + margin-bottom: 0; +} + +.side-weather-info { + padding: 0px 10px; +} + +.day-weather-inner-box { + display: inline-flex; + margin: 14px auto; + padding: 0px 5px; +} + +.forecast-main { + padding: 0px 0px 0px 30px; +} + +.forecast-icon { + font-size: 25px; + margin-left: 5px; +} + +.modal-body p{ + color: #333; +} \ No newline at end of file diff --git a/static/css/weather-icons.css b/static/css/weather-icons.css new file mode 100644 index 0000000..657a6e2 --- /dev/null +++ b/static/css/weather-icons.css @@ -0,0 +1,1838 @@ +/*! + * Weather Icons 2.0.10 + * Updated November 1, 2020 + * Weather themed icons for Bootstrap + * Author - Erik Flowers - erik@helloerik.com + * Email: erik@helloerik.com + * Twitter: http://twitter.com/Erik_UX + * ------------------------------------------------------------------------------ + * Maintained at http://erikflowers.github.io/weather-icons + * + * License + * ------------------------------------------------------------------------------ + * - Font licensed under SIL OFL 1.1 - + * http://scripts.sil.org/OFL + * - CSS, SCSS and LESS are licensed under MIT License - + * http://opensource.org/licenses/mit-license.html + * - Documentation licensed under CC BY 3.0 - + * http://creativecommons.org/licenses/by/3.0/ + * - Inspired by and works great as a companion with Font Awesome + * "Font Awesome by Dave Gandy - http://fontawesome.io" + */ +@font-face { + font-family: 'weathericons'; + src: url('../font/weathericons-regular-webfont.eot'); + src: url('../font/weathericons-regular-webfont.eot?#iefix') format('embedded-opentype'), url('../font/weathericons-regular-webfont.woff2') format('woff2'), url('../font/weathericons-regular-webfont.woff') format('woff'), url('../font/weathericons-regular-webfont.ttf') format('truetype'), url('../font/weathericons-regular-webfont.svg#weather_iconsregular') format('svg'); + font-weight: normal; + font-style: normal; +} +.wi { + display: inline-block; + font-family: 'weathericons'; + font-style: normal; + font-weight: normal; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} +.wi-fw { + text-align: center; + width: 1.4em; +} +.wi-rotate-90 { + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1); + -webkit-transform: rotate(90deg); + -ms-transform: rotate(90deg); + transform: rotate(90deg); +} +.wi-rotate-180 { + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2); + -webkit-transform: rotate(180deg); + -ms-transform: rotate(180deg); + transform: rotate(180deg); +} +.wi-rotate-270 { + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3); + -webkit-transform: rotate(270deg); + -ms-transform: rotate(270deg); + transform: rotate(270deg); +} +.wi-flip-horizontal { + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1); + -webkit-transform: scale(-1, 1); + -ms-transform: scale(-1, 1); + transform: scale(-1, 1); +} +.wi-flip-vertical { + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1); + -webkit-transform: scale(1, -1); + -ms-transform: scale(1, -1); + transform: scale(1, -1); +} +.wi-day-sunny:before { + content: "\f00d"; +} +.wi-day-cloudy:before { + content: "\f002"; +} +.wi-day-cloudy-gusts:before { + content: "\f000"; +} +.wi-day-cloudy-windy:before { + content: "\f001"; +} +.wi-day-fog:before { + content: "\f003"; +} +.wi-day-hail:before { + content: "\f004"; +} +.wi-day-haze:before { + content: "\f0b6"; +} +.wi-day-lightning:before { + content: "\f005"; +} +.wi-day-rain:before { + content: "\f008"; +} +.wi-day-rain-mix:before { + content: "\f006"; +} +.wi-day-rain-wind:before { + content: "\f007"; +} +.wi-day-showers:before { + content: "\f009"; +} +.wi-day-sleet:before { + content: "\f0b2"; +} +.wi-day-sleet-storm:before { + content: "\f068"; +} +.wi-day-snow:before { + content: "\f00a"; +} +.wi-day-snow-thunderstorm:before { + content: "\f06b"; +} +.wi-day-snow-wind:before { + content: "\f065"; +} +.wi-day-sprinkle:before { + content: "\f00b"; +} +.wi-day-storm-showers:before { + content: "\f00e"; +} +.wi-day-sunny-overcast:before { + content: "\f00c"; +} +.wi-day-thunderstorm:before { + content: "\f010"; +} +.wi-day-windy:before { + content: "\f085"; +} +.wi-solar-eclipse:before { + content: "\f06e"; +} +.wi-hot:before { + content: "\f072"; +} +.wi-day-cloudy-high:before { + content: "\f07d"; +} +.wi-day-light-wind:before { + content: "\f0c4"; +} +.wi-night-clear:before { + content: "\f02e"; +} +.wi-night-alt-cloudy:before { + content: "\f086"; +} +.wi-night-alt-cloudy-gusts:before { + content: "\f022"; +} +.wi-night-alt-cloudy-windy:before { + content: "\f023"; +} +.wi-night-alt-hail:before { + content: "\f024"; +} +.wi-night-alt-lightning:before { + content: "\f025"; +} +.wi-night-alt-rain:before { + content: "\f028"; +} +.wi-night-alt-rain-mix:before { + content: "\f026"; +} +.wi-night-alt-rain-wind:before { + content: "\f027"; +} +.wi-night-alt-showers:before { + content: "\f029"; +} +.wi-night-alt-sleet:before { + content: "\f0b4"; +} +.wi-night-alt-sleet-storm:before { + content: "\f06a"; +} +.wi-night-alt-snow:before { + content: "\f02a"; +} +.wi-night-alt-snow-thunderstorm:before { + content: "\f06d"; +} +.wi-night-alt-snow-wind:before { + content: "\f067"; +} +.wi-night-alt-sprinkle:before { + content: "\f02b"; +} +.wi-night-alt-storm-showers:before { + content: "\f02c"; +} +.wi-night-alt-thunderstorm:before { + content: "\f02d"; +} +.wi-night-cloudy:before { + content: "\f031"; +} +.wi-night-cloudy-gusts:before { + content: "\f02f"; +} +.wi-night-cloudy-windy:before { + content: "\f030"; +} +.wi-night-fog:before { + content: "\f04a"; +} +.wi-night-hail:before { + content: "\f032"; +} +.wi-night-lightning:before { + content: "\f033"; +} +.wi-night-partly-cloudy:before { + content: "\f083"; +} +.wi-night-rain:before { + content: "\f036"; +} +.wi-night-rain-mix:before { + content: "\f034"; +} +.wi-night-rain-wind:before { + content: "\f035"; +} +.wi-night-showers:before { + content: "\f037"; +} +.wi-night-sleet:before { + content: "\f0b3"; +} +.wi-night-sleet-storm:before { + content: "\f069"; +} +.wi-night-snow:before { + content: "\f038"; +} +.wi-night-snow-thunderstorm:before { + content: "\f06c"; +} +.wi-night-snow-wind:before { + content: "\f066"; +} +.wi-night-sprinkle:before { + content: "\f039"; +} +.wi-night-storm-showers:before { + content: "\f03a"; +} +.wi-night-thunderstorm:before { + content: "\f03b"; +} +.wi-lunar-eclipse:before { + content: "\f070"; +} +.wi-stars:before { + content: "\f077"; +} +.wi-storm-showers:before { + content: "\f01d"; +} +.wi-thunderstorm:before { + content: "\f01e"; +} +.wi-night-alt-cloudy-high:before { + content: "\f07e"; +} +.wi-night-cloudy-high:before { + content: "\f080"; +} +.wi-night-alt-partly-cloudy:before { + content: "\f081"; +} +.wi-cloud:before { + content: "\f041"; +} +.wi-cloudy:before { + content: "\f013"; +} +.wi-cloudy-gusts:before { + content: "\f011"; +} +.wi-cloudy-windy:before { + content: "\f012"; +} +.wi-fog:before { + content: "\f014"; +} +.wi-hail:before { + content: "\f015"; +} +.wi-rain:before { + content: "\f019"; +} +.wi-rain-mix:before { + content: "\f017"; +} +.wi-rain-wind:before { + content: "\f018"; +} +.wi-showers:before { + content: "\f01a"; +} +.wi-sleet:before { + content: "\f0b5"; +} +.wi-snow:before { + content: "\f01b"; +} +.wi-sprinkle:before { + content: "\f01c"; +} +.wi-storm-showers:before { + content: "\f01d"; +} +.wi-thunderstorm:before { + content: "\f01e"; +} +.wi-snow-wind:before { + content: "\f064"; +} +.wi-snow:before { + content: "\f01b"; +} +.wi-smog:before { + content: "\f074"; +} +.wi-smoke:before { + content: "\f062"; +} +.wi-lightning:before { + content: "\f016"; +} +.wi-raindrops:before { + content: "\f04e"; +} +.wi-raindrop:before { + content: "\f078"; +} +.wi-dust:before { + content: "\f063"; +} +.wi-snowflake-cold:before { + content: "\f076"; +} +.wi-windy:before { + content: "\f021"; +} +.wi-strong-wind:before { + content: "\f050"; +} +.wi-sandstorm:before { + content: "\f082"; +} +.wi-earthquake:before { + content: "\f0c6"; +} +.wi-fire:before { + content: "\f0c7"; +} +.wi-flood:before { + content: "\f07c"; +} +.wi-meteor:before { + content: "\f071"; +} +.wi-tsunami:before { + content: "\f0c5"; +} +.wi-volcano:before { + content: "\f0c8"; +} +.wi-hurricane:before { + content: "\f073"; +} +.wi-tornado:before { + content: "\f056"; +} +.wi-small-craft-advisory:before { + content: "\f0cc"; +} +.wi-gale-warning:before { + content: "\f0cd"; +} +.wi-storm-warning:before { + content: "\f0ce"; +} +.wi-hurricane-warning:before { + content: "\f0cf"; +} +.wi-wind-direction:before { + content: "\f0b1"; +} +.wi-alien:before { + content: "\f075"; +} +.wi-celsius:before { + content: "\f03c"; +} +.wi-fahrenheit:before { + content: "\f045"; +} +.wi-degrees:before { + content: "\f042"; +} +.wi-thermometer:before { + content: "\f055"; +} +.wi-thermometer-exterior:before { + content: "\f053"; +} +.wi-thermometer-internal:before { + content: "\f054"; +} +.wi-cloud-down:before { + content: "\f03d"; +} +.wi-cloud-up:before { + content: "\f040"; +} +.wi-cloud-refresh:before { + content: "\f03e"; +} +.wi-horizon:before { + content: "\f047"; +} +.wi-horizon-alt:before { + content: "\f046"; +} +.wi-sunrise:before { + content: "\f051"; +} +.wi-sunset:before { + content: "\f052"; +} +.wi-moonrise:before { + content: "\f0c9"; +} +.wi-moonset:before { + content: "\f0ca"; +} +.wi-refresh:before { + content: "\f04c"; +} +.wi-refresh-alt:before { + content: "\f04b"; +} +.wi-umbrella:before { + content: "\f084"; +} +.wi-barometer:before { + content: "\f079"; +} +.wi-humidity:before { + content: "\f07a"; +} +.wi-na:before { + content: "\f07b"; +} +.wi-train:before { + content: "\f0cb"; +} +.wi-moon-new:before { + content: "\f095"; +} +.wi-moon-waxing-crescent-1:before { + content: "\f096"; +} +.wi-moon-waxing-crescent-2:before { + content: "\f097"; +} +.wi-moon-waxing-crescent-3:before { + content: "\f098"; +} +.wi-moon-waxing-crescent-4:before { + content: "\f099"; +} +.wi-moon-waxing-crescent-5:before { + content: "\f09a"; +} +.wi-moon-waxing-crescent-6:before { + content: "\f09b"; +} +.wi-moon-first-quarter:before { + content: "\f09c"; +} +.wi-moon-waxing-gibbous-1:before { + content: "\f09d"; +} +.wi-moon-waxing-gibbous-2:before { + content: "\f09e"; +} +.wi-moon-waxing-gibbous-3:before { + content: "\f09f"; +} +.wi-moon-waxing-gibbous-4:before { + content: "\f0a0"; +} +.wi-moon-waxing-gibbous-5:before { + content: "\f0a1"; +} +.wi-moon-waxing-gibbous-6:before { + content: "\f0a2"; +} +.wi-moon-full:before { + content: "\f0a3"; +} +.wi-moon-waning-gibbous-1:before { + content: "\f0a4"; +} +.wi-moon-waning-gibbous-2:before { + content: "\f0a5"; +} +.wi-moon-waning-gibbous-3:before { + content: "\f0a6"; +} +.wi-moon-waning-gibbous-4:before { + content: "\f0a7"; +} +.wi-moon-waning-gibbous-5:before { + content: "\f0a8"; +} +.wi-moon-waning-gibbous-6:before { + content: "\f0a9"; +} +.wi-moon-third-quarter:before { + content: "\f0aa"; +} +.wi-moon-waning-crescent-1:before { + content: "\f0ab"; +} +.wi-moon-waning-crescent-2:before { + content: "\f0ac"; +} +.wi-moon-waning-crescent-3:before { + content: "\f0ad"; +} +.wi-moon-waning-crescent-4:before { + content: "\f0ae"; +} +.wi-moon-waning-crescent-5:before { + content: "\f0af"; +} +.wi-moon-waning-crescent-6:before { + content: "\f0b0"; +} +.wi-moon-alt-new:before { + content: "\f0eb"; +} +.wi-moon-alt-waxing-crescent-1:before { + content: "\f0d0"; +} +.wi-moon-alt-waxing-crescent-2:before { + content: "\f0d1"; +} +.wi-moon-alt-waxing-crescent-3:before { + content: "\f0d2"; +} +.wi-moon-alt-waxing-crescent-4:before { + content: "\f0d3"; +} +.wi-moon-alt-waxing-crescent-5:before { + content: "\f0d4"; +} +.wi-moon-alt-waxing-crescent-6:before { + content: "\f0d5"; +} +.wi-moon-alt-first-quarter:before { + content: "\f0d6"; +} +.wi-moon-alt-waxing-gibbous-1:before { + content: "\f0d7"; +} +.wi-moon-alt-waxing-gibbous-2:before { + content: "\f0d8"; +} +.wi-moon-alt-waxing-gibbous-3:before { + content: "\f0d9"; +} +.wi-moon-alt-waxing-gibbous-4:before { + content: "\f0da"; +} +.wi-moon-alt-waxing-gibbous-5:before { + content: "\f0db"; +} +.wi-moon-alt-waxing-gibbous-6:before { + content: "\f0dc"; +} +.wi-moon-alt-full:before { + content: "\f0dd"; +} +.wi-moon-alt-waning-gibbous-1:before { + content: "\f0de"; +} +.wi-moon-alt-waning-gibbous-2:before { + content: "\f0df"; +} +.wi-moon-alt-waning-gibbous-3:before { + content: "\f0e0"; +} +.wi-moon-alt-waning-gibbous-4:before { + content: "\f0e1"; +} +.wi-moon-alt-waning-gibbous-5:before { + content: "\f0e2"; +} +.wi-moon-alt-waning-gibbous-6:before { + content: "\f0e3"; +} +.wi-moon-alt-third-quarter:before { + content: "\f0e4"; +} +.wi-moon-alt-waning-crescent-1:before { + content: "\f0e5"; +} +.wi-moon-alt-waning-crescent-2:before { + content: "\f0e6"; +} +.wi-moon-alt-waning-crescent-3:before { + content: "\f0e7"; +} +.wi-moon-alt-waning-crescent-4:before { + content: "\f0e8"; +} +.wi-moon-alt-waning-crescent-5:before { + content: "\f0e9"; +} +.wi-moon-alt-waning-crescent-6:before { + content: "\f0ea"; +} +.wi-moon-0:before { + content: "\f095"; +} +.wi-moon-1:before { + content: "\f096"; +} +.wi-moon-2:before { + content: "\f097"; +} +.wi-moon-3:before { + content: "\f098"; +} +.wi-moon-4:before { + content: "\f099"; +} +.wi-moon-5:before { + content: "\f09a"; +} +.wi-moon-6:before { + content: "\f09b"; +} +.wi-moon-7:before { + content: "\f09c"; +} +.wi-moon-8:before { + content: "\f09d"; +} +.wi-moon-9:before { + content: "\f09e"; +} +.wi-moon-10:before { + content: "\f09f"; +} +.wi-moon-11:before { + content: "\f0a0"; +} +.wi-moon-12:before { + content: "\f0a1"; +} +.wi-moon-13:before { + content: "\f0a2"; +} +.wi-moon-14:before { + content: "\f0a3"; +} +.wi-moon-15:before { + content: "\f0a4"; +} +.wi-moon-16:before { + content: "\f0a5"; +} +.wi-moon-17:before { + content: "\f0a6"; +} +.wi-moon-18:before { + content: "\f0a7"; +} +.wi-moon-19:before { + content: "\f0a8"; +} +.wi-moon-20:before { + content: "\f0a9"; +} +.wi-moon-21:before { + content: "\f0aa"; +} +.wi-moon-22:before { + content: "\f0ab"; +} +.wi-moon-23:before { + content: "\f0ac"; +} +.wi-moon-24:before { + content: "\f0ad"; +} +.wi-moon-25:before { + content: "\f0ae"; +} +.wi-moon-26:before { + content: "\f0af"; +} +.wi-moon-27:before { + content: "\f0b0"; +} +.wi-time-1:before { + content: "\f08a"; +} +.wi-time-2:before { + content: "\f08b"; +} +.wi-time-3:before { + content: "\f08c"; +} +.wi-time-4:before { + content: "\f08d"; +} +.wi-time-5:before { + content: "\f08e"; +} +.wi-time-6:before { + content: "\f08f"; +} +.wi-time-7:before { + content: "\f090"; +} +.wi-time-8:before { + content: "\f091"; +} +.wi-time-9:before { + content: "\f092"; +} +.wi-time-10:before { + content: "\f093"; +} +.wi-time-11:before { + content: "\f094"; +} +.wi-time-12:before { + content: "\f089"; +} +.wi-direction-up:before { + content: "\f058"; +} +.wi-direction-up-right:before { + content: "\f057"; +} +.wi-direction-right:before { + content: "\f04d"; +} +.wi-direction-down-right:before { + content: "\f088"; +} +.wi-direction-down:before { + content: "\f044"; +} +.wi-direction-down-left:before { + content: "\f043"; +} +.wi-direction-left:before { + content: "\f048"; +} +.wi-direction-up-left:before { + content: "\f087"; +} +.wi-wind-beaufort-0:before { + content: "\f0b7"; +} +.wi-wind-beaufort-1:before { + content: "\f0b8"; +} +.wi-wind-beaufort-2:before { + content: "\f0b9"; +} +.wi-wind-beaufort-3:before { + content: "\f0ba"; +} +.wi-wind-beaufort-4:before { + content: "\f0bb"; +} +.wi-wind-beaufort-5:before { + content: "\f0bc"; +} +.wi-wind-beaufort-6:before { + content: "\f0bd"; +} +.wi-wind-beaufort-7:before { + content: "\f0be"; +} +.wi-wind-beaufort-8:before { + content: "\f0bf"; +} +.wi-wind-beaufort-9:before { + content: "\f0c0"; +} +.wi-wind-beaufort-10:before { + content: "\f0c1"; +} +.wi-wind-beaufort-11:before { + content: "\f0c2"; +} +.wi-wind-beaufort-12:before { + content: "\f0c3"; +} +.wi-yahoo-0:before { + content: "\f056"; +} +.wi-yahoo-1:before { + content: "\f00e"; +} +.wi-yahoo-2:before { + content: "\f073"; +} +.wi-yahoo-3:before { + content: "\f01e"; +} +.wi-yahoo-4:before { + content: "\f01e"; +} +.wi-yahoo-5:before { + content: "\f017"; +} +.wi-yahoo-6:before { + content: "\f017"; +} +.wi-yahoo-7:before { + content: "\f017"; +} +.wi-yahoo-8:before { + content: "\f015"; +} +.wi-yahoo-9:before { + content: "\f01a"; +} +.wi-yahoo-10:before { + content: "\f015"; +} +.wi-yahoo-11:before { + content: "\f01a"; +} +.wi-yahoo-12:before { + content: "\f01a"; +} +.wi-yahoo-13:before { + content: "\f01b"; +} +.wi-yahoo-14:before { + content: "\f00a"; +} +.wi-yahoo-15:before { + content: "\f064"; +} +.wi-yahoo-16:before { + content: "\f01b"; +} +.wi-yahoo-17:before { + content: "\f015"; +} +.wi-yahoo-18:before { + content: "\f017"; +} +.wi-yahoo-19:before { + content: "\f063"; +} +.wi-yahoo-20:before { + content: "\f014"; +} +.wi-yahoo-21:before { + content: "\f021"; +} +.wi-yahoo-22:before { + content: "\f062"; +} +.wi-yahoo-23:before { + content: "\f050"; +} +.wi-yahoo-24:before { + content: "\f050"; +} +.wi-yahoo-25:before { + content: "\f076"; +} +.wi-yahoo-26:before { + content: "\f013"; +} +.wi-yahoo-27:before { + content: "\f031"; +} +.wi-yahoo-28:before { + content: "\f002"; +} +.wi-yahoo-29:before { + content: "\f031"; +} +.wi-yahoo-30:before { + content: "\f002"; +} +.wi-yahoo-31:before { + content: "\f02e"; +} +.wi-yahoo-32:before { + content: "\f00d"; +} +.wi-yahoo-33:before { + content: "\f083"; +} +.wi-yahoo-34:before { + content: "\f00c"; +} +.wi-yahoo-35:before { + content: "\f017"; +} +.wi-yahoo-36:before { + content: "\f072"; +} +.wi-yahoo-37:before { + content: "\f00e"; +} +.wi-yahoo-38:before { + content: "\f00e"; +} +.wi-yahoo-39:before { + content: "\f00e"; +} +.wi-yahoo-40:before { + content: "\f01a"; +} +.wi-yahoo-41:before { + content: "\f064"; +} +.wi-yahoo-42:before { + content: "\f01b"; +} +.wi-yahoo-43:before { + content: "\f064"; +} +.wi-yahoo-44:before { + content: "\f00c"; +} +.wi-yahoo-45:before { + content: "\f00e"; +} +.wi-yahoo-46:before { + content: "\f01b"; +} +.wi-yahoo-47:before { + content: "\f00e"; +} +.wi-yahoo-3200:before { + content: "\f077"; +} +.wi-forecast-io-clear-day:before { + content: "\f00d"; +} +.wi-forecast-io-clear-night:before { + content: "\f02e"; +} +.wi-forecast-io-rain:before { + content: "\f019"; +} +.wi-forecast-io-snow:before { + content: "\f01b"; +} +.wi-forecast-io-sleet:before { + content: "\f0b5"; +} +.wi-forecast-io-wind:before { + content: "\f050"; +} +.wi-forecast-io-fog:before { + content: "\f014"; +} +.wi-forecast-io-cloudy:before { + content: "\f013"; +} +.wi-forecast-io-partly-cloudy-day:before { + content: "\f002"; +} +.wi-forecast-io-partly-cloudy-night:before { + content: "\f031"; +} +.wi-forecast-io-hail:before { + content: "\f015"; +} +.wi-forecast-io-thunderstorm:before { + content: "\f01e"; +} +.wi-forecast-io-tornado:before { + content: "\f056"; +} +.wi-wmo4680-0:before, +.wi-wmo4680-00:before { + content: "\f055"; +} +.wi-wmo4680-1:before, +.wi-wmo4680-01:before { + content: "\f013"; +} +.wi-wmo4680-2:before, +.wi-wmo4680-02:before { + content: "\f055"; +} +.wi-wmo4680-3:before, +.wi-wmo4680-03:before { + content: "\f013"; +} +.wi-wmo4680-4:before, +.wi-wmo4680-04:before { + content: "\f014"; +} +.wi-wmo4680-5:before, +.wi-wmo4680-05:before { + content: "\f014"; +} +.wi-wmo4680-10:before { + content: "\f014"; +} +.wi-wmo4680-11:before { + content: "\f014"; +} +.wi-wmo4680-12:before { + content: "\f016"; +} +.wi-wmo4680-18:before { + content: "\f050"; +} +.wi-wmo4680-20:before { + content: "\f014"; +} +.wi-wmo4680-21:before { + content: "\f017"; +} +.wi-wmo4680-22:before { + content: "\f017"; +} +.wi-wmo4680-23:before { + content: "\f019"; +} +.wi-wmo4680-24:before { + content: "\f01b"; +} +.wi-wmo4680-25:before { + content: "\f015"; +} +.wi-wmo4680-26:before { + content: "\f01e"; +} +.wi-wmo4680-27:before { + content: "\f063"; +} +.wi-wmo4680-28:before { + content: "\f063"; +} +.wi-wmo4680-29:before { + content: "\f063"; +} +.wi-wmo4680-30:before { + content: "\f014"; +} +.wi-wmo4680-31:before { + content: "\f014"; +} +.wi-wmo4680-32:before { + content: "\f014"; +} +.wi-wmo4680-33:before { + content: "\f014"; +} +.wi-wmo4680-34:before { + content: "\f014"; +} +.wi-wmo4680-35:before { + content: "\f014"; +} +.wi-wmo4680-40:before { + content: "\f017"; +} +.wi-wmo4680-41:before { + content: "\f01c"; +} +.wi-wmo4680-42:before { + content: "\f019"; +} +.wi-wmo4680-43:before { + content: "\f01c"; +} +.wi-wmo4680-44:before { + content: "\f019"; +} +.wi-wmo4680-45:before { + content: "\f015"; +} +.wi-wmo4680-46:before { + content: "\f015"; +} +.wi-wmo4680-47:before { + content: "\f01b"; +} +.wi-wmo4680-48:before { + content: "\f01b"; +} +.wi-wmo4680-50:before { + content: "\f01c"; +} +.wi-wmo4680-51:before { + content: "\f01c"; +} +.wi-wmo4680-52:before { + content: "\f019"; +} +.wi-wmo4680-53:before { + content: "\f019"; +} +.wi-wmo4680-54:before { + content: "\f076"; +} +.wi-wmo4680-55:before { + content: "\f076"; +} +.wi-wmo4680-56:before { + content: "\f076"; +} +.wi-wmo4680-57:before { + content: "\f01c"; +} +.wi-wmo4680-58:before { + content: "\f019"; +} +.wi-wmo4680-60:before { + content: "\f01c"; +} +.wi-wmo4680-61:before { + content: "\f01c"; +} +.wi-wmo4680-62:before { + content: "\f019"; +} +.wi-wmo4680-63:before { + content: "\f019"; +} +.wi-wmo4680-64:before { + content: "\f015"; +} +.wi-wmo4680-65:before { + content: "\f015"; +} +.wi-wmo4680-66:before { + content: "\f015"; +} +.wi-wmo4680-67:before { + content: "\f017"; +} +.wi-wmo4680-68:before { + content: "\f017"; +} +.wi-wmo4680-70:before { + content: "\f01b"; +} +.wi-wmo4680-71:before { + content: "\f01b"; +} +.wi-wmo4680-72:before { + content: "\f01b"; +} +.wi-wmo4680-73:before { + content: "\f01b"; +} +.wi-wmo4680-74:before { + content: "\f076"; +} +.wi-wmo4680-75:before { + content: "\f076"; +} +.wi-wmo4680-76:before { + content: "\f076"; +} +.wi-wmo4680-77:before { + content: "\f01b"; +} +.wi-wmo4680-78:before { + content: "\f076"; +} +.wi-wmo4680-80:before { + content: "\f019"; +} +.wi-wmo4680-81:before { + content: "\f01c"; +} +.wi-wmo4680-82:before { + content: "\f019"; +} +.wi-wmo4680-83:before { + content: "\f019"; +} +.wi-wmo4680-84:before { + content: "\f01d"; +} +.wi-wmo4680-85:before { + content: "\f017"; +} +.wi-wmo4680-86:before { + content: "\f017"; +} +.wi-wmo4680-87:before { + content: "\f017"; +} +.wi-wmo4680-89:before { + content: "\f015"; +} +.wi-wmo4680-90:before { + content: "\f016"; +} +.wi-wmo4680-91:before { + content: "\f01d"; +} +.wi-wmo4680-92:before { + content: "\f01e"; +} +.wi-wmo4680-93:before { + content: "\f01e"; +} +.wi-wmo4680-94:before { + content: "\f016"; +} +.wi-wmo4680-95:before { + content: "\f01e"; +} +.wi-wmo4680-96:before { + content: "\f01e"; +} +.wi-wmo4680-99:before { + content: "\f056"; +} +.wi-owm-200:before { + content: "\f01e"; +} +.wi-owm-201:before { + content: "\f01e"; +} +.wi-owm-202:before { + content: "\f01e"; +} +.wi-owm-210:before { + content: "\f016"; +} +.wi-owm-211:before { + content: "\f016"; +} +.wi-owm-212:before { + content: "\f016"; +} +.wi-owm-221:before { + content: "\f016"; +} +.wi-owm-230:before { + content: "\f01e"; +} +.wi-owm-231:before { + content: "\f01e"; +} +.wi-owm-232:before { + content: "\f01e"; +} +.wi-owm-300:before { + content: "\f01c"; +} +.wi-owm-301:before { + content: "\f01c"; +} +.wi-owm-302:before { + content: "\f019"; +} +.wi-owm-310:before { + content: "\f017"; +} +.wi-owm-311:before { + content: "\f019"; +} +.wi-owm-312:before { + content: "\f019"; +} +.wi-owm-313:before { + content: "\f01a"; +} +.wi-owm-314:before { + content: "\f019"; +} +.wi-owm-321:before { + content: "\f01c"; +} +.wi-owm-500:before { + content: "\f01c"; +} +.wi-owm-501:before { + content: "\f019"; +} +.wi-owm-502:before { + content: "\f019"; +} +.wi-owm-503:before { + content: "\f019"; +} +.wi-owm-504:before { + content: "\f019"; +} +.wi-owm-511:before { + content: "\f017"; +} +.wi-owm-520:before { + content: "\f01a"; +} +.wi-owm-521:before { + content: "\f01a"; +} +.wi-owm-522:before { + content: "\f01a"; +} +.wi-owm-531:before { + content: "\f01d"; +} +.wi-owm-600:before { + content: "\f01b"; +} +.wi-owm-601:before { + content: "\f01b"; +} +.wi-owm-602:before { + content: "\f0b5"; +} +.wi-owm-611:before { + content: "\f017"; +} +.wi-owm-612:before { + content: "\f017"; +} +.wi-owm-615:before { + content: "\f017"; +} +.wi-owm-616:before { + content: "\f017"; +} +.wi-owm-620:before { + content: "\f017"; +} +.wi-owm-621:before { + content: "\f01b"; +} +.wi-owm-622:before { + content: "\f01b"; +} +.wi-owm-701:before { + content: "\f014"; +} +.wi-owm-711:before { + content: "\f062"; +} +.wi-owm-721:before { + content: "\f0b6"; +} +.wi-owm-731:before { + content: "\f063"; +} +.wi-owm-741:before { + content: "\f014"; +} +.wi-owm-761:before { + content: "\f063"; +} +.wi-owm-762:before { + content: "\f063"; +} +.wi-owm-771:before { + content: "\f011"; +} +.wi-owm-781:before { + content: "\f056"; +} +.wi-owm-800:before { + content: "\f00d"; +} +.wi-owm-801:before { + content: "\f041"; +} +.wi-owm-802:before { + content: "\f041"; +} +.wi-owm-803:before { + content: "\f013"; +} +.wi-owm-804:before { + content: "\f013"; +} +.wi-owm-900:before { + content: "\f056"; +} +.wi-owm-901:before { + content: "\f01d"; +} +.wi-owm-902:before { + content: "\f073"; +} +.wi-owm-903:before { + content: "\f076"; +} +.wi-owm-904:before { + content: "\f072"; +} +.wi-owm-905:before { + content: "\f021"; +} +.wi-owm-906:before { + content: "\f015"; +} +.wi-owm-957:before { + content: "\f050"; +} +.wi-owm-day-200:before { + content: "\f010"; +} +.wi-owm-day-201:before { + content: "\f010"; +} +.wi-owm-day-202:before { + content: "\f010"; +} +.wi-owm-day-210:before { + content: "\f005"; +} +.wi-owm-day-211:before { + content: "\f005"; +} +.wi-owm-day-212:before { + content: "\f005"; +} +.wi-owm-day-221:before { + content: "\f005"; +} +.wi-owm-day-230:before { + content: "\f010"; +} +.wi-owm-day-231:before { + content: "\f010"; +} +.wi-owm-day-232:before { + content: "\f010"; +} +.wi-owm-day-300:before { + content: "\f00b"; +} +.wi-owm-day-301:before { + content: "\f00b"; +} +.wi-owm-day-302:before { + content: "\f008"; +} +.wi-owm-day-310:before { + content: "\f008"; +} +.wi-owm-day-311:before { + content: "\f008"; +} +.wi-owm-day-312:before { + content: "\f008"; +} +.wi-owm-day-313:before { + content: "\f008"; +} +.wi-owm-day-314:before { + content: "\f008"; +} +.wi-owm-day-321:before { + content: "\f00b"; +} +.wi-owm-day-500:before { + content: "\f00b"; +} +.wi-owm-day-501:before { + content: "\f008"; +} +.wi-owm-day-502:before { + content: "\f008"; +} +.wi-owm-day-503:before { + content: "\f008"; +} +.wi-owm-day-504:before { + content: "\f008"; +} +.wi-owm-day-511:before { + content: "\f006"; +} +.wi-owm-day-520:before { + content: "\f009"; +} +.wi-owm-day-521:before { + content: "\f009"; +} +.wi-owm-day-522:before { + content: "\f009"; +} +.wi-owm-day-531:before { + content: "\f00e"; +} +.wi-owm-day-600:before { + content: "\f00a"; +} +.wi-owm-day-601:before { + content: "\f0b2"; +} +.wi-owm-day-602:before { + content: "\f00a"; +} +.wi-owm-day-611:before { + content: "\f006"; +} +.wi-owm-day-612:before { + content: "\f006"; +} +.wi-owm-day-615:before { + content: "\f006"; +} +.wi-owm-day-616:before { + content: "\f006"; +} +.wi-owm-day-620:before { + content: "\f006"; +} +.wi-owm-day-621:before { + content: "\f00a"; +} +.wi-owm-day-622:before { + content: "\f00a"; +} +.wi-owm-day-701:before { + content: "\f003"; +} +.wi-owm-day-711:before { + content: "\f062"; +} +.wi-owm-day-721:before { + content: "\f0b6"; +} +.wi-owm-day-731:before { + content: "\f063"; +} +.wi-owm-day-741:before { + content: "\f003"; +} +.wi-owm-day-761:before { + content: "\f063"; +} +.wi-owm-day-762:before { + content: "\f063"; +} +.wi-owm-day-781:before { + content: "\f056"; +} +.wi-owm-day-800:before { + content: "\f00d"; +} +.wi-owm-day-801:before { + content: "\f002"; +} +.wi-owm-day-802:before { + content: "\f002"; +} +.wi-owm-day-803:before { + content: "\f013"; +} +.wi-owm-day-804:before { + content: "\f013"; +} +.wi-owm-day-900:before { + content: "\f056"; +} +.wi-owm-day-902:before { + content: "\f073"; +} +.wi-owm-day-903:before { + content: "\f076"; +} +.wi-owm-day-904:before { + content: "\f072"; +} +.wi-owm-day-906:before { + content: "\f004"; +} +.wi-owm-day-957:before { + content: "\f050"; +} +.wi-owm-night-200:before { + content: "\f02d"; +} +.wi-owm-night-201:before { + content: "\f02d"; +} +.wi-owm-night-202:before { + content: "\f02d"; +} +.wi-owm-night-210:before { + content: "\f025"; +} +.wi-owm-night-211:before { + content: "\f025"; +} +.wi-owm-night-212:before { + content: "\f025"; +} +.wi-owm-night-221:before { + content: "\f025"; +} +.wi-owm-night-230:before { + content: "\f02d"; +} +.wi-owm-night-231:before { + content: "\f02d"; +} +.wi-owm-night-232:before { + content: "\f02d"; +} +.wi-owm-night-300:before { + content: "\f02b"; +} +.wi-owm-night-301:before { + content: "\f02b"; +} +.wi-owm-night-302:before { + content: "\f028"; +} +.wi-owm-night-310:before { + content: "\f028"; +} +.wi-owm-night-311:before { + content: "\f028"; +} +.wi-owm-night-312:before { + content: "\f028"; +} +.wi-owm-night-313:before { + content: "\f028"; +} +.wi-owm-night-314:before { + content: "\f028"; +} +.wi-owm-night-321:before { + content: "\f02b"; +} +.wi-owm-night-500:before { + content: "\f02b"; +} +.wi-owm-night-501:before { + content: "\f028"; +} +.wi-owm-night-502:before { + content: "\f028"; +} +.wi-owm-night-503:before { + content: "\f028"; +} +.wi-owm-night-504:before { + content: "\f028"; +} +.wi-owm-night-511:before { + content: "\f026"; +} +.wi-owm-night-520:before { + content: "\f029"; +} +.wi-owm-night-521:before { + content: "\f029"; +} +.wi-owm-night-522:before { + content: "\f029"; +} +.wi-owm-night-531:before { + content: "\f02c"; +} +.wi-owm-night-600:before { + content: "\f02a"; +} +.wi-owm-night-601:before { + content: "\f0b4"; +} +.wi-owm-night-602:before { + content: "\f02a"; +} +.wi-owm-night-611:before { + content: "\f026"; +} +.wi-owm-night-612:before { + content: "\f026"; +} +.wi-owm-night-615:before { + content: "\f026"; +} +.wi-owm-night-616:before { + content: "\f026"; +} +.wi-owm-night-620:before { + content: "\f026"; +} +.wi-owm-night-621:before { + content: "\f02a"; +} +.wi-owm-night-622:before { + content: "\f02a"; +} +.wi-owm-night-701:before { + content: "\f04a"; +} +.wi-owm-night-711:before { + content: "\f062"; +} +.wi-owm-night-721:before { + content: "\f0b6"; +} +.wi-owm-night-731:before { + content: "\f063"; +} +.wi-owm-night-741:before { + content: "\f04a"; +} +.wi-owm-night-761:before { + content: "\f063"; +} +.wi-owm-night-762:before { + content: "\f063"; +} +.wi-owm-night-781:before { + content: "\f056"; +} +.wi-owm-night-800:before { + content: "\f02e"; +} +.wi-owm-night-801:before { + content: "\f081"; +} +.wi-owm-night-802:before { + content: "\f086"; +} +.wi-owm-night-803:before { + content: "\f013"; +} +.wi-owm-night-804:before { + content: "\f013"; +} +.wi-owm-night-900:before { + content: "\f056"; +} +.wi-owm-night-902:before { + content: "\f073"; +} +.wi-owm-night-903:before { + content: "\f076"; +} +.wi-owm-night-904:before { + content: "\f072"; +} +.wi-owm-night-906:before { + content: "\f024"; +} +.wi-owm-night-957:before { + content: "\f050"; +} +.wi-wu-chanceflurries:before { + content: "\f064"; +} +.wi-wu-chancerain:before { + content: "\f019"; +} +.wi-wu-chancesleat:before { + content: "\f0b5"; +} +.wi-wu-chancesnow:before { + content: "\f01b"; +} +.wi-wu-chancetstorms:before { + content: "\f01e"; +} +.wi-wu-clear:before { + content: "\f00d"; +} +.wi-wu-cloudy:before { + content: "\f002"; +} +.wi-wu-flurries:before { + content: "\f064"; +} +.wi-wu-hazy:before { + content: "\f0b6"; +} +.wi-wu-mostlycloudy:before { + content: "\f002"; +} +.wi-wu-mostlysunny:before { + content: "\f00d"; +} +.wi-wu-partlycloudy:before { + content: "\f002"; +} +.wi-wu-partlysunny:before { + content: "\f00d"; +} +.wi-wu-rain:before { + content: "\f01a"; +} +.wi-wu-sleat:before { + content: "\f0b5"; +} +.wi-wu-snow:before { + content: "\f01b"; +} +.wi-wu-sunny:before { + content: "\f00d"; +} +.wi-wu-tstorms:before { + content: "\f01e"; +} +.wi-wu-unknown:before { + content: "\f00d"; +} diff --git a/static/img/favicon.ico b/static/img/favicon.ico new file mode 100644 index 0000000..5ce3a6a Binary files /dev/null and b/static/img/favicon.ico differ diff --git a/static/img/weather/animated/cloudy-day-1.svg b/static/img/weather/animated/cloudy-day-1.svg new file mode 100644 index 0000000..c1f1922 --- /dev/null +++ b/static/img/weather/animated/cloudy-day-1.svg @@ -0,0 +1,175 @@ + + + \ No newline at end of file diff --git a/static/img/weather/animated/cloudy-day-2.svg b/static/img/weather/animated/cloudy-day-2.svg new file mode 100644 index 0000000..712a564 --- /dev/null +++ b/static/img/weather/animated/cloudy-day-2.svg @@ -0,0 +1,176 @@ + + + \ No newline at end of file diff --git a/static/img/weather/animated/cloudy-day-3.svg b/static/img/weather/animated/cloudy-day-3.svg new file mode 100644 index 0000000..ddcd408 --- /dev/null +++ b/static/img/weather/animated/cloudy-day-3.svg @@ -0,0 +1,175 @@ + + + \ No newline at end of file diff --git a/static/img/weather/animated/cloudy-night-1.svg b/static/img/weather/animated/cloudy-night-1.svg new file mode 100644 index 0000000..bc6360d --- /dev/null +++ b/static/img/weather/animated/cloudy-night-1.svg @@ -0,0 +1,198 @@ + + + \ No newline at end of file diff --git a/static/img/weather/animated/cloudy-night-2.svg b/static/img/weather/animated/cloudy-night-2.svg new file mode 100644 index 0000000..391ceeb --- /dev/null +++ b/static/img/weather/animated/cloudy-night-2.svg @@ -0,0 +1,198 @@ + + + \ No newline at end of file diff --git a/static/img/weather/animated/cloudy-night-3.svg b/static/img/weather/animated/cloudy-night-3.svg new file mode 100644 index 0000000..2425af9 --- /dev/null +++ b/static/img/weather/animated/cloudy-night-3.svg @@ -0,0 +1,198 @@ + + + \ No newline at end of file diff --git a/static/img/weather/animated/cloudy.svg b/static/img/weather/animated/cloudy.svg new file mode 100644 index 0000000..d94fd30 --- /dev/null +++ b/static/img/weather/animated/cloudy.svg @@ -0,0 +1,500 @@ + + + \ No newline at end of file diff --git a/static/img/weather/animated/day.svg b/static/img/weather/animated/day.svg new file mode 100644 index 0000000..6566b16 --- /dev/null +++ b/static/img/weather/animated/day.svg @@ -0,0 +1,521 @@ + + + \ No newline at end of file diff --git a/static/img/weather/animated/night.svg b/static/img/weather/animated/night.svg new file mode 100644 index 0000000..0c13686 --- /dev/null +++ b/static/img/weather/animated/night.svg @@ -0,0 +1,503 @@ + + + \ No newline at end of file diff --git a/static/img/weather/animated/rainy-1.svg b/static/img/weather/animated/rainy-1.svg new file mode 100644 index 0000000..575df6c --- /dev/null +++ b/static/img/weather/animated/rainy-1.svg @@ -0,0 +1,157 @@ + + + \ No newline at end of file diff --git a/static/img/weather/animated/rainy-2.svg b/static/img/weather/animated/rainy-2.svg new file mode 100644 index 0000000..faa8cf0 --- /dev/null +++ b/static/img/weather/animated/rainy-2.svg @@ -0,0 +1,133 @@ + + + \ No newline at end of file diff --git a/static/img/weather/animated/rainy-3.svg b/static/img/weather/animated/rainy-3.svg new file mode 100644 index 0000000..bfb2a4c --- /dev/null +++ b/static/img/weather/animated/rainy-3.svg @@ -0,0 +1,157 @@ + + + \ No newline at end of file diff --git a/static/img/weather/animated/rainy-4.svg b/static/img/weather/animated/rainy-4.svg new file mode 100644 index 0000000..52252b4 --- /dev/null +++ b/static/img/weather/animated/rainy-4.svg @@ -0,0 +1,66 @@ + + + \ No newline at end of file diff --git a/static/img/weather/animated/rainy-5.svg b/static/img/weather/animated/rainy-5.svg new file mode 100644 index 0000000..52461db --- /dev/null +++ b/static/img/weather/animated/rainy-5.svg @@ -0,0 +1,90 @@ + + + \ No newline at end of file diff --git a/static/img/weather/animated/rainy-6.svg b/static/img/weather/animated/rainy-6.svg new file mode 100644 index 0000000..ea384b1 --- /dev/null +++ b/static/img/weather/animated/rainy-6.svg @@ -0,0 +1,91 @@ + + + \ No newline at end of file diff --git a/static/img/weather/animated/rainy-7.svg b/static/img/weather/animated/rainy-7.svg new file mode 100644 index 0000000..220dcf8 --- /dev/null +++ b/static/img/weather/animated/rainy-7.svg @@ -0,0 +1,91 @@ + + + \ No newline at end of file diff --git a/static/img/weather/animated/snowy-1.svg b/static/img/weather/animated/snowy-1.svg new file mode 100644 index 0000000..1045466 --- /dev/null +++ b/static/img/weather/animated/snowy-1.svg @@ -0,0 +1,230 @@ + + + \ No newline at end of file diff --git a/static/img/weather/animated/snowy-2.svg b/static/img/weather/animated/snowy-2.svg new file mode 100644 index 0000000..f01f8b7 --- /dev/null +++ b/static/img/weather/animated/snowy-2.svg @@ -0,0 +1,237 @@ + + + \ No newline at end of file diff --git a/static/img/weather/animated/snowy-3.svg b/static/img/weather/animated/snowy-3.svg new file mode 100644 index 0000000..8c51ef8 --- /dev/null +++ b/static/img/weather/animated/snowy-3.svg @@ -0,0 +1,268 @@ + + + \ No newline at end of file diff --git a/static/img/weather/animated/snowy-4.svg b/static/img/weather/animated/snowy-4.svg new file mode 100644 index 0000000..e282d18 --- /dev/null +++ b/static/img/weather/animated/snowy-4.svg @@ -0,0 +1,94 @@ + + + \ No newline at end of file diff --git a/static/img/weather/animated/snowy-5.svg b/static/img/weather/animated/snowy-5.svg new file mode 100644 index 0000000..463d6d8 --- /dev/null +++ b/static/img/weather/animated/snowy-5.svg @@ -0,0 +1,166 @@ + + + \ No newline at end of file diff --git a/static/img/weather/animated/snowy-6.svg b/static/img/weather/animated/snowy-6.svg new file mode 100644 index 0000000..beba9e4 --- /dev/null +++ b/static/img/weather/animated/snowy-6.svg @@ -0,0 +1,225 @@ + + + \ No newline at end of file diff --git a/static/img/weather/animated/thunder.svg b/static/img/weather/animated/thunder.svg new file mode 100644 index 0000000..a27ff55 --- /dev/null +++ b/static/img/weather/animated/thunder.svg @@ -0,0 +1,268 @@ + + + \ No newline at end of file diff --git a/static/img/weather/animated/weather-sprite.svg b/static/img/weather/animated/weather-sprite.svg new file mode 100644 index 0000000..b0117b7 --- /dev/null +++ b/static/img/weather/animated/weather-sprite.svg @@ -0,0 +1,1245 @@ + + + \ No newline at end of file diff --git a/static/img/weather/animated/weather.svg b/static/img/weather/animated/weather.svg new file mode 100644 index 0000000..7258930 --- /dev/null +++ b/static/img/weather/animated/weather.svg @@ -0,0 +1,1245 @@ + + + \ No newline at end of file diff --git a/static/img/weather/animated/weather_sagittarius.svg b/static/img/weather/animated/weather_sagittarius.svg new file mode 100644 index 0000000..4285ab7 --- /dev/null +++ b/static/img/weather/animated/weather_sagittarius.svg @@ -0,0 +1,9 @@ + \ No newline at end of file diff --git a/static/img/weather/animated/weather_sunset.svg b/static/img/weather/animated/weather_sunset.svg new file mode 100644 index 0000000..f491da7 --- /dev/null +++ b/static/img/weather/animated/weather_sunset.svg @@ -0,0 +1,14 @@ + + + + diff --git a/static/img/weather/static/cloudy-day-1.svg b/static/img/weather/static/cloudy-day-1.svg new file mode 100644 index 0000000..0779355 --- /dev/null +++ b/static/img/weather/static/cloudy-day-1.svg @@ -0,0 +1,59 @@ + + + \ No newline at end of file diff --git a/static/img/weather/static/cloudy-day-2.svg b/static/img/weather/static/cloudy-day-2.svg new file mode 100644 index 0000000..e8d51a2 --- /dev/null +++ b/static/img/weather/static/cloudy-day-2.svg @@ -0,0 +1,60 @@ + + + \ No newline at end of file diff --git a/static/img/weather/static/cloudy-day-3.svg b/static/img/weather/static/cloudy-day-3.svg new file mode 100644 index 0000000..6ccf90b --- /dev/null +++ b/static/img/weather/static/cloudy-day-3.svg @@ -0,0 +1,59 @@ + + + \ No newline at end of file diff --git a/static/img/weather/static/cloudy-night-1.svg b/static/img/weather/static/cloudy-night-1.svg new file mode 100644 index 0000000..1f43b45 --- /dev/null +++ b/static/img/weather/static/cloudy-night-1.svg @@ -0,0 +1,41 @@ + + + \ No newline at end of file diff --git a/static/img/weather/static/cloudy-night-2.svg b/static/img/weather/static/cloudy-night-2.svg new file mode 100644 index 0000000..054d6ef --- /dev/null +++ b/static/img/weather/static/cloudy-night-2.svg @@ -0,0 +1,41 @@ + + + \ No newline at end of file diff --git a/static/img/weather/static/cloudy-night-3.svg b/static/img/weather/static/cloudy-night-3.svg new file mode 100644 index 0000000..3e9df40 --- /dev/null +++ b/static/img/weather/static/cloudy-night-3.svg @@ -0,0 +1,41 @@ + + + \ No newline at end of file diff --git a/static/img/weather/static/cloudy.svg b/static/img/weather/static/cloudy.svg new file mode 100644 index 0000000..a95dacd --- /dev/null +++ b/static/img/weather/static/cloudy.svg @@ -0,0 +1,33 @@ + + + \ No newline at end of file diff --git a/static/img/weather/static/day.svg b/static/img/weather/static/day.svg new file mode 100644 index 0000000..e638ec7 --- /dev/null +++ b/static/img/weather/static/day.svg @@ -0,0 +1,54 @@ + + + \ No newline at end of file diff --git a/static/img/weather/static/night.svg b/static/img/weather/static/night.svg new file mode 100644 index 0000000..918ffd5 --- /dev/null +++ b/static/img/weather/static/night.svg @@ -0,0 +1,36 @@ + + + \ No newline at end of file diff --git a/static/img/weather/static/rainy-1.svg b/static/img/weather/static/rainy-1.svg new file mode 100644 index 0000000..f3bdb19 --- /dev/null +++ b/static/img/weather/static/rainy-1.svg @@ -0,0 +1,63 @@ + + + \ No newline at end of file diff --git a/static/img/weather/static/rainy-2.svg b/static/img/weather/static/rainy-2.svg new file mode 100644 index 0000000..294e2d0 --- /dev/null +++ b/static/img/weather/static/rainy-2.svg @@ -0,0 +1,62 @@ + + + \ No newline at end of file diff --git a/static/img/weather/static/rainy-3.svg b/static/img/weather/static/rainy-3.svg new file mode 100644 index 0000000..2576756 --- /dev/null +++ b/static/img/weather/static/rainy-3.svg @@ -0,0 +1,63 @@ + + + \ No newline at end of file diff --git a/static/img/weather/static/rainy-4.svg b/static/img/weather/static/rainy-4.svg new file mode 100644 index 0000000..ca0a309 --- /dev/null +++ b/static/img/weather/static/rainy-4.svg @@ -0,0 +1,33 @@ + + + \ No newline at end of file diff --git a/static/img/weather/static/rainy-5.svg b/static/img/weather/static/rainy-5.svg new file mode 100644 index 0000000..423a393 --- /dev/null +++ b/static/img/weather/static/rainy-5.svg @@ -0,0 +1,34 @@ + + + \ No newline at end of file diff --git a/static/img/weather/static/rainy-6.svg b/static/img/weather/static/rainy-6.svg new file mode 100644 index 0000000..ebb00e6 --- /dev/null +++ b/static/img/weather/static/rainy-6.svg @@ -0,0 +1,35 @@ + + + \ No newline at end of file diff --git a/static/img/weather/static/rainy-7.svg b/static/img/weather/static/rainy-7.svg new file mode 100644 index 0000000..6535324 --- /dev/null +++ b/static/img/weather/static/rainy-7.svg @@ -0,0 +1,35 @@ + + + \ No newline at end of file diff --git a/static/img/weather/static/snowy-1.svg b/static/img/weather/static/snowy-1.svg new file mode 100644 index 0000000..d8217db --- /dev/null +++ b/static/img/weather/static/snowy-1.svg @@ -0,0 +1,77 @@ + + + \ No newline at end of file diff --git a/static/img/weather/static/snowy-2.svg b/static/img/weather/static/snowy-2.svg new file mode 100644 index 0000000..ba822b9 --- /dev/null +++ b/static/img/weather/static/snowy-2.svg @@ -0,0 +1,67 @@ + + + \ No newline at end of file diff --git a/static/img/weather/static/snowy-3.svg b/static/img/weather/static/snowy-3.svg new file mode 100644 index 0000000..28fde7a --- /dev/null +++ b/static/img/weather/static/snowy-3.svg @@ -0,0 +1,75 @@ + + + \ No newline at end of file diff --git a/static/img/weather/static/snowy-4.svg b/static/img/weather/static/snowy-4.svg new file mode 100644 index 0000000..6825143 --- /dev/null +++ b/static/img/weather/static/snowy-4.svg @@ -0,0 +1,38 @@ + + + \ No newline at end of file diff --git a/static/img/weather/static/snowy-5.svg b/static/img/weather/static/snowy-5.svg new file mode 100644 index 0000000..08345bf --- /dev/null +++ b/static/img/weather/static/snowy-5.svg @@ -0,0 +1,46 @@ + + + \ No newline at end of file diff --git a/static/img/weather/static/snowy-6.svg b/static/img/weather/static/snowy-6.svg new file mode 100644 index 0000000..f24d541 --- /dev/null +++ b/static/img/weather/static/snowy-6.svg @@ -0,0 +1,54 @@ + + + \ No newline at end of file diff --git a/static/img/weather/static/thunder.svg b/static/img/weather/static/thunder.svg new file mode 100644 index 0000000..e2da380 --- /dev/null +++ b/static/img/weather/static/thunder.svg @@ -0,0 +1,36 @@ + + + \ No newline at end of file diff --git a/static/img/weather/static/weather-sprite.svg b/static/img/weather/static/weather-sprite.svg new file mode 100644 index 0000000..654fb42 --- /dev/null +++ b/static/img/weather/static/weather-sprite.svg @@ -0,0 +1,1245 @@ + + + \ No newline at end of file diff --git a/static/img/weather/static/weather.svg b/static/img/weather/static/weather.svg new file mode 100644 index 0000000..c194c2c --- /dev/null +++ b/static/img/weather/static/weather.svg @@ -0,0 +1,622 @@ + + + \ No newline at end of file diff --git a/static/img/weather/static/weather_sagittarius.svg b/static/img/weather/static/weather_sagittarius.svg new file mode 100644 index 0000000..4285ab7 --- /dev/null +++ b/static/img/weather/static/weather_sagittarius.svg @@ -0,0 +1,9 @@ + \ No newline at end of file diff --git a/static/img/weather/static/weather_sunset.svg b/static/img/weather/static/weather_sunset.svg new file mode 100644 index 0000000..f491da7 --- /dev/null +++ b/static/img/weather/static/weather_sunset.svg @@ -0,0 +1,14 @@ + + + + diff --git a/static/js/weather.app.js b/static/js/weather.app.js new file mode 100644 index 0000000..7b7525e --- /dev/null +++ b/static/js/weather.app.js @@ -0,0 +1,313 @@ +var globalCurrent = null; +var globalForecast = null; + +var WEATHER_METEOCONCEPT = { + 0: "Soleil", + 1: "Peu nuageux", + 2: "Ciel voilé", + 3: "Nuageux", + 4: "Très nuageux", + 5: "Couvert", + 6: "Brouillard", + 7: "Brouillard givrant", + 10: "Pluie faible", + 11: "Pluie modérée", + 12: "Pluie forte", + 13: "Pluie faible verglaçante", + 14: "Pluie modérée verglaçante", + 15: "Pluie forte verglaçante", + 16: "Bruine", + 20: "Neige faible", + 21: "Neige modérée", + 22: "Neige forte", + 30: "Pluie et neige mêlées faibles", + 31: "Pluie et neige mêlées modérées", + 32: "Pluie et neige mêlées fortes", + 40: "Averses de pluie locales et faibles", + 41: "Averses de pluie locales", + 42: "Averses locales et fortes", + 43: "Averses de pluie faibles", + 44: "Averses de pluie", + 45: "Averses de pluie fortes", + 46: "Averses de pluie faibles et fréquentes", + 47: "Averses de pluie fréquentes", + 48: "Averses de pluie fortes et fréquentes", + 60: "Averses de neige localisées et faibles", + 61: "Averses de neige localisées", + 62: "Averses de neige localisées et fortes", + 63: "Averses de neige faibles", + 64: "Averses de neige", + 65: "Averses de neige fortes", + 66: "Averses de neige faibles et fréquentes", + 67: "Averses de neige fréquentes", + 68: "Averses de neige fortes et fréquentes", + 70: "Averses de pluie et neige mêlées localisées et faibles", + 71: "Averses de pluie et neige mêlées localisées", + 72: "Averses de pluie et neige mêlées localisées et fortes", + 73: "Averses de pluie et neige mêlées faibles", + 74: "Averses de pluie et neige mêlées", + 75: "Averses de pluie et neige mêlées fortes", + 76: "Averses de pluie et neige mêlées faibles et nombreuses", + 77: "Averses de pluie et neige mêlées fréquentes", + 78: "Averses de pluie et neige mêlées fortes et fréquentes", + 100: "Orages faibles et locaux", + 101: "Orages locaux", + 102: "Orages fort et locaux", + 103: "Orages faibles", + 104: "Orages", + 105: "Orages forts", + 106: "Orages faibles et fréquents", + 107: "Orages fréquents", + 108: "Orages forts et fréquents", + 120: "Orages faibles et locaux de neige ou grésil", + 121: "Orages locaux de neige ou grésil", + 122: "Orages locaux de neige ou grésil", + 123: "Orages faibles de neige ou grésil", + 124: "Orages de neige ou grésil", + 125: "Orages de neige ou grésil", + 126: "Orages faibles et fréquents de neige ou grésil", + 127: "Orages fréquents de neige ou grésil", + 128: "Orages fréquents de neige ou grésil", + 130: "Orages faibles et locaux de pluie et neige mêlées ou grésil", + 131: "Orages locaux de pluie et neige mêlées ou grésil", + 132: "Orages fort et locaux de pluie et neige mêlées ou grésil", + 133: "Orages faibles de pluie et neige mêlées ou grésil", + 134: "Orages de pluie et neige mêlées ou grésil", + 135: "Orages forts de pluie et neige mêlées ou grésil", + 136: "Orages faibles et fréquents de pluie et neige mêlées ou grésil", + 137: "Orages fréquents de pluie et neige mêlées ou grésil", + 138: "Orages forts et fréquents de pluie et neige mêlées ou grésil", + 140: "Pluies orageuses", + 141: "Pluie et neige mêlées à caractère orageux", + 142: "Neige à caractère orageux", + 210: "Pluie faible intermittente", + 211: "Pluie modérée intermittente", + 212: "Pluie forte intermittente", + 220: "Neige faible intermittente", + 221: "Neige modérée intermittente", + 222: "Neige forte intermittente", + 230: "Pluie et neige mêlées", + 231: "Pluie et neige mêlées", + 232: "Pluie et neige mêlées", + 235: "Averses de grêle", +} + +// Maps the API's icons to the ones from https://erikflowers.github.io/weather-icons/ +var weatherIconsMap = { + 0: "wi-day-sunny", + 1: "wi-day-cloudy", + 2: "wi-day-cloudy-high", + 3: "wi-cloud", + 4: "wi-cloudy", + 5: "wi-day-cloudy", + 6: "wi-fog", + 7: "wi-day-fog", + 10: "wi-day-hail", + 11: "wi-day-rain-mix", + 12: "wi-day-rain", + 13: "wi-day-rain-mix", + 14: "wi-day-showers", + 15: "wi-day-rain-mix", + 16: "wi-day-sprinkle", + 20: "wi-day-snow-wind", + 21: "wi-day-snow", + 22: "wi-day-snow", + 30: "wi-rain-mix", + 31: "wi-showers", + 32: "wi-showers", + 40: "wi-day-sleet", + 41: "wi-day-sleet", + 42: "wi-day-showers", + 43: "wi-day-showers", + 44: "wi-day-showers", + 45: "wi-day-showers", + 46: "wi-day-hail", + 47: "wi-day-hail", + 48: "wi-day-rain", + 60: "wi-day-snow-wind", + 61: "wi-day-snow-wind", + 62: "wi-day-snow", + 63: "wi-day-snow", + 64: "wi-day-snow", + 65: "wi-day-snow", + 66: "wi-day-snow", + 67: "wi-day-snow", + 68: "wi-day-snow", + 70: "wi-day-sleet", + 71: "wi-day-sleet", + 72: "wi-day-sleet", + 73: "wi-day-sleet", + 74: "wi-day-sleet", + 75: "wi-day-sleet", + 76: "wi-day-sleet", + 77: "wi-day-sleet", + 78: "wi-day-sleet", + 100: "wi-day-lightning", + 101: "wi-day-lightning", + 102: "wi-day-lightning", + 103: "wi-day-lightning", + 104: "wi-day-lightning", + 105: "wi-day-lightning", + 106: "wi-day-lightning", + 107: "wi-day-lightning", + 108: "wi-day-lightning", + 120: "wi-day-snow-thunderstorm", + 121: "wi-day-snow-thunderstorm", + 122: "wi-day-snow-thunderstorm", + 123: "wi-day-snow-thunderstorm", + 124: "wi-day-snow-thunderstorm", + 125: "wi-day-snow-thunderstorm", + 126: "wi-day-snow-thunderstorm", + 127: "wi-day-snow-thunderstorm", + 128: "wi-day-snow-thunderstorm", + 130: "wi-day-snow-thunderstorm", + 131: "wi-day-snow-thunderstorm", + 132: "wi-day-snow-thunderstorm", + 133: "wi-day-snow-thunderstorm", + 134: "wi-day-snow-thunderstorm", + 135: "wi-day-snow-thunderstorm", + 136: "wi-day-snow-thunderstorm", + 137: "wi-day-snow-thunderstorm", + 138: "wi-day-snow-thunderstorm", + 140: "wi-storm-showers", + 141: "wi-storm-showers", + 142: "wi-thunderstorm", + 210: "wi-hail", + 211: "wi-hail", + 212: "wi-showers", + 220: "wi-sleet", + 221: "wi-sleet", + 222: "wi-snow", + 230: "wi-snow-wind", + 231: "wi-snow-winds", + 232: "wi-snow-wind", + 235: "wi-sprinkle", +} + +$(function(){ + startClock(); +}); + + +function startClock(){ + setInterval(function(){ + $("#localTime").text(new Date().toLocaleTimeString()); + }, 1000); +} + + +function getWeatherData(insee){ + $.ajax({ + type: "GET", + url: "/current"+"?query="+insee, + cache: true, + headers: { + "Access-Control-Allow-Headers": "x-requested-with" + }, + success: function(current){ + globalCurrent = current; + updateCurrent(current); + }, + error: function(error){ + console.log("Error with ajax: "+ error); + } + }); +} + + +function getForecastData(insee){ + $.ajax({ + type: "GET", + url: "/forecast"+"?query="+insee, + cache: true, + headers: { + "Access-Control-Allow-Headers": "x-requested-with" + }, + success: function(forecast){ + globalForecast = forecast; + updateForecast(forecast); + + // Stops Refresh button's spinning animation + $("#refreshButton").html(" Refresh"); + }, + error: function(error){ + console.log("Error with ajax: "+ error); + } + }); +} + +// Update view values from current +function updateCurrent(current){ + // Present day + var today = current.current.METEOCONCEPT.observation; + $("#humidity").text(today.humidity.value); + $("#wind").text(today.wind_s.value); + $("#localDate").text(getFormattedDate(today.time)); + $("#mainTemperature").text(Math.round(today.temperature.value)); +} + +// Update view values from passed forecast +function updateForecast(forecast){ + // Info City + var city = forecast.forecast.METEOCONCEPT.city; + $("#cityName").text(city.name); + $("#cityCode").text(city.cp); + var data = forecast.forecast.METEOCONCEPT.forecast; + console.log(data); + + // Present day + var today = data[0]; + $("#tempDescription").text(toCamelCase(WEATHER_METEOCONCEPT[today.weather])); + $("#main-icon").addClass(weatherIconsMap[today.weather]); + $("#mainTempHot").text(Math.round(today.tmax)); + $("#mainTempLow").text(Math.round(today.tmin)); + + + // Following days data + for(var i = 1; i < (data.length); i++){ + var day = data[i]; + + // Day short format e.g. Mon + var dayName = getFormattedDate(day.datetime).substring(0,3); + + // weather icon from map + var weatherIcon = weatherIconsMap[day.weather]; + + $("#forecast-day-" + i + "-name").text(dayName); + $("#forecast-day-" + i + "-icon").addClass(weatherIcon); + $("#forecast-day-" + i + "-main").text(Math.round((day.tmax+day.tmin)/2)); + $("#forecast-day-" + i + "-ht").text(Math.round(day.tmax)); + $("#forecast-day-" + i + "-lt").text(Math.round(day.tmin)); + } +} + +// Refresh button handler +$("#refreshButton").on("click", function(){ + // Starts Refresh button's spinning animation + $("#refreshButton").html(""); + getWeatherData(); + getForecastData(); +}); + +// Applies the following format to date: WeekDay, Month Day, Year +function getFormattedDate(date){ + var options = { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' }; + return new Date(date).toLocaleDateString("fr-FR",options); +} + + +// Formats the text to CamelCase +function toCamelCase(str) { + var arr = str.split(" ").map( + function(sentence){ + return sentence.charAt(0).toUpperCase() + sentence.substring(1); + } + ); + return arr.join(" "); +} + + +// Converts to Celcius +function toCelcius(val){ + return Math.round((val - 32) * (5/9)); +} \ No newline at end of file diff --git a/templates/index.html b/templates/index.html index e5ba3db..0aa296c 100644 --- a/templates/index.html +++ b/templates/index.html @@ -2,37 +2,204 @@
+ + + + + {# https://codepen.io/MiguelEnc/pen/vmZVar #} + + + + + +No results for {{cities[0]}}
- {% endif %} - {% if cities and cities[1] and cities[1]|length > 0 %} - - {% endif %} - {% if ephemeride %} -