Module:Coins
Revision as of 12:03, 9 November 2022 by Jacmob (talk | contribs) (Created page with "-- <pre> -- Implements {{Coins}} local p = {} local function amount(a) -- convert used globals to locals where possible to improve performance local math = math local string = string local table = table local mw = mw local expr = mw.ext.ParserFunctions.expr local ret = {'<span class="coins coins-', true, true, true, '</span>'} -- strip commas from input -- @example '123,456,789' a = string.gsub(a, ',', '') -- check for decimals/division to determi...")
Module documentation
This documentation is transcluded from Module:Coins/doc. [edit] [history] [purge]
Module:Coins's function amount is invoked by Template:Coins.
Module:Coins is required by Module:Exchange.
This module is a helper module to be used by other modules; it may not be designed to be invoked directly. See Near-Reality:Lua/Helper modules for a full list and more information.
Module | Function | Type | Use |
---|---|---|---|
Coins | _amount(coins) | Number | Returns a formatted string with a coins icon and the amount of coins. See Template:Coins for examples. |
-- <pre> -- Implements {{Coins}} local p = {} local function amount(a) -- convert used globals to locals where possible to improve performance local math = math local string = string local table = table local mw = mw local expr = mw.ext.ParserFunctions.expr local ret = {'<span class="coins coins-', true, true, true, '</span>'} -- strip commas from input -- @example '123,456,789' a = string.gsub(a, ',', '') -- check for decimals/division to determine if output should have forced 2 decimal places local has_decimal_or_division = false if string.match(a, "[./]") then has_decimal_or_division = true end -- for performance reasons, only calculate expr if required if tonumber(a) == nil then a = tonumber(expr(a)) or 0 end -- round to two decimal places a = math.floor(a * 100 + 0.5) / 100 local num = math.abs(a) local amounts = {1000, 250, 100, 25, 5, 4, 3, 2, 1} local result = 1000 for _, amount in ipairs(amounts) do result = amount if num >= amount then break end end ret[2] = tostring(result) -- set a class to denote positive or negative (css sets the colour) if a > 0 then ret[3] = ' coins-pos">' elseif a < 0 then ret[3] = ' coins-neg">' else ret[3] = '">' end -- format number with commas if has_decimal_or_division then local b = 0 a, b = math.modf(a) b = math.abs(b) -- hack fix for formatNum stripping the sign from -0 if (a > 999 or a < -999) then a = mw.language.getContentLanguage():formatNum(a) end b = string.sub(string.format("%.2f", b),2) ret[4] = a..b else ret[4] = mw.language.getContentLanguage():formatNum(a) end return table.concat( ret ) end -- -- {{Coins}} access point -- function p.amount(frame) local args = frame:getParent().args -- for {{coins|111}} local a = args[1] or '0' return amount(a) end -- -- Module access point -- function p._amount(a) a = tostring(a) or '0' return amount(a) end return p