Module:Top icon

-- This module implements

local categoryHandler = require( 'Module:Category handler' ).main

local p = {}

local function makeName(sort, body) local sortnum = tonumber(sort) if sortnum then -- Zero-pad numbers so that they will sort properly in alphabetical -- order. (Yes, there really are decimal sort keys used on enwiki.) sort = string.format('%07.2f', sortnum) end math.randomseed(os.clock * 1000000000) local ret = {} ret[#ret + 1] = sort -- There should always be a body value present. This will force numeric -- sort keys to sort alphabetically. ret[#ret + 1] = body -- Add a random number to stop names from duplicating others on a page ret[#ret + 1] = math.random(1, 100000) return table.concat(ret, '-') end

local function makeFileLink(t) local ret = {} ret[#ret + 1] = '[[File:'	ret[#ret + 1] = t.image	ret[#ret + 1] = '|'	ret[#ret + 1] = t.width or 20	ret[#ret + 1] = 'x'	ret[#ret + 1] = t.height or 20	ret[#ret + 1] = 'px'	if t.link then		ret[#ret + 1] = '|link='		ret[#ret + 1] = t.link	end	if t.alt then		ret[#ret + 1] = '|alt='		ret[#ret + 1] = t.alt	end	if t.text then		ret[#ret + 1] = '|'		ret[#ret + 1] = t.text	end	ret[#ret + 1] = ']]' return table.concat(ret) end

local function renderCategories(args, title) local categories = categoryHandler{ user = args.usercat, main = args.maincat, subpage = args.subpage or 'no', nocat = args.nocat, page = title.prefixedText }	return categories or '' end

function p._main(args, frame, title) frame = frame or mw.getCurrentFrame title = title or mw.title.getCurrentTitle local image = args.image or args.imagename if not image then error('no image name specified', 2) end local name = makeName(		args.icon_nr or args.number,		args.name or args.id or image	) local fileLink = makeFileLink{ image = image, width = args.width, height = args.height, link = args.link or args.wikilink, alt = args.alt, text = args.text or args.description }	local nowiki = frame:extensionTag{name = 'nowiki'} local indicator = frame:extensionTag{ name = 'indicator', args = {name = name}, content = fileLink }	local categories = renderCategories(args, title) return nowiki .. indicator .. categories end

function p.main(frame) local origArgs = require('Module:Arguments').getArgs(frame, {		parentOnly = true	}) -- Copy all the specified arguments over to minimise the number of times we -- have to access the frame object. local args = {} for k, v in pairs(origArgs) do		args[k] = v	end return p._main(args, frame) end

return p