وحدة:Wikidata2/tax/ملعب

من أرابيكا، الموسوعة الحرة
اذهب إلى التنقل اذهب إلى البحث
---- This module implements [[template:تصنيف كائن/تصنيف علمي ويكي بيانات]].

local p = {}
local colors = {
	['Q808'] = '#EE82EE',	 -- فيروس
	['Q10872'] = '#ECD2D2',	-- عتائق
	['Q10876'] = '#D3D3D3',	-- بكتيريا
	['Q10892'] = '#F0E68C',	-- طلائعيات
	['Q862296'] = '#ADEE3F',  -- أسناخ 
	['Q756'] = '#90EE90',	-- نبات
	['Q764'] = '#ADD8E6', -- فطر
	['Q729'] = '#D3D3A4', -- حيوان
	['Q855740'] = '#E1CCFC',	--جذراوات
	['Q1205126'] = '#E0D0B0',	-- قمعيات 
	['Q473809'] = '#FFC8A0',	--متموريات
	--[''] = '#FAF0E6',	  -- غير محدد	
	[''] = '',
}

local ItemsCash = {}

function FindInCash(id , prop) 
	--ItemsCash["Q19088"] = { ['P105'] = 'Q146481'  , ['P171'] = 'Q2382443'	}
	--ItemsCash["Q2382443"] = { ['P105'] = 'Q22666877'  , ['P171'] = ''	} 
	--ItemsCash["Q1390"] = { ['P105'] = 'Q37517'  , ['P171'] = 'Q105146'	}  -- حشرة
	--ItemsCash["Q105146"] = { ['P105'] = 'Q1153785'  , ['P171'] = 'Q1360'	}  -- 
	--ItemsCash["Q1360"] = { ['P105'] = 'Q38348'  , ['P171'] = 'Q5176'	}  -- 
	--ItemsCash["Q5176"] = { ['P105'] = 'Q3978005'  , ['P171'] = 'Q5171'	}  -- 
	--ItemsCash["Q5171"] = { ['P105'] = 'Q3150876'  , ['P171'] = 'Q5173'	}  -- 
	--ItemsCash["Q5173"] = { ['P105'] = 'Q2752679'  , ['P171'] = 'Q5174'	}  -- 
	--ItemsCash["Q5174"] = { ['P105'] = 'Q2752679'  , ['P171'] = 'Q729'	}  -- 
	--ItemsCash["Q729"] = { ['P105'] = 'Q36732'  , ['P171'] = 'Q19088'	}  -- 
	--ItemsCash["Q19088"] = { ['P105'] = 'Q146481'  , ['P171'] = 'Q2382443'	}  -- 
	--ItemsCash["Q2382443"] = { ['P105'] = ''  , ['P171'] = ''	}  -- 

	--ItemsCash["Q132355"] = { ['P105'] = 'Q805'  , ['P171'] = 'Q4115189' }     -- test
	---------------
	local Cash = ItemsCash[id]
	--if not Cash or not Cash.prop
	--then 
		--return nil
	--end
	---------
	if Cash then
		C = Cash[prop]
		mw.log(id .. ' : ' .. prop .. ' : ' .. C)
		return C
	else
		return nil
	end
end 

function foo(iid,formatting,p)
	if not iid or iid =='' 
		then return nil
	end
	----------------
	st = formatStatements( {property =p or 'P171' , entityId = iid, enlabelcate='t', noref ='t', firstvalue='true',formatting=formatting})
	if st and st ~= '' 
		then 
			--return addTrackingCategory(st ,{property=p or 'P171', entityId = iid,noicon='t'}) 
			return st
		else
			return nil 
	end
	----------------
end

function GetP171id(id, formatting)
	P171id = FindInCash(id , 'P171') 
	----------------
	if not id or id =='' 
		then return nil
	end
	----------------
	if not P171id or P171id == '' then
		--P171id = formatStatements( {property ='P171' , entityId = id , rank='best', noref ='t', firstvalue='true',formatting=formatting})
		--P171id = nil -- test
		P171id = formatStatements( {property ='P171' , entityId = id , rank='best', noref ='t', firstvalue='true',formatting='raw'})
	end
	----------------
	return P171id
end

