Module:Gadget-state

From BoyWiki

Documentation for this module may be created at Module:Gadget-state/doc

local p = {}

local getArgs = require('Module:Arguments').getArgs
local gadgets = mw.loadData('Module:Gadget-state/data')

local function getGadget(frame)
	local gadgetName = getArgs(frame)[1]
	if type(gadgetName) ~= 'string' then
		return nil
	end
	gadgetName = gadgetName:gsub('^Gadget%-', '')
	return gadgets[gadgetName]
end

local function getFlag(gadget, flag)
	if gadget then
		for _, v in ipairs(gadget) do
			if mw.text.trim(v) == flag then
				return true
			end
		end
	end
	return false
end

function p.defaultState(frame)
	local gadget = getGadget(frame)
	if getFlag(gadget, 'default') then
		return 'true'
	else
		return 'false'
	end
end

function p.alsoActivates(frame)
	local gadget = getGadget(frame)
	local alsoActivates = {}
	if gadget then
		local dependencies = {}
		for _, v in ipairs(gadget) do
			if v:match('^ *dependencies *= *') then
				for dep in mw.text.gsplit(v:gsub('^ *dependencies *= *', ''), ',', true) do
					if dep:match('^ *ext%.gadget%.') then
						table.insert(dependencies, mw.text.trim(dep:gsub('^ *ext%.gadget%.', '')))
					end
				end
			end
		end
		for _, dep in ipairs(dependencies) do
			if not getFlag(gadgets[dep], 'hidden') then
				table.insert(alsoActivates, dep)
			end
		end
	end
	return table.concat(alsoActivates, ',')
end

function p.getKnownGadgets()
	local names = {}
	for name, _ in pairs(gadgets) do
		table.insert(names, name)
	end
	return names
end

return p