Authority Control

This module contains the code of the } and } templates.

require('strict') local p = {} local title = mw.title.getCurrentTitle() local namespace = title.namespace local testcases = (string.sub(title.subpageText,1,9) == 'testcases')  local function addCat(cat) if cat and cat ~= '' then local redlinkcat = '' if testcases == false and mw.title.new(cat, 14).exists == false then redlinkcat = '[[Category:Pages with red-linked authority control categories]]' end return '[[Category:'..cat..']]'..redlinkcat else return '' end end  local function getCatForId(id) local cat = '' if namespace == 0 then cat = 'Articles with '..id..' identifiers' end return addCat(cat) end  local function getIdsFromWikidata(qid,property) local ids = {} if not mw.wikibase or not qid then return ids end local statements = mw.wikibase.getBestStatements(qid,property) if statements then for _, statement in ipairs( statements ) do if statement.mainsnak.datavalue then table.insert( ids, statement.mainsnak.datavalue.value ) end end end return ids end  local function makelink(conf,val,nextid) --validate values and create a link local link if conf.link2 then -- use function to validate and generate link link = conf.link2(val) else local valid_value if conf.pattern then -- use pattern to determine validity if defined valid_value = val:match(conf.pattern) elseif conf.patterns then for i = 1,#conf.patterns do valid_value = val:match(conf.patterns[i]) if valid_value then break end end elseif conf.valid then -- otherwise use function to determine validity valid_value = conf.valid(val) else -- no validation possible valid_value = val end if valid_value then local label = conf.label if not label or nextid>1 then label = tostring(nextid) end if conf.link then valid_value = valid_value:gsub('%%', '%%%%') link = '[' .. mw.ustring.gsub(conf.link,'%$1',valid_value) .. ' ' .. label .. ']' else link = valid_value end else link = false end end if link then link = ''..link..'' else local faultyCat = 'Articles with faulty '..(conf.errorcat or conf.category or conf[1])..' identifiers' link = '..conf[1]..' id '..val..' is not valid.'..addCat(faultyCat) end return link end  --[[==========================================================================]] --[[                                   Main                                   ]] --[[==========================================================================]] function p.authorityControl(frame) local config = require("Module:Authority control/config") local conf = config.config local sectionNames = config.sectionNames local resolveEntity = require( 'Module:ResolveEntityId' ) local parentArgs = frame:getParent().args --WD IDs added here later local iParentArgs = 0 --count original/manual parent args only later local iMatches,suppressedIdCount = 0,0 local auxCats = '' local rct = 0 -- total number of links returned local numqids = 4 -- support for 4 additional qids local totsect = #sectionNames + numqids local sections = {} for _ = 1,totsect do table.insert(sections,{}) end  -- check for suppressed identifiers local suppress = {} if parentArgs.suppress then local suppresslist = mw.text.split(parentArgs.suppress,"%s*,%s*") -- split parameter by comma for _,v in ipairs(suppresslist) do if v:match("^%d+$") then v = "P"..tostring(v) else v = string.upper(v) end suppress[v] = true -- index table by identifier name end end  local function makeSections(qid,additional) local tval = {} local function parameter_is_used(property) local used = false if property then if tval[property] then if tval[property][1] then used = true end elseif tval[property] == false then -- property has been manually suppressed used = true end end return used end for _, params in ipairs(conf) do tval[params.property] = getIdsFromWikidata(qid, 'P' .. params.property) -- setup table for values with property number as key if additional then if suppress["P"..tostring(params.property)] or suppress[string.upper(params[1])] then tval[params.property] = false -- indicates the identifier is suppressed end else local val = parentArgs[mw.ustring.lower(params[1])] or parentArgs[params[1]] if suppress["P"..tostring(params.property)] or suppress[string.upper(params[1])] or val == '' then if tval[params.property][1] and (namespace == 0 or testcases) then suppressedIdCount = suppressedIdCount + 1 if parentArgs['arts'] ~= 'arts' then auxCats = auxCats .. '[[Category:Articles with suppressed authority control identifiers|'..params[1]..']]' end end tval[params.property] = false -- indicates the identifier is suppressed elseif val then -- add local parameter to wikidata  iParentArgs = iParentArgs + 1 local bnew = true for _, w in pairs(tval[params.property]) do if val == w then bnew = false end end if bnew then -- add new value to table if tval[params.property][1] then auxCats = auxCats .. '[[Category:Pages using authority control with parameters different on Wikidata|'..params[1]..']]' end table.insert(tval[params.property],val) else iMatches = iMatches+1 end end end local suppress = false if params.suppressedbyproperty then for _,sc in ipairs(params.suppressedbyproperty) do if parameter_is_used(sc) then suppress = true end end end if not tval[params.property] == false and not suppress then local tlinks = {} -- setup table for links local nextIdVal = 1 for _,val in ipairs(tval[params.property]) do local link = makelink(params,val,nextIdVal) local cat = params.category or params[1] if link then -- add category unless link==false link = link .. getCatForId(cat) end table.insert(tlinks,link) nextIdVal = nextIdVal + 1 end if tval[params.property][1] then -- assemble local row = '' if params.prefix then row = row..'*'..params.prefix end for i, l in ipairs(tlinks) do if i==1 and not params.prefix then row = row..'*' else row = row..'\n**' end row = row .. l end row = row..'\n' local sec = additional or params.section -- uses section 9 for qid2, section 10 for qid3, etc. table.insert(sections[sec],row) rct = rct + 1 end end end end local function pencil(qid) if not qid then return '' end local args = { pid = 'identifiers' } -- #target the list of identifiers args.qid = qid return require('Module:EditAtWikidata')._showMessage(args) end  local function resolveQID(qid) if qid then qid = 'Q'..mw.ustring.gsub(qid, '^[Qq]', '') qid = resolveEntity._id(qid) --nil if unresolvable end return qid end local qids = {} if namespace == 0 then qids[1] = mw.wikibase.getEntityIdForCurrentPage() end if not qids[1] then qids[1] = resolveQID(parentArgs['qid']) --use qid parameter if no wikidata item is connected end makeSections(qids[1],false) for c = 2,5 do qids[c] = resolveQID(parentArgs['qid' .. c]) if qids[c] then makeSections(qids[c],totsect-numqids+c-1) end end if iMatches > 0 and iMatches == iParentArgs then auxCats = auxCats .. '[[Category:Pages using authority control with parameters all matching Wikidata]]' end if parentArgs['arts'] == 'arts' and suppressedIdCount > 0 then if namespace == 0 or testcases then local s = 's' if suppressedIdCount == 1 then s = '' end auxCats = auxCats .. addCat('ACArt with '..suppressedIdCount..' suppressed element'..s) end end  --configure Navbox local outString = '' if rct > 0 then -- there is at least one link to display local Navbox = require('Module:Navbox') local sect,lastsect = 0,0 local navboxArgs = { name  = 'Authority control', navboxclass = 'authority-control', bodyclass = 'hlist', state = parentArgs.state or 'autocollapse', navbar = 'off' } for c=1,totsect do if #sections[c] ~= 0 then -- section is non-empty sect = sect + 1 lastsect = c local sectname if c <= totsect - numqids then -- regular section sectname = sectionNames[c] else -- section from additional qid sectname = mw.wikibase.getLabel(qids[c-totsect+numqids+1]) .. pencil(qids[c-totsect+numqids +1]) end navboxArgs['group' .. c] = sectname navboxArgs['list' .. c] = table.concat(sections[c]) end end local aclink = '[[Help:प्राधिकरण नियन्त्रण|प्राधिकरण नियन्त्रण]]' if sect == 1 then -- special display when only one section if lastsect == 1 or lastsect == 8 then -- no special label when only general or other IDs are present navboxArgs['group' .. lastsect] = aclink .. pencil(qids[1]) elseif lastsect <= totsect - numqids  then -- other regular section navboxArgs['group' .. lastsect] = aclink .. ': ' .. sectionNames[lastsect] .. pencil(qids[1]) else -- section from additional qid navboxArgs['group' .. lastsect] = aclink .. ': ' .. navboxArgs['group' .. lastsect] end else -- add title to navbox navboxArgs.title = aclink .. pencil(qids[1]) end outString = Navbox._navbox(navboxArgs) end  --auxCats if rct == 0 or rct >= 25 then if namespace == 0 or testcases then auxCats = auxCats .. addCat('AC with '..rct..' elements') end end if parentArgs.state then if namespace == 0 or testcases then local sCat if parentArgs.state == 'collapsed' then sCat = 'AC using state parameter: collapsed' elseif parentArgs.state == 'expanded' then sCat = 'AC using state parameter: expanded' elseif parentArgs.state == 'autocollapse' then sCat = 'AC using state parameter: autocollapse' else sCat = 'AC using state parameter: other' end auxCats = auxCats .. addCat(sCat) end end if testcases then auxCats = mw.ustring.gsub(auxCats, '(%[%[)(Category)', '%1:%2') --for easier checking end  --out outString = outString..auxCats if namespace ~= 0 then outString = mw.ustring.gsub(outString, '(%[%[)(Category:Articles)', '%1:%2') --by definition end  return outString end  -- Creates a human-readable standalone wikitable table-responsive  version of conf, and tracking categories with page counts, for use in the documentation function p.docConfTable(frame) local wikiTable = ''..''..''..''..''..''..''..''..''..''locallang=mw.getContentLanguage()locala,f,P=0,0,0--cumulative sumslocalconfig=require("Module:Authority control/config")localconf=config.configlocalsectionNames=config.sectionNameslocalgetlink=require("Module:Wikidata table")._getLinklocalfunctioncheckcat(category,label)localret='[[:Category:'..category..'|'..label..']]'ifmw.title.new(category,14).exists==falsethenret=ret..' [['..tostring(mw.uri.fullUrl('Category:'..category,'action=edit&preload=Template:Authority_control/preload'))..' create]]'endreturnretendfor_,confinpairs(conf)dolocalcategory=conf.categoryorconf[1]localarticleCat='Articles with '..category..' identifiers'localwpl=frame:expandTemplate{title='Wikidata property link',args={id='f',conf.property}}localfaultyCat='Articles with faulty '..(conf.errorcatorcategory)..' identifiers'localarticleCount=lang:formatNum(mw.site.stats.pagesInCategory(articleCat,'pages'))localfaultyCount=lang:formatNum(mw.site.stats.pagesInCategory(faultyCat,'pages'))P=P+1--property counta=a+lang:parseFormattedNumber(articleCount)f=f+lang:parseFormattedNumber(faultyCount)localname=mw.wikibase.getBestStatements('P'..conf.property,"P9073")ifnamethenifname[1]thenname=name[1].mainsnak.datavalue.value.idifnamethenname=getlink(name)endelsename=falseendendwikiTable=wikiTable..''..''..''..''..''..''..''..''endwikiTable=wikiTable..''..''..''..'
Code Identifier Wikidata property Section Appears as Remarks Tracking categories and page counts
[[:Category:Articles with authority control information|Articles]] [[:Category:Articles with faulty authority control information|Faulty IDs]]
[['..(conf.idlink or conf[1]..' (identifier)')..'|'..conf[1]..']] '..(name or '')..' '..wpl..' '..sectionNames[conf.section]..' '..makelink(conf,conf.example,1)..' '..(conf.remark or '')..' '..checkcat(articleCat,articleCount)..' '..checkcat(faultyCat,faultyCount)..'
Totals '..lang:formatNum(P)..' '..lang:formatNum(a)..' '..lang:formatNum(f)..'
'
return require('Module:Suppress categories').main(wikiTable) end return p

