Module:Taxonbar/candidate: Difference between revisions
Appearance
Replaced content with "return p" Tags: Replaced Reverted |
Tag: Undo |
||
| Line 1: | Line 1: | ||
local p = {} | |||
function p.check(frame) | |||
local taxonbarExists = require('Module:Taxonbar/exists').check | |||
if taxonbarExists(frame) == true 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 | |||
--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 *definitely* missing, *possibly* missing, or not missing at all | |||
local whitelist = require( 'Module:Taxonbar/whitelist' ).whitelist | |||
local blacklist = require( 'Module:Taxonbar/blacklist' ).blacklist | |||
local acceptableInstanceOf_All = whitelist{ args = { 'all' } } | |||
local unacceptableInstanceOf = blacklist{ args = {} } | |||
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 | return p | ||
Latest revision as of 18:04, 17 December 2025
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) == true 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
--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 *definitely* missing, *possibly* missing, or not missing at all
local whitelist = require( 'Module:Taxonbar/whitelist' ).whitelist
local blacklist = require( 'Module:Taxonbar/blacklist' ).blacklist
local acceptableInstanceOf_All = whitelist{ args = { 'all' } }
local unacceptableInstanceOf = blacklist{ args = {} }
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