Jump to content

Modulo:Taxonbar/candidate

Permanente a nasalakniban a modulo
Manipud iti Wikipedia, ti nawaya nga ensiklopedia
Dokumentasion ti modulo

Panggep

Naidesinio daytoy a plantilia a matawagan manipud iti {{Taxobox/core}} wenno iti maysa a mainaig a plantilia, ken siputenna dagiti panid a mabalin a kandidato para iti maysa a {{Taxonbar}}.

No adda ti {{Taxonbar}} iti nailak-am a panid, ti banag ti Wikidata ti panid ket maigiddiat a makita iti daytoy a listaan kadagiti maawat a pagarigan iti (P31)/subklase iti (P279), kent i maysa a listaan dagiti di-maawat a tagikua.

No mabirukan ti maysa a pagarigan/subklase, maikategoria ti panid a kas:

No awan ti mabirukan kadagiti maawat wenno di-maawat, maikategoria ti panid a kas:

No awan ti mabirukan kadagiti maawat ken saan abasbassit ngem 1 a dimaawat, awan ti maaramid a pannakaikategoria.

Panagusar

{{Taxonbar/candidate}}

Kitaen pay

  • Dagiti baw-ing − no adda, dagiti sabali a nagan daytoy a plantilia a mabalin a mausar

local p = {}

function p.check(frame)
	local taxonbarExists = require('Modulo:Taxonbar/exists').check
	if taxonbarExists(frame) then
		return ''
	else
		local resolveEntity = require( 'Modulo:ResolveEntityId' )
		local currentTitle = mw.title.getCurrentTitle()
		local currentItem = nil
		local categories = {
			'[[Kategoria:Dagiti artikulo ti taxobox a mabalin nga awanan iti taxonbar]]' --unset if acceptable or unacceptable found
		}
		
		--preliminary exclusion criteria
		if string.match( currentTitle.text, '^Listaan dagiti ') then
			return ''
		end
		
		--find Wikidata item
		if currentTitle.namespace == 0 then --mainspace
			local currentEntityId = mw.wikibase.getEntityIdForCurrentPage()
			if resolveEntity._id(currentEntityId) then
				currentItem = mw.wikibase.getEntity(currentEntityId)
			else --currentEntityId == nil/unresolvable
				return categories[1]
			end
		else
			return ''
		end
		
		if currentItem then --currentItem should not be nil here, but check just in case
			--determine if {{Taxonbar}} is *possibly* missing, or *definitely* missing
			local acceptableInstanceOf_All = { --copied from [[Module:Taxonbar]]
				['Q16521'] = 'taxon',                      --strict
				['Q310890'] = 'monotypic taxon',           --strict
				['Q2568288'] = 'ichnotaxon',               --strict
				['Q23038290'] = 'fossil taxon',            --strict
				['Q47487597'] = 'monotypic fossil taxon',  --strict
				['Q42621'] = 'hybrid',                     --lax
				['Q235536'] = 'incertae sedis',            --lax
				['Q713623'] = 'clade',                     --lax
				['Q848328'] = 'serotype',                  --lax
				['Q857968'] = 'candidatus',                --lax
				['Q17487588'] = 'unavailable combination', --lax
			}
			local unacceptableInstanceOf = {
				['Q913170'] = 'trivial name',
				['Q55983715'] = 'group of organisms known by one particular common name',
				['Q937228'] = 'property',
				['Q14712'] = 'drupe',
				['Q163233'] = 'compound drupe',
				['Q747463'] = 'compound fruit',
			}
			
			local acceptableCount = 0
			local unacceptableCount = 0
			for _, instanceOfState in pairs ( currentItem:getBestStatements('P31') ) do --instance of
				local instanceOf = instanceOfState.mainsnak.datavalue.value.id
				if acceptableInstanceOf_All[instanceOf] then
					acceptableCount = acceptableCount + 1
				elseif unacceptableInstanceOf[instanceOf] then
					unacceptableCount = unacceptableCount + 1
				end
			end
			for _, subclassOfState in pairs ( currentItem:getBestStatements('P279') ) do --subclass of
				local subclassOf = subclassOfState.mainsnak.datavalue.value.id
				if acceptableInstanceOf_All[subclassOf] then
					acceptableCount = acceptableCount + 1
				elseif unacceptableInstanceOf[subclassOf] then
					unacceptableCount = unacceptableCount + 1
				end
			end
			
			if acceptableCount > 0 then
				categories[1] = ''
				categories[2] = '[[Kategoria:Dagiti artikulo ti taxobox nga awanan iti taxonbar]]'
			elseif unacceptableCount > 0 then
				categories[1] = ''
				categories[2] = ''
			end
			
			return table.concat(categories)
			
		else
			return ''
		end
	end
end

return p