Jump to content

Module:Sister project logo

From cernipedia

Documentation for this module may be created at Module:Sister project logo/doc

require('strict')

local p = {}

-- Lazy-load logo file names and other metadata
local data = mw.loadData('Module:Sister project logo/data')

-- Convert table of arguments into wiki image markup
local function imageMarkup(args)
	local x = {}
	-- positional arguments first
	for _, arg in ipairs(args) do
		table.insert(x,arg)
	end
	-- named arguments converted to foo=bar
	for k, v in pairs(args) do
		if not tonumber(k) then
			table.insert(x,k..'='..v)
		end
	end
	return '[['..table.concat(x,'|')..']]'
end

function p._main(args)
	local localArgs = {}
	-- map possibly verbose project argument into canonical project string
	local project = args.project and args.project:lower()
	project = data.projectMap[project] or project
	-- image=none means bail (for [[Template:Sister project]])
	if args.image == 'none' then
		return ''
	-- if image specified, return it instead of stored logo (for [[Template:Sister project]])
	elseif args.image then
		return args.image
	else
		local logoImage = data.logo[project]
		-- if project is unknown, use Wikimedia logo (for [[Template:Sister project]])
		if not logoImage then
			project = 'wm'
		    logoImage = data.logo['wm']
		end
		table.insert(localArgs,'File:'..logoImage)
	end
	-- size=large means use sizes from [[Template:Wikipedia's sister projects]]
	-- size defaults to 40x40px (for [[Template:Sister project]])
	table.insert(localArgs,args.size == 'large' and (data.largeSize[project] or '35px') or args.size or '40x40px')
	-- if logo is PD, blank link and alt (to suppress from screen readers)
    if data.PDicon[project] then
		localArgs.link = ''
		localArgs.alt = ''
	else
		localArgs.alt = data.logoAlt[project]
	end
	-- For dark mode, flip dark-on-light icons to be light-on-dark
	-- Also: use editor-specified classes (for [[Template:Sister-inline]])
	localArgs.class = "noviewer"..(data.darkOnLight[project] and " skin-invert-image" or "")
                                ..(args.class and " "..args.class or "")
	return imageMarkup(localArgs)
end

function p.main(frame)
	local args = require('Module:Arguments').getArgs(frame)
	return p._main(args) or ''
end

return p