Hoppa till innehållet

Modul:Biodata

Från Wikipedia
function manniska(entity)
	
	local man = nil
	if not entity then
		return ''
	end
	if not entity.claims or not entity.claims.P31 then
		return ''
	else
		for i, j in pairs( entity.claims.P31 ) do
			if j.mainsnak.snaktype == 'value' then
				if j.mainsnak.datavalue.value['numeric-id'] == 5 then
					man =  'människa'
				end
			end
		end
	end
	return man
end

function sex(kon, entity)
	local k = nil
	local man = manniska(entity)
	if kon then
		if string.lower(kon) == "kvinna" or string.lower(kon) == "kvinnor" then
			return "[[Kategori:Kvinnor]]"
		end
		if string.lower(kon) == "man" or string.lower(kon) == "män" then
			return "[[Kategori:Män]]"
		end
		return "[[Kategori:" .. kon .. "]]"
	else
		if not entity then
			return '[[Kategori:Sidan är inte ansluten till ett Wikidataobjekt]]'
		else
			if not entity.claims or not man then
				return '[[Kategori:Wikidata anger inte att sidan handlar om en människa]]'
			else
				if not entity.claims.P21 then
					return '[[Kategori:Wikidata saknar uppgift om kön]]'
				else
					local gender = nil
					local rankg = nil
					for i, j in pairs( entity.claims.P21 ) do
						if j.mainsnak.snaktype == 'value' then
							local valq = j.mainsnak.datavalue.value['numeric-id']
							if valq == 6581072 then
								gender = "Kvinnor"
							else
								if valq == 6581097 then
									gender = "Män"
								end
							end
						end
					end
					if gender then
						return "[[Kategori:".. gender.."]]"
					else
						return "[[Kategori:Wikidata använder ett främmande värde för kön]]"
					end
				end
			end
		end	
	end				

	return k
end
function f1(fodd, entity)
	local comcat = ''
	local man = manniska(entity)
	if not fodd then
		if not entity then
			return '[[Kategori:Sidan är inte ansluten till ett Wikidataobjekt]]'
		else
			if not entity.claims or not man then
				return '[[Kategori:Wikidata anger inte att sidan handlar om en människa]]'
			else
				if not entity.claims.P569 then
					return '[[Kategori:Wikidata saknar uppgift om födelsedatum]]'
				else
					local ar = nil
					ar = data(entity.claims.P569)
					comcat = ar
					if ar == 'precisionsfel' then
						return "[[Kategori:Fel precision i födelsedatum för att Wikidata ska kunna användas]]"
					end
					if ar == 'novalue' then
						return '[[Kategori:Wikidata saknar uppgift om födelsedatum]]'
					end
				end			
			end
		end
		if comcat == 'okänt år' then
			return '[[Kategori:Födda okänt år]]'
		else
			return '[[Kategori:Födda ' .. comcat .. ']]'
		end
	else
		if fodd == "okänt" or fodd == "okänt år" then
			comcat = "[[Kategori:Födda okänt år]]"
		else
			comcat = "[[Kategori:Födda " .. fodd .. "]]"
		end
	end
	return comcat
end

function f2(avlidna, entity)
	local comcat = ''
	local man = manniska(entity)
	if not avlidna then
		if not entity then
			return '[[Kategori:Sidan är inte ansluten till ett Wikidataobjekt]]'
		else
			if not entity.claims or not man then
				return '[[Kategori:Wikidata anger inte att sidan handlar om en människa]]'
			else
				if 	not entity.claims.P570 then
					return ''
				else
					local ar = nil
					ar = data(entity.claims.P570)
					comcat = ar
					if ar == 'precisionsfel' then
						return "[[Kategori:Fel precision i dödsdatum för att Wikidata ska kunna användas]]"
					end
					if ar == 'novalue' then
						return ''
					end
				end
			end
		end
		if comcat == 'okänt år' then
			return '[[Kategori:Avlidna okänt år]]'
		else
			return '[[Kategori:Avlidna ' .. comcat .. ']]'
		end
	else
		if avlidna == "okänt" or avlidna == "okänt år" then
			comcat = "[[Kategori:Avlidna okänt år]]"
		else
			comcat = "[[Kategori:Avlidna " .. avlidna .. "]]"
		end
	end
	return comcat
end

function data( claim )
	local ar = nil
	local rankg = nil
	local precisiong = nil
	for i, j in pairs( claim ) do
		local rank = j.rank
		if j.mainsnak.snaktype == 'value' then
			local value = j.mainsnak.datavalue.value.time
			local precision = j.mainsnak.datavalue.value.precision
			if not rankg and (rank == 'preferred' or rank == 'normal' or rank == 'deprecated') then
				rankg = rank
				ar = value
				precisiong = precision
			end
			if rankg == 'deprecated' and (rank == 'preferred' or rank == 'normal') then
				rankg = rank
				ar = value
				precisiong = precision
			end
			if rankg == 'normal' and rank == 'preferred' then
				rankg = rank
				ar = value
				precisiong = precision
			end
		else
			if j.mainsnak.snaktype == 'somevalue' then
				if not rankg and (rank == 'preferred' or rank == 'normal' or rank == 'deprecated') then
					rankg = rank
					ar = 'okänt år'
					precisiong = 9
				end
				if rankg == 'deprecated' and (rank == 'preferred' or rank == 'normal') then
					rankg = rank
					ar = 'okänt år'
					precisiong = 9
				end
				if rankg == 'normal' and rank == 'preferred' then
					rankg = rank
					ar = 'okänt år'
					precisiong = 9
				end
			else
				ar = 'novalue'
				precisiong = 9
			end
		end
	end
	if tonumber(precisiong) < 9 then
		ar = 'precisionsfel'
	else
		if ar and ar ~= 'okänt år' and ar ~= 'novalue' then	
			local ar2 = string.sub(ar, 2,12)
			ar2 = tostring(tonumber(ar2))
			if string.sub(ar, 1,1) == "-" then
				ar2 = ar2 .. " f.Kr."
			end
			ar = ar2
		end
	end
	return ar
end

local p = {}
function p.com( frame )
	local pFrame = frame:getParent()
	local entity = mw.wikibase.getEntityObject()
	local comcat = ''
	local kon = pFrame.args['kön'] or nil
	local fodd = pFrame.args['född'] or pFrame.args['födda'] or nil
	local avliden = pFrame.args['avlidna'] or pFrame.args['avlidna'] or pFrame.args['död'] or pFrame.args['döda'] or nil
	local levande = pFrame.args['levande'] or pFrame.args['blp'] or nil
	
	comcat = comcat .. f1(fodd, entity)
	comcat = comcat .. f2(avliden, entity)
	if levande then
		if levande == 'möjligen' or levande == 'Möjligen' or levande == 'möjligen levande' or levande == 'Möjligen levande' then
			comcat = comcat .. "[[Kategori:Möjligen levande personer]]"
		else
			comcat = comcat .. "[[Kategori:Levande personer]]"
		end
	end
	comcat = comcat .. sex(kon, entity)
	
	return comcat
end

return p