Module:Taxonbar/sandbox
Appearance
![]() | This is the module sandbox page for Module:Taxonbar (diff). |
{{Taxonbar}} (edit talk history links # /subpages /doc /doc edit /sbox /sbox diff /test)
![]() | This Lua module is used on approximately 472,000 pages, or roughly 1% of all pages. To avoid major disruption and server load, any changes should be tested in the module's /sandbox or /testcases subpages, or in your own module sandbox. The tested changes can be added to this page in a single edit. Consider discussing changes on the talk page before implementing them. |
![]() | This module is rated as ready for general use. It has reached a mature form and is thought to be relatively bug-free and ready for use wherever appropriate. It is ready to mention on help pages and other Wikipedia resources as an option for new users to learn. To reduce server load and bad output, it should be improved by sandbox testing rather than repeated trial-and-error editing. |
![]() | This module is subject to page protection. It is a highly visible module in use by a very large number of pages, or is substituted very frequently. Because vandalism or mistakes would affect many pages, and even trivial editing might cause substantial load on the servers, it is protected from editing. |
This module uses one or more Wikidata properties; see § Taxon identifiers for details.
![]() | This module depends on the following other modules: |
Related pages |
---|
This module contains the code of {{Taxonbar}}. To use Taxonbar, follow instructions at Template:Taxonbar/doc.
Configuration
Parameters and databases are set by Module:Taxonbar/conf.
Taxon identifiers
Testcases
For testcases use: {{Taxonbar | from=QID}}
Peach (Prunus persica)
Dog (Canis lupus familiaris)
Eastern bluebird (Sialia sialis)
Honey bee (Apis)
Western honey bee (Apis mellifera)
Clipper butterfly (Parthenos sylvia)
Turkey tail (Trametes versicolor)
Button/portobello mushroom (Agaricus bisporus)
Module editing — to-do list
See also
- Module:Taxonbar/conf – the configuration module to add/remove/edit sources
- {{Taxonbar/exists}} – tests for {{Taxonbar}} existence
- {{Taxonbar/candidate}} – categorize highly-likely and potentially-likely {{Taxonbar}} candidates
- Module:Authority control – a {{Taxonbar}}-like module for unique subjects
- gl:Módulo:Taxonbar – original code source for this module
require('Module:No globals')
local function append(str, c, length)
while str:len() < length do
str = c .. str
end
return str
end
local function getIdsFromWikidata( item, property )
local ids = {}
if not item.claims[property] then
return ids
end
for _, statement in pairs( item.claims[property] ) do
if statement.mainsnak.datavalue then
table.insert( ids, statement.mainsnak.datavalue.value )
end
end
return ids
end
local function getLinkFromWikidata( property, val )
local link = ''
if mw.ustring.find( val, 'http' ) then
link = val
val = mw.ustring.match(val, '.*=(.-)$') or val
else
link = mw.wikibase.getEntityObject('P'..property).claims.P1630[1].mainsnak.datavalue.value
link = mw.ustring.gsub(link, '$1', val)
end
link = mw.ustring.gsub(link, '^[Hh][Tt][Tt][Pp]([Ss]?)://', 'http%1://')
return '[' .. link .. ' ' .. val .. ']'
end
local function createRow( id, label, rawValue, link, withUid )
if link then
if withUid then
return '*<span style="white-space:nowrap;">' .. label .. ' <span class="uid">' .. link .. '</span></span>\n'
else
return '*<span style="white-space:nowrap;">' .. label .. ' ' .. link .. '</span>\n'
end
else
return '* <span class="error">The identifier ' .. id .. ' ' .. rawValue .. ' is not valid.</span>\n'
end
end
--In this order: name of the parameter, label, propertyId in Wikidata, formatting function
local conf = {
--Biology
{ 'APDB', 'APDB', 2036 },
{ 'AlgeaBase', '[[AlgaeBase]]', 1348 },
{ 'Araneae', 'Araneae', 3594 },
{ 'ARKive', '[[ARKive]]', 2833 },
{ 'Avibase', 'Avibase', 2026 },
{ 'BacDive', '[[BacDive]]', 2946 },
{ 'BHL', '[[Biodiversity Heritage Library|BHL]]', 687 },
{ 'BioLib', 'BioLib', 838 },
{ 'BugGuide', '[[BugGuide]]', 2464 },
{ 'ButMoth', '[[Natural History Museum#Butterflies and Moths of the World|ButMoth]]', 3060 },
{ 'Conifers', 'Conifers.org', 1940 },
{ 'eBird', '[[eBird]]', 3444 },
{ 'EoL', '[[Encyclopedia of Life|EoL]]', 830 },
{ 'EPPO', '[[European and Mediterranean Plant Protection Organization|EPPO]]', 3031 },
{ 'FaunaEuropaea', '[[Fauna Europaea|FE]]', 1895 },
{ 'FishBase', '[[FishBase]]', 938 },
{ 'FloraBase', '[[FloraBase]]', 3101 },
{ 'Fossilworks', '[[Fossilworks]]', 842 },
{ 'FNA', '[[Flora of North America|FNA]]', 1727 },
{ 'FoAO', 'FoAO', 3100 },
{ 'FoC', '[[Flora of China|FoC]]', 1747 },
{ 'Fungorum', '[[Index Fungorum|Fungorum]]', 1391 },
{ 'GBIF', '[[Global Biodiversity Information Facility|GBIF]]', 846 },
{ 'GrassBase', '[[GrassBase]]', 1832 },
{ 'GRIN', '[[Germplasm Resources Information Network|GRIN]]', 1421 },
{ 'IBC', '[[Handbook of the Birds of the World|IBC]]', 3099 },
{ 'ICTV', '[[International Committee on Taxonomy of Viruses|ICTV]]', 1076 },
{ 'iNaturalist', '[[iNaturalist]]', 3151 },
{ 'IPNI', '[[International Plant Names Index|IPNI]]', 961 },
{ 'IPNI2', '[[International Plant Names Index|IPNI]] author', 586 },
{ 'ITIS', '[[Integrated Taxonomic Information System|ITIS]]', 815 },
{ 'IUCN', '[[IUCN Red List|IUCN]]', 627 },
{ 'LepIndex', '[[Natural History Museum#The Global Lepidoptera Names Index|LepIndex]]', 3064 },
{ 'LPSN', '[[List of Prokaryotic names with Standing in Nomenclature|LPSN]]', 1991 },
{ 'MSW', '[[Mammal Species of the World|MSW]]', 959 },
{ 'MycoBank', '[[MycoBank]]', 962 },
{ 'NBN', '[[National Biodiversity Network|NBN]]', 3240 },
{ 'NCBI', '[[National Center for Biotechnology Information|NCBI]]', 685 },
{ 'Panartic', 'Panartic Flora', 2434 },
{ 'Plantarium', 'Plantarium', 3102 },
{ 'PlantList', '[[The Plant List|Plant List]]', 1070 },
{ 'PLANTS', '[[Natural Resources Conservation Service#Plants|PLANTS]]', 1772 },
{ 'Plazi', '[[Plazi]]', 1992 },
{ 'Species+', '[[CITES|Species+]]', 2040 },
{ 'SPRAT', '[[Species Profile and Threats Database|SPRAT]]', 2455 },
{ 'Tropicos', '[[Tropicos]]', 960 },
{ 'USDAPLANTS', '[[Natural_Resources_Conservation_Service#Plants|PLANTS]]', 1772 },
{ 'VASCAN', 'VASCAN', 1745 },
{ 'Watson', 'Watson & Dallwitz', 1761 },
{ 'WCSP', '[[World Checklist of Selected Plant Families|WCSP]]', 3591 },
{ 'WoRMS', '[[World Register of Marine Species|WoRMS]]', 850 },
{ 'WSC', '[[World Spider Catalog|WSC]]', 3288 },
{ 'Xeno-canto', 'Xeno-canto', 2426 },
{ 'ZooBank', '[[ZooBank]]', 1746, }
}
local aliases = {
{ 'FE', 'FaunaEuropaea' },
{ 'PaleoDB', 'Fossilworks' },
{ 'FW', 'Fossilworks' },
{ 'indexfungorum', 'Fungorum' },
{ 'species', 'Species+' },
{ 'WCSPF', 'WCSP' },
{ 'Xenocanto', 'Xeno-canto' },
{ 'NameBank', 'uBio' }
}
local p = {}
function p.authorityControlTaxon( frame )
local parentArgs = frame:getParent().args
local stringArgs = false
--Make args case insensitive
local tempArgs = {unpack(parentArgs)}
for para, value in pairs( tempArgs ) do
if type(para) == string then
local lpara = mw.ustring.lower(para)
if not parentArgs[lpara] then
parentArgs[lpara] = value
parentArgs[para] = nil
end
if value and value ~= '' and lpara ~= 'from' then stringArgs = true end
end
end
--remap aliases
for _, j in pairs( aliases ) do
local k, m = mw.ustring.lower(j[1]), mw.ustring.lower(j[2])
if parentArgs[k] and not parentArgs[m] then
parentArgs[m] = parentArgs[k]
parentArgs[k] = nil
end
end
--Create rows
local elements, title = {}, {}
local item = mw.wikibase.getEntityObject(parentArgs['from'])
if parentArgs['from'] ~= nil then title = mw.title.new(item:getLabel()) else title = mw.title.getCurrentTitle() end
if title.namespace == 0 or stringArgs then --Only in the main namespace or if there are manual overrides
--redirect PND to GND
if (parentArgs.GND == nil or parentArgs.GND == '') and parentArgs.PND ~= nil and parentArgs.PND ~= '' then
parentArgs.GND = parentArgs.PND
end
--Wikidata fallback if requested
if item ~= nil and item.claims ~= nil then
for _, params in pairs( conf ) do
if params[3] ~= 0 then
params[1] = mw.ustring.lower(params[1])
local val = parentArgs[params[1]]
if not val or val == '' then
local wikidataIds = getIdsFromWikidata( item, 'P' .. params[3] )
if wikidataIds[1] then
parentArgs[params[1]] = wikidataIds[1]
end
end
end
end
end
--Configured rows
local rct = 0
for k, params in pairs( conf ) do
params[1] = mw.ustring.lower(params[1])
local val = parentArgs[params[1]]
if val and val ~= '' and mw.ustring.lower(val) ~= 'no' then
table.insert( elements, createRow( params[1], params[2] .. ':', val, getLinkFromWikidata( params[3], val ), true ) )
rct = rct + 1
end
end
local Navbox = require('Module:Navbox')
--local elementscats = ''
--if rct > 13 then
-- elementscats = '[[Category:AC with ' .. rct .. ' elements]]'
--end
if #elements ~= 0 then
return Navbox._navbox( {
name = 'Taxonbar',
bodyclass = 'hlist',
listclass = '',
group1 = '[[Help:Taxon identifiers|Taxon Identifiers]]', --.. elementscats,
list1 = table.concat( elements )
} )
else
return ""
end
end
end
return p