Modul:Sandlådan/Innocent bystander/WD2

Från Wikipedia
Hoppa till: navigering, sök

Dokumentationen för denna modul kan skapas på Modul:Sandlådan/Innocent bystander/WD2/dok

local wikidata = require('Modul:Wikidata2').formatStatementsFromLua
local datum = require('Modul:Wikidatadatum').datum

function test(item, claim)
	local f = false
	for k, v in pairs(claim) do
		if v.item == item then 
			return true
		end
	end
	return false
end

function test2(item, claim)
	local f = false
	for k, v in pairs(claim) do
		if v == item then 
			return true
		end
	end
	return false
end

function komprimera(a, c, yrke)
	if not test(yrke, a) then
		return a
	end
	local b = {}
	for i, j in pairs(a) do
		if not test2(j.item, c) then
			table.insert(b, j)
		end
	end
	return b
end

p = {}

function p.biografi(frame)
	local args = frame:getParent().args
	local qid = args.qid
	local entity = {}
	if qid == '' then 
		entity = mw.wikibase.getEntityObject()
	else
		entity = mw.wikibase.getEntityObject( qid )
	end
	if not entity then
		entity = mw.wikibase.getEntityObject( 'Q4934932' ) -- Sandlåda
	end
	local infobox = {}
	
	local p31 = wikidata({entity = entity, property = 'P31', noref = 'true', raw = 'true'})
	
	if not test('Q5', p31) and not test('Q15632617', p31) then
		return  'Inte en biografi' -- nil -- ger nil om inte en biografi (människa)
	end
	
	table.insert(infobox, '{{Faktamall')
	table.insert(infobox, '\n| child = ' .. (args.child or ''))
	table.insert(infobox, '\n| grundclass  = biography vcard')
	
	if args['box_width'] then
		table.insert(infobox, '\n| grundstil = width:' ..  args['box_width'] .. ';')
	end
	
	local nolabel = {['nej'] = true, ['no'] = true, ['n'] = true}
	
	local namn = args.namn
	if not namn or namn == '' then
		if entity.labels and entity.labels.sv then
			namn = entity.labels.sv.value
		else
			namn = mw.title.getCurrentTitle().text
		end
	end
	if nolabel[string.lower(namn)] then
		--
	else
		local prefix = args['honorific prefix'] or args['honorific_prefix'] 
		local suffix = args['honorific suffix'] or args['honorific_suffix']
		if not prefix and string.lower((prefix or '')) ~= 'nowikidata' then
			prefix = wikidata({entity = entity, property = 'P511', noref = 'true'})
		end
		if not suffix and string.lower((suffix or '')) ~= 'nowikidata' then
			local w = wikidata({entity = entity, property = 'P1035', noref = 'true', kortnamn = 'ja', conjunction = ', ', separator = ', '})
			if w and w ~= '' then
				suffix = w
			end
		end
		local s = {}
		if prefix and prefix ~= '' then
			table.insert(s, mw.text.tag('span', {class="honorific-prefix", style="font-size: small"}, prefix))
		end
		table.insert(s, mw.text.tag('span', {class="fn"}, namn))
		if suffix and suffix ~= '' then
			table.insert(s, mw.text.tag('span', {class="honorific-suffix", style="font-size: small"}, suffix))
		end
		table.insert(infobox, '\n| över = ' .. mw.text.listToText(s, '<br/>', '<br/>'))
	end
	
	if args.bild and string.lower(bild) ~= 'nowikidata' then
		table.insert(infobox, '\n| bild = ' .. args.bild)
		table.insert(infobox, '\n| bildclass = ' .. mw.getCurrentFrame():preprocess('{{image class names|'.. args.bild .. '}}'))
		if args.bildtext then
			table.insert(infobox, '\n| bildbredd = ' .. args.bildtext)
		end
		if args.bildtext then
			table.insert(infobox, '\n| bildbredd = ' .. args.bildbredd)
		end
	elseif not args.bild or args.bild == '' then
		local w = wikidata({entity = entity, property = 'P18', raw = 'true', noref='true', enbarten = 'true', langpref = 'sv'})
		if w and #w > 0 then
			table.insert(infobox, '\n| bild = ' .. w[1].value)
			if w[1].bildtext then
				table.insert(infobox, '\n| bildtext = ' .. w[1].bildtext)
			end
			table.insert(infobox, '\n| bildclass = ' .. mw.getCurrentFrame():preprocess('{{image class names|'.. w[1].value .. '}}'))
		end
	end		
			
	if args['lokalt_namn'] and args['lokalt_namn'] ~= '' then
		table.insert(infobox, '| etikett1    = Lokalt namn')
		local a = {class = "smeknamn"}
		if args['lokalt_namn_lang'] and args['lokalt_namn_lang'] ~= '' then
			a = {class = "smeknamn", lang=args['lokalt_namn_lang']}
		end
		table.insert(infobox, '\n| innehåll1   = ' .. mw.text.tag('span' ,a, args['lokalt_namn']))
	end
	
	local b1 = {}
	if args['födelsenamn'] and string.lower(args['födelsenamn']) ~= 'nowikidata' then
		table.insert(b1, args['födelsenamn'])
	elseif string.lower(args['födelsenamn'] or '') ~= 'nowikidata' then
		table.insert(b1, wikidata({entity = entity, property = 'P1477', noref = 'noimport'}))
	end
	if args['födelsedatum'] and string.lower(args['födelsedatum']) ~= 'nowikidata' then
		table.insert(b1, args['födelsedatum'])
	elseif string.lower(args['födelsedatum']  or '') ~= 'nowikidata' then
		table.insert(b1, datum(entity, 'P569', 'P27', 'noimport'))
	end
	if args['födelseort'] and string.lower(args['födelseort']) ~= 'nowikidata' then
		table.insert(b1, args['födelseort'])
	elseif string.lower(args['födelseort']  or '') ~= 'nowikidata' then
		local a = wikidata({entity = entity, property = 'P19', noref = 'noimport', raw = 'true'})
		if a and #a > 0 then
			local as = a[1].value 
			local a2 = wikidata({entityId = a[1].item, property = 'P31', noref = 'true', raw = 'true'})
			if a2 and #a2 > 0 then
				if test('Q615980', a2) then
					local a3 = wikidata({entityId = a[1].item, property = 'P276', noref = 'true', enbarten = 'true'})
					if a3 and a3 ~= '' then 
						as = as .. ', ' .. a3
					end
				end
			end
			as = as .. (a[1].ref or '')
			table.insert(b1, as)
		end
	end
	if #b1 > 0 then
		table.insert(infobox, '\n| etikett11  = Född')
		table.insert(infobox, '\n| innehåll11 = ' .. table.concat(b1, '<br />'))
	end

	if (args['försvunnen_datum'] and args['försvunnen_datum'] ~='') or (args['försvunnen_plats'] and args['försvunnen_plats'] ~= '') then
		local a = {}
		if args['försvunnen_datum'] and args['försvunnen_datum'] ~='' then
			table.concat(a, args['försvunnen_datum'])
		end
		if args['försvunnen_plats'] and args['försvunnen_plats'] ~= '' then
			table.concat(a, args['försvunnen_plats'])
		end
		if #a > 0 then
			table.insert(infobox, '\n| etikett12   = Försvunnen')
			table.insert(infobox, '\n| innehåll12 = ' .. table.concat(a, '<br/>'))
		end
	end
	
	if args['försvunnen_status'] and args['försvunnen_status'] ~= '' then
		table.insert(infobox, '\n| etikett13 = Status')
		table.insert(infobox, '\n| innehåll13 = ' .. args['försvunnen_status'])
	end
	
	local dod = false
	local a1 = {}
	if args['dödsdatum'] and string.lower(args['dödsdatum']) ~= 'nowikidata' then
		table.insert(a1, args['dödsdatum'])
	elseif string.lower(args['dödsdatum']  or '') ~= 'nowikidata' then
		table.insert(a1, datum(entity, 'P570', 'P27', 'noimport'))
	end
	if args['dödsort'] and string.lower(args['dödsort']) ~= 'nowikidata' then
		table.insert(a1, args['dödsort'])
	elseif string.lower(args['dödsort']  or '') ~= 'nowikidata' then
		local a = wikidata({entity = entity, property = 'P20', noref = 'noimport', raw = 'true'})
		if a and #a > 0 then
			local as = a[1].value 
			local a2 = wikidata({entityId = a[1].item, property = 'P31', noref = 'true', raw = 'true'})
			if a2 and #a2 > 0 then
				if test('Q615980', a2) then
					local a3 = wikidata({entityId = a[1].item, property = 'P276', noref = 'true', enbarten = 'true'})
					if a3 and a3 ~= '' then 
						as = as .. ', ' .. a3
					end
				end
			end
			as = as .. (a[1].ref or '')
			table.insert(a1, as)
		end
	end
	if #a1 > 0 then
		dod = true
		table.insert(infobox, '\n| etikett14  = Död')
		table.insert(infobox, '\n| innehåll14 = ' .. table.concat(a1, '<br />'))
	end
	
	if args['dödsorsak'] and args['dödsorsak'] ~= 'nowikidata' then
		if args['dödsorsak'] ~= '' then
			dod = true
			table.insert(infobox, '\n| etikett15   = Dödsorsak')
			table.insert(infobox, '\n| innehåll15  = ' .. args['dödsorsak'])
		end
	elseif not args['dödsorsak'] or args['dödsorsak'] == '' then
		local a = wikidata({entity = entity, property = 'P509', noref = 'noimport'})
		if a and a ~= '' then
			dod = true
			table.insert(infobox, '\n| etikett15   = Dödsorsak')
			table.insert(infobox, '\n| innehåll15  = ' .. a)
		end			
	end
	
	if args['kropp_återfunnen'] and args['kropp_återfunnen'] ~= '' then
		dod = true
		table.insert(infobox, '\n| etikett16   = Kropp återfunnen')
		table.insert(infobox, '\n| innehåll16  = ' .. args['kropp_återfunnen'])
	end
	
	if args.begravningsplats and args.begravningsplats ~= '' then
		local a = {}
		table.insert(a, args.begravningsplats)
		if args['begravningsplats_koordinater'] then
			table.insert(a, args['begravningsplats_koordinater'])
		end
		dod = true
		table.insert(infobox, '\n| etikett17   = Begravd')
		table.insert(infobox, '\n| class17     = etikett')
		table.insert(infobox, '\n| innehåll17  = ' .. table.concat(a, '<br />'))
	else
		local a = wikidata({entity = entity, property = 'P119', grav = 'coordonly', koordlabel = 'kartor', noref = 'noimport'})
		if a and a ~= '' then
			dod = true
			table.insert(infobox, '\n| etikett17   = Begravd')
			table.insert(infobox, '\n| class17     = etikett')
			table.insert(infobox, '\n| innehåll17  = ' .. a)
		end
	end

	if args.monument and args.monument ~= '' then
		table.insert(infobox, '\n| etikett18   = Monument')
		table.insert(infobox, '\n| innehåll18  = ' .. args.monument)
	end

	if args.vistelseort and args.vistelseort ~= '' then
		table.insert(infobox, '\n| etikett19   = Vistelseort')
		table.insert(infobox, '\n| innehåll19  = ' .. args.vistelseort)
		if dod then
			table.insert(infobox, '\n| class19     = etikett')
		end
	end
	
	if args.nationalitet and arg.nationalitet ~= '' and string.lower(args.nationalitet or '') ~= 'nowikidata' then
		table.insert(infobox, '\n | class20    = kategori')
		table.insert(infobox, '\n | etikett20  = Nationalitet')
		table.insert(infobox, '\n | innehåll20 = ' .. args.nationalitet)
	elseif not args.nationalitet or arg.nationalitet == '' then
		local a = wikidata({entity = entity, property = 'P27', firstversalisering = 'ucfirst', labelgender = 'Q1305037', noref = 'noimport'})
		if a and a ~='' then
			table.insert(infobox, '\n | class20    = kategori')
			table.insert(infobox, '\n | etikett20  = Nationalitet')
			table.insert(infobox, '\n | innehåll20 = ' .. a)
		end
	end

	if args['andra_namn'] or args.alias then
		if (args['andra_namn'] or args.alias) ~= '' then
			table.insert(infobox, '\n | etikett21  = Andra namn')
			table.insert(infobox, '\n | class21    = smeknamn')
			table.insert(infobox, '\n | innehåll21 = ' .. args['andra_namn'] or args.alias)
		end
	end
	
	if args.etnicitet and string.lower(args.etnicitet or '') ~= 'nowikidata' and args.etnicitet ~= '' then
		table.insert(infobox, '\n | class22    = kategori')
		table.insert(infobox, '\n | etikett22  = Etnicitet')
		table.insert(infobox, '\n | innehåll22 = ' .. args.etnicitet)
	elseif not args.etnicitet or args.etnicitet == '' then
		local a = wikidata({entity = entity, property = 'P172', ref = 'noimport', sources = 'required'})
		if a and a ~= '' then
			table.insert(infobox, '\n | class22    = kategori')
			table.insert(infobox, '\n | etikett22  = Etnicitet')
			table.insert(infobox, '\n | innehåll22 = ' .. a)
		end
	end
	
	if args.medborgarskap and args.medborgarskap ~= '' then
		table.insert(infobox, '\n| class23    = kategori')
		table.insert(infobox, '\n| etikett23  = Medborgarskap')
		table.insert(infobox, '\n| innehåll23 = ' .. args.medborgarskap)
	end

	if args.utbildning and args.utbildning ~= '' then
		table.insert(infobox, '\n| etikett24  = Utbildning')
		table.insert(infobox, '\n| innehåll24 = ' .. args.utbildning)
	end
	
	if args['alma mater'] and string.lower(args['alma mater']) ~= 'nowikidata' and args['alma mater'] ~= '' then
		table.insert(infobox, '\n| etikett25  = [[Alma mater]]')
		table.insert(infobox, '\n| innehåll25 = ' .. args['alma mater'])
	elseif not args['alma mater'] or args['alma mater'] == '' then
		local a = wikidata({entity = entity, property = 'P69', noref = 'noimport'})
		if a and a ~= '' then
			table.insert(infobox, '\n| etikett25  = [[Alma mater]]')
			table.insert(infobox, '\n| innehåll25 = ' .. a)
		end
	end

	if args.yrke and string.lower(args.yrke) ~= 'nowikidata' and args.yrke ~= '' then
		table.insert(infobox, '\n| etikett26  = Sysselsättning')
		table.insert(infobox, '\n| class26    = roll')
		table.insert(infobox, '\n| innehåll26 = ' .. args.yrke)
	elseif not args.yrke or args.yrke == '' then
		local a = wikidata({entity = entity, property = 'P106', firstversalisering = 'ucfirst' , noref = 'noimport', rank = 'valid', raw = 'true'})
		a = komprimera(a, {'Q15980158', 'Q3745071', 'Q18844224', 'Q6625963'}, 'Q36180') -- författare
		a = komprimera(a, {'Q2998308', 'Q752129', 'Q16742203', 'Q15143181', 'Q11063'}, 'Q169470') -- fysiker
		
		local q = {}
		for i, j in pairs(a) do
			table.insert(q, j.value .. (j.ref or ''))
		end
		table.insert(infobox, '\n| etikett26  = Sysselsättning')
		table.insert(infobox, '\n| class26    = roll')
		table.insert(infobox, '\n| innehåll26 = ' .. table.concat(q, ', '))
	end
		
	if args['ämbete'] and string.lower(args['ämbete']) ~= 'nowikidata' and args['ämbete'] ~= '' then
		table.insert(infobox, '\n| etikett27  = Ämbete')
		table.insert(infobox, '\n| class27    = roll')
		table.insert(infobox, '\n| innehåll27 = ' .. args['ämbete'])
	else
		local a = wikidata({entity = entity, property = 'P39', versalisering = 'ucfirst', withintervall = 'yes', modifyqualifiertime = 'Y', sortbytime = 'inverted', conjunction = '<br/>', separator = '<br/>', noref = 'noimport'})
		if a and a ~= '' then
			table.insert(infobox, '\n| etikett27  = Befattning')
			table.insert(infobox, '\n| class27    = roll')
			table.insert(infobox, '\n| innehåll27 = ' .. a)
		end
	end

	if args.arbetsgivare and string.lower(args.arbetsgivare) ~= 'nowikidata' and args.arbetsgivare ~= '' then
		table.insert(infobox, '\n| etikett28  = Arbetsgivare')
		table.insert(infobox, '\n| class28    = org')
		table.insert(infobox, '\n| innehåll28 = ' .. args.arbetsgivare)
	else
		local a = wikidata({entity = entity, property = 'P108', withintervall = 'true', modifyqualifiertime = 'Y', sortbytime = 'inverted', conjunction = '<br/>', separator = '<br/>', noref = 'noimport'})
		if a and a ~= '' then
			table.insert(infobox, '\n| etikett28  = Arbetsgivare')
			table.insert(infobox, '\n| class28    = org')
			table.insert(infobox, '\n| innehåll28 = ' .. a)
		end
	end

			
		
	table.insert(infobox, '\n}}')
	return mw.getCurrentFrame():preprocess(table.concat(infobox))
end

return p