Jump to content

Module:Taxobox

From Wikipedia, the free encyclopedia
This is an old revision of this page, as edited by SWinxy (talk | contribs) at 06:02, 24 August 2022 (Prettyify). The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.
local p = {}

local infobox = require("Module:Infobox")
local infoboxImage = require("Module:InfoboxImage")
local arguments = require("Module:Arguments")
local error = require("Module:Error")

local colors = {
	animalia = "ebebd2",
	archaea = "c3f5fa",
	archaeplastida = "b4fab4",
	bacteria = "dcebf5",
	eukaryota = "f5d7ff",
	fungi = "91fafa",
	ichnotaxa = "e6ded6",
	["incertae sedis"] = "faf0e6",
	SAR = "c8fa50",
	ootaxa = "fafadc",
	virus = "fafabe",
}

local colorAlts = {
	nanoarchaeota = "archaea",
	nanarchaeota = "archaea",
	korarchaeota = "archaea",
	thaumarchaeota = "archaea",
	crenarchaeota = "archaea",
	euryarchaeota = "archaea",
	
	plantae = "archaeplastida",
	viridiplantae = "archaeplastida",
	
	excavata = "eukaryota",
	amoebozoa = "eukaryota",
	Opisthokonta = "eukaryota",
	
	chromalveolata = "SAR",
	
	viroids = "viruses",
}

local function getColor(args)
	if args.regnum then
		local f = mw.ustring.gsub(mw.ustring.lower(args.regnum), "[\]\[]", "") -- catches potential [[ ]] around the input parameter
	
		return colors[colorAlts[f] or f]
	end
end

local classification = {
	{ arg_name = "unranked_superdomain", label = "(unranked)" },
	{ arg_name = "superdomain", label = "Superdomain" },
	{ arg_name = "domain", label = "Domain" },
	{ arg_name = "superregnum", label = "Superkingdom" },
	{ arg_name = "unranked_regnum", label = "(unranked)" },
	{ arg_name = "regnum", label = "Kingdom" },
	{ arg_name = "subregnum", label = "Subkingdom" },
	{ arg_name = "superdivisio", label = "Superdivision" },
	{ arg_name = "superphylum", label = "Superphylum" },
	{ arg_name = "unranked_divisio", label = "(unranked)" },
	{ arg_name = "divisio", label = "Division" },
	{ arg_name = "unranked_phylum", label = "(unranked)" },
	{ arg_name = "phylum", label = "Phylum" },
	{ arg_name = "subdivisio", label = "Subdivision" },
	{ arg_name = "subphylum", label = "Subphylum" },
	{ arg_name = "infraphylum", label = "Infraphylum" },
	{ arg_name = "microphylum", label = "Microphylum" },
	{ arg_name = "nanophylum", label = "Nanophylum" },
	{ arg_name = "superclassis", label = "Superclass" },
	{ arg_name = "unranked_classis", label = "(unranked)" },
	{ arg_name = "classis", label = "Class" },
	{ arg_name = "unranked_subclassis", label = "(unranked)" },
	{ arg_name = "subclassis", label = "Subclass" },
	{ arg_name = "unranked_infraclassis", label = "(unranked)" },
	{ arg_name = "magnordo", label = "Magnorder" },
	{ arg_name = "superordo", label = "Superorder" },
	{ arg_name = "unranked_ordo", label = "(unranked)" },
	{ arg_name = "ordo", label = "Order" },
	{ arg_name = "subordo", label = "Suborder" },
	{ arg_name = "infraordo", label = "Infraorder" },
	{ arg_name = "parvordo", label = "Parvorder" },
	{ arg_name = "zoodivisio", label = "Division" },
	{ arg_name = "zoosectio", label = "Section" },
	{ arg_name = "zoosubsectio", label = "Subsection" },
	{ arg_name = "unranked_superfamilia", label = "Superfamily" },
	{ arg_name = "familia", label = "Family" },
	{ arg_name = "subfamilia", label = "Subfamily" },
	{ arg_name = "supertribus", label = "Supertribe" },
	{ arg_name = "unranked_tribus", label = "(unranked)" },
	{ arg_name = "tribus", label = "Tribe" },
	{ arg_name = "subtribus", label = "Subtribe" },
	{ arg_name = "alliance", label = "''Alliance''" },
	{ arg_name = "unranked_genus", label = "(unranked)" },
	{ arg_name = "genus", label = "Genus" },
	{ arg_name = "subgenus", label = "Subgenus" },
	{ arg_name = "sectio", label = "Section" },
	{ arg_name = "subsectio", label = "Subsection" },
	{ arg_name = "series", label = "Series" },
	{ arg_name = "subseries", label = "Subseries" },
	{ arg_name = "species_group", label = "''Species group''" },
	{ arg_name = "species_subgroup", label = "''Species subgroup''" },
	{ arg_name = "species_complex", label = "''Species complex''" },
	{ arg_name = "species", label = "Species" },
	{ arg_name = "subspecies", label = "Subspecies" },
	{ arg_name = "variety", label = "Variety" },
	{ arg_name = "forma", label = "Form" },
}

function p.main(frame)
	local args = arguments.getArgs(frame)
	return p._main(args)
end

local conservation_data = {
	["secure"] = ""
}

local function authority_help(args, type)
	if args[type] and not args[type .. "_authority"] then
		return args[type]
	end
	if args[type] and args[type .. "_authority"] then
		return args[type] .. " (" .. args[type .. "_authority"] .. ")"
	end
end

function p._main(args)
	
	local passing = {}
	
	passing.above = args.name or mw.title.getCurrentTitle()
	
	if args.fossil_range then
		passing.subheader = "Temporal range: " .. args.fossil_range
	end
	
	local color = getColor(args)
	if color then
		passing.abovestyle = "background-color: #" .. color
		passing.subheaderstyle = "background-color: #" .. color
		passing.headerstyle = "background-color: #" .. color
	end
	
	if args.image then
		passing.image = infoboxImage.InfoboxImage({["args"] = {["image"] = args.image, ["upright"] = args.upright or args.image_upright, ["alt"] = args.alt or args.image_alt}})
		passing.caption = args.caption or args.image_caption
	end
	if args.image2 then
		passing.image2 = infoboxImage.InfoboxImage({["args"] = {["image"] = args.image2, ["upright"] = args.upright2 or args.image2_upright, ["alt"] = args.alt2 or args.image2_alt}})
		passing.caption2 = args.caption2 or args.image2_caption
	end
	
	
	if args.status and args.status_system then
		passing.header1 = "[[Conservation status]]"
		passing.data2 = "status image goes here"
		passing.data3 = args.status .. " (" .. args.status_system .. ")"
	end
	if args.status and not args.status_system then
		error.error({"Infobox:Taxobox: using \"status\" without \"status_system\""})
	end
	
	
	passing.header4 = "[[Scientific classification]]"
	
	local i = 5
	for _, t in ipairs(classification) do
		local k = t.arg_name
		local v = t.label
		if args[k] then
			passing["label" .. i] = v
			passing["data" .. i] = authority_help(args, k)
			i = i + 1
		end
	end
	
	return infobox.infobox(passing)
end

return p