Module:FloorNumber: Difference between revisions
Jump to navigation
Jump to search
Content added Content deleted
(Created page with "local ordinal = require('Module:Ordinal')._main local yn = require('Module:Yesno') local p = {} function p.main(frame) return p._main(frame:getParent().args) end function p._main(args) local nohelp = yn(args.nohelp) local caps = yn(args.caps) local flr = tonumber(args.uk) -- prevent people from using anything but the main syntax for consistency across the wiki. Big red errors should make stuff clear. assert(flr, "Missing parameter `uk`") -- prevent unnamed para...") |
No edit summary Tag: Reverted |
||
Line 1: | Line 1: | ||
--[[ |
|||
local ordinal = require('Module:Ordinal')._main |
|||
{{Helper module |
|||
local yn = require('Module:Yesno') |
|||
|name = Number |
|||
|fname1 = _round(num, dp) |
|||
|ftype1 = float, int |
|||
|fuse1 = Rounds <code>num</code> to a precision given by <code>dp</code>, if <code>dp</code> is not specified, it defaults to zero. |
|||
|fname2 = _short(str) |
|||
|ftype2 = String |
|||
|fuse2 = Convert numbers ending in k, m or b to the actual correct number. Example: 3.5k -> 3500 |
|||
}} |
|||
-- ]] |
|||
-- |
|||
-- Number manipulation methods |
|||
-- |
|||
-- Many methods are already available in the math library, so this will be fairly small |
|||
-- |
|||
local p = {} |
local p = {} |
||
-- |
|||
function p.main(frame) |
|||
-- Rounds a number to a specified number of decimal places |
|||
return p._main(frame:getParent().args) |
|||
-- |
|||
-- If dp is not specified, it defaults to zero |
|||
-- based on <http://dev.wikia.com/wiki/Module:HF> |
|||
-- |
|||
function p._round( num, dp ) |
|||
if not num then |
|||
return |
|||
end |
|||
local mult = 10 ^ ( dp or 0 ) |
|||
return math.floor( num * mult + 0.5 ) / mult |
|||
end |
end |
||
function p. |
function p.round( frame ) |
||
return p._round( frame.args[1], frame.args[2] ) |
|||
local nohelp = yn(args.nohelp) |
|||
end |
|||
local caps = yn(args.caps) |
|||
local flr = tonumber(args.uk) |
|||
-- |
|||
-- prevent people from using anything but the main syntax for consistency across the wiki. Big red errors should make stuff clear. |
|||
-- Expands a shorthand number to an actual number |
|||
assert(flr, "Missing parameter `uk`") |
|||
-- |
|||
-- prevent unnamed parameters, which indicates people wanting to use deprecated |nohelp}}, |caps}}, or {{floornumber|1}} syntax. |
|||
-- @example 3.5k -> 3500 |
|||
assert(args[1] == nil, "Unrecognised parameter") |
|||
-- @example 10m -> 10000000 |
|||
local flr_us = flr+1 |
|||
-- |
|||
local ord_gb = ordinal(flr, {nosup=true, nonum=true}) |
|||
-- Returns the string if it is not a valid number |
|||
local ord_us = ordinal(flr_us, {nosup=true, nonum=true}) |
|||
-- |
|||
function p._short( str ) |
|||
local ret = mw.html.create('span') |
|||
local num = str:sub( 1, -2 ) |
|||
ret:addClass('floornumber') |
|||
local |
local char = str:sub( -1 ) |
||
if tonumber( num ) then |
|||
spn_gb :addClass('floornumber-gb') |
|||
if char == 'k' then |
|||
num = num * 10^3 |
|||
if flr == 0 then |
|||
elseif char == 'm' then |
|||
num = num * 10^6 |
|||
spn_gb:wikitext('Ground') |
|||
elseif char == 'b' then |
|||
-- strip trailing letter |
|||
num = num * 10^9 |
|||
else |
else |
||
return str |
|||
spn_gb:wikitext('ground') |
|||
end |
end |
||
return num |
|||
else |
else |
||
return str |
|||
spn_gb:wikitext(flr) |
|||
:tag('sup') |
|||
:addClass('floornumber-ordinal-suffix') |
|||
:wikitext(ord_gb) |
|||
:done() |
|||
end |
end |
||
end |
|||
spn_gb:wikitext(' floor') |
|||
if not nohelp then |
|||
function p.short( frame ) |
|||
spn_gb:tag('sup') |
|||
return p._short( frame.args[1] ) |
|||
:addClass('floornumber-help noexcerpt') |
|||
:wikitext('[') |
|||
:tag('span') |
|||
:addClass('fact-text') |
|||
:addClass('floor-convention') |
|||
:attr('title', 'British convention; floor '..flr_us..' in the US') |
|||
:wikitext('UK') |
|||
:done() |
|||
:wikitext(']') |
|||
end |
|||
local spn_us = ret:tag('span') |
|||
spn_us :addClass('floornumber-us noexcerpt') |
|||
:wikitext(flr_us) |
|||
:tag('sup') |
|||
:addClass('floornumber-ordinal-suffix') |
|||
:wikitext(ord_us) |
|||
:done() |
|||
:wikitext(' floor') |
|||
:done() |
|||
if not nohelp then |
|||
local flr_gb |
|||
if flr == 0 then |
|||
flr_gb = 'ground floor' |
|||
else |
|||
flr_gb = 'floor '..flr |
|||
end |
|||
spn_us:tag('sup') |
|||
:addClass('floornumber-help noexcerpt') |
|||
:wikitext('[') |
|||
:tag('span') |
|||
:addClass('fact-text') |
|||
:addClass('floor-convention') |
|||
:attr('title', 'US convention; '..flr_gb..' in the UK') |
|||
:wikitext('US') |
|||
:done() |
|||
:wikitext(']') |
|||
end |
|||
return ret |
|||
end |
end |
||
Revision as of 00:12, 17 October 2024
Module documentation
This documentation is transcluded from Template:No documentation/doc. [edit] [history] [purge]
This module does not have any documentation. Please consider adding documentation at Module:FloorNumber/doc. [edit]
Module:FloorNumber's function main is invoked by Template:FloorNumber.
--[[
{{Helper module
|name = Number
|fname1 = _round(num, dp)
|ftype1 = float, int
|fuse1 = Rounds <code>num</code> to a precision given by <code>dp</code>, if <code>dp</code> is not specified, it defaults to zero.
|fname2 = _short(str)
|ftype2 = String
|fuse2 = Convert numbers ending in k, m or b to the actual correct number. Example: 3.5k -> 3500
}}
-- ]]
--
-- Number manipulation methods
--
-- Many methods are already available in the math library, so this will be fairly small
--
local p = {}
--
-- Rounds a number to a specified number of decimal places
--
-- If dp is not specified, it defaults to zero
-- based on <http://dev.wikia.com/wiki/Module:HF>
--
function p._round( num, dp )
if not num then
return
end
local mult = 10 ^ ( dp or 0 )
return math.floor( num * mult + 0.5 ) / mult
end
function p.round( frame )
return p._round( frame.args[1], frame.args[2] )
end
--
-- Expands a shorthand number to an actual number
--
-- @example 3.5k -> 3500
-- @example 10m -> 10000000
--
-- Returns the string if it is not a valid number
--
function p._short( str )
local num = str:sub( 1, -2 )
local char = str:sub( -1 )
if tonumber( num ) then
if char == 'k' then
num = num * 10^3
elseif char == 'm' then
num = num * 10^6
elseif char == 'b' then
-- strip trailing letter
num = num * 10^9
else
return str
end
return num
else
return str
end
end
function p.short( frame )
return p._short( frame.args[1] )
end
return p