Module:Sandbox/Mdowdell/Coins: Difference between revisions
imported>Mdowdell ←Created page with '-- <pre> -- -- Implements {{Coins}} and {{Rusty coins}} -- local p = {} -- -- {{Coins}} access point -- function p.amount( frame ) local args = frame:getPa...' |
(No difference)
|
Latest revision as of 10:59, 6 January 2015
Documentation for this module may be created at Module:Sandbox/Mdowdell/Coins/doc
-- <pre>
--
-- Implements {{Coins}} and {{Rusty coins}}
--
local p = {}
--
-- {{Coins}} access point
--
function p.amount( frame )
local args = frame:getParent().args
-- for {{coins|111}} or {{coins|amount=111}}
local a = args[1] or args.Amount or args.amount
return p._amount( a )
end
--
-- {{Rusty coins}} access point
--
function p.rusty( frame )
local args = frame:getParent().args
local a = args[1] or args.Amount or args.amount
return p._amount( a, true )
end
--
-- @param a {number} Number to output with coins image
-- @param rusty {boolean} If true, outputs rusty coins image. Defauts to false
-- @return {string}
--
function p._amount ( a, rusty )
-- convert used globals to locals where possible to improve performance
local tostring = tostring
local tonumber = tonumber
local mw = mw
local a = tostring( a ) or '0'
local color = 'green'
local img = '1'
-- strip commas from input
-- @example {{GEPrice|Foo}} -> '1,000'
a = a:gsub( ',', '' )
-- cache tonumber( a ) to improve performance a bit
num_a = tonumber( a )
-- dirty way of replicating #expr
-- should be able to be replaced by backporting
-- <https://git.wikimedia.org/commit/mediawiki%2Fextensions%2FParserFunctions/ea7bc2880a5e6e71d5b6c904e5299cdde30817bd>
--
-- only do this if required so as not to impact performance too much
if num_a == nil then
a = mw.getCurrentFrame():preprocess( '{{#expr:' .. a .. '}}' )
num_a = tonumber( a )
if num_a == nil then
num_a = 0
end
end
-- round to 2 d.p.
a = math.floor( num_a * 100 + 0.5 ) / 100
-- set the color
-- blue for positive, red for negative, green for zero
-- default 'green' set above
if a > 0 then
-- blue
color = '#014cc0'
elseif a < 0 then
-- red
color = '#c02614'
end
-- set the coins image
-- default '1' set above
local num = math.abs( a )
local amounts = { 1000, 250, 100, 25, 5, 4, 3, 2 }
local i, j
for i = 1, 8 do
j = amounts[i]
if num >= j then
img = tostring( j )
break
end
end
if not rusty then
img = '[[File:Coins ' .. img .. '.png|link=Coins]]'
else
img = '[[File:Rusty coins ' .. img .. '.png|link=Rusty coins]]'
end
-- format number with commas
a = mw.language.getContentLanguage():formatNum( a )
-- return '<span class="coins/rusty-coins ' .. 'coins-XXXX ' .. 'coins-pos/neg">' .. a .. '</span>'
return '<span class="coins-templ" style="white-space:nowrap; color:' ..
color .. '">' .. img .. ' ' .. a .. '</span>'
end
return p