Module:USN fleet totals
implements:
{{USN fleet totals}}{{decommission}}{{end of service}}
Usage
{{#invoke:USN fleet totals|USN_fleet_totals|{{{1|}}}}}
local data = mw.loadData ('Module:USN fleet totals/data'); -- get the detailed list of ship types and their counts, the grand total of active and reserve ships, and the total planned ships
local get_args = require ('Module:Arguments').getArgs;
--[[--------------------------< R O U N D >--------------------------------------------------------------------
rounds <count> to nearest multiple of 5.
]]
local function round (count)
if 0 == count % 5 then
return count; -- <count> is xx0, xx5 so return unmolested
elseif 2.5 > (count % 5) then
return count - (count % 5); -- <count> is xx1, xx2 so return xx0
else
return count + (5 - (count % 5)); -- <count> is xx3, xx4 so return xx5
end
end
--[[--------------------------< U S N _ F L E E T _ T O T A L S >----------------------------------------------
implements {{USN fleet totals}}
This function returns one of three values according to the text sting in {{{1}}} (frame.args[1]):
active – the 'grand total' (active and reserved fleets) rounded to the nearest multiple of 5 -- {{USN fleet totals|active}}
planned – the 'planned total' (ships under construction or on order) rounded to the nearest multiple of 5 -- {{USN fleet totals|planned}}
retire – number of ships to be decommissioned or taken out of service -- {{USN fleet totals|retire}}
retire-year – planned retirement year farthest in the future -- {{USN fleet totals|retire-year}}
<anything or nothing> – the long string of fleet totals created by Module:USN fleet totals -- {{USN fleet totals}}
]]
local function USN_fleet_totals (frame)
if 'active' == frame.args[1] then -- number of active and reseved fleet ships
return round (data.grand_total); -- round to nearest multiple of 5
elseif 'planned' == frame.args[1] then -- under construction and on-order ships
return round (data.planned_total); -- round to nearest multiple of 5
elseif 'retire' == frame.args[1] then -- ships to be decommissioned or taken out of service
return round (data.retirements_total); -- round to nearest multiple of 5
elseif 'retire-year' == frame.args[1] then
return data.retirements_year_max;
else -- {{{1}}} is anything else
return data.fleet_totals_str; -- return the detailed fleet totals
end
end
--[[--------------------------< _ D E C O M _ E O S _ C O M M O N >--------------------------------------------
common function to implement {{decommission}} and {{end of service}} templates
]]
local function _decom_eos_common (args_t, phrases_t, template_name)
local out_t = {};
if phrases_t[args_t[1]] then -- is keyword valid?
table.insert (out_t, phrases_t[args_t[1]]); -- yes, get the associated string
elseif args_t[1] then -- no, but not nil so emit appropriate error message
return '<span style="color:#d33"><kbd>{{[[Template:' .. template_name .. '|' .. template_name ..']]}}</kbd>: error: unknown keyword: ' .. args_t[1] .. '</span>';
else -- missing keyword so emit error message
return '<span style="color:#d33"><kbd>{{[[Template:' .. template_name .. '|' .. template_name ..']]}}</kbd>: error: missing keyword</span>'
end
if args_t[2] then -- did we get this optional parameter?
local year = mw.text.trim (args_t[2]):match ('^%d%d%d%d$'); -- attempt to get a four digit year
if year then -- did we find a 'year'? TODO: validate? must be this or a future year? never in the past?
table.insert (out_t, year); -- add the year to the output
else -- here when a four-digit 'year' not found
return '<span style="color:#d33"><kbd>{{[[Template:' .. template_name .. '|' .. template_name ..']]}}</kbd>: error: invalid year</span>';
end
end
return table.concat (out_t, ' '); -- assemble into a big string and done
end
--[[--------------------------< D E C O M M I S S I O N >------------------------------------------------------
implements {{decommission}}
Takes two positional parameters:
{{{1}}} – (required) one of two keywords that cause the template to return an appropriate phrase; phrases are
defined in ~/data. The keywords are 'scheduled' and 'proposed'
{{{2}}} – (optional) year when decommissioning is expected to occur
]]
local function decommission (frame)
local args_t = get_args (frame); -- get parameters from the template into a local table
return _decom_eos_common (args_t, data.decommission_t, 'decommission'); -- call common function to error check the inputs and return the rendered string
end
--[[--------------------------< E N D _ O F _ S E R V I C E >--------------------------------------------------
implements {{end of service}}
Takes two positional parameters:
{{{1}}} – (required) one of two keywords that cause the template to return an appropriate phrase; phrases are
defined in ~/data. The keywords are 'scheduled' and 'proposed'
{{{2}}} – (optional) year when end of service is expected to occur
]]
local function end_of_service (frame)
local args_t = get_args (frame); -- get parameters from the template into a local table
return _decom_eos_common (args_t, data.end_of_service_t, 'end of service'); -- call common function to error check the inputs and return the rendered string
end
--[[--------------------------< E X P O R T S >----------------------------------------------------------------
]]
return
{
USN_fleet_totals = USN_fleet_totals,
decommission = decommission,
end_of_service = end_of_service,
}
Content Disclaimer
Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.
- The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
- There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
- It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
- Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
- Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.