Toggle menu
Toggle preferences menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.

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

local p = {}

local function split(s)
	local t = {}
	for part in mw.text.gsplit(s or "", "%s*,%s*") do
		if part ~= "" then table.insert(t, part) end
	end
	return t
end

function p.render(frame)
	local parent = frame:getParent()
	local args = parent and parent.args or frame.args
	local title = args.title or mw.title.getCurrentTitle().text
	local width = tonumber(args.width) or 300
	local order = split(args.order or "")
	local reserved = { title=true, image=true, width=true, order=true }

	local root = mw.html.create("div"):addClass("infobox")
	root:tag("div"):addClass("infobox-title"):wikitext(title)

	local img = args.image
	if img and img ~= "" then
	    local imgDiv = root:tag("div"):addClass("infobox-image")
	    if img:match("^https?://") then
	        imgDiv:tag("img")
	            :attr("src", img)
	            :attr("alt", title)
	            :css("width", width .. "px")
	    else
	        imgDiv:wikitext(string.format("[[File:%s|%dpx]]", img, width))
	    end
	end

	local tbl = root:tag("table"):addClass("infobox-table")
	local used = {}

	for _, key in ipairs(order) do
		local val = args[key]
		if val and val ~= "" then
			used[key] = true
			local tr = tbl:tag("tr")
			tr:tag("th"):wikitext(key)
			tr:tag("td"):wikitext(val)
		end
	end

  local keys = {}
  for k, v in pairs(args) do
    	if not reserved[k] and v and v ~= "" and not used[k] then
    		table.insert(keys, k)
    	end
  end
  table.sort(keys)

	for _, k in ipairs(keys) do
    	local tr = tbl:tag("tr")
    	tr:tag("th"):wikitext(k)
    	tr:tag("td"):wikitext(args[k])
	end

	return tostring(root)
end

return p