| Modul Lua ini digunakan pada sekitar 318.000 halaman, atau sekira 7% dari keseluruhan halaman. Untuk mencegah suntingan mengganggu skala besar dan beban peladen, setiap perubahan harus diuji di subhalaman /bak pasir atau /kasus uji Modul:Authority control, 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 menggunakan satu properti Wikidata atau lebih; lihat § Parameter untuk penjelasannya.
| Modul ini menggunakan Lua: |
| Halaman terkait |
|---|
Modul ini berisi kode untuk templat {{Authority control}}.
Lihat pulaLihat pula
- m:Interwiki map – definisi awalan interwiki kustom global
Dokumentasi di atas ditransklusikan dari Modul:Authority control/doc. (sunting | riwayat)
Penyunting dapat melakukan uji coba pada halaman bak pasir (sunting | beda) dan kasus uji (buat) modul ini.
Subhalaman modul ini.
Penyunting dapat melakukan uji coba pada halaman bak pasir (sunting | beda) dan kasus uji (buat) modul ini.
Subhalaman modul ini.
require('strict') localp={} localframe=mw.getCurrentFrame() localconfig_file=frame.args.configandframe.args.config~=''and('/'..frame.args.config)or'' localconfig=mw.loadData('Module:Authority control/config'..config_file) localtitle=mw.title.getCurrentTitle() localnamespace=title.namespace localtestcases=title.subpageText==config.i18n.testcases localgetArgs=require('Module:Arguments').getArgs localwikilink=function(target,label) returnlabeland'[['..target..'|'..label..']]'or'[['..target..']]' end localneedsAttention=function(sortkey) returnwikilink(config.i18n.category..':'..config.i18n.attentioncat,sortkey..title.text) end localaddCat=function(cat,sortkey) ifcatandcat~=''and(namespace==0ornamespace==14ortestcases)then returnwikilink(config.i18n.category..':'..cat,sortkeyandsortkey..title.text) else return'' end end localtooltip=function(text,label) iflabelandlabel~=''then returnframe:expandTemplate{ title='Tooltip', args={text,label} } else returntext end end local_makelink=function(id,val,additional,qid)--validate values and create a link locallink=mw.html.create('span'):addClass('uid') ifnotadditionalandid.prefixthen--show prefix on primary value link:wikitext(id.prefix..': ') end localvalid_value=false ifid.customlinkthen-- use function to validate and generate link localnewlink=require(config.auxiliary)[id.customlink](val.id,additional) ifnewlinkthen link:wikitext(newlink) valid_value=true end else ifid.patternthen-- check pattern to determine validity valid_value=string.match(val.id,'^'..id.pattern..'$') elseifid.patternsthen-- check multiple patterns to determine validity for_,patterninipairs(id.patterns)do valid_value=val.id:match('^'..pattern..'$') ifvalid_valuethenbreakend end elseifid.validthen-- use function to determine validity valid_value=require(config.auxiliary)[id.valid](val.id) else-- no validation possible valid_value=val.id end ifvalid_valuethen locallabel=id.label ifnotlabeloradditionalthen label=tostring(additional) end localnewlink ifid.linkthen valid_value=valid_value:gsub('%%','%%%%') localtarget=mw.ustring.gsub(id.link,'%$1',valid_value):gsub(' ','%%20') newlink='['..target..' '..label..']' else newlink=valid_value end link:wikitext(tooltip(newlink,val.name)) end end ifvalid_valuethen localcat=id.categoryandstring.format(config.i18n.cat,id.category) link:wikitext(addCat(cat)) else localwdlink=qidandwikilink(':wikidata:'..qid..'#P'..id.property)or'' localname=mw.wikibase.getLabel('P'..id.property)or'' localtooltip=string.format( config.i18n.idnotvalid, name, val.id ) localcat=id.categoryandstring.format( config.i18n.cat, config.i18n.faulty..' '..id.category ) link:wikitext(wikilink('File:'..config.i18n.warningicon..'|20px|frameless|link='..wdlink,tooltip..'.')) :wikitext(addCat(cat)) :wikitext(addCat(config.i18n.allfaultycat,name)) end returnlink end local_makelinks=function(id,qid) --[[==================================]] --[[ Make links ]] --[[==================================]] localgetquals=function(statement,qualid) ifstatement.qualifiersandstatement.qualifiers['P'..qualid]then returnmw.wikibase.renderSnak(statement.qualifiers['P'..qualid][1]) end end localids={} ifqidthen for_,statementinipairs(mw.wikibase.getBestStatements(qid,'P'..id.property))do ifstatement.mainsnak.datavaluethen localval=statement.mainsnak.datavalue.value ifvalthen localnamedas=getquals(statement,1810)orgetquals(statement,742)or'' table.insert(ids,{id=val,name=namedas}) endendendend locallinks ifids[1]then links=mw.html.create('li'):node(_makelink(id,ids[1],false,qid)) ifids[2]then localsublinks=mw.html.create('ul') forn=2,#idsdo sublinks:tag('li'):node(_makelink(id,ids[n],n,qid)):done() end links:node(sublinks) end end returnlinks end p.authorityControl=function(frame) --[[==================================]] --[[ Main ]] --[[==================================]] localargs=getArgs(frame,{parentOnly=true}) localresolveQID=function(qid) ifqidthen qid='Q'..mw.ustring.gsub(qid,'^[Qq]','') ifmw.wikibase.isValidEntityId(qid)andmw.wikibase.entityExists(qid)then localsitelink=mw.wikibase.getSitelink(qid) ifsitelinkthen returnmw.wikibase.getEntityIdForTitle(sitelink)ormw.wikibase.getEntity(qid).id end returnmw.wikibase.getEntity(qid).id endendend localconf=config.config localauxCats='' localrct=false-- boolean to track if there are any links to be returned localqid,topic ifnamespace==0andmw.wikibase~=nilthen qid=mw.wikibase.getEntityIdForCurrentPage() end ifqidthen-- article is connected to a Wikidata item ifargs.qidandresolveQID(args.qid)~=qidthen-- non-matching qid parameter auxCats=auxCats..needsAttention('D') end else-- page is not connected to any Wikidata item qid=resolveQID(args.qid)-- check qid parameter if no wikidata item is connected ifqidthen-- qid parameter is valid, set topic to display topic=mw.wikibase.getLabel(qid) iftopicthen ifmw.ustring.lower(title.subpageText)==mw.ustring.lower(topic)then-- suppress topic display if subpagename equals topic up to case change topic=nil end iftopicandmw.wikibase.getSitelink(qid)then-- make wikilink to article topic=wikilink(mw.wikibase.getSitelink(qid),topic) end else auxCats=auxCats..needsAttention('L') end elseifargs.qidthen-- invalid qid has been supplied, add to tracking cat auxCats=auxCats..needsAttention('Q') end end localqids={}-- setup any additional QIDs ifargs.additional=='auto'then ifqidthen-- check P527 for parts to add additional qids localcheckparts=function(property) localparts=mw.wikibase.getBestStatements(qid,property) ifpartsthen for_,partinipairs(parts)do ifpart.mainsnak.datavalueandpart.mainsnak.datavalue.value.idthen localresolvedqid=resolveQID(part.mainsnak.datavalue.value.id) ifresolvedqidthen table.insert(qids,resolvedqid) endendendendend for_,partinipairs(config.auto_additional)do checkparts('P'..part) end end elseifargs.additionalthen for_,vinipairs(mw.text.split(args.additional,'%s*,%s*'))do v=resolveQID(v) ifvthen ifv==qidthen-- duplicate of qid parameter auxCats=auxCats..needsAttention('R') end table.insert(qids,v) else-- invalid QID specified auxCats=auxCats..needsAttention('A') end end end localnumsections,sections=0,{} for_,_inipairs(config.sections)do-- count number of regular sections numsections=numsections+1 end for_=1,#qids+numsectionsdo table.insert(sections,{}) end -- check which identifiers to show/suppress in template localshow,show_all_unsuppressed={},true localstripP=function(pid)--strip P from property number ifpid:match('^[Pp]%d+$')then pid=mw.ustring.gsub(pid,'[Pp]','') end pid=tonumber(pid) ifpidandmw.wikibase.entityExists('P'..pid)then returnpid end end localaddshowlist=function(list) iflistthen for_,vinipairs(mw.text.split(string.lower(list),'%s*,%s*'))do ifconfig.whitelists[v]then-- e.g. show=arts to use whitelist for_,winipairs(config.whitelists[v].properties)do show[w]=true end else v=stripP(v) ifvthen-- e.g. show=P214 to show one particular property show[v]=true else-- unrecognised property or whitelist auxCats=auxCats..needsAttention('W') end end end show_all_unsuppressed=false end end addshowlist(frame.args.show)-- check show parameter on wrapper template addshowlist(args.show)-- check show parameter on article addshowlist(args.country)-- check country parameter on article ifargs.suppressthen localsuppresslist=mw.text.split(args.suppress,'%s*,%s*')-- split parameter by comma for_,vinipairs(suppresslist)do v=stripP(v) ifvthen show[v]=false auxCats=auxCats..wikilink(config.i18n.category..':'..config.i18n.suppressedcat) else auxCats=auxCats..needsAttention('P') end end end localmakeSections=function(qid,addit) for_,idinipairs(conf)do ifid.suppressedbypropertythen for_,propertyinipairs(id.suppressedbyproperty)do ifshow[property]=='used'then-- property is in use show[id.property]=false-- suppressed by another property endendend ifshow[id.property]==nilthen show[id.property]=show_all_unsuppressed end ifshow[id.property]then locallinks=_makelinks(id,qid) iflinksthen table.insert( sections[additorid.section], links ) show[id.property]='used' rct=true end end end end localpencil=function(qid) ifqidthen returnrequire('Module:EditAtWikidata')._showMessage{ pid='identifiers', qid=qid } else return'' end end makeSections(qid,false) forc=1,#qidsdo makeSections(qids[c],numsections+c) end --configure Navbox localoutString='' ifrctthen-- there is at least one link to display localNavbox=require('Module:Navbox') localsect,lastsect=0,0 localnavboxArgs={ name='Authority control', navboxclass='authority-control', bodyclass='hlist', state=args.stateorconfig.i18n.autocollapse, navbar='off' } forc=1,numsections+#qidsdo if#sections[c]>0then-- section is non-empty sect=sect+1 lastsect=c localsectname ifc<=numsectionsthen-- regular section sectname=config.sections[c].name else-- section from additional qid localqid=qids[c-numsections] locallabel,sitelink=mw.wikibase.getLabel(qid),mw.wikibase.getSitelink(qid) iflabelthen ifsitelinkthen localtarget=mw.title.new(sitelink) iftarget==titleor(target.isRedirectandtarget.redirectTarget==title)then-- do not link sectname=label else-- make wikilink to article sectname=wikilink(sitelink,label) end else sectname=label end else auxCats=auxCats..needsAttention('L') sectname=qid end sectname=sectname..pencil(qid) end navboxArgs['group'..c]=sectname locallist=mw.html.create('ul') for_,linkinipairs(sections[c])do list:node(link) end navboxArgs['list'..c]=tostring(list) end end iftopicthen-- display in expanded form with topic navboxArgs.title=config.i18n.aclink..' – '..topic..pencil(qid) elseifsect==1then-- special display when only one section iflastsect<=numsectionsthen ifconfig.sections[lastsect].hidelabelwhenalonethen-- no special label when only general or other IDs are present navboxArgs['group'..lastsect]=config.i18n.aclink..pencil(qid) else-- other regular section navboxArgs['group'..lastsect]=config.i18n.aclink..': '..navboxArgs['group'..lastsect]..pencil(qid) end else-- section from additional qid navboxArgs['group'..lastsect]=config.i18n.aclink..': '..navboxArgs['group'..lastsect] end else-- add title to navbox navboxArgs.title=config.i18n.aclink..pencil(qid) end outString=Navbox._navbox(navboxArgs) end ifargs.state andargs.state~=config.i18n.collapsed andargs.state~=config.i18n.expanded andargs.state~=config.i18n.autocollapsethen--invalid state parameter auxCats=auxCats..needsAttention('S') end iftestcasesthen auxCats=mw.ustring.gsub(auxCats,'(%[%[)('..config.i18n.category..')','%1:%2')--for easier checking end --out outString=outString..auxCats ifnamespace~=0then outString=mw.ustring.gsub(outString,'(%[%[)('..config.i18n.category..':'..config.i18n.Articles..')([^%|%]]+)%|?[^%|%]]*(%]%])','%1:%2%3%4') outString=mw.ustring.gsub(outString,'(%[%[)('..config.i18n.category..':'..config.i18n.All_articles..')([^%|%]]+)%|?[^%|%]]*(%]%])','%1:%2%3%4') end localcheck=require('Module:Check for unknown parameters')._check localsortkey outString=outString..check({ ['unknown']=wikilink(config.i18n.category..':'..config.i18n.attentioncat,'U'), ['preview']=config.i18n.previewwarning,'show','country','suppress','additional','qid','state' },args) returnoutString end p.makelink=function(id,qid) return_makelinks(id,qid) end returnp