No edit summary |
|||
(2 intermediate revisions by 2 users not shown) | |||
Line 52: | Line 52: | ||
-- select which image class to use for css to hook off |
-- select which image class to use for css to hook off |
||
num = math.abs(a) |
num = math.abs(a) |
||
− | amounts = { |
+ | amounts = {10000, 1000, 250, 100, 25, 5, 4, 3, 2, 1} |
amountsChimes = {1000, 100, 50, 20, 1} |
amountsChimes = {1000, 100, 50, 20, 1} |
||
Line 72: | Line 72: | ||
-- set a class to denote positive or negative (css sets the colour) |
-- set a class to denote positive or negative (css sets the colour) |
||
− | if a |
+ | if a > 0 then |
ret[4] = ' coins-pos">' |
ret[4] = ' coins-pos">' |
||
− | elseif a |
+ | elseif a < 0 then |
ret[4] = ' coins-neg">' |
ret[4] = ' coins-neg">' |
||
else |
else |
Latest revision as of 20:19, 26 August 2019
Documentation for this module may be created at Module:Currency/doc
--[[
{{Helper module
|name = Currency
|fname1 = _amount(a, coinType)
|ftype1 = number/string, string
|fuse1 = Returns the number a with the correct image in front of it and formatted with commas. Current supported cointypes are <code>coins</code>, <code>rusty</code> and <code>chimes</code>.
}}
-- ]]
-- <pre>
-- Implements various currency templates
--
local p = {}
local function amount (a, coinType)
-- 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 ', true, true, true, true, '</span>'}
-- add class for CSS to add the correct image with
-- see [[MediaWiki:Custom-Common.less/coins.less]] for more details
local coinClasses = {
coins = 'coins-',
rusty = 'rusty-coins-',
chimes = 'chimes-'
}
local a2, num, amounts, i, j
ret[1] = '<span class="coins '
ret[2] = coinClasses[coinType]
-- strip commas from input
-- @example {{GEPrice|Foo}} -> '1,000'
a = string.gsub(a, ',', '')
-- cache tonumber result
a2 = tonumber(a)
-- only do this if required so as not to impact performance too much
if a2 == nil then
a = expr(a)
a2 = tonumber(a) or 0
end
-- round to 2 d.p.
a = math.floor(a2 * 100 + 0.5) / 100
-- select which image class to use for css to hook off
num = math.abs(a)
amounts = {10000, 1000, 250, 100, 25, 5, 4, 3, 2, 1}
amountsChimes = {1000, 100, 50, 20, 1}
if coinType == 'chimes' then
amts = amountsChimes
else
amts = amounts
end
for i = 1, #amts do
j = amts[i]
if num >= j then
break
end
end
ret[3] = tostring(j)
-- set a class to denote positive or negative (css sets the colour)
if a > 0 then
ret[4] = ' coins-pos">'
elseif a < 0 then
ret[4] = ' coins-neg">'
else
ret[4] = '">'
end
-- format number with commas
ret[5] = mw.language.getContentLanguage():formatNum(a)
return table.concat( ret )
end
--
-- {{Coins}}
--
function p.coins(frame)
local args = frame:getParent().args
-- for {{coins|111}} or {{coins|amount=111}}
-- @todo remove named arg
local a = args[1] or args.Amount or args.amount or '0'
return amount(a, 'coins')
end
--
-- {{Rusty coins}}
--
function p.rusty(frame)
local args = frame:getParent().args
-- @todo remove named arg
local a = args[1] or args.Amount or args.amount or '0'
return amount(a, 'rusty')
end
--
-- {{Chimes}}
--
function p.chimes(frame)
local args = frame:getParent().args
-- @todo remove named arg
local a = args[1] or args.Amount or args.amount or '0'
return amount(a, 'chimes')
end
--
-- Module access point
--
function p._amount(a, coinType)
a = tostring(a) or '0'
return amount(a, coinType)
end
return p