Module:Sandbox

From Tildeverse Wiki

Documentation for this module may be created at Module:Sandbox/doc

local M = {}

function M.hello(F)
	local whom = F.args[1]
	if whom == nil then return 'Hi!' end
	return [[Hello, ]] .. whom .. '!'
end

function M:fizzbuzz()
	local r = ''
	for i = 1, 100 do
		local s = ''
		if i % 3 == 0 then
			s = s .. 'Fizz'
		end
		if i % 5 == 0 then
			s = s .. 'Buzz'
		end
		if s == '' then
			s = s .. i
		end
		r = r .. s .. "\n"
	end
	return r
end

local members = mw.loadData [[Module:Sandbox/data]]
members = mw.text.jsonDecode(
	(mw.ext.externaldata.getWebData({
		url = "https://tildeverse.org/members.json", 
		data = "data=data", 
		regex = "/(?'data'[\\s\\S]*)/", 
		format = 'text'
	}))[1]['data']).members

local function as_date(d)
	local year, month, day = string.match(d,
		[[(%d+)-(%d+)-(%d+)T]])
	local t = os.time{ year = year, month = month, day = day}
	return os.date("%B %e, %Y", t)
end

local function admins(a)
	local t = {}
	for _, v in ipairs(a) do
		table.insert(t, '[' .. v[2] .. ' ' .. v[1] .. ']')
	end
	return table.concat(t, ', ')
end

M.list = function()
    local tbl = [=[
{|class="wikitable"|
! Name
! Description
! Created
! Sysadmins
! OS
! [[tilde.chat]] channel
! Link]=]
    for _, v in ipairs(members) do
    	local s = "|-\n| " .. table.concat({
    		v.name,
    		v.description,
    		as_date(v.created),
    		admins(v.sysadmins),
    		v.os,
    		v.channel,
    		v.link
    	}, "\n| ")
	    tbl = tbl .. "\n" .. s
    end
    tbl = tbl .. "\n|}"
	return tbl
end

return M