wtf.nein.dimensions-of-covid/index.lua
2022-02-17 15:14:22 +01:00

68 lines
1.9 KiB
Lua

sqlite3 = require "lsqlite3"
db = sqlite3.open('covid_deaths.db')
Write([[
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Covid Deaths</title>
<link rel="icon" href="data:image/svg+xml,<svg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 100 100%22><text y=%22.9em%22 font-size=%2290%22>⚫</text></svg>">
<style>
body {
padding: 48px;
font-family: sans-serif;
color: #222;
}
span.last-update {
color: #999;
}
span.count {
padding-right: 0.6em;
}
</style>
</head>
<body>
]])
local query = [[
SELECT day, last_update, sum_deaths
FROM covid_deaths
ORDER BY day DESC
LIMIT 2
]]
local rows = {}
for v in db:nrows(query) do
rows[#rows + 1] = v
end
function format_int(number)
-- taken from https://stackoverflow.com/questions/10989788/format-integer-in-lua#10992898. thanks!
local i, j, minus, int, fraction = tostring(number):find('([-]?)(%d+)([.]?%d*)')
-- reverse the int-string and append a six-per-em to all blocks of 3 digits
thinsp = "&thinsp;"
int = int:reverse():gsub("(%d%d%d)", "%1" .. thinsp:reverse())
-- reverse the int-string back remove an optional six-per-em and put the
-- optional minus and fractional part back
return minus .. int:reverse():gsub("^&thinsp;", "") .. fraction
end
local deaths_yesterday = rows[1]["sum_deaths"] - rows[2]["sum_deaths"]
local description = format_int(rows[1]["sum_deaths"]) .. ' people died from Covid-19. ' .. format_int(deaths_yesterday) .. ' died within the last day.'
Write('<p>' .. description .. ' <span class="last-update">Last update: ' .. rows[1]["last_update"] .. ' UTC</span></p>')
Write('<span class="count">')
for i=1,rows[1]["sum_deaths"] do
Write('🖤')
if i > 0 and i < rows[1]["sum_deaths"] and i % 100 == 0 then
Write('</span><span class="count">')
end
end
Write('</span>')
Write([[
</body>
</html>
]])