Module:Top icon
MyWikiBiz, Author Your Legacy — Saturday December 28, 2024
Jump to navigationJump to search-- This module implements {{top icon}} 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