summaryrefslogtreecommitdiff
path: root/activity.lua
diff options
context:
space:
mode:
Diffstat (limited to 'activity.lua')
-rw-r--r--activity.lua64
1 files changed, 64 insertions, 0 deletions
diff --git a/activity.lua b/activity.lua
new file mode 100644
index 0000000..1be6e93
--- /dev/null
+++ b/activity.lua
@@ -0,0 +1,64 @@
+local activity = {}
+
+
+function activity.days (year)
+ if year % 4 ~= 0 or year % 100 == 0 and year % 400 ~= 0 then
+ return 365
+ end
+ return 366
+end
+
+
+function activity.this_year ()
+ return os.date"%Y"
+end
+
+
+function activity.first_week_day (year)
+ year = year or activity.this_year()
+ return os.date("*t", os.time{year=year, month=1, day=1}).wday
+end
+
+
+function activity.generate_table (year)
+ year = year or activity.this_year()
+
+ local function spot ()
+ return [[<td>]]
+ end
+
+ local function day (level)
+ return ([[<td data-activity-level="%d">]]):format(level)
+ end
+
+ local function cell (exists)
+ if not exists then
+ return spot
+ end
+ return day
+ end
+
+ local function row (weekday, first, last)
+ first = cell(first)
+ last = cell(last)
+ local row = ([[<tr><td class="activity-chart-label"><span>%s</span>]]):format(weekday)
+ row = row .. first(math.random(0, 4))
+ for _=1,51 do
+ row = row .. day(math.random(0, 4))
+ end
+ row = row .. last(math.random(0, 4)) .. "\n"
+ return row
+ end
+
+ local rows = ""
+ local weekdays = {"", "Mon", "", "Wed", "", "Fri", ""}
+ local start_from = activity.first_week_day(year)
+ local end_at = (start_from + activity.days(year) - 1) % 7
+ for index, weekday in pairs(weekdays) do
+ rows = rows .. row(weekday, index >= start_from, index <= end_at)
+ end
+ return [[<table class="activity-chart">]] .. "\n" .. rows .. "</table>"
+end
+
+
+return activity