Tags:

ढाँचा:Authority controlढाँचा:Pages with authority control identifiers

🔥 Trending searches on Wiki नेपाली:

ब्राह्मणनेपालका राजनीतिक दलहरूको सूचीसमाचारविश्वेश्वरप्रसाद कोइरालानेपालका विश्वविद्यालयहरूको सूचीडिजिटल साक्षरतापूर्वीय चिन्तन परम्पराविधिशास्त्रवीरेन्द्र वीरविक्रम शाहपेलेदुर्गानन्द झाराणा शासनपारिजात (साहित्यकार)नेपाल टेलिकमकर्जाजारी (चलचित्र)महालेखा नियन्त्रकको कार्यालयभूपि शेरचनवेब्याक मेसिननेपालका मल्ल राजाहरूको सूचीअनुसन्धानराजनीतिसुर्खेत जिल्लागायत्री मन्त्रकच्छ जिल्लानेपालको राष्ट्रपतिमधेश प्रदेशडाँफेस्वर्णिम वाग्लेसमाजखनिजप्रदेश सभा निर्वाचन, २०७९नेपालका हिमालहरूको सूचीगणतन्त्रनेपाली सेनामहोत्तरी जिल्लातामाङ जातिजीवनसती प्रथाक्षेत्रफलबोक्सीपोखरा महानगरपालिकाभूपरिवेष्ठित राष्ट्रकास्की जिल्लानेपाली शब्दकोशव्यवसायकाठमाडौँ ७ (निर्वाचन क्षेत्र)जुकापारिस्थितिक प्रणालीज्ञानेन्द्र वीरविक्रम शाहअङ्कभक्ति थापाकपिलवस्तु जिल्लाप्रवेशिका परीक्षाआइएसबिएनचितवन राष्ट्रिय निकुञ्जपाठ्यक्रमलुम्बिनीस्वर्गद्वारीसार्क शिखर सम्मेलनको सूचीअर्थशास्त्रस्तन सम्भोगनेपालको शिक्षा मन्त्रीहरूपशुपतिनाथ मन्दिरनेपालका सर्वोच्च आठ हिमालबसाइँ सराईराजनीतिक दलजोनी डेपदिगो विकासनर्मदा जिल्लामोबाइल फोनलुभु🡆 More