function p.taxcolour( datavalue ,datatype , options)
	local P1id	=	GetP171id(datavalue.value.id,'raw') 
	local P2id	=	GetP171id(P1id,'raw')
	local P3id	=	GetP171id(P2id,'raw') 
	local P4id	=	GetP171id(P3id,'raw') 
	local P5id	=	GetP171id(P4id,'raw') 
	local P6id	=	GetP171id(P5id,'raw') 
	local P7id	=	GetP171id(P6id,'raw') 
	local P8id	=	GetP171id(P7id,'raw') 
	local P9id	=	GetP171id(P8id,'raw') 
	local P10id	=	GetP171id(P9id,'raw') 
	local P11id	=	GetP171id(P10id,'raw') 
	local P12id	=	GetP171id(P11id,'raw') 
	local P13id	=	GetP171id(P12id,'raw') 
	local P14id	=	GetP171id(P13id,'raw') 
	local P15id	=	GetP171id(P14id,'raw') 
	local P16id	=	GetP171id(P15id,'raw') 
	local P17id	=	GetP171id(P16id,'raw') 
	local P18id	=	GetP171id(P17id,'raw') 
	local P19id	=	GetP171id(P18id,'raw') 
	local P20id	=	GetP171id(P19id,'raw') 
	local P21id	=	GetP171id(P20id,'raw')
	local P22id	=	GetP171id(P21id,'raw')
	local P23id	=	GetP171id(P22id,'raw')
	---------------------------
	local taxon1 = 
		{P23id or "", P22id or "", P21id or "", P20id or ""
			, P19id or "", P18id or "", P17id or "", P16id or ""
			, P15id or "", P14id or "", P13id or "", P12id or ""
			, P11id or "", P10id or "", P9id or "", P8id or ""
			, P7id or "", P6id or "", P5id or "", P4id or ""
			, P3id or "", P2id or "", P1id or "", P0id or ""}
	---------------------------
	local q = {}
	for i,j in ipairs( taxon1 ) do
		e = foo(j,'raw','P105')
		if e and e ~= '' 
			--then	table.insert( q,e ..j )
			then 
				if e == 'Q36732' 
					then
						for k, v in pairs(colors) do
							if j == k 
								then 
									table.insert( q, v )
							end
						end
					else
				end
		end
	end
	---------------------------
	taxon = table.concat( q,'\n')
	if taxon 
		then
			return taxon
	else 
			return '' 
	end
	---------------------------
end

local taxP105= {
	['Q7432'] = 'نوع',
	['Q34740'] = '[[جنس (تصنيف)|جنس]]',
	['Q68947'] = 'نويع',
	['Q35409'] = '[[فصيلة (تصنيف)|فصيلة]]',
	['Q767728'] = 'ضرب',
	['Q2455704'] = '[[فصيلات (تصنيف)|فُصيلة]]',
	['Q227936'] = '[[قبيلة (تصنيف)|قبيلة]]',
	['Q3238261'] = 'جُنيس',
	['Q3181348'] = 'قسم',
	['Q36602'] = '[[رتبة (تصنيف)|رتبة]]',
	['Q2136103'] = '[[فصيلة عليا (تصنيف)|فصيلة عليا]]',
	['Q3965313'] = 'عميرة',
	['Q5867959'] = '[[رتيبة (تصنيف)|رتيبة]]',
	['Q37517'] = '[[طائفة (تصنيف)|طائفة]]',
	['Q279749'] = 'شكل',
	['Q3025161'] = 'سلسلة',
	['Q5998839'] = 'قسيم',
	['Q5867051'] = '[[طويئفة (تصنيف)|طويئفة]]',
	['Q2889003'] = '[[تحت رتبة (تصنيف)|تحت رتبة]]',
	['Q5868144'] = '[[رتبة عليا (تصنيف)|رتبة عليا]]',
	['Q4886'] = 'مستنبت نباتي',
	['Q38348'] = '[[شعبة (تصنيف)|شعبة]]',
	['Q3825509'] = 'شكل خاص',
	['Q1153785'] = '[[شعيبة (تصنيف)|شعيبة]]',
	['Q334460'] = 'شعبة',
	['Q4150646'] = 'مجموعة',
	['Q2007442'] = 'صُنيف فرعي',
	['Q14817220'] = 'قبيلة عليا',
	['Q10861426'] = 'قسم',
	['Q3504061'] = 'عمارة',
	['Q3491997'] = 'كتيبة',
	['Q855769'] = 'سلالة',
	['Q3978005'] = '[[شعبة عليا (تصنيف)|شعبة عليا]]',
	['Q2752679'] = 'عويلم',
	['Q6311258'] = 'رتبة صغرى',
	['Q13198444'] = 'السلسلية',
	['Q36732'] = '[[مملكة (تصنيف)|مملكة]]',
	['Q21559275'] = 'فوق القسم',
	['Q2361851'] = 'شعبة فرعية',
	['Q2981883'] = '[[أترابية (تصنيف)|أترابية]]',
	['Q10861375'] = 'قسيم',
	['Q3150876'] = 'مملكة فرعية',
	['Q630771'] = 'ضُريب',
	['Q6541077'] = '[[أباشة (تصنيف)|أباشة]]',
	['Q21074316'] = 'رتبة متوسطة',
	['Q6054425'] = 'أترابية عليا',
	['Q42621'] = 'تهجين الأحياء',
	['Q6054237'] = 'رتبة ضخمة',
	['Q6462265'] = 'رتبة كبرى',
	['Q7506274'] = 'رتبة متوسطة',
	['Q10296147'] = 'فصيلة إضافية',
	['Q19858692'] = 'مملكة عليا',
	['Q4226087'] = 'أترابية فرعية',
	['Q26857882'] = 'المملكة الصغرى',
	['Q3798630'] = 'قبيلة فرعية',
	['Q3491996'] = 'نطاق فرعي',
 }

