Module:Taxobox
Appearance
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