VOOZH about

URL: https://en.wikipedia.org/wiki/Module:Authority_control/sandbox

⇱ Module:Authority control/sandbox - Wikipedia


Jump to content
From Wikipedia, the free encyclopedia
👁 Image
This is the module sandbox page for Module:Authority control (diff).
See also the companion subpage for test cases (run).
👁 Image
Module documentation
[view] [edit] [history] [purge]
👁 Warning
This Lua module is used on approximately 2,290,000 pages, or roughly 4% of all pages.
To avoid major disruption and server load, any changes should be tested in the module's 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.
👁 Image
This module is rated as ready for general use. It has reached a mature state, is considered relatively stable and bug-free, and may be used wherever appropriate. It can be mentioned on help pages and other Wikipedia resources as an option for new users. To minimise server load and avoid disruptive output, improvements should be developed through sandbox testing rather than repeated trial-and-error editing.
Wikipedia authority control
Project page
discussion
help
Template
subpages
sandbox
testcases
doc
Module
subpages
testcases
doc
Config
staging
sandbox
doc
Auxiliary
sandbox
Doc module
sandbox
Category
attention
👁 Image
This module depends on the following other modules:

This module contains the code for the {{Authority control}} template.

Please see Template:Authority control/doc.

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..' &ndash; '..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