function taxonrank(iid)		-- Find P105 for item ID.
	if not iid or iid =='' 
		then return nil
	end
	------------------------
	vvv = nil
	P105iid = FindInCash(iid , 'P105')
	if not P105iid or P105iid == '' then
		--return nil --test
		P105iid = formatStatements( {property ='P105' , entityId = iid, enlabelcate='t', noref ='t', firstvalue='true',formatting='raw'})
	end
	------------------------
	if not vvv then
		if P105iid and P105iid ~= ''  
		then
			for k, v in pairs(taxP105) do
				if k == P105iid
					then 
						vvv = v -- addTrackingCategory(v ,{property='P105', entityId = iid,noicon='t'}) 
				end
			end
		end
	end
	------------------------
	if not vvv then
		st = formatStatements( {property ='P105' , entityId = iid, enlabelcate='t', noref ='t', firstvalue='true',formatting=''})
		if st and st ~= '' 
			then  
				vvv = st --addTrackingCategory(st .. '' ,{property='P105', entityId = iid,noicon='t'}) 
			else
		end
	end
	------------------------
	return vvv
end

function dd(id, taxo)
	-- taxo : الكائن
	-- d : المرتبة التصنيفية
	if id and id ~= '' 
		then 
			norank = ' (دون مرتبة)'
			P31 = foo(id,'','P31')
			if P31 then
				small = '<small>' .. P31 .. norank .. '</small>'
			else
				small = nil
			end
			----------------
			--	taxo = formatEntityId( id, options ).value
			d = taxonrank(id)		   -- المرتبة التصنيفية
			--d = foo(id,'','P105')
			----------------
			if not d or d == ''  
			then
				--d = small
				return nil
				-- return ''
			end
			----------------
			if taxo and taxo ~= '' 
				then
				if d and d ~= '' 
					then 
						--return	 d .. '||'..  taxo
						return	 d .. '\n|'..  taxo
					else 
						return taxo 
				end
			end
			----------------
		else
			--return '' 
	end
end
		--FindInCash(id , prop) 
		
function pro1(id , options)
	if not id or id ==''  then
		return nil 
	end
	----------------
	st = formatStatements( {property ='P171' , entityId = id,enlabelcate='t',noref ='e', firstvalue='true'}) -- options.noref
	return st
end

