|
|
| 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 |
Documentation for this module may be created at Module:Taxonbar/candidate/doc
return p