#set page(width: 65mm, height: 86mm, margin: ("x":0cm,"y":0cm) ) #let today = datetime.today() #let weather = json("weather.json") #let timestamp_data = weather.timestamp.split(" ") //#let time = datetime(hour: int(date_data.at(3)), minute: int(date_data.at(4)), second:0) #let current_hour = int(timestamp_data.at(3)) #let icons_map = ( "0": "icons/clear_day.svg", "1": "icons/clear_day.svg", "2": "icons/partly_cloudy_day.svg", "3": "icons/partly_cloudy_day.svg", "45": "icons/haze_day.svg", "48": "icons/haze_day.svg", "51": "icons/rain_day_night.svg", "53": "icons/rain_day_night.svg", "55": "icons/rain_day_night.svg", "56": "icons/sleet_day_night.svg", "57": "icons/sleet_day_night.svg", "61": "icons/rain_day_night.svg", "63": "icons/rain_day_night.svg", "65": "icons/rain_day_night.svg", "66": "icons/sleet_day_night.svg", "67": "icons/sleet_day_night.svg", "71": "icons/snow_day_night.svg", "73": "icons/snow_day_night.svg", "75": "icons/snow_day_night.svg", "77": "icons/snow_day_night.svg", "80": "icons/rain_day_night.svg", "81": "icons/rain_day_night.svg", "82": "icons/rain_day_night.svg", "85": "icons/snow_day_night.svg", "86": "icons/snow_day_night.svg", "95": "icons/thunder_day_night.svg", "96": "icons/hail_day_night.svg", "99": "icons/hail_day_night.svg", ) #let reduce_array(a,n:2) = { let ret = () for (i,v) in a.enumerate(){ if calc.rem-euclid(i,n) == 0 and i>6{ ret.push(v) } } return ret } #let times = () #for i in range(24){ times.push(datetime(hour:i,minute:0,second:0)) } #let times = times.map(x=>x.display("[hour]")) #let codes = weather.hourly.weather_code.map(x => image(icons_map.at(str(x)), height:1em)) #let temps = weather.hourly.temperature_2m #let values = reduce_array(times.zip(codes,temps),n: 2) #align(center)[ #v(1fr) #text(size:2em, weight: "bold")[#today.display("[weekday] [day]")] #v(1fr) #grid( columns: (1fr,2fr,2fr), align: (horizon+right,horizon+center,horizon+center), stroke: (x,y) => if int(times.at(y*2+8)) == current_hour {(y:black)} else if int(times.at(y*2+9)) == current_hour {(bottom:black)}, ..values.flatten().map(x => text(size:1.7em)[#x]) ) #v(1fr) ]