Module:Goodbox: Difference between revisions
From Against the Storm Official Wiki
m Fixing skipping beginning separator when not needed--hopefully??!?!??! |
Adding Amber icons to sell and buy values |
||
| Line 105: | Line 105: | ||
needsSeparator = Infobox.makeInnerRow(innerTable, goodSellValue, needsSeparator, | needsSeparator = Infobox.makeInnerRow(innerTable, goodSellValue, needsSeparator, | ||
Infobox.TITLE_SELL_VALUE, Infobox.toTwoDecimalPlaces(goodSellValue)) | Infobox.TITLE_SELL_VALUE, Infobox.toTwoDecimalPlaces(goodSellValue) .. StyleUtils.AMBER()) | ||
needsSeparator = Infobox.makeInnerRow(innerTable, goodBuyValue, needsSeparator, | needsSeparator = Infobox.makeInnerRow(innerTable, goodBuyValue, needsSeparator, | ||
Infobox.TITLE_BUY_VALUE, Infobox.toTwoDecimalPlaces(goodBuyValue)) | Infobox.TITLE_BUY_VALUE, Infobox.toTwoDecimalPlaces(goodBuyValue) .. StyleUtils.AMBER()) | ||
needsSeparator = true | needsSeparator = true | ||
Revision as of 04:42, 23 December 2023
Documentation for this module may be created at Module:Goodbox/doc
---
--- Module to create an infobox for displaying on a good's wiki page.
---
--- Shows the facts from the data about the specified good in an easy-to-read
--- table, with a large icon, information, categories, and the flavor text.
---
--- This should be invoked from Template:Goodbox with the parameter of the
--- good whose infobox should be shown. See the template documentation for
--- more information about parameters and errors and to see examples.
---
--- @module Goodbox
local Goodbox = {}
local Infobox = require("Module:Infobox")
local GoodsData = require("Module:GoodsData")
local StyleUtils = require("Module:StyleUtils")
--region Private constants
local ARGS = {
["name"] = "name",
["purpose"] = "purpose",
["species_preference"] = "species_preference",
}
--endregion
--region Private methods
---
--- Builds using the provided wikiInfobox a few header items.
---
---@param wikiInfobox table mw.html object into which we're building this
---@param goodName string the name of the good the infobox is about
---@return table the Mediawiki html object into which we've been adding things
local function makeHeaderContent(wikiInfobox, goodName)
-- Grab the data we'll use to populate this.
local goodDescription = GoodsData.getGoodDescription(goodName)
local goodIconFilename = GoodsData.getGoodIcon(goodName)
-- Start the header area
local header = Infobox.startNewHeader(wikiInfobox)
Infobox.makeTitle(header, goodName)
Infobox.makeFlavorText(header, goodDescription)
Infobox.makeTitleIcon(header, goodIconFilename)
return wikiInfobox
end
---
--- Builds using the provided wikiInfobox a subtable to lay out headers and
--- fields.
---
---@param wikiInfobox table mw.html object into which we're building this
---@param goodName string the name of the good the infobox is about
---@param params table of strings, the parameter provided to the template
---@return table the Mediawiki html object into which we've been adding things
local function makeInnerContent(wikiInfobox, goodName, params)
-- Grab the data we'll use to populate this.
local goodCategory = GoodsData.getGoodCategory(goodName)
local goodIsEatable = GoodsData.isGoodEatable(goodName)
local goodIsBurnable = GoodsData.isGoodBurnable(goodName)
local goodBurnTime = GoodsData.getGoodBurnTime(goodName)
local goodSellValue, goodBuyValue = GoodsData.getGoodValue(goodName)
local goodID = GoodsData.getGoodID(goodName)
-- Start the inner table
local innerTable = Infobox.startNewInnerTable(wikiInfobox)
-- we'll reuse this to mark where separators are needed in the table
local needsSeparator = false
-- Start with the things from the parameters, if any
for paramTitle, paramValue in pairs(params or {}) do
if paramTitle ~= nil and paramValue ~= nil then
Infobox.makeInnerRow(innerTable, paramValue, false,
Infobox.toTitleCase(paramTitle), paramValue)
-- Require a separator if there were any parameters.
needsSeparator = true
end
end
needsSeparator = Infobox.makeInnerRow(innerTable, goodCategory, needsSeparator,
Infobox.TITLE_CATEGORY,
Infobox.makeCategoryIcon(goodCategory) .. StyleUtils.NBSP .. goodCategory)
needsSeparator = Infobox.makeInnerRow(innerTable, goodIsEatable, needsSeparator,
Infobox.TITLE_EATABLE, goodIsEatable and "Yes" or "No")
needsSeparator = Infobox.makeInnerRow(innerTable, goodIsBurnable, needsSeparator,
Infobox.TITLE_BURNABLE, goodIsBurnable and "Yes" or "No")
needsSeparator = Infobox.makeInnerRow(innerTable, goodIsBurnable and goodBurnTime,
needsSeparator, Infobox.TITLE_BURN_TIME, goodBurnTime)
needsSeparator = true
needsSeparator = Infobox.makeInnerRow(innerTable, goodSellValue, needsSeparator,
Infobox.TITLE_SELL_VALUE, Infobox.toTwoDecimalPlaces(goodSellValue) .. StyleUtils.AMBER())
needsSeparator = Infobox.makeInnerRow(innerTable, goodBuyValue, needsSeparator,
Infobox.TITLE_BUY_VALUE, Infobox.toTwoDecimalPlaces(goodBuyValue) .. StyleUtils.AMBER())
needsSeparator = true
needsSeparator = Infobox.makeInnerRow(innerTable, goodID, needsSeparator,
Infobox.TITLE_ID, StyleUtils.ITALIC .. goodID .. StyleUtils.ITALIC)
-- Close the inner table, and return it with the passed context
Infobox.endInnerTable(wikiInfobox, innerTable)
return wikiInfobox
end
--endregion
--region Public methods
---
--- Creates an html and wiki markup to display the data in an infobox.
---
--- @param frame table from template's calling context
--- @return string of html and wiki markup
function Goodbox.renderGoodbox(frame)
-- Every good must have a name.
local goodName = frame.args[ARGS.name]
if not goodName or goodName == "" then
return "You must specify the name of the good. See [[Template:Goodbox]] for examples."
end
-- Use this method here to check to see whether the provided name is valid.
if not GoodsData.getGoodID(goodName) then
return "Goodbox can't find the specified good: " .. goodName .. "."
end
-- Additional template parameters, may or may not be present.
local purpose = frame.args[ARGS.purpose]
local speciesPref = frame.args[ARGS.species_preference]
local wikiInfobox = Infobox.startNewInfobox()
makeHeaderContent(wikiInfobox, goodName)
makeInnerContent(wikiInfobox, goodName,
{ [ARGS.purpose] = purpose, [ARGS.species_preference] = speciesPref })
return wikiInfobox
end
--endregion
return Goodbox


