Module:Aircraft cat
Lua
CodeDiscussionEditHistoryLinksLink count Subpages:DocumentationTestsResultsSandboxLive code All modules
Logic for {{Aircraft cat}}.
UsageUsage
{{#invoke:Aircraft cat|function_name}}
Code
require('strict')
local p = {}
local getArgs = require('Module:Arguments').getArgs
local yesno = require('Module:Yesno')
local formatStatements = require('Module:Wikidata').formatStatements
local formatStatementsE = require('Module:Wikidata').formatStatementsE
local function getLabel(args)
return require('Module:Wikidata label')._getLabel(args.item or args[1], args.lang or args[2], args.link or 'wikipedia', args.capitalization or 'none', args.show_id or false)
end
local function interwiki_from_wikidata(args)
if mw.title.getCurrentTitle():inNamespaces(6) then
return ''
else
return require('Module:Interwiki')._interwiki(args)
end
end
local function mbox(args)
return mw.getCurrentFrame():expandTemplate {
title = 'Mbox',
args = args
}
end
local function color_label(args)
return mw.getCurrentFrame():expandTemplate {
title = 'Color label',
args = args
}
end
local function aircraft_label(args)
return mw.getCurrentFrame():expandTemplate {title = 'Aircraft label', args = args}
end
local function aircraft_label_layout(args)
return mw.getCurrentFrame():expandTemplate {title = 'Aircraft label/layout', args = args}
end
local function country_name_to_adjective(args)
return mw.getCurrentFrame:expandTemplate {
title = 'Country name to adjective (aircraft)',
args = args
}
end
local function country_label(args)
return mw.getCurrentFrame:expandTemplate {
title = 'Country label',
args = args
}
end
local function topic_of_country(args)
return mw.getCurrentFrame:expandTemplate {
title = 'Topic of country',
args = args
}
end
local function aircraft_type_of_operator_label(oprtype)
if oprtype == '' then
return nil
end
local types = {
a = 'airline',
e = 'executive',
g = 'government',
h = 'heritage',
m = 'military',
mil = 'military',
mus = 'museum',
p = 'private',
u = 'unidentified',
uid = 'unidentified',
ukn = 'unknown'
}
return types[oprtype] or oprtype
end
-- switch functions
local function aircraft_cat_country_captured_from(args)
return nil -- FIXME: no template to define this with
end
local function aircraft_cat_switch(args)
if args['path'] == 'by' then
return aircraft_cat_by({by = args.by, bypar = args.bypar, ['debug'] = args['debug']})
elseif args['path'] == 'clr' then
return aircraft_cat_color({
clr1adj = color_label({args.clr1, 'adj'}),
clr1par1 = color_label({args.clr1, 'par1'}),
clr1par2 = color_label({args.clr1, 'par2'}),
clr1rgb = color_label({args.clr1, 'rgb'}),
['debug'] = args['debug']
})
elseif args['path'] == 'clrclr' then
return aircraft_cat_color_x2({
clr1adj = color_label({args.clr1, 'adj'}),
clr1lab = color_label({args.clr1, 'name'}),
clr1par1 = color_label({args.clr1, 'par1'}),
clr1par2 = color_label({args.clr1, 'par2'}),
clr1rgb = color_label({args.clr1, 'rgb'}),
clr2adj = color_label({args.clr2, 'adj'}),
clr2lab = color_label({args.clr2, 'name'}),
clr2par1 = color_label({args.clr2, 'par1'}),
clr2par2 = color_label({args.clr2, 'par2'}),
clr2rgb = color_label({args.clr2, 'rgb'}),
['debug'] = args['debug']
})
elseif args['path'] == 'clrclrclr' then
return aircraft_cat_color_x3({
clr1adj = color_label({args.clr1, 'adj'}),
clr1lab = color_label({args.clr1, 'name'}),
clr1par1 = color_label({args.clr1, 'par1'}),
clr1par2 = color_label({args.clr1, 'par2'}),
clr1rgb = color_label({args.clr1, 'rgb'}),
clr2adj = color_label({args.clr2, 'adj'}),
clr2lab = color_label({args.clr2, 'name'}),
clr2par1 = color_label({args.clr2, 'par1'}),
clr2par2 = color_label({args.clr2, 'par2'}),
clr2rgb = color_label({args.clr2, 'rgb'}),
clr3adj = color_label({args.clr3, 'adj'}),
clr3lab = color_label({args.clr3, 'name'}),
clr3par1 = color_label({args.clr3, 'par1'}),
clr3par2 = color_label({args.clr3, 'par2'}),
clr3rgb = color_label({args.clr3, 'rgb'}),
['debug'] = args['debug']
})
elseif args['path'] == 'cls' then
return aircraft_cat_class({
cls = args.cls,
clspar1 = aircraft_label({args.clspar1, 'p'}),
clspar2 = aircraft_label({args.clspar1, 'p'}),
clspar3 = aircraft_label({args.clspar1, 'p'}),
['debug'] = args['debug']
})
elseif args['path'] == 'clsby' then
return aircraft_cat_class_by({
by = args.by,
bypar = args.bypar,
clscat = aircraft_label({clscat, 'pu'}),
clspar1 = aircraft_label({args.clspar1, 'p'}),
clspar2 = aircraft_label({args.clspar1, 'p'}),
clspar3 = aircraft_label({args.clspar1, 'p'}),
['debug'] = args['debug']
})
elseif args['path'] == 'clscof' then
return aircraft_cat_class_country_of({
cls = args.cls,
clspar1 = aircraft_label({args.clspar1, 'p'}),
clspar2 = aircraft_label({args.clspar1, 'p'}),
clspar3 = aircraft_label({args.clspar1, 'p'}),
cof = args.cof,
cofadj = country_name_to_adjective({args.cof}),
cofart = country_label({args.cof, 'art'}),
cofpar1 = args.cofpar1,
cofpar2 = args.cofpar2,
imagesize = args.imagesize,
navcofconstituent = args.navcofconstituent,
navcofdefunct = args.navcofdefunct,
['debug'] = args['debug']
})
elseif args['path'] == 'clscol' then
return aircraft_cat_class_country_of_location({
cls = args.cls,
clspar1 = aircraft_label({args.clspar1, 'p'}),
clspar2 = aircraft_label({args.clspar1, 'p'}),
clspar3 = aircraft_label({args.clspar1, 'p'}),
coladj = country_name_to_adjective({args.col}),
colart = country_label({args.col, 'art'}),
col = args.col,
imagesize = args.imagesize,
navcoldefunct = args.navcoldefunct,
['debug'] = args['debug']
})
elseif args['path'] == 'clscoo' then
return aircraft_cat_class_country_of_origin({
cls = args.cls,
coo = args.coo,
navcls = args.navcls,
['debug'] = args['debug']
})
elseif args['path'] == 'clscos' then
return aircraft_cat_class_country_of_service({
clslab = aircraft_label_layout({args.cls, 'pu'}),
clsnav = args.clsnav,
clspar1 = aircraft_label({args.cls, 'cat1', 'aircraft'}),
['cos'] = args['cos'],
cosart = country_label({args['cos'], 'art'}),
cosadj = country_name_to_adjective({args['cos']}),
imagesize = args.imagesize,
['debug'] = args['debug']
})
elseif args['path'] == 'clscostoo' then
return aircraft_cat_class_country_of_service_type_of_operator({
clslab = aircraft_label_layout({args.cls, 'pu'}),
clspar1 = aircraft_label({args.cls, 'cat1', 'aircraft'}),
['cos'] = args['cos'],
cosart = country_label({args['cos'], 'art'}),
cosadj = country_name_to_adjective({args['cos']}),
oprtyp = args.oprtyp,
navcls = args.navcls,
imagesize = args.imagesize,
['debug'] = args['debug']
})
elseif args['path'] == 'clsmfr' then
local mfrcoo = formatStatementsE({item = args.mfr, property = 'P17', displayformat = 'raw', numval = '1'})
return aircraft_cat_class_manufacturer({
clslab = aircraft_label({args.cls, 'pu'}),
clspar1lpl = aircraft_label({args.clspar1, 'p'}),
clspar2lpl = aircraft_label({args.clspar2, 'p'}),
clspar3lpl = aircraft_label({args.clspar3, 'p'}),
clstyp = aircraft_label({args.cls, 'clstyp'}),
image = formatStatementsE({item = args.mfr, property = 'P154', displayformat = 'raw', numval = '1'}),
imagesize = args.imagesize,
mfrcat = args.mfrcat or formatStatementsE({item = args.mfr, property = 'P373', numval = '1'}), -- Commons category
mfrcatac = args.mfrcatac or formatStatementsE({item = args.mfr, property = 'P1813', numval = '1'}), -- short name
mfrcoo = country,
mfrcooadj = country_name_to_adjective({getLabel({item = mfrcoo, link = '-'})}),
mfrlab = getLabel({item = args.mfr, link = '-'}),
['debug'] = args['debug']
})
elseif args['path'] == 'clsopr' then
return aircraft_cat_class_operator_data({
cls = args.cls,
clspu = aircraft_label({args.cls, 'pu', 'Aircraft'}),
opr = args.opr,
oprart = args.oprart,
oprtyp = args.oprtyp,
['debug'] = args['debug']
})
elseif args['path'] == 'cndcol' then
return aircraft_cat_class_country_of_location({
})
elseif args['path'] == 'cndmfr' then
return aircraft_cat_condition_manufacturer({
})
elseif args['path'] == 'cocapf' then
--[=[ FIXME: function not defined yet
return aircraft_cat_country_captured_from({
cocapf = args.cocapf,
cocapfadj = country_name_to_adjective({args.cocapf}),
cocapfart = country_label({args.cocapf, 'art'}),
['debug'] = args['debug']
})
]=]
return nil
elseif args['path'] == 'cocapt' then
return aircraft_cat_country_captured_by({
})
elseif args['path'] == 'cof' then
return topic_of_country({'aircraft'})
elseif args['path'] == 'cofby' then
return aircraft_cat_country_of_by({
})
elseif args['path'] == 'col' then
return aircraft_cat_country_of_location({
})
elseif args['path'] == 'coo' then
return aircraft_cat_class_country_of_origin({
cls = 'aircraft',
coo = args.coo,
navcls = 'no',
['debug'] = args['debug']
})
elseif args['path'] == 'cooby' then
return aircraft_cat_country_of_origin_by({
})
elseif args['path'] == 'coomfr' then
return aircraft_cat_manufacturer({
})
elseif args['path'] == 'cor' then
return aircraft_cat_country_of_registration({
})
elseif args['path'] == 'cos' then
return aircraft_cat_class_country_of_service({
})
elseif args['path'] == 'cosmfr' then
return aircraft_cat_country_of_service_manufacturer_layout({
})
elseif args['path'] == 'costoo' then
return aircraft_cat_class_country_of_service_type_of_operator({
})
elseif args['path'] == 'fnc' then
return aircraft_cat_function({
})
elseif args['path'] == 'fncmfr' then
return aircraft_cat_class_manufacturer({
})
elseif args['path'] == 'lft' then
return aircraft_cat_lift({
lft = args.lft,
lftpar = aircraft_label({args.lft, 'cat1'}),
['debug'] = args['debug']
})
elseif args['path'] == 'mdltoo' then
return aircraft_cat_model_type_of_operator({
})
elseif args['path'] == 'mfr' then
return aircraft_cat_manufacturer({
})
elseif args['path'] == 'mfrby' then
return aircraft_cat_manufacturer_by({
})
elseif args['path'] == 'mfrtoo' then
return aircraft_cat_manufacturer_type_of_operator({
})
elseif args['path'] then
return '[[Category:' .. 'Template:Users of Aircraft cat with unrecognized path error]]' .. mbox({text = '[[:Template:Aircraft cat/switch]] path "' .. args['path'] .. '" not found.'})
elseif args.by then
return mw.getCurrentFrame():expandTemplate {title = 'MetaCat', args = {[1] = args.by, ['topic-cat'] = 'aircraft'}}
else
return ''
end
end
function p._aircraft_cat(args)
-- switch
local switch_args = {}
-- switch
local switch_path_keys = {
'clr', -- color
'clr2', -- color
'clr3', -- color
'clr4', -- color
'clr5', -- color
'cls', -- class
'cnd', -- condition
'cocapf', -- country captured from
'cocapt', -- country of capture
'cof', -- country of
'col', -- country of location
'coo', -- country of origin
'cor', -- country of registration
'cos', -- country of service
'dsc', --
'fnc', -- function
'lft', -- lift
'mdl', -- model
'mfr', -- manufacturer
'mac', -- manufacturer aircraft
'opr', -- operator
'oprtyp', -- operator type
'by' -- meta
}
local switch_path_table = {}
for k, v in pairs(switch_path_keys) do
if args[v] then
if string.sub(v, 1, 3) == 'clr' then
table.insert(switch_path_table, 'clr')
else
table.insert(switch_path_table, v)
end
elseif v == 'mac' and not args['mfr'] then
table.insert(switch_path_table, 'mfr')
end
end
switch_args.path = table.concat(switch_path_table)
-- by
local switch_by_values = {
clr = 'color',
cls = 'type',
cof = 'country',
col = 'country of location',
coo = 'country of origin',
cor = 'country of registration',
cos = 'country of service',
mfr = 'manufacturer',
mol = 'method of lift',
mop = 'method of propulsion',
typ = 'type'
}
switch_args.by = switch_by_values[args.by] or args.by
switch_args.bypar = args.bypar
switch_args.cat = args.cat
switch_args.catmfrcoo = args.catmfrcoo
switch_args.clr1 = args.clr
switch_args.clr2 = args.cl2
switch_args.clr3 = args.clr3
if args.cls then
switch_args.cls = aircraft_label({args.cls, 'base'})
switch_args.clspar1 = aircraft_label({args.cls, 'par1'})
switch_args.clspar2 = aircraft_label({args.cls, 'par2'})
switch_args.clspar3 = aircraft_label({args.cls, 'par3'})
end
if args.cnd then
switch_args.cnd = aircraft_label({args.cnd, 'base'})
end
switch_args.cocapf = args.cocapf
switch_args.cocapt = args.cocapt
switch_args.cof = args.cof
switch_args.cofpar1 = args.cofpar
switch_args.cofpar2 = args.cofpar2
switch_args.cofpre1 = args.cofpre
switch_args.cofpre1year = args.cofpreyear
switch_args.cofpre2 = args.cofpre2
switch_args.cofpre2year = args.cofpre2year
switch_args.col = args.col
switch_args.colpar1 = args.colpar
switch_args.colpar2 = args.colpar2
switch_args.coo = args.coo
switch_args.cor = args.cor
switch_args.corpar1 = args.corpar
switch_args.corpar2 = args.corpar2
switch_args.corpre1 = args.corpre
switch_args.corpre1year = args.corpreyear
switch_args.corpre2 = args.corpre2
switch_args.corpre2year = args.corpre2year
switch_args['cos'] = args['cos']
switch_args['debug'] = args['debug']
switch_args.dsc = args.dsc
if args.fnc then
switch_args.fnc = aircraft_label({args.fnc})
switch_args.fncadj = aircraft_label({args.fnc, 'adj'})
end
switch_args.ismeta = args.ismeta
if args.lft then
switch_args.lft = aircraft_label({args.lft})
end
switch_args.mac = args.mac
switch_args.mdl = args.mdl
if args.mfr then
switch_args.mfr = args.mfr
elseif args.mac then
switch_args.mfr = formatStatements({item = args.mac, property = 'P176', displayformat = 'raw', numval = '1'})
end
switch_args.mfrcat = args.mfrcat
switch_args.mfrcatac = args.mfrcatac
if args.mfr then
switch_args.mfrpar = formatStatements({item = args.mfr, property = 'P749', displayformat = 'raw', numval = '1'})
end
switch_args.nav = args.nav
switch_args.navcls = yesno(args.navcls or true)
switch_args.navcofconstituent = yesno(args.navcofconstituent or true)
switch_args.navcofdefunct = yesno(args.navcofdefunct or true)
switch_args.navcorconstituent = yesno(args.navcorconstituent or true)
switch_args.navcordefunct = yesno(args.navcordefunct or true)
switch_args.opr = args.opr
switch_args.oprart = args.oprart
switch_args.oprtype = aircraft_type_of_operator_label((args.oprtype or '') .. (args.too or ''))
switch_args.prefix1 = args.prefix
switch_args.prefix2 = args.prefix2
switch_args.prefix3 = args.prefix3
switch_args.prefix4 = args.prefix4
if yesno(args.tocn or false) then
switch_args.tocn = 'yes'
else
switch_args.tocn = 'no'
end
-- categories
local aircraft_cats = {}
for k, v in pairs({'l', 'l2', 'll', 'll2'}) do
if args[v] then
table.insert(aircraft_cats, '[[Category:Letter ' .. args[v] .. ' on aircraft]]')
end
end
for k, v in pairs({'n', 'n2', 'n3', 'n4'}) do
if args[v] then
table.insert(aircraft_cats, '[[Category:Number ' .. args[v] .. ' on aircraft]]')
end
end
if args.nom then
if mw.title.new('Aircraft numbered ' .. args.nom, 'Category').exists then
table.insert(aircraft_cats, '[[Category:Aircraft numbered ' .. args.nom .. ']]')
else
table.insert(aircraft_cats, '[[Category:Aircraft by number| 0' .. mw.string.len(args.nom) .. ' ' .. args.nom .. ']]')
end
end
if args.non then
table.insert(aircraft_cats, '[[Category:Number ' .. args.non .. ' on aircraft]]')
end
local debug_text = ''
if yesno(args['debug'] or false) then
local debug_params = {'[[:Template:Aircraft cat]] received the following parameters:'}
for k, v in pairs(args) do
table.insert(debug_params, "* ''" .. k .. "'' = " .. v)
end
debug_text = mbox({text = table.concat(debug_params, '\n')})
end
local aircraft_cat_table = {
aircraft_cat_switch(switch_args),
table.concat(aircraft_cats),
interwiki_from_wikidata({}),
'[[Category:' .. 'Uses of Aircraft cat' .. ']]', -- so the module doesn't count as a link to the category
debug_text
}
return table.concat(aircraft_cat_table)
end
function p.aircraft_cat(frame)
return p._aircraft_cat(getArgs(frame))
end
return p