Module:List

local p = {} local h = {}

local utilsArg = require("Module:UtilsArg") local utilsString = require("Module:UtilsString") local utilsTable = require("Module:UtilsTable")

local CATEGORY_INVALID_ARGS = "" local CATEGORY_EXP_GAME = ""

function h.warn(msg) local utilsError = require("Module:UtilsError") utilsError.warn(msg) end

function p.Main(frame) local args, err = utilsArg.parse(frame:getParent.args, p.Templates.List) local categories = err and err.categoryText or "" local listItems = h.parseListItems(args.entries) categories = categories..h.validate(listItems) return h.printList(listItems) end

function h.parseListItems(items) if #items == 1 then -- assume list items are delimited by commas instead of pipes local input = items[1] input = string.gsub(input, ",%s*$", "") -- strip dangling comma if present items = utilsString.split(input, '%s*,%f[^,%d]%s*') -- %f[^,%d] is so we don't split numbers on their thousands separator (e.g., 1,500) end return items end

function h.validate(items) local categories = "" local itemsUsingExpGame = utilsTable.filter(items, function(item)		return string.find(item, "exp%-game")	end) if #itemsUsingExpGame > 1 and #itemsUsingExpGame == #items then h.warn("List is using for every list entry. In such cases  should be used instead. See Category:Infoboxes using exp game for more information") categories = categories..CATEGORY_EXP_GAME end return categories end

function h.printList(items) if items == nil or #items == 0 then return "" end local html = mw.html.create("ul"):addClass("plainlist") for i, item in ipairs(items) do		html:tag("li"):wikitext(item) end return tostring(html) end

p.Templates = { List = { desc = "Renders each list entry on a separate line without any list markers such as bullets or numbers", format = "inline", params = { ["..."] = {				name = "entries", placeholder = "entry", type = "content", desc = "List items. Can be any wikitext.", trim = true, nilIfEmpty = true, },		},	}, }

return p