The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

Documentation for this module may be created at Module:Taxonbar/candidate/doc

local p = {}

function p.check(frame)
	local taxonbarExists = require('Module:Taxonbar/exists').check
	if taxonbarExists(frame) then
		return ''
	else
		local resolveEntity = require( 'Module:ResolveEntityId' )
		local currentTitle = mw.title.getCurrentTitle()
		local currentItem = nil
		local categories = {
			'[[Category:Taxobox articles possibly missing a taxonbar]]' --unset if acceptable or unacceptable found
		}
		
		--preliminary exclusion criteria
		if string.match( currentTitle.text, '^List of ') then
			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] = '[[Category:Taxobox articles missing a taxonbar]]'
			elseif unacceptableCount > 0 then
				categories[1] = ''
				categories[2] = ''
			end
			
			return table.concat(categories)
			
		else
			return ''
		end
	end
end

return p