Zelda Wiki

OoT Navi.png

Hey! Listen!

This wiki contains spoilers! Read at your own risk!

READ MORE

Zelda Wiki
Advertisement
Zelda Wiki
10,152
pages

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

local p = {}

local File = require("Module:File")
local Term = require("Module:Term")
local utilsString = require("Module:UtilsString")

local FIELDS = require("Module:Infobox/Fields")

function p._Main(frame)
	local args = frame.args
	local templateArgs = frame:getParent().args
	return p.Main(templateArgs, args["type"])
end

function p.Main(args, type)
	local result = p.BuildInfobox(args, type)
	return result
end

function p.BuildInfobox(args, type)
	-- Building table and global fields (name, image, etc)
	local infobox = mw.html.create("table")
	:addClass("infobox wikitable infoboxtable")
	
	-- Name field
	-- If a |name= parameter is provided, it will use it, else it will try to
	-- use the Series term
	
	local nameDisplayed = args["name"]
	if utilsString.isEmpty(nameDisplayed) then
		nameDisplayed = mw.title.getCurrentTitle().text
	else
		nameDisplayed = nameDisplayed .. "[[Category:Infoboxes Using the Name Parameter]]"
	end
		
	infobox:node(mw.html.create("tr"):node(mw.html.create("th")
		:addClass("infobox-name centered")
		:attr("colspan", "2")
		:wikitext(nameDisplayed)))
	
	-- Image field
	if not utilsString.isEmpty(args["image"]) then
		local imageWikitext = args["image"]
		if string.sub(args["image"], 1, 5) == "File:" then
			imageWikitext = File.image(args["image"], {
				size = "320x320px",
				scale = 10,
			})
		end
		if not utilsString.isEmpty(args["caption"]) then
			imageWikitext = imageWikitext .. "<br>" .. args["caption"] .. "[[Category:Infoboxes Using Captions]]"
		end
		infobox:node(mw.html.create("tr"):node(mw.html.create("td")
			:addClass("infobox-image centered")
			:attr("colspan", "2")
			:wikitext(imageWikitext)))
	end
	
	local row = ""
	-- Generated fields
	for key, field in ipairs(FIELDS[type]) do
		if not utilsString.isEmpty(args[field["parameter"]]) then
			row = mw.html.create("tr")
				:addClass("infobox-field")
			if field["type"] == "wide" then
				row:node(mw.html.create("th")
					:addClass("centered")
					:attr("colspan", "2")
					:wikitext(args[field["parameter"]]))
			else
				row:node(mw.html.create("th")
						:wikitext(field["caption"]))
					:node(mw.html.create("td")
						:node(mw.html.create("div")
							:addClass("infobox-field-content")
							:wikitext(args[field["parameter"]])))
			end
			infobox:node(row)
		end
	end
	
	return infobox
end

-- Documentation
function p._UsageDocumentation(frame)
	local args = frame.args
	return p.UsageDocumentation(args["langcode"], args["type"])
end

function p.UsageDocumentation(langcode, infoboxType)
	local result = ""
	local preHeader = "{{Infobox " .. string.gsub(infoboxType, "^%l", string.upper)
	local preFooter = "}}"

	local descriptions = mw.html.create("pre"):wikitext(preHeader)
	local blank = mw.html.create("pre"):wikitext(preHeader)
	
	-- Adding global fields
	descriptions:newline():wikitext("|image= Image(s) of the topic. (Use {{Media}} when possible.)")
	descriptions:newline():wikitext("|caption= Caption of the image. (Not to be used with {{Media}}.)")
	blank:newline():wikitext("|image= ")
	blank:newline():wikitext("|caption= ")
	
	-- Adding generated fields
	for key, field in ipairs(FIELDS[infoboxType]) do
		descriptions:newline():wikitext("|" .. field["parameter"] .. "= " .. field["description"])
		blank:newline():wikitext("|" .. field["parameter"] .. "= ")
	end

	descriptions:newline():wikitext(preFooter)
	blank:newline():wikitext(preFooter)
	return descriptions, "\nBlank code:\n", blank
end


return p