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