summaryrefslogtreecommitdiff
path: root/activity.lua
blob: 8bec2a00825038e7acd43ae5efdcd46c456ce59b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
local dates = require "activity.dates"
local git = require "activity.git"
local activity = {}


function activity.generate_table (year, repositories, format)
	year = year or dates.this_year()
	local lookup = git.lookup(repositories)

	local function count (weekday, offset, week)  -- TODO: filtering
		local count = (lookup[year] or {})[weekday + offset + week * 7] or 0
		if 0 < count and count <= 2 then  -- TODO: maybe relative to maximum?
			return 1
		end
		if 2 < count and count <= 4 then
			return 2
		end
		if 4 < count and count <= 6 then
			return 3
		end
		if 6 < count then
			return 4
		end
		return 0
	end

	local function cell (exists)
		if not exists then
			return format.spot
		end
		return format.cell
	end

	local function row (weekday, index, offset, first, last)
		first = cell(first)
		last = cell(last)
		local row = format.start_row() .. format.label(weekday)
		row = row .. first(count(index, offset, 0))
		for week=2,52 do
			row = row .. format.cell(count(index, offset, week))
		end
		row = row .. last(count(index, offset, 53)) .. format.end_row()
		return row
	end

	local rows = ""
	local weekdays = {"", "Mon", "", "Wed", "", "Fri", ""}
	local start_from = dates.first_week_day(year)
	local end_at = (start_from + dates.days_in(year) - 1) % 7
	for index, weekday in pairs(weekdays) do
		rows = rows .. row(weekday, index, 8 - start_from, index >= start_from, index <= end_at)
	end
	return
		format.start_document"Activity" .. format.start_table() .. rows .. format.end_table() .. format.end_document()
end


return activity