Content deleted Content added
Hail12Pink (talk | contribs) No edit summary |
m Fixed an annoying bug that caused poor formatting on the configuration section of the part template |
||
(105 intermediate revisions by 4 users not shown) | |||
Line 1: | Line 1: | ||
local module = {} |
local module = {} |
||
--mw.loadData has performance benefits over require as it loads the module onnce per page, not of per invocation. |
|||
local Parts = require("Module:PartJSON") |
|||
local Parts = mw.loadData("Module:PartJSON") |
|||
local function getRawMaterials(item) |
local function getRawMaterials(item) |
||
Line 63: | Line 64: | ||
end |
end |
||
recipeString = recipeString .. "[[" .. itemName .. "|" .. itemName .. " |
recipeString = recipeString .. "[[" .. itemName .. "|" .. itemName .. " " .. amount .. "x]]" .. endString |
||
end |
end |
||
Line 77: | Line 78: | ||
local field = args[1] |
local field = args[1] |
||
if |
if Parts[itemName] then |
||
if field == "Description" then |
|||
local part = Parts[itemName] |
|||
local description = part.Description |
|||
if description then |
|||
local descriptionSplit = mw.text.split(description, "\n") |
|||
local descriptionFormatted = "''\"" |
|||
for i, str in pairs(descriptionSplit) do |
|||
if i > 1 and #str > 3 then descriptionFormatted = descriptionFormatted .. "''\n\n''" end |
|||
if #str > 3 then |
|||
descriptionFormatted = descriptionFormatted .. string.gsub(str, "%*%*", "'''") end |
|||
end |
|||
return descriptionFormatted .. "\" ''" |
|||
else |
|||
return "No description found" |
|||
end |
|||
elseif field == "Malleability" then |
|||
local malleability = Parts[itemName]["Malleability"] |
|||
if malleability == 0 or not malleability then |
|||
return "Fixed size" |
|||
else |
|||
return malleability |
|||
end |
|||
elseif field == "Raw recipe" then |
|||
local item = Parts[itemName] |
|||
local rawRecipe = getRawMaterials(item) |
|||
module.rr = rawRecipe |
|||
module.r = item.Recipe |
|||
local recipeFormatted = getRawMaterials(rawRecipe) |
|||
if formatRecipe(rawRecipe) == formatRecipe(formatNormalRecipe(item.Recipe)) then |
|||
return nil |
|||
end |
|||
return formatRecipe(rawRecipe) |
|||
elseif field == "Recipe" then |
|||
local item = Parts[itemName] |
|||
local recipe = item.Recipe |
|||
module.r = recipe |
|||
return formatRecipe(formatNormalRecipe(recipe)) |
|||
elseif field == "Durability" then |
|||
return Parts[itemName]["Durability"] or 3 |
|||
elseif field == "Configuration" then |
|||
local configData = Parts[itemName]["ConfigData"] |
|||
if not configData then return end |
|||
local formatted = "" |
|||
for _, entry in pairs(configData) do |
|||
local entryName = entry[1] |
|||
local entryType = entry[2] |
|||
local default = entry[3] |
|||
local range = entry[4] |
|||
local description = entry[5] |
|||
if type(default) == "table" then |
|||
if description then |
|||
default = {entry[3][1], entry[3][2]} |
|||
local descriptionSplit = mw.text.split(description, "\n") |
|||
local descriptionFormatted = "''\"" |
|||
if default[1] == nil then |
|||
default[1] = "inf" |
|||
elseif default[2] == nil then |
|||
default[2] = "inf" |
|||
end |
|||
end |
|||
if entryType == "number" then |
|||
formatted = formatted .. " \n* "..entryName.."<sup>(number)[" .. range[1] .. " - " .. range[2] .. "]</sup>" |
|||
elseif entryType == "boolean" then |
|||
formatted = formatted .. " \n* "..entryName.."<sup>(boolean)</sup> " |
|||
elseif entryType == "string" then |
|||
formatted = formatted .. " \n* "..entryName.."<sup>(string)</sup> " |
|||
elseif entryType == "Selection" then |
|||
formatted = formatted .. " \n* "..entryName.."<sup>(selection)</sup> " |
|||
elseif entryType == "Coordinate" then |
|||
formatted = formatted .. " \n* "..entryName.."<sup>(coordinate)</sup> " |
|||
elseif entryType == "NumberRange" then |
|||
formatted = formatted .. " \n* "..entryName.."<sup>(numberRange)["..default[1].." - "..default[2] .. "]</sup>" |
|||
end |
|||
end |
end |
||
return formatted |
|||
elseif field == "ConfigurationLarge" then |
|||
local configData = Parts[itemName]["ConfigData"] |
|||
if not configData then return "* Cannot be configured." end |
|||
local formatted = "" |
|||
for _, entry in pairs(configData) do |
|||
local entryName = entry[1] |
|||
local entryType = entry[2] |
|||
local default = entry[3] |
|||
local range = entry[4] |
|||
local description = entry[5] |
|||
if type(default) == "table" then |
|||
default = {entry[3][1], entry[3][2]} |
|||
if default[1] == nil then |
|||
default[1] = "inf" |
|||
elseif default[2] == nil then |
|||
default[2] = "inf" |
|||
end |
|||
elseif field == "Malleability" then |
|||
end |
|||
local malleability = Parts[itemName]["Malleability"] |
|||
if entryType == "number" then |
|||
formatted = formatted .. " \n* "..entryName.."<sup>(number) ["..range[1].." - "..range[2].."]</sup> - "..description |
|||
elseif entryType == "boolean" then |
|||
formatted = formatted .. " \n* "..entryName.."<sup>(boolean)</sup> - "..description |
|||
elseif entryType == "string" then |
|||
formatted = formatted .. " \n* "..entryName.."<sup>(string)</sup> - "..description |
|||
elseif entryType == "Selection" then |
|||
formatted = formatted .. " \n* "..entryName.."<sup>(selection)</sup> - "..description |
|||
elseif entryType == "Coordinate" then |
|||
formatted = formatted .. " \n* "..entryName.."<sup>(coordinate)</sup> - "..description |
|||
elseif entryType == "NumberRange" then |
|||
formatted = formatted .. " \n* "..entryName.."<sup>(numberRange) ["..default[1].." - "..default[2].."]</sup> - "..description |
|||
end |
|||
end |
|||
return string.sub(formatted, 2) |
|||
elseif field == "Type" then |
|||
local categories = Parts[itemName]["Categories"] |
|||
local formatted = "" |
|||
local invisEnd = " " |
|||
for i, type in pairs(categories) do |
|||
if i > 1 then |
|||
formatted = formatted .. "\n\n" |
|||
end |
|||
invisEnd = invisEnd .. " [[Category:" .. type .. "]]" |
|||
formatted = formatted .. "[[:Category:" .. type .. "|" .. type .. "]]" |
|||
end |
|||
return formatted .. invisEnd |
|||
elseif field == "Flammable" then |
|||
if Parts[itemName]["Flammable"] == "true" then |
|||
return "Yes" |
|||
else |
|||
return "No" |
|||
end |
|||
elseif field == "DefaultColor" or field == "DefaultSize" then |
|||
local conn = "" |
|||
local ccat = "" |
|||
local rgbtable = {} |
|||
if field == "DefaultColor" then conn = ", " else conn = " x " end |
|||
for i, v in pairs(Parts[itemName][field]) do |
|||
if malleability == 0 or not malleability then |
|||
ccat = ccat .. v |
|||
if i ~= 3 then ccat = ccat .. conn end |
|||
else |
|||
rgbtable[i] = v |
|||
end |
|||
elseif field == "Raw recipe" then |
|||
local item = Parts[itemName] |
|||
if not item then |
|||
return nil |
|||
end |
|||
local rawRecipe = getRawMaterials(item) |
|||
module.rr = rawRecipe |
|||
module.r = item.Recipe |
|||
local recipeFormatted = getRawMaterials(rawRecipe) |
|||
if formatRecipe(rawRecipe) == formatRecipe(formatNormalRecipe(item.Recipe)) then |
|||
return nil |
|||
end |
|||
return formatRecipe(rawRecipe) |
|||
elseif field == "Recipe" then |
|||
local item = Parts[itemName] |
|||
if not item then |
|||
return "No recipe found" |
|||
end |
|||
local recipe = item.Recipe |
|||
module.r = recipe |
|||
return formatRecipe(formatNormalRecipe(recipe)) |
|||
elseif field == "Durability" then |
|||
return Parts[itemName]["Durability"] or 3 |
|||
elseif field == "Configuration" then |
|||
local configData = Parts[itemName]["ConfigData"] |
|||
local formatted = "" |
|||
for _, entry in pairs(configData) do |
|||
local entryName = entry[1] |
|||
local entryType = entry[2] |
|||
local default = entry[3] |
|||
local range = entry[4] |
|||
local description = entry[5] |
|||
if entryType == "number" then |
|||
formatted = formatted .. "\n * "..entryName.."<sup>(number)[" .. range[1] .. "-" .. range[2] .. "] [default '"..default.."']</sup>" |
|||
elseif entryType == "boolean" then |
|||
formatted = formatted .. "\n * "..entryName.."<sup>(boolean)</sup>" |
|||
elseif entryType == "string" then |
|||
formatted = formatted .. "\n * "..entryName.."<sup>(string)</sup>" |
|||
elseif entryType == "selectable" then |
|||
formatted = formatted .. "\n * "..entryName.."<sup>(selectable)</sup>" |
|||
end |
end |
||
end |
|||
if field == "DefaultColor" then |
|||
return formatted |
|||
local rgb = (rgbtable[1] * 0x10000) + (rgbtable[2] * 0x100) + rgbtable[3] |
|||
elseif field == "ConfigurationLarge" then |
|||
local |
local webcolor = string.format("%x", rgb) |
||
while string.len(webcolor) < 6 do |
|||
local formatted = "" |
|||
webcolor = "0" .. webcolor |
|||
end |
|||
webcolor = "#" .. webcolor |
|||
for _, entry in pairs(configData) do |
|||
local entryName = entry[1] |
|||
local entryType = entry[2] |
|||
local default = entry[3] |
|||
local range = entry[4] |
|||
local description = entry[5] |
|||
if rgbtable[1] > 76.5 or rgbtable[2] > 76.5 or rgbtable[3] > 76.5 then |
|||
ccat = ccat .. '<big><span style="color:' .. webcolor .. '"> ⬢</span></big>' |
|||
else |
|||
ccat = ccat .. '<big><span style="color:' .. webcolor .. '; text-shadow: 0px 0px 2px DimGray"> ⬢</span></big>' |
|||
formatted = formatted .. "\n* "..entryName.."<sup>(number) (range "..range[1].."-"..range[2]..")</sup> - "..description |
|||
end |
|||
formatted = formatted .. "\n* "..entryName.."<sup>(boolean)</sup> - "..description |
|||
elseif entryType == "string" then |
|||
formatted = formatted .. "\n* "..entryName.."<sup>(string)</sup> - "..description |
|||
elseif entryType == "selectable" then |
|||
formatted = formatted .. "\n* "..entryName.."<sup>(selectable)</sup> - "..description |
|||
end |
end |
||
end |
|||
return ccat |
|||
return string.sub(formatted, 2) |
|||
elseif field == "Type" then |
|||
local categories = Parts[itemName]["Categories"] |
|||
local formatted = "" |
|||
elseif Parts[itemName][field] then |
|||
for i, type in pairs(categories) do |
|||
return (tostring(Parts[itemName][field])) |
|||
else |
|||
formatted = formatted .. "\n\n" |
|||
error("unknown field given: " .. tostring(args[1])) |
|||
end |
|||
formatted = formatted .. "[[Category:" .. type .. "]]" .. type |
|||
end |
end |
||
return formatted |
|||
elseif Parts[itemName][field] then |
|||
return tostring(Parts[itemName][field]) |
|||
else |
else |
||
mw.addWarning("Sorry, part not found. Please fill in the fields manually.") |
|||
error("unknown field given: " .. tostring(args[1])) |
|||
return "N/A" |
|||
end |
end |
||
end |
end |