Module:Infobox Biome
From Eco - English Wiki
Documentation for this module may be created at Module:Infobox Biome/doc
local p = {}
local Utils = require('Module:Utils')
local L = require('Module:Localization')
-- Build an Biome Infobox
function p.biomeBox(args)
-- check that all necessary arguments are passed correctly
if args.id == nil or args.id == '' then
return '\'id\' must be specified.'
end
local biomeData = mw.loadData("Module:BiomeData")
local biome_id = args.id
local biome = biomeData[biome_id]
if biome == nil then
return "Biome " .. biome_id .. " not found"
end
local infobox = '{| class=\"infobox\"\n'
foreground, background = biomeColour(biome.Color)
infobox = infobox ..
"|- style=\"color: white; background-color: " ..
background .. "; text-align: center;\"\n| colspan=\"2\" | '''<big>" .. biome.Name .. "</big>'''\n"
infobox = infobox .. sectionImage(biome.ID, "Biome")
infobox = infobox .. sectionHeader('Description')
infobox = infobox .. '|- style=\"text-align: center;\"\n| colspan=\"2\" | ' .. biome.Description .. '\n'
infobox = infobox .. sectionHeader('Details')
infobox = infobox .. sectionRow("Can have lakes?", Utils.formatBoolToYesNo(biome.Lakes))
infobox = infobox .. sectionRow("Elevation", biome.ElevationMin * 100 .. ' - ' .. biome.ElevationMax * 100)
infobox = infobox ..
sectionRow("Temperature", biome.TemperatureMin * 40 - 10 .. ' - ' .. biome.TemperatureMax * 40 - 10 .. ' °C')
infobox = infobox .. sectionRow("Moisture", biome.MoistureMin * 100 .. ' - ' .. biome.MoistureMax * 100)
infobox = infobox .. '|}'
return infobox
end
function biomeColour(colourName)
local foreground = "white"
local background = "#1165AF"
colour_map = {
["aliceblue"] = "f0f8ff",
["antiquewhite"] = "faebd7",
["aqua"] = "00ffff",
["aquamarine"] = "7fffd4",
["azure"] = "f0ffff",
["beige"] = "f5f5dc",
["bisque"] = "ffe4c4",
["black"] = "000000",
["blanchedalmond"] = "ffebcd",
["blue"] = "0000ff",
["blueviolet"] = "8a2be2",
["brown"] = "a52a2a",
["burlywood"] = "deb887",
["cadetblue"] = "5f9ea0",
["chartreuse"] = "7fff00",
["chocolate"] = "d2691e",
["coral"] = "ff7f50",
["cornflowerblue"] = "6495ed",
["cornsilk"] = "fff8dc",
["crimson"] = "dc143c",
["cyan"] = "00ffff",
["darkblue"] = "00008b",
["darkcyan"] = "008b8b",
["darkgoldenrod"] = "b8860b",
["darkgray"] = "a9a9a9",
["darkgreen"] = "006400",
["darkkhaki"] = "bdb76b",
["darkmagenta"] = "8b008b",
["darkolivegreen"] = "556b2f",
["darkorange"] = "ff8c00",
["darkorchid"] = "9932cc",
["darkred"] = "8b0000",
["darksalmon"] = "e9967a",
["darkseagreen"] = "8fbc8f",
["darkslateblue"] = "483d8b",
["darkslategray"] = "2f4f4f",
["darkturquoise"] = "00ced1",
["darkviolet"] = "9400d3",
["deeppink"] = "ff1493",
["deepskyblue"] = "00bfff",
["dimgray"] = "696969",
["dodgerblue"] = "1e90ff",
["feldspar"] = "d19275",
["firebrick"] = "b22222",
["floralwhite"] = "fffaf0",
["forestgreen"] = "228b22",
["fuchsia"] = "ff00ff",
["gainsboro"] = "dcdcdc",
["ghostwhite"] = "f8f8ff",
["gold"] = "ffd700",
["goldenrod"] = "daa520",
["gray"] = "808080",
["green"] = "008000",
["greenyellow"] = "adff2f",
["honeydew"] = "f0fff0",
["hotpink"] = "ff69b4",
["indianred "] = "cd5c5c",
["indigo "] = "4b0082",
["ivory"] = "fffff0",
["khaki"] = "f0e68c",
["lavender"] = "e6e6fa",
["lavenderblush"] = "fff0f5",
["lawngreen"] = "7cfc00",
["lemonchiffon"] = "fffacd",
["lightblue"] = "add8e6",
["lightcoral"] = "f08080",
["lightcyan"] = "e0ffff",
["lightgoldenrodyellow"] = "fafad2",
["lightgrey"] = "d3d3d3",
["lightgreen"] = "90ee90",
["lightpink"] = "ffb6c1",
["lightsalmon"] = "ffa07a",
["lightseagreen"] = "20b2aa",
["lightskyblue"] = "87cefa",
["lightslateblue"] = "8470ff",
["lightslategray"] = "778899",
["lightsteelblue"] = "b0c4de",
["lightyellow"] = "ffffe0",
["lime"] = "00ff00",
["limegreen"] = "32cd32",
["linen"] = "faf0e6",
["magenta"] = "ff00ff",
["maroon"] = "800000",
["mediumaquamarine"] = "66cdaa",
["mediumblue"] = "0000cd",
["mediumorchid"] = "ba55d3",
["mediumpurple"] = "9370d8",
["mediumseagreen"] = "3cb371",
["mediumslateblue"] = "7b68ee",
["mediumspringgreen"] = "00fa9a",
["mediumturquoise"] = "48d1cc",
["mediumvioletred"] = "c71585",
["midnightblue"] = "191970",
["mintcream"] = "f5fffa",
["mistyrose"] = "ffe4e1",
["moccasin"] = "ffe4b5",
["navajowhite"] = "ffdead",
["navy"] = "000080",
["oldlace"] = "fdf5e6",
["olive"] = "808000",
["olivedrab"] = "6b8e23",
["orange"] = "ffa500",
["orangered"] = "ff4500",
["orchid"] = "da70d6",
["palegoldenrod"] = "eee8aa",
["palegreen"] = "98fb98",
["paleturquoise"] = "afeeee",
["palevioletred"] = "d87093",
["papayawhip"] = "ffefd5",
["peachpuff"] = "ffdab9",
["peru"] = "cd853f",
["pink"] = "ffc0cb",
["plum"] = "dda0dd",
["powderblue"] = "b0e0e6",
["purple"] = "800080",
["red"] = "ff0000",
["rosybrown"] = "bc8f8f",
["royalblue"] = "4169e1",
["saddlebrown"] = "8b4513",
["salmon"] = "fa8072",
["sandybrown"] = "f4a460",
["seagreen"] = "2e8b57",
["seashell"] = "fff5ee",
["sienna"] = "a0522d",
["silver"] = "c0c0c0",
["skyblue"] = "87ceeb",
["slateblue"] = "6a5acd",
["slategray"] = "708090",
["snow"] = "fffafa",
["springgreen"] = "00ff7f",
["steelblue"] = "4682b4",
["tan"] = "d2b48c",
["teal"] = "008080",
["thistle"] = "d8bfd8",
["tomato"] = "ff6347",
["turquoise"] = "40e0d0",
["violet"] = "ee82ee",
["violetred"] = "d02090",
["wheat"] = "f5deb3",
["white"] = "ffffff",
["whitesmoke"] = "f5f5f5",
["yellow"] = "ffff00",
["yellowgreen"] = "9acd32"
}
colour_found = colour_map[colourName:lower()]
if colour_found ~= nil then
background = colour_found
end
return foreground, background
end
function sectionHeader(title, count)
return "|- style=\"background-color: #4688C0; text-align: center;\"\n| colspan=\"2\" | '''" ..
L.t(title, count) .. "'''\n"
end
function sectionRow(label, content, count, unit)
if unit ~= nil then
content = tonumber(content)
unit = L.t(unit, content)
local lang = mw.getContentLanguage()
content = lang:formatNum(content)
else
unit = ''
end
return '|-\n| ' ..
L.t(label, count) .. ':\n| style=\"text-align: right; padding: 3px;\" | ' .. content .. unit .. '\n'
end
function sectionImage(imageName, suffix)
local image = checkImage(imageName, suffix)
return '|-\n| colspan=\"2\" style=\"padding: 10px;\" | [[File:' .. image .. '|center|border|240px]]\n'
end
local function addToSet(set, key)
set[key] = true
end
local function setNotContains(set, key)
return set[key] == nil
end
function generalSection(item, itemTable, craftingRecipes, args)
-- 'General' section header
section = sectionHeader('General')
-- Is a product at these tables
if craftingRecipes.products[item] ~= nil and Utils.tableLen(craftingRecipes.products[item]) >= 1 then
section = section .. craftingSubSection('Created at', item, craftingRecipes.products, craftingRecipes.recipes)
end
-- Is an ingredient at these tables
if craftingRecipes.ingredients[item] ~= nil and Utils.tableLen(craftingRecipes.ingredients[item]) >= 1 then
section = section .. craftingSubSection('Used at', item, craftingRecipes.ingredients, craftingRecipes.recipes)
end
-- calories and nutrients (if itemTable.group == 'Food')
if itemTable.group == L.t('Food') then
section = section .. sectionRow('Calorie', itemTable.calories, tonumber(itemTable.calories), 'cal')
section = section .. '|- valign=\"center\"\n| rowspan=\"4\" | ' .. L.t('Nutrients') .. ':\n'
section = section ..
'| style=\"color: red; text-align: right; padding: 3px;\" | ' ..
L.t('Carbs') .. ': ' .. itemTable.carbs .. '\n'
section = section ..
'|- valign=\"center\"\n| style=\"color: orange; text-align: right; padding: 3px;\" | ' ..
L.t('Protein') .. ': ' .. itemTable.protein .. '\n'
section = section ..
'|- valign=\"center\"\n| style=\"color: darkkhaki; text-align: right; padding: 3px;\" | ' ..
L.t('Fat') .. ': ' .. itemTable.fat .. '\n'
section = section ..
'|- valign=\"center\"\n| style=\"color: limegreen; text-align: right; padding: 3px;\" | ' ..
L.t('Vitamins') .. ': ' .. itemTable.vitamins .. '\n'
section = section .. sectionRow('Nutrition Density', L.t('%s per 100 cals'):format(itemTable.density))
end
-- carried
local carried
if args.carried ~= nil and args.carried ~= '' then
carried = args.carried
else
carried = itemTable.carried
end
section = section .. sectionRow('Carried in', carried)
-- weight
local weight
if itemTable.weight ~= nil then
weight = itemTable.weight / 100
else
weight = '0.0'
end
section = section .. sectionRow('Weight', weight, nil, 'kg')
-- stack limit
if itemTable.maxStack ~= nil then
section = section .. sectionRow('Stack limit', itemTable.maxStack)
end
-- yield
if itemTable.yield ~= nil then
section = section .. sectionRow('Improve Gathering', itemTable.yield)
end
-- fuel
if itemTable.fuel ~= nil then
section = section .. sectionRow('Fuel energy', itemTable.fuel, nil, 'J')
end
-- currency
if itemTable.currency ~= nil then
section = section .. "|- style=\"text-align: center;\"\n| colspan=\"2\" | " .. L.t('Can back a currency') .. "\n"
end
return section
end
function checkImage(imageName, suffix)
local image = 'NoImage.png|link=https://wiki.play.eco/index.php?title=Special:Upload&wpDestFile=' ..
imageName .. '_' .. suffix .. '.png|[[Category:Pages_with_missing_' .. suffix:lower() .. ']]'
if mw.title.makeTitle('File', imageName .. '_' .. suffix .. '.png').file.exists then
image = imageName .. '_' .. suffix .. '.png'
elseif mw.title.makeTitle('File', imageName .. '_' .. suffix .. '.jpg').file.exists then
image = imageName .. '_' .. suffix .. '.jpg'
end
return image
end
-- Main entry point for the Module
function p.infobox(frame)
-- get args from the Template
local args = Utils.normaliseArgs(frame)
return p.biomeBox(args)
end
return p