Module:WikiProjectBanner/shared

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

-------------------------------------------------------------------------------
--              Shared functions for Module:WikiProjectBanner                --
-------------------------------------------------------------------------------

-- Lazily initialise modules that we don't always need.
local mPortal, yesno

local p = {}

function p.maybeLoadData(page)
	local success, data = pcall(mw.loadData, page)
	if success then
		return data
	end
end

function p.maybeRequire(page)
	local success, module = pcall(require, page)
	if success then
		return module	
	end
end

function p.makePortal(portal, options)
	options = options or {}
	mPortal = mPortal or require("Module:Portal")
	return mPortal._portal({ portal }, options)
end

function p.isActiveRow(args, bannerData, cfg, rowCfg)
	yesno = yesno or require('Module:Yesno')
	if not rowCfg then
		return false
	elseif bannerData.isDemo then
		return true
	elseif rowCfg.params then
		for i, param in ipairs(rowCfg.params) do
			local isSet = yesno(args[param], true)
			if isSet then
				return true
			elseif isSet == false then
				return false
			end
		end
		return false
	else
		local param = cfg.defaultParameters[key]
		return param and yesno(args[param]) or false
	end
end

function p.substituteParams(msg, ...)
	return mw.message.newRawMessage(msg):params{...}:plain()
end

function p.fetchArgument(args, keys)
	local keysType = type(keys)
	if keysType == 'string' then
		return args[keys]
	elseif keysType == 'table' then
		for _, key in ipairs(keys) do
			local val = args[key]
			if val ~= nil then
				return val
			end
		end
	end
end

function p.makeWikilink(link, display)
	if display then
		return string.format('[[%s|%s]]', link, display)
	else
		return string.format('[[%s]]', link)
	end
end

return p