Taxonbar (sunting bicara histori links # /subpages /doc /doc sunting /sbox /sbox diff /test) · Module:Taxonbar
| Modul Lua ini digunakan pada 149.000+ halaman. Untuk mencegah suntingan mengganggu skala besar dan beban peladen, setiap perubahan harus diuji di subhalaman /bak pasir atau /kasus uji Modul:Taxonbar, atau bak pasir modul Anda. Perubahan yang telah diuji kemudian dapat ditambahkan ke halaman ini dalam satu suntingan. Pertimbangkan untuk mendiskusikan perubahan di halaman pembicaraan sebelum mengimplementasikannya. |
| Modul ini dilindungi. Modul ini sangat mencolok yang digunakan oleh banyak halaman, atau sangat sering disubstitusikan. Karena vandalisme atau kesalahan akan mempengaruhi banyak halaman, dan suntingan kecil dapat memberi beban besar pada server, modul ini dilindungi dari penyuntingan. |
Halaman utama: Template:Taxonbar
Modul ini menggunakan satu properti Wikidata atau lebih; lihat § Taxon identifiers untuk penjelasannya.
| Modul ini menggunakan Lua: |
| Halaman terkait |
|---|
Modul ini berisi kode untuk {{Taxonbar}}. Untuk menggunakan Taxonbar, ikuti petunjuk di Templat:Taxonbar/doc.
KonfigurasiKonfigurasi
Parameter dan database diatur oleh Modul:Taxonbar/conf.
Kasus ujiKasus uji
Lihat pula: Template:Taxonbar/testcases dan Module:Taxonbar/sandbox
Untuk kasus uji gunakan: {{Taxonbar | from=QID}}
| Rhododendron maximum |
|
|---|---|
| Asclepias syriaca |
|
|---|---|
Persik (Prunus persica)
| Prunus persica |
|
|---|---|
| Puma | |
|---|---|
Anjing (Canis lupus familiaris)
| Canis lupus familiaris | |
|---|---|
Blue Bird Timur (Sialia sialis)
| Sialia sialis |
|
|---|---|
Lebah madu (Apis)
| Apis |
|
|---|---|
Lebah madu barat (Apis mellifera)
| Apis mellifera |
|
|---|---|
Kupu-kupu Clipper (Parthenos sylvia)
| Parthenos sylvia | |
|---|---|
| Trametes versicolor |
|
|---|---|
Jamur kancing / portobello (Agaricus bisporus)
| Agaricus bisporus |
|
|---|---|
Lihat pulaLihat pula
- Module:Taxonbar/conf – konfigurasi modul untuk menambah / menghapus / mengedit sumber
- {{Taxonbar/exists}} – tes untuk mendeteksi keberadaan {{Taxonbar}}
- {{Taxonbar/candidate}} – mengkategorikan kandidat penambahan {{Taxonbar}}
- Module:Authority control – modul mirip {{Taxonbar}}-untuk subjek berbeda
- gl:Módulo:Taxonbar – kode sumber asli pertama untuk modul ini
Dokumentasi di atas ditransklusikan dari Modul:Taxonbar/doc. (sunting | riwayat)
Penyunting dapat melakukan uji coba pada halaman bak pasir (buat | cermin) dan kasus uji (buat) modul ini.
Subhalaman modul ini.
Penyunting dapat melakukan uji coba pada halaman bak pasir (buat | cermin) dan kasus uji (buat) modul ini.
Subhalaman modul ini.
require('strict') localconf=require('Module:Taxonbar/conf')--configuration module localTaxonItalics=require('Module:TaxonItalics')--use a function to conditionally italicize taxon names --[[==========================================================================]] --[[ Local functions ]] --[[==========================================================================]] localfunctionisNilOrEmpty(thing) ifthing==nilorthing==''then returntrue end returnnil end localfunctiongetIdFromWikidata(item,property) localid=nil ifproperty=='PWikispecies:$1'then localsiteLinks=item.sitelinks ifsiteLinksthen localspeciesWiki=item.sitelinks.specieswiki ifspeciesWikithen id=speciesWiki.title end end returnid elseifitem.claims[property]==nilthen returnid end --[[ this code picks up deprecated values on wikidata; better to use getBestStatements for _, statement in pairs( item.claims[property] ) do if statement.mainsnak.datavalue then id = statement.mainsnak.datavalue.value break end end ]] localstatements=item:getBestStatements(property)[1] ifstatementsand statements.mainsnakand statements.mainsnak.datavalueand statements.mainsnak.datavalue.value then id=statements.mainsnak.datavalue.value end returnid end localfunctiongetLink(property,db,val) locallink,returnVal='',{} returnVal.isError=false ifmw.ustring.find(val,'//')then link=val else iftype(property)=='number'andproperty>0then localentityObject=mw.wikibase.getEntity('P'..property) localdataType ifentityObjectthendataType=entityObject.datatype elsereturnVal.isError=trueend ifdataType=='external-id'then localformatterURL=nil ifproperty==3746or--Wildflowers of Israel property==3795or--Flora of Israel Online property==5397--Tierstimmenarchiv then formatterURL=entityObject:getBestStatements('P1630')[2]--use 2nd formatterURL for English version end ifformatterURL==nilthenformatterURL=entityObject:getBestStatements('P1630')[1]end--default to [1] ifformatterURLthen ifformatterURL.mainsnak.datavalueandformatterURL.mainsnak.datavalue.valuethen--nil check for ABA link=formatterURL.mainsnak.datavalue.value end end ifdb=='bow'then-- for birds of world which uses eBird identifier link='https://birdsoftheworld.org/bow/species/$1' elseifdb=='speciesfungorum'then-- SpeciesFungorum uses Index Fungorum identifier link='https://www.speciesfungorum.org/Names/NamesRecord.asp?RecordID=$1' elseifdb=='fossilworks'then link='https://paleobiodb.org/classic/basicTaxonInfo?taxon_no=$1' end elseifdataType=='url'then localsubjectItem=entityObject:getBestStatements('P1629')[1] ifsubjectItemthen localofficialWebsite=mw.wikibase.getEntity(subjectItem.mainsnak.datavalue.value.id):getBestStatements('P856')[1] ifofficialWebsitethenlink=officialWebsite.mainsnak.datavalue.valueend end elseifdataType=='string'then localformatterURL=entityObject:getBestStatements('P1630')[1] ifformatterURLthen link=formatterURL.mainsnak.datavalue.value else localsubjectItem=entityObject:getBestStatements('P1629')[1] ifsubjectItemthen localofficialWebsite=mw.wikibase.getEntity(subjectItem.mainsnak.datavalue.value.id):getBestStatements('P856')[1] ifofficialWebsitethenlink=officialWebsite.mainsnak.datavalue.valueend end end else returnVal.isError=true end elseiftype(property)=='string'then link=property end --local valurl = val localvalurl=mw.uri.encode(val,'PATH') valurl=string.gsub(valurl,'%%2F','/')--escape '/' (e.g. issue with P5354); see wikidata T128078 and https://gerrit.wikimedia.org/r/c/mediawiki/extensions/Wikibase/+/664820/3/lib/includes/PropertyInfoSnakUrlExpander.php iftype(property)=='number'then --doublecheck language for Wildflowers of Israel ID ifproperty==3746thenlink=mw.ustring.gsub(link,'/hebrew/','/english/')end --format spaces in PfaF binomials, e.g. "Elaeagnus x ebbingei" ifproperty==4301thenvalurl=mw.ustring.gsub(valurl,'%%20','+')end end valurl=mw.ustring.gsub(valurl,'%%','%%%%') link=mw.ustring.gsub(link,'$1',valurl) end link=mw.ustring.gsub(link,'^[Hh][Tt][Tt][Pp]([Ss]?)://','http%1://')--fix wikidata URL val=mw.ustring.match(val,'([^=/]*)/?$')--get display name from end of URL ifmw.ustring.find(link,'//')then returnVal.text='['..link..' '..mw.text.encode(mw.uri.decode(val,'PATH'),'%[%]')..']' elseiflink==''then returnVal.text=val else returnVal.text='<span class="external">[['..link..'|'..val..']]</span>' end returnreturnVal end localfunctioncreateRow(id,label,rawValue,link,withUid) iflinkthen localoutStr='*<span style="white-space:nowrap;">'..label..' <span' ifwithUidthenoutStr=outStr..' class="uid"'end returnoutStr..'>'..link..'</span></span>\n' else return'* '..mw.text.tag('span',{class='error'},'The identifier '..id..' '..rawValue..' is not valid.')..'\n' end end localfunctioncopyTable(inTable) iftype(inTable)~='table'thenreturninTableend localoutTable=setmetatable({},getmetatable(inTable)) forkey,valueinpairs(inTable)dooutTable[copyTable(key)]=copyTable(value)end returnoutTable end localp={} --[[==========================================================================]] --[[ Main ]] --[[==========================================================================]] functionp.authorityControlTaxon(frame) localresolveEntity=require('Module:ResolveEntityId') localwhitelist=require('Module:Taxonbar/whitelist').whitelist--to create acceptableInstanceOf_Strict & acceptableInstanceOf_All localparentArgs=copyTable(frame:getParent().args) localcurrentTitle=mw.title.getCurrentTitle() localcurrentEntityId=mw.wikibase.getEntityIdForCurrentPage() localstringArgs=false localfromTitleCount,firstRow,rowCount=1,0,0 localoutString,errors='','' localiFroms=0--integer size of tFroms, b/c Lua localtFroms={}--non-sequential table of unique froms localtCats={ '[[Kategori:Taxonbar tanpa parameter from]]', '[[Kategori:Taxonbar tidak sinkron dengan Wikidata]]', '',-- [3] placeholder for [[Category:Taxonbar pages requiring a Wikidata item]] '',-- [4] placeholder for [[Category:Taxonbars on possible non-taxon pages]] '',-- [5] placeholder for [[Category:Taxonbars with invalid from parameters]] '',-- [6] placeholder for [[Category:Taxonbars with duplicate from parameters]] '',-- [7] placeholder for [[Category:Taxonbars with from2 matching article title]] '',-- [8] placeholder for [[Category:Taxonbars with from2 matching article title & QID]] '',-- [9] placeholder for [[Category:Taxonbars with manual taxon IDs]] '',--[10] placeholder for [[Category:Taxonbars with manual taxon IDs identical to Wikidata]] '',--[11] placeholder for [[Category:Taxonbars with manual taxon IDs differing from Wikidata]] '',--[12] placeholder for [[Category:Taxonbars with unknown parameters]] '',--[13] placeholder for [[Category:Taxonbars with unnamed parameters]] '',--[14] placeholder for [[Category:Taxonbars with multiple manual Wikidata items]] '',--[15] placeholder for [[Category:Taxonbars with automatically added basionyms]] '',--[16] placeholder for [[Category:Taxonbars with automatically added original combinations]] '',--[17] placeholder for [[Category:Taxonbars with automatically added monotypic species]] '',--[18] placeholder for [[Category:Taxonbars with automatically added monotypic genera]] '',--[19] placeholder for [[Category:Taxonbars of monotypic species missing genera]] '',--[20] placeholder for [[Category:Taxonbars of monotypic genera missing species]] '',--[21] placeholder for [[Category:Taxonbars without primary Wikidata taxon IDs]] '',--[22] placeholder for [[Category:Taxonbars without secondary Wikidata taxon IDs]] '',--[23] placeholder for [[Category:Taxonbars with 20–24 taxon IDs]] '',--[24] placeholder for [[Category:Taxonbars with 25–29 taxon IDs]] '',--[25] placeholder for [[Category:Taxonbars with 30–34 taxon IDs]] '',--[26] placeholder for [[Category:Taxonbars with 35–39 taxon IDs]] '',--[27] placeholder for [[Category:Taxonbars with 40–44 taxon IDs]] '',--[28] placeholder for [[Category:Taxonbars with 45+ taxon IDs]] } localacceptableInstanceOf_Strict=whitelist{args={'strict'}} localacceptableInstanceOf_All=whitelist{args={'all'}} --Assess the page's relationship with Wikidata localcurrentItem=nil ifcurrentTitle.namespace==10then--i.e. Module:Taxonbar/sandbox, Template:Taxonbar/doc, etc. ifresolveEntity._id(parentArgs['from'])then currentItem=mw.wikibase.getEntity(parentArgs['from']) end ifcurrentItem==nilthen ifresolveEntity._id(parentArgs['from1'])then currentItem=mw.wikibase.getEntity(parentArgs['from1']) end end elseifresolveEntity._id(currentEntityId)then currentItem=mw.wikibase.getEntity(currentEntityId) else--currentEntityId == nil/unresolvable tCats[3]='[[Kategori:Halaman taxonbar yang membutuhkan item Wikidata]]' end ifcurrentItemthen tCats[4]='[[Kategori:Taxonbar pada halaman yang kemungkinan non-takson]]'--unset if acceptable found for_,instanceOfStateinpairs(currentItem:getBestStatements('P31'))do--instance of localinstanceOf=instanceOfState.mainsnak.datavalue.value.id ifacceptableInstanceOf_All[instanceOf]then tCats[4]='' break end end end --Cleanup args fork,vinpairs(frame:getParent().args)do iftype(k)=='string'then --make args case insensitive locallowerk=mw.ustring.lower(k) ifisNilOrEmpty(parentArgs[lowerk])then parentArgs[k]=nil parentArgs[lowerk]=v end --remap abc to abc1 ifmw.ustring.find(lowerk,'%d$')==nilthen--if no number at end of param ifisNilOrEmpty(parentArgs[lowerk..'1'])then parentArgs[lowerk]=nil lowerk=lowerk..'1' parentArgs[lowerk]=v end end ifvandv~=''then --remap 'for' to 'title' ifmw.ustring.sub(lowerk,1,3)=='for'then localforTitle=mw.ustring.gsub(lowerk,'^for','title',1) ifisNilOrEmpty(parentArgs[forTitle])then parentArgs[lowerk]=nil lowerk=forTitle parentArgs[lowerk]=v end end --find highest from or title param ifmw.ustring.sub(lowerk,1,4)=='from'then localfromNumber=tonumber(mw.ustring.sub(lowerk,5,-1)) iffromNumberandfromNumber>=fromTitleCountthenfromTitleCount=fromNumberend --look for duplicate froms while we're here ifmw.ustring.find(v,'^Q%d')then iftFroms[v]then tCats[6]='[[Kategori:Taxonbar dengan parameter from duplikat]]' tFroms[v]=tFroms[v]+1 else tFroms[v]=1 iFroms=iFroms+1 end ifiFroms==2then tCats[14]='[[Kategori:Taxonbar yang menggunakan banyak item Wikidata manual]]' end end elseifmw.ustring.sub(lowerk,1,5)=='title'then localtitleNumber=tonumber(mw.ustring.sub(lowerk,4,-1)) iftitleNumberandtitleNumber>=fromTitleCountthenfromTitleCount=titleNumberend elseifmw.ustring.lower(v)~='no'andmw.ustring.lower(v)~='yes'then stringArgs=true tCats[9]='[[Kategori:Taxonbar yang menggunakan ID takson manual]]' end end end--if type(k) == 'string' end--for --Check for unknown parameters --create knowns list localacceptableArgs={from=true,}--master list of l/c acceptable args for_,dinpairs(conf.databases)do ifd[1]~='Wikidata'then--made obsolete by from acceptableArgs[mw.ustring.lower(d[1])]=true end end for_,ainpairs(conf.aliases)do acceptableArgs[mw.ustring.lower(a[1])]=true end --create trimmed parents list localbaseParentArgs={}--condensed list of l/c parent args w/o trailing #s fork,_inpairs(parentArgs)do iftype(k)=='string'then locallowerk=mw.ustring.lower(k) localbase=mw.ustring.gsub(lowerk,'[%d]*$','') baseParentArgs[base]=true elseiftype(k)=='number'then tCats[13]='[[Kategori:Taxonbar dengan parameter tak bernama|'..k..']]' end end --compare lists and spit out unknowns localunknownParams={} fork,_inpairs(baseParentArgs)do ifacceptableArgs[k]==nilthen tCats[12]='[[Kategori:Taxonbar dengan parameter tak dikenali|'..k..']]' unknownParams[#unknownParams+1]=k end end --warn if unknown(s) present if#unknownParams>0then localplural='s' localitthem='them' if#unknownParams==1then plural='' itthem='it' end errors=errors..require('Module:If preview')._warning({ mw.ustring.format( 'Parameter tidak dikenali: %s <code>%s</code>. Mohon koreksi %s atau pertimbangkan untuk menambahkan %s ke Wikidata.', plural, table.concat(unknownParams,'</code>, <code>'), itthem, itthem ) }) end --Append basionym to arg list, if not already provided ifcurrentItemthen localcurrentBasState=currentItem:getBestStatements('P566')[1]--basionym ifcurrentBasStatethen localdatavalue=currentBasState.mainsnak.datavalue localbasionymId=datavalueanddatavalue.value.id ifbasionymIdandresolveEntity._id(basionymId)andtFroms[basionymId]==nilthen --check that basionym is a strict instance of taxon localbasionymItem=mw.wikibase.getEntity(basionymId) ifbasionymItemthen for_,instanceOfStateinpairs(basionymItem:getBestStatements('P31'))do--instance of localinstanceOf=instanceOfState.mainsnak.datavalue.value.id ifacceptableInstanceOf_Strict[instanceOf]then --housekeeping tFroms[basionymId]=1 iFroms=iFroms+1 fromTitleCount=fromTitleCount+1 --append basionym & track parentArgs['from'..fromTitleCount]=basionymId tCats[15]='[[Kategori:Taxonbar dengan basionim ditambahkan secara otomatis]]' break endendendendendend --Append original combination to arg list, if not already provided ifcurrentItemthen localcurrentOCState=currentItem:getBestStatements('P1403')[1]--original combination ifcurrentOCStatethen localorcoId=currentOCState.mainsnak.datavalue.value.id iforcoIdandresolveEntity._id(orcoId)andtFroms[orcoId]==nilthen --check that orco is a strict instance of taxon localorcoItem=mw.wikibase.getEntity(orcoId) iforcoItemthen for_,instanceOfStateinpairs(orcoItem:getBestStatements('P31'))do--instance of localinstanceOf=instanceOfState.mainsnak.datavalue.value.id ifacceptableInstanceOf_Strict[instanceOf]then --housekeeping tFroms[orcoId]=1 iFroms=iFroms+1 fromTitleCount=fromTitleCount+1 --append orco & track parentArgs['from'..fromTitleCount]=orcoId tCats[16]='[[Kategori:Taxonbar dengan kombinasi asli ditambahkan secara otomatis]]' break endendendendendend --Append monotypic genus/species to arg list of monotypic species/genus, if not already provided ifcurrentItemthen for_,instanceOfStateinpairs(currentItem:getBestStatements('P31'))do--instance of localtaxonRank=nil localparentItem=nil localparentTaxon=nil localparentTaxonRank=nil localparentMonoGenus=nil--holy grail/tbd localchildItem=nil localchildTaxon=nil localchildTaxonRank=nil localchildMonoSpecies=nil--holy grail/tbd localinstanceOf=instanceOfState.mainsnak.datavalue.value.id ifinstanceOfand(instanceOf=='Q310890'orinstanceOf=='Q47487597')then--monotypic/fossil taxon localtaxonRankState=currentItem:getBestStatements('P105')[1]--taxon rank iftaxonRankStatethentaxonRank=taxonRankState.mainsnak.datavalue.value.idend iftaxonRankandtaxonRank=='Q7432'then--species --is monotypic species; add genus localparentTaxonState=currentItem:getBestStatements('P171')[1]--parent taxon ifparentTaxonStatethenparentTaxon=parentTaxonState.mainsnak.datavalue.value.idend --confirm parent taxon rank == genus & monotypic ifparentTaxonandresolveEntity._id(parentTaxon)then parentItem=mw.wikibase.getEntity(parentTaxon) ifparentItemthen localparentTaxonRankState=parentItem:getBestStatements('P105')[1]--taxon rank ifparentTaxonRankStatethenparentTaxonRank=parentTaxonRankState.mainsnak.datavalue.value.idend ifparentTaxonRankandparentTaxonRank=='Q34740'then--parent == genus for_,parentInstanceOfStateinpairs(parentItem:getBestStatements('P31'))do--instance of localparentInstanceOf=parentInstanceOfState.mainsnak.datavalue.value.id ifparentInstanceOfand (parentInstanceOf=='Q310890'orparentInstanceOf=='Q47487597')then--monotypic/fossil taxon parentMonoGenus=parentTaxon--confirmed break end end ifparentMonoGenusandtFroms[parentMonoGenus]==nilthen --housekeeping tFroms[parentMonoGenus]=1 iFroms=iFroms+1 fromTitleCount=fromTitleCount+1 --append monotypic genus & track parentArgs['from'..fromTitleCount]=parentMonoGenus tCats[18]='[[Kategori:Taxonbar dengan genera monotipik ditambahkan secara otomatis]]' break endendendend ifparentMonoGenus==nilortFroms[parentMonoGenus]==nilthen tCats[19]='[[Kategori:Taxonbar spesies monotipik tanpa genera]]' break end elseiftaxonRankandtaxonRank=='Q34740'then--genus --is monotypic genus; add species --(https://www.wikidata.org/wiki/Wikidata:Property_proposal/child_monotypic_taxon unnecessary thanks to P427!) localchildTaxonState=currentItem:getBestStatements('P427')[1]--taxonomic type ifchildTaxonStatethenchildTaxon=childTaxonState.mainsnak.datavalue.value.idend --confirm child taxon rank == species & monotypic ifchildTaxonandresolveEntity._id(childTaxon)then childItem=mw.wikibase.getEntity(childTaxon) ifchildItemthen localchildTaxonRankState=childItem:getBestStatements('P105')[1]--taxon rank ifchildTaxonRankStatethenchildTaxonRank=childTaxonRankState.mainsnak.datavalue.value.idend ifchildTaxonRankandchildTaxonRank=='Q7432'then--child == species for_,childInstanceOfStateinpairs(childItem:getBestStatements('P31'))do--instance of localchildInstanceOf=childInstanceOfState.mainsnak.datavalue.value.id ifchildInstanceOfand (childInstanceOf=='Q310890'orchildInstanceOf=='Q47487597')then--monotypic/fossil taxon childMonoSpecies=childTaxon--confirmed break end end ifchildMonoSpeciesandtFroms[childMonoSpecies]==nilthen --housekeeping tFroms[childMonoSpecies]=1 iFroms=iFroms+1 fromTitleCount=fromTitleCount+1 --append monotypic species & track parentArgs['from'..fromTitleCount]=childMonoSpecies tCats[17]='[[Kategori:Taxonbar dengan genera monotipik ditambahkan secara otomatis]]' break endendendend ifchildMonoSpecies==nilortFroms[childMonoSpecies]==nilthen tCats[20]='[[Kategori:Taxonbar dari genera monotipe tanpa spesies]]' break end end--monotype searches end--monotype handling end--for end--if currentItem --Setup navbox localnavboxParams={ name='Taxonbar', bodyclass='hlist', listclass='', groupstyle='text-align: left;', } forf=1,fromTitleCount,1 do localelements,title={},nil --cleanup parameters ifparentArgs['from'..f]==''thenparentArgs['from'..f]=nilend ifparentArgs['title'..f]==''thenparentArgs['title'..f]=nilend --remap aliases for_,ainpairs(conf.aliases)do localalias,name=mw.ustring.lower(a[1]),mw.ustring.lower(a[2]) ifparentArgs[alias..f]andparentArgs[name..f]==nilthen parentArgs[name..f]=parentArgs[alias..f] parentArgs[alias..f]=nil end end --Fetch Wikidata item localfrom=resolveEntity._id(parentArgs['from'..f]) localitem=mw.wikibase.getEntity(from) locallabel=nil iftype(item)=='table'then localstatements=item:getBestStatements('P225')[1]--taxon name ifstatementsthen localdatavalue=statements.mainsnak.datavalue ifdatavaluethen label=datavalue.value end end label=labeloritem:getLabel() else ifparentArgs['from'..f]then tCats[1]='' tCats[5]='[[Kategori:Taxonbar dengan parameter from tidak sah]]' errors=errors..mw.text.tag('strong',{class='error'},'Error: "'.. parentArgs['from'..f]..'" bukan ID entitas Wikidata yang sah.<br />') end end iflabelandlabel~=''then title=mw.title.new(label) end iftitle==nilandparentArgs['title'..f]then title=mw.title.new(parentArgs['title'..f]) end iftitle==nilandf==1then title=currentTitle end iftitlethen ifisNilOrEmpty(parentArgs['wikidata'..f])and (title.namespace==0)then ifparentArgs['from'..f]then parentArgs['wikidata'..f]=parentArgs['from'..f] elseifitemthen parentArgs['wikidata'..f]=item.id end end iftitle.namespace==0orstringArgsthen--only in mainspace or if manual overrides exist localsourceCount=0 for_,paramsinpairs(conf.databases)do params[1]=mw.ustring.lower(params[1]) localpropId=params[3] --Wikidata fallback if requested if(itemanditem.claims)and (type(propId)=='string'or(type(propId)=='number'andpropId>0))then localwikidataId=getIdFromWikidata(item,'P'..propId) localv=parentArgs[params[1]..f] ifwikidataIdthen ifisNilOrEmpty(v)then parentArgs[params[1]..f]=wikidataId else ifvandv~='no'andv~=wikidataIdthen tCats[11]='[[Kategori:Taxonbar dengan ID takson manual berbeda dengan Wikidata]]' elseifvandv==wikidataIdthen tCats[10]='[[Kategori:Taxonbar dengan ID takson manual sama dengan Wikidata]]' end end end end if(itemanditem.claims)and ((type(propId)=='number'andpropId<0))then localwikidataId=getIdFromWikidata(item,'P'..-propId) --mw.addWarning ("propId=" .. tostring(propId) .. "; wikidata=" .. tostring(wikidataId)) localv=parentArgs[params[1]..f] ifv=='yes'then ifwikidataIdthen parentArgs[params[1]..f]=wikidataId else parentArgs[params[1]..f]=nil-- don't want to use 'yes' as id end end end localval=parentArgs[params[1]..f] ifvalandval~=''andmw.ustring.lower(val)~='no'then iftype(propId)=='number'then ifpropId<0thenpropId=-propIdend--allow link ifpropId>0then--link table.insert(elements,createRow(params[1],params[2]..':',val,getLink(propId,params[1],val).text,true)) ifparams[1]=='fossilworks'then-- fossilworks being use to link to PBDB if(elements[#elements]==elements[#elements-1])then-- check if identical PBDB entry already set --mw.addWarning("item has both Fossilworks and PBDB identifers:" .. val) elements[#elements]=nil end end else--propId == 0; no link table.insert(elements,createRow(params[1],params[2]..':',val,val,true)) end else table.insert(elements,createRow(params[1],params[2]..':',val,getLink(propId,params[1],val).text,true)) end ifparams[1]~='wikidata'andparams[1]~='wikispecies'then sourceCount=sourceCount+1 end end end--for ifsourceCount>=45thentCats[28]='[[Kategori:Taxonbar dengan 45+ ID takson]]' elseifsourceCount>=40thentCats[27]='[[Kategori:Taxonbar dengan 40–44 ID takson]]'--endashes elseifsourceCount>=35thentCats[26]='[[Kategori:Taxonbar dengan 35–39 ID takson]]' elseifsourceCount>=30thentCats[25]='[[Kategori:Taxonbar dengan 30–34 ID takson]]' elseifsourceCount>=25thentCats[24]='[[Kategori:Taxonbar dengan 25–29 ID takson]]' elseifsourceCount>=20thentCats[23]='[[Kategori:Taxonbar dengan 20–24 ID takson]]' end --Generate navbox title ifsourceCount>0then rowCount=rowCount+1 iffirstRow==0thenfirstRow=fend --set title from wikidata if it doesn't exist ifisNilOrEmpty(parentArgs['title'..f])then parentArgs['noTitle'..f]=true parentArgs['title'..f]=title.text end --if it exists now, set row heading to title ifnotisNilOrEmpty(parentArgs['title'..f])then navboxParams['group'..f]=TaxonItalics.italicizeTaxonName(parentArgs['title'..f],false) else navboxParams['group'..f]='' end navboxParams['list'..f]=table.concat(elements) elseifcurrentEntityIdand(currentEntityId==parentArgs['from'..f]orfromTitleCount==1)then tCats[21]='[[Kategori:Taxonbar tanpa ID takson utama Wikidata]]' else tCats[22]='[[Kategori:Taxonbar tanpa ID takson Wikidata sekunder]]' end --Categorize ifnotisNilOrEmpty(parentArgs['from'..f])then tCats[1]=''--blank "missing from" if 'from' exists ifparentArgs['from'..f]==currentEntityIdthen tCats[2]=''--blank "desynced" if 'from' matches current page end end iftCats[1]~=''then tCats[2]=''--cannot be "desynced" if no 'from' params end end--if title.namespace == 0 or stringArgs end--if title end--for f = 1, fromTitleCount, 1 ifrowCount>0then localNavbox=require('Module:Navbox') ifrowCount>1then --remove duplicates and don't bother moving page title to top localrowIDs={} forf=1,fromTitleCount,1 do ifnotisNilOrEmpty(parentArgs['title'..f])then ifrowIDs[parentArgs['wikidata'..f]]then--remove duplicate navboxParams['group'..f]=nil navboxParams['list'..f]=nil else rowIDs[parentArgs['wikidata'..f]]=true end end end ifparentArgs['title'..2]andparentArgs['title'..2]==currentTitle.textthen ifcurrentItemandparentArgs['from'..2]==currentItem['id']then tCats[8]='[[Kategori:Taxonbar dengan from2 yang cocok dengan judul artikel & QID]]' else tCats[7]='[[Kategori:Taxonbar dengan from2 yang cocok dengan judul artikel]]' end end --adjust navbox for number of rows navboxParams['title']='[[Bantuan:Pengidentifikasi takson|Pengidentifikasi takson]]' ifrowCount>=4then navboxParams['navbar']='plain' else navboxParams['state']='off' navboxParams['navbar']='off' end elseifparentArgs['noTitle'..firstRow]then--show title & taxon for 1-row taxonbars, per talk navboxParams['title']='[[Bantuan:Pengidentifikasi takson|Pengidentifikasi takson]]' navboxParams['state']='off' navboxParams['navbar']='off' else navboxParams['group'..firstRow]='[[Bantuan:Pengidentifikasi takson|Pengidentifikasi takson]]<br />'..navboxParams['group'..firstRow] end --return navbox outString=Navbox._navbox(navboxParams) end--if rowCount > 0 --Add categories ifstring.sub(currentTitle.subpageText,1,9)=='testcases'thenparentArgs['demo']=trueend ifnotisNilOrEmpty(parentArgs['demo'])then outString=outString..mw.text.nowiki(table.concat(tCats))..'<br />' elseifcurrentTitle.namespace==0then outString=outString..table.concat(tCats) end returnoutString..errors end functionp.taxonbar(frame)returnp.authorityControlTaxon(frame:newChild{title=frame:getTitle()})end returnp