function p.tax( datavalue ,datatype , options)
	
	----------------
	local value =   datavalue.value			P0	=	dd(value.id,formatEntityId( value.id, options ).value )	
	local P1id	=	GetP171id(value.id,'raw')		P1	=	dd(P1id, pro1(value.id, options))
	local P2id	=	GetP171id(P1id,'raw')			P2	=	dd(P2id, pro1(P1id, options))
	local P3id	=	GetP171id(P2id,'raw')			P3	=	dd(P3id, pro1(P2id, options))
	local P4id	=	GetP171id(P3id,'raw')			P4	=	dd(P4id, pro1(P3id, options))
	local P5id	=	GetP171id(P4id,'raw')			P5	=	dd(P5id, pro1(P4id, options))
	local P6id	=	GetP171id(P5id,'raw')			P6	=	dd(P6id, pro1(P5id, options))
	local P7id	=	GetP171id(P6id,'raw')			P7	=	dd(P7id, pro1(P6id, options))
	local P8id	=	GetP171id(P7id,'raw')			P8	=	dd(P8id, pro1(P7id, options))
	local P9id	=	GetP171id(P8id,'raw')			P9	=	dd(P9id, pro1(P8id, options))
	local P10id	=	GetP171id(P9id,'raw')			P10	=	dd(P10id, pro1(P9id, options))
	local P11id	=	GetP171id(P10id,'raw')		P11	=	dd(P11id, pro1(P10id, options))
	local P12id	=	GetP171id(P11id,'raw')		P12	=	dd(P12id, pro1(P11id, options))
	local P13id	=	GetP171id(P12id,'raw')		P13	=	dd(P13id, pro1(P12id, options))
	local P14id	=	GetP171id(P13id,'raw')		P14	=	dd(P14id, pro1(P13id, options))
	local P15id	=	GetP171id(P14id,'raw')		P15	=	dd(P15id, pro1(P14id, options))
	local P16id	=	GetP171id(P15id,'raw')		P16	=	dd(P16id, pro1(P15id, options))
	local P17id	=	GetP171id(P16id,'raw')		P17	=	dd(P17id, pro1(P16id, options))
	local P18id	=	GetP171id(P17id,'raw')		P18	=	dd(P18id, pro1(P17id, options))
	local P19id	=	GetP171id(P18id,'raw')		P19	=	dd(P19id, pro1(P18id, options))
	local P20id	=	GetP171id(P19id,'raw')		P20	=	dd(P20id, pro1(P19id, options))
	local P21id	=	GetP171id(P20id,'raw')		P21	=	dd(P21id, pro1(P20id, options))
	local P22id	=	GetP171id(P21id,'raw')		P22	=	dd(P22id, pro1(P21id, options))
	local P23id	=	GetP171id(P22id,'raw')		P23	=	dd(P23id, pro1(P22id, options))
	------------------------
	--[ [
	local P24id	=	GetP171id(P23id,'raw')		P24	=	dd(P24id, pro1(P23id, options))
	local P25id	=	GetP171id(P24id,'raw')		P25	=	dd(P25id, pro1(P24id, options))
	local P26id	=	GetP171id(P25id,'raw')		P26	=	dd(P26id, pro1(P25id, options))
	local P27id	=	GetP171id(P26id,'raw')		P27	=	dd(P27id, pro1(P26id, options))
	local P28id	=	GetP171id(P27id,'raw')		P28	=	dd(P28id, pro1(P27id, options))
	local P29id	=	GetP171id(P28id,'raw')		P29	=	dd(P29id, pro1(P28id, options))
	local P30id	=	GetP171id(P29id,'raw')		P30	=	dd(P23id, pro1(P29id, options))
	
	local P31id	=	GetP171id(P30id,'raw')		P31	=	dd(P31id, pro1(P30id, options))
	local P32id	=	GetP171id(P31id,'raw')		P32	=	dd(P32id, pro1(P31id, options))
	local P33id	=	GetP171id(P32id,'raw')		P33	=	dd(P33id, pro1(P32id, options))
	local P34id	=	GetP171id(P33id,'raw')		P34	=	dd(P34id, pro1(P33id, options))
	local P35id	=	GetP171id(P34id,'raw')		P35	=	dd(P35id, pro1(P34id, options))
	--] ]
	----------------
	if not coo or coo =='' 
	then 
		coo = p.taxcolour( datavalue ,datatype , options) 
	end
	---------------- 
	to =  '[[التصنيف العلمي]]'
	ti = addTrackingCategory(to ,options)
	ti = addTrackingCategory(ti ,{property='P105' , noicon='t'}) 
	title =	 'colspan=\"2\" style=\"text-align: center;background-color:' ..coo..';" | ' ..  ti 
	
	head = '{| class="infobox biota" style="text-align: right; width: 200px; font-size: 100%%"'
	End = '}'
	local taxon2 = {P23 or "", P22 or "" , P21 or "" , P20 or ""
		, P19 or "", P18 or "", P17 or "", P16 or ""
		, P15 or "", P14 or "", P13 or "", P12 or ""
		, P11 or "", P10 or "", P9 or "", P8 or ""
		, P7 or "", P6 or "", P5 or "", P4 or ""
		, P3 or "", P2 or "", P1 or "", P0 or ""
		}
	----------------
	local taxon1 = {
		P35  or "" ,  P34  or "" ,  P33  or "" ,  P32  or "" ,  
		P31  or "" ,  P30  or "" ,  P29  or "" ,  P28  or "" ,  
		P27  or "" ,  P26  or "" ,  P25  or "" ,  P24  or "" ,  
		P23  or "" ,  P22  or "" ,  P21  or "" ,  P20  or "" ,  
		P19  or "" ,  P18  or "" ,  P17  or "" ,  P16  or "" ,  
		P15  or "" ,  P14  or "" ,  P13  or "" ,  P12  or "" ,  
		P11  or "" ,  P10  or "" ,  P9  or "" ,  P8  or "" ,  
		P7  or "" ,  P6  or "" ,  P5  or "" ,  P4  or "" ,  
		P3  or "" ,  P2  or "" ,  P1  or "" ,  P0  or "" ,  
		}
	----------------
	local q = {}
	--table.insert( q,head	) 
	table.insert( q, title	)
	for i , j in ipairs( taxon1 ) do
		----
		if options.numb and options.numb ~='' 
		then e = i .. '\n|' .. j
		else e = j
		end
		----
		if j and j ~= '' 
			then table.insert( q , e ) 
		end
	end	 
	----------------
	--table.insert( q,End	) 
	taxonSections = table.concat( q, "\n|-\n|")
	result = string.format([[%s
|-
!%s
|-
|%s
%s]], head, title, taxonSections, End )
	----------------

	return taxonSections --result
end

return p