Module:Goodbox: Difference between revisions
From Against the Storm Official Wiki
(Adding Amber icons to sell and buy values) |
m (forgot whitespace) |
||
Line 105: | Line 105: | ||
needsSeparator = Infobox.makeInnerRow(innerTable, goodSellValue, needsSeparator, | needsSeparator = Infobox.makeInnerRow(innerTable, goodSellValue, needsSeparator, | ||
Infobox.TITLE_SELL_VALUE, Infobox.toTwoDecimalPlaces(goodSellValue) .. StyleUtils.AMBER()) | Infobox.TITLE_SELL_VALUE, Infobox.toTwoDecimalPlaces(goodSellValue) .. StyleUtils.NBSP .. StyleUtils.AMBER()) | ||
needsSeparator = Infobox.makeInnerRow(innerTable, goodBuyValue, needsSeparator, | needsSeparator = Infobox.makeInnerRow(innerTable, goodBuyValue, needsSeparator, | ||
Infobox.TITLE_BUY_VALUE, Infobox.toTwoDecimalPlaces(goodBuyValue) .. StyleUtils.AMBER()) | Infobox.TITLE_BUY_VALUE, Infobox.toTwoDecimalPlaces(goodBuyValue) .. StyleUtils.NBSP .. StyleUtils.AMBER()) | ||
needsSeparator = true | needsSeparator = true |
Revision as of 04:43, 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.NBSP .. StyleUtils.AMBER()) needsSeparator = Infobox.makeInnerRow(innerTable, goodBuyValue, needsSeparator, Infobox.TITLE_BUY_VALUE, Infobox.toTwoDecimalPlaces(goodBuyValue) .. StyleUtils.NBSP .. 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