Module:Aircraft cat

From Wikimedia Commons, the free media repository
Jump to navigation Jump to search
Lua

CodeDiscussionEditHistoryLinksLink count Subpages:DocumentationTestsResultsSandboxLive code All modules


Logic for {{Aircraft cat}}.

Usage[edit]

{{#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