<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB">
	<id>https://stockhub.co/index.php?action=history&amp;feed=atom&amp;title=Module%3AAuthority_control%2Fsandbox</id>
	<title>Module:Authority control/sandbox - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://stockhub.co/index.php?action=history&amp;feed=atom&amp;title=Module%3AAuthority_control%2Fsandbox"/>
	<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:Authority_control/sandbox&amp;action=history"/>
	<updated>2026-05-27T06:11:42Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.5</generator>
	<entry>
		<id>https://stockhub.co/index.php?title=Module:Authority_control/sandbox&amp;diff=135303&amp;oldid=prev</id>
		<title>imported&gt;MSGJ: reset</title>
		<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:Authority_control/sandbox&amp;diff=135303&amp;oldid=prev"/>
		<updated>2022-12-09T18:38:13Z</updated>

		<summary type="html">&lt;p&gt;reset&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;require(&amp;#039;strict&amp;#039;)&lt;br /&gt;
local p = {}&lt;br /&gt;
local title = mw.title.getCurrentTitle()&lt;br /&gt;
local namespace = title.namespace&lt;br /&gt;
local testcases = (string.sub(title.subpageText,1,9) == &amp;#039;testcases&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
local function addCat(cat)&lt;br /&gt;
	if cat and cat ~= &amp;#039;&amp;#039; then&lt;br /&gt;
		local redlinkcat = &amp;#039;&amp;#039;&lt;br /&gt;
		if testcases == false and mw.title.new(cat, 14).exists == false then&lt;br /&gt;
			redlinkcat = &amp;#039;[[Category:Pages with red-linked authority control categories]]&amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
		return &amp;#039;[[Category:&amp;#039;..cat..&amp;#039;]]&amp;#039;..redlinkcat&lt;br /&gt;
	else&lt;br /&gt;
		return &amp;#039;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getCatForId(id)&lt;br /&gt;
	local cat = &amp;#039;&amp;#039;&lt;br /&gt;
	if namespace == 0 then&lt;br /&gt;
		cat = &amp;#039;Articles with &amp;#039;..id..&amp;#039; identifiers&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	return addCat(cat)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getIdsFromWikidata(itemId,property)&lt;br /&gt;
	local ids = {}&lt;br /&gt;
	if not mw.wikibase then&lt;br /&gt;
		return ids&lt;br /&gt;
	end&lt;br /&gt;
	local statements = mw.wikibase.getBestStatements( itemId, property )&lt;br /&gt;
	if statements then&lt;br /&gt;
		for _, statement in ipairs( statements ) do&lt;br /&gt;
			if statement.mainsnak.datavalue then&lt;br /&gt;
				table.insert( ids, statement.mainsnak.datavalue.value )&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return ids&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makelink(conf,val,nextid) --validate values and create a link&lt;br /&gt;
	local link&lt;br /&gt;
	if conf.link2 then -- use function to validate and generate link&lt;br /&gt;
		link = conf.link2(val)&lt;br /&gt;
	else&lt;br /&gt;
		local valid_value&lt;br /&gt;
		if conf.pattern then -- use pattern to determine validity if defined&lt;br /&gt;
			valid_value = mw.ustring.match(val,conf.pattern)&lt;br /&gt;
		elseif conf.patterns then&lt;br /&gt;
			for i = 1,#conf.patterns do&lt;br /&gt;
				valid_value = mw.ustring.match(val,conf.patterns[i])&lt;br /&gt;
				if valid_value then break end&lt;br /&gt;
			end&lt;br /&gt;
		elseif conf.valid then -- otherwise use function to determine validity&lt;br /&gt;
			valid_value = conf.valid(val)&lt;br /&gt;
		else -- no validation possible&lt;br /&gt;
			valid_value = val&lt;br /&gt;
		end&lt;br /&gt;
		if valid_value then&lt;br /&gt;
			local label = conf.label&lt;br /&gt;
			if not label or nextid&amp;gt;1 then&lt;br /&gt;
				label = tostring(nextid)&lt;br /&gt;
			end&lt;br /&gt;
			if conf.link then&lt;br /&gt;
				link = &amp;#039;[&amp;#039; .. mw.ustring.gsub(conf.link,&amp;#039;%$1&amp;#039;,valid_value) .. &amp;#039; &amp;#039; .. label .. &amp;#039;]&amp;#039;&lt;br /&gt;
			else&lt;br /&gt;
				link = valid_value&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			link = false&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if link then&lt;br /&gt;
		link = &amp;#039;&amp;lt;span class=&amp;quot;uid&amp;quot;&amp;gt;&amp;#039;..link..&amp;#039;&amp;lt;/span&amp;gt;&amp;#039;&lt;br /&gt;
	else&lt;br /&gt;
		local faultyCat = &amp;#039;Articles with faulty &amp;#039;..(conf.errorcat or conf.cat or conf[1])..&amp;#039; identifiers&amp;#039;&lt;br /&gt;
		link = &amp;#039;&amp;lt;span class=&amp;quot;error&amp;quot;&amp;gt;The &amp;#039;..conf[1]..&amp;#039; id &amp;#039;..val..&amp;#039; is not valid.&amp;lt;/span&amp;gt;&amp;#039;..addCat(faultyCat)&lt;br /&gt;
	end&lt;br /&gt;
	return link&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[==========================================================================]]&lt;br /&gt;
--[[                                   Main                                   ]]&lt;br /&gt;
--[[==========================================================================]]&lt;br /&gt;
&lt;br /&gt;
function p.authorityControl( frame )&lt;br /&gt;
	local config = require(&amp;quot;Module:Authority control/config&amp;quot;)&lt;br /&gt;
	local conf = config.config&lt;br /&gt;
	local aliases = config.aliases&lt;br /&gt;
	local deprecated = config.deprecated&lt;br /&gt;
	local resolveEntity = require( &amp;#039;Module:ResolveEntityId&amp;#039; )&lt;br /&gt;
	local parentArgs = frame:getParent().args --WD IDs added here later&lt;br /&gt;
	local iParentArgs = 0 --count original/manual parent args only later&lt;br /&gt;
	local worldcatCat = &amp;#039;&amp;#039;&lt;br /&gt;
	local elementsCat = &amp;#039;&amp;#039;&lt;br /&gt;
	local multipleIdCat = &amp;#039;&amp;#039;&lt;br /&gt;
	local suppressedIdCat = &amp;#039;&amp;#039;&lt;br /&gt;
	local suppressedIdCatArts = &amp;#039;&amp;#039;&lt;br /&gt;
	local deprecatedIdCat = &amp;#039;&amp;#039;&lt;br /&gt;
	local differentOnWDCat = &amp;#039;&amp;#039;&lt;br /&gt;
	local sameOnWDCat = &amp;#039;&amp;#039;&lt;br /&gt;
	local stateCat = &amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
	--redirect aliases to proper parameter names&lt;br /&gt;
	for _, a in pairs(aliases) do&lt;br /&gt;
		local alias, param = a[1], a[2]&lt;br /&gt;
		if (parentArgs[param] == nil or parentArgs[param] == &amp;#039;&amp;#039;) and parentArgs[alias] then&lt;br /&gt;
			parentArgs[param] = parentArgs[alias]&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	--redirect deprecated parameters to proper parameter names, and assign tracking cat&lt;br /&gt;
	for _, d in pairs( deprecated ) do&lt;br /&gt;
		local dep, param = d[1], d[2]&lt;br /&gt;
		if (parentArgs[param] == nil or parentArgs[param] == &amp;#039;&amp;#039;) and parentArgs[dep] then&lt;br /&gt;
			parentArgs[param] = parentArgs[dep]&lt;br /&gt;
			if namespace == 0 then&lt;br /&gt;
				deprecatedIdCat = &amp;#039;[[Category:Articles with deprecated authority control identifiers|&amp;#039;..dep..&amp;#039;]]&amp;#039;&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	--use QID= parameter for testing/example purposes only&lt;br /&gt;
	local itemId = nil&lt;br /&gt;
	if namespace ~= 0 then&lt;br /&gt;
		local qid = parentArgs[&amp;#039;qid&amp;#039;] or parentArgs[&amp;#039;QID&amp;#039;]&lt;br /&gt;
		if qid then&lt;br /&gt;
			itemId = &amp;#039;Q&amp;#039;..mw.ustring.gsub(qid, &amp;#039;^[Qq]&amp;#039;, &amp;#039;&amp;#039;)&lt;br /&gt;
			itemId = resolveEntity._id(itemId) --nil if unresolvable&lt;br /&gt;
		end&lt;br /&gt;
	elseif mw.wikibase then&lt;br /&gt;
		itemId = mw.wikibase.getEntityIdForCurrentPage()&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	--configure rows&lt;br /&gt;
	local rct = 0&lt;br /&gt;
	local sectionOrder = config.sectionOrder&lt;br /&gt;
	local sections = {{},{},{},{},{},{},{},{}}&lt;br /&gt;
	if itemId then&lt;br /&gt;
		local suppressedIdCount = 0&lt;br /&gt;
		local iMatches = 0&lt;br /&gt;
		for _, params in ipairs(conf) do&lt;br /&gt;
			local val = parentArgs[mw.ustring.lower(params[1])] or parentArgs[params[1]]&lt;br /&gt;
			local wikidataIds = getIdsFromWikidata(itemId,&amp;#039;P&amp;#039;..params.property)&lt;br /&gt;
			if val == nil or val == &amp;#039;&amp;#039; then&lt;br /&gt;
				if wikidataIds[1] then&lt;br /&gt;
					if val == &amp;#039;&amp;#039; and (namespace == 0 or testcases) then&lt;br /&gt;
						suppressedIdCount = suppressedIdCount + 1&lt;br /&gt;
						suppressedIdCat = &amp;#039;[[Category:Articles with suppressed authority control identifiers|&amp;#039;..params[1]..&amp;#039;]]&amp;#039;&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			else&lt;br /&gt;
				iParentArgs = iParentArgs + 1&lt;br /&gt;
				if wikidataIds[1] and differentOnWDCat == &amp;#039;&amp;#039; then&lt;br /&gt;
					local bMatch = false&lt;br /&gt;
					for _, wd in pairs( wikidataIds ) do&lt;br /&gt;
						if val == wd then&lt;br /&gt;
							iMatches = iMatches + 1&lt;br /&gt;
							bMatch = true&lt;br /&gt;
						end&lt;br /&gt;
					end&lt;br /&gt;
					if bMatch == false then&lt;br /&gt;
						differentOnWDCat = &amp;#039;[[Category:Pages using authority control with parameters different on Wikidata|&amp;#039;..params[1]..&amp;#039;]]&amp;#039;&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		if iMatches &amp;gt; 0 and iMatches == iParentArgs then&lt;br /&gt;
			sameOnWDCat = &amp;#039;[[Category:Pages using authority control with parameters all matching Wikidata]]&amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
		if parentArgs[&amp;#039;arts&amp;#039;] == &amp;#039;arts&amp;#039; and suppressedIdCount &amp;gt; 0 then&lt;br /&gt;
			if namespace == 0 or testcases then&lt;br /&gt;
				local s = &amp;#039;s&amp;#039;&lt;br /&gt;
				if suppressedIdCount == 1 then s = &amp;#039;&amp;#039; end&lt;br /&gt;
				local sCat = &amp;#039;ACArt with &amp;#039;..suppressedIdCount..&amp;#039; suppressed element&amp;#039;..s&lt;br /&gt;
				suppressedIdCatArts = addCat(sCat)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	local tval = {}&lt;br /&gt;
	local function parameter_is_used(property)&lt;br /&gt;
		local used = false&lt;br /&gt;
		if property then&lt;br /&gt;
			if tval[property] then&lt;br /&gt;
				if tval[property][1] then&lt;br /&gt;
					used = true&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		return used&lt;br /&gt;
	end&lt;br /&gt;
	for _, params in ipairs(conf) do&lt;br /&gt;
		local wikidataIds = {}&lt;br /&gt;
		if itemId then&lt;br /&gt;
			wikidataIds = getIdsFromWikidata(itemId, &amp;#039;P&amp;#039; .. params.property)&lt;br /&gt;
		end&lt;br /&gt;
		local val = parentArgs[mw.ustring.lower(params[1])] or parentArgs[params[1]]&lt;br /&gt;
		local suppress = false&lt;br /&gt;
		if val then&lt;br /&gt;
			if val == &amp;#039;&amp;#039; then&lt;br /&gt;
				suppress = true&lt;br /&gt;
			else -- add local parameter to wikidata IDs&lt;br /&gt;
				table.insert( wikidataIds, val)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		if params.suppressedbyproperty then&lt;br /&gt;
			for _,sc in ipairs(params.suppressedbyproperty) do&lt;br /&gt;
				if parameter_is_used(sc) then&lt;br /&gt;
					suppress = true&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		if not suppress then&lt;br /&gt;
			tval[params.property] = {} -- setup table for values with property number as key&lt;br /&gt;
			local tlinks = {} -- setup table for links&lt;br /&gt;
			local nextIdVal = 1&lt;br /&gt;
			for _, val in pairs(wikidataIds) do&lt;br /&gt;
				local bnew = true&lt;br /&gt;
				for _, w in pairs( tval[params.property] ) do&lt;br /&gt;
					if val == w then&lt;br /&gt;
						bnew = false&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
				if bnew then -- add new value to table&lt;br /&gt;
					table.insert(tval[params.property],val)&lt;br /&gt;
					local link = makelink(params,val,nextIdVal)&lt;br /&gt;
					local cat = params.cat or params[1]&lt;br /&gt;
					if link then -- add category unless link==false&lt;br /&gt;
						link = link .. getCatForId(cat)&lt;br /&gt;
					end&lt;br /&gt;
					table.insert(tlinks,link)&lt;br /&gt;
					nextIdVal = nextIdVal + 1&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			if tval[params.property][1] then	-- assemble&lt;br /&gt;
				local row = &amp;#039;&amp;#039;&lt;br /&gt;
				if params.prefix then&lt;br /&gt;
					row = row..&amp;#039;*&amp;#039;..params.prefix&lt;br /&gt;
				end&lt;br /&gt;
				for i, l in ipairs(tlinks) do&lt;br /&gt;
					if i==1 and not params.prefix then&lt;br /&gt;
						row = row..&amp;#039;*&amp;#039;&lt;br /&gt;
					else&lt;br /&gt;
						row = row..&amp;#039;\n**&amp;#039;&lt;br /&gt;
					end&lt;br /&gt;
					row = row .. l&lt;br /&gt;
				end&lt;br /&gt;
				row = row..&amp;#039;\n&amp;#039;&lt;br /&gt;
				table.insert(sections[params.section],row)&lt;br /&gt;
				rct = rct + 1&lt;br /&gt;
				if tval[params.property][2] then&lt;br /&gt;
					multipleIdCat = getCatForId( &amp;#039;multiple&amp;#039; )&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	--configure Navbox&lt;br /&gt;
	local outString = &amp;#039;&amp;#039;&lt;br /&gt;
	local extrap = true&lt;br /&gt;
	local extra = parentArgs.extralist&lt;br /&gt;
	if extra == nil or extra == &amp;#039;&amp;#039; then&lt;br /&gt;
		extrap = false&lt;br /&gt;
	end&lt;br /&gt;
	if rct &amp;gt; 0 or extrap then&lt;br /&gt;
		local Navbox = require(&amp;#039;Module:Navbox&amp;#039;)&lt;br /&gt;
		local sectionID = 1&lt;br /&gt;
		local args = { pid = &amp;#039;identifiers&amp;#039; } -- #target the list of identifiers&lt;br /&gt;
		if testcases and itemId then args.qid = itemId end --expensive&lt;br /&gt;
		local pencil = require(&amp;#039;Module:EditAtWikidata&amp;#039;)._showMessage(args)&lt;br /&gt;
		local navboxArgs = {&lt;br /&gt;
			name  = &amp;#039;Authority control&amp;#039;,&lt;br /&gt;
			navboxclass = &amp;#039;authority-control&amp;#039;,&lt;br /&gt;
			bodyclass = &amp;#039;hlist&amp;#039;,&lt;br /&gt;
			state = parentArgs.state or &amp;#039;autocollapse&amp;#039;,&lt;br /&gt;
			navbar = &amp;#039;off&amp;#039;&lt;br /&gt;
		}&lt;br /&gt;
		for c, sectName in ipairs(sectionOrder) do&lt;br /&gt;
			if #sections[c] ~= 0 then&lt;br /&gt;
				navboxArgs[&amp;#039;group&amp;#039;..sectionID] = sectName&lt;br /&gt;
				navboxArgs[&amp;#039;list&amp;#039;..sectionID] = table.concat(sections[c])&lt;br /&gt;
				sectionID = sectionID + 1&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		if extrap then&lt;br /&gt;
			if parentArgs.extragroup then&lt;br /&gt;
				navboxArgs[&amp;#039;group&amp;#039;..sectionID] = parentArgs.extragroup&lt;br /&gt;
			else&lt;br /&gt;
				navboxArgs[&amp;#039;group&amp;#039;..sectionID] = &amp;#039;Additional&amp;#039;&lt;br /&gt;
			end&lt;br /&gt;
			navboxArgs[&amp;#039;list&amp;#039;..sectionID] = extra&lt;br /&gt;
			sectionID = sectionID + 1&lt;br /&gt;
		end&lt;br /&gt;
		if navboxArgs.list2 then&lt;br /&gt;
			navboxArgs.title = &amp;#039;[[Help:Authority control|Authority control]]&amp;#039;..pencil&lt;br /&gt;
		else&lt;br /&gt;
			local sect = navboxArgs.group1&lt;br /&gt;
			if sect == &amp;#039;General&amp;#039; or sect == &amp;#039;Other&amp;#039; or sect == &amp;#039;Additional&amp;#039; then&lt;br /&gt;
				-- Just say &amp;quot;Authority control&amp;quot; with no label if only general or only other IDs are present&lt;br /&gt;
				-- since &amp;quot;general&amp;quot; is redundant and &amp;quot;other&amp;quot; is silly when there&amp;#039;s nothing to contrast it with&lt;br /&gt;
				navboxArgs.group1 = &amp;#039;[[Help:Authority control|Authority control]]&amp;#039;..pencil&lt;br /&gt;
			else&lt;br /&gt;
				navboxArgs.group1 = &amp;#039;[[Help:Authority control|Authority control: &amp;#039;..sect..&amp;#039;]] &amp;#039;..pencil&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		outString = Navbox._navbox(navboxArgs)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	--auxCats&lt;br /&gt;
	if rct == 0 or rct &amp;gt;= 25 then&lt;br /&gt;
		if namespace == 0 or testcases then&lt;br /&gt;
			local eCat = &amp;#039;AC with &amp;#039;..rct..&amp;#039; elements&amp;#039;&lt;br /&gt;
			elementsCat = addCat(eCat)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if parentArgs.state then&lt;br /&gt;
		if namespace == 0 or testcases then&lt;br /&gt;
			local sCat&lt;br /&gt;
			if parentArgs.state == &amp;#039;collapsed&amp;#039; then sCat = &amp;#039;AC using state parameter: collapsed&amp;#039;&lt;br /&gt;
			elseif parentArgs.state == &amp;#039;expanded&amp;#039; then sCat = &amp;#039;AC using state parameter: expanded&amp;#039;&lt;br /&gt;
			elseif parentArgs.state == &amp;#039;autocollapse&amp;#039; then sCat = &amp;#039;AC using state parameter: autocollapse&amp;#039;&lt;br /&gt;
			else sCat = &amp;#039;AC using state parameter: other&amp;#039;&lt;br /&gt;
			end&lt;br /&gt;
			stateCat = addCat(sCat)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	local auxCats = worldcatCat..elementsCat..multipleIdCat..suppressedIdCat..suppressedIdCatArts..&lt;br /&gt;
					deprecatedIdCat..differentOnWDCat..sameOnWDCat..stateCat&lt;br /&gt;
	if testcases then&lt;br /&gt;
		auxCats = mw.ustring.gsub(auxCats, &amp;#039;(%[%[)(Category)&amp;#039;, &amp;#039;%1:%2&amp;#039;) --for easier checking&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	--out&lt;br /&gt;
	outString = outString..auxCats&lt;br /&gt;
	if namespace ~= 0 then&lt;br /&gt;
		outString = mw.ustring.gsub(outString, &amp;#039;(%[%[)(Category:Articles)&amp;#039;, &amp;#039;%1:%2&amp;#039;) --by definition&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return outString&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Creates a human-readable standalone wikitable version of conf, and tracking categories with page counts, for use in the documentation&lt;br /&gt;
function p.docConfTable(frame)&lt;br /&gt;
	local wikiTable = &amp;#039;&amp;lt;table class=&amp;quot;wikitable sortable&amp;quot;&amp;gt;&amp;#039;..&lt;br /&gt;
	  &amp;#039;&amp;lt;tr&amp;gt;&amp;lt;th rowspan=2&amp;gt;Parameter&amp;lt;/th&amp;gt;&amp;#039;..&lt;br /&gt;
	  &amp;#039;&amp;lt;th rowspan=2&amp;gt;Section&amp;lt;/th&amp;gt;&amp;#039;..&lt;br /&gt;
	  &amp;#039;&amp;lt;th rowspan=2&amp;gt;Appears as&amp;lt;/th&amp;gt;&amp;#039;..&lt;br /&gt;
	  &amp;#039;&amp;lt;th rowspan=2 data-sort-type=number&amp;gt;Wikidata property&amp;lt;/th&amp;gt;&amp;#039;..&lt;br /&gt;
	  &amp;#039;&amp;lt;th colspan=2&amp;gt;Tracking categories and page counts&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&amp;#039;..&lt;br /&gt;
	  &amp;#039;&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;[[:Category:Articles with authority control information|Articles]]&amp;lt;/th&amp;gt;&amp;#039;..&lt;br /&gt;
	  &amp;#039;&amp;lt;th&amp;gt;[[:Category:Articles with faulty authority control information|Faulty IDs]]&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&amp;#039;&lt;br /&gt;
	local lang = mw.getContentLanguage()&lt;br /&gt;
	local a, f, P = 0, 0, 0 --cumulative sums&lt;br /&gt;
	local config = require(&amp;quot;Module:Authority control/config&amp;quot;)&lt;br /&gt;
	local conf = config.config&lt;br /&gt;
	local sectionOrder = config.sectionOrder&lt;br /&gt;
	local function checkcat(category,label)&lt;br /&gt;
		local ret=&amp;#039;[[:Category:&amp;#039;..category..&amp;#039;|&amp;#039;..label..&amp;#039;]]&amp;#039;&lt;br /&gt;
		if mw.title.new(category, 14).exists == false then&lt;br /&gt;
			ret = ret..&amp;#039; &amp;lt;span class=&amp;quot;plainlinks&amp;quot; style=&amp;quot;font-size:85%;&amp;quot;&amp;gt;&amp;amp;#91;[&amp;#039;..tostring(mw.uri.fullUrl(&amp;#039;Category:&amp;#039;..category,&amp;#039;action=edit&amp;amp;preload=Template:Authority_control/preload&amp;#039;))..&amp;#039; create]&amp;amp;#93;&amp;lt;/span&amp;gt;&amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
		return ret&lt;br /&gt;
	end&lt;br /&gt;
	for _, conf in pairs(conf) do&lt;br /&gt;
		local param, pid, section = conf[1], conf.property, sectionOrder[conf.section]&lt;br /&gt;
		local appearsAs = makelink(conf,conf.example,1)&lt;br /&gt;
		local link = conf.idlink or param..&amp;#039; (identifier)&amp;#039;&lt;br /&gt;
		local category = conf.cat or param&lt;br /&gt;
		local args = { id = &amp;#039;f&amp;#039;, pid }&lt;br /&gt;
		local wpl = frame:expandTemplate{ title = &amp;#039;Wikidata property link&amp;#039;, args = args }&lt;br /&gt;
		local articleCat = &amp;#039;Articles with &amp;#039;..category..&amp;#039; identifiers&amp;#039;&lt;br /&gt;
		local faultyCat =  &amp;#039;Articles with faulty &amp;#039;.. (conf.errorcat or category) ..&amp;#039; identifiers&amp;#039;&lt;br /&gt;
		local articleCount = lang:formatNum( mw.site.stats.pagesInCategory(articleCat, &amp;#039;pages&amp;#039;) )&lt;br /&gt;
		local faultyCount =  lang:formatNum( mw.site.stats.pagesInCategory(faultyCat, &amp;#039;pages&amp;#039;) )&lt;br /&gt;
		P = P + 1 --property count&lt;br /&gt;
		a = a + lang:parseFormattedNumber(articleCount)&lt;br /&gt;
		f = f + lang:parseFormattedNumber(faultyCount)&lt;br /&gt;
		wikiTable = wikiTable..&amp;#039;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;[[&amp;#039;..link..&amp;#039;|&amp;#039;..param..&amp;#039;]]&amp;lt;/td&amp;gt;&amp;#039;..&lt;br /&gt;
			&amp;#039;&amp;lt;td&amp;gt;&amp;#039;..section..&amp;#039;&amp;lt;/td&amp;gt;&amp;#039;..&lt;br /&gt;
			&amp;#039;&amp;lt;td&amp;gt;&amp;#039;..appearsAs..&amp;#039;&amp;lt;/td&amp;gt;&amp;#039;..&lt;br /&gt;
			&amp;#039;&amp;lt;td data-sort-value=&amp;#039;..pid..&amp;#039;&amp;gt;&amp;#039;..wpl..&amp;#039;&amp;lt;/td&amp;gt;&amp;#039;..&lt;br /&gt;
			&amp;#039;&amp;lt;td style=&amp;quot;text-align: right;&amp;quot;&amp;gt;&amp;#039;..checkcat(articleCat,articleCount)..&amp;#039;&amp;lt;/td&amp;gt;&amp;#039;..&lt;br /&gt;
			&amp;#039;&amp;lt;td style=&amp;quot;text-align: right;&amp;quot;&amp;gt;&amp;#039;..checkcat(faultyCat,faultyCount)..&amp;#039;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	wikiTable = wikiTable..&amp;#039;&amp;lt;tr&amp;gt;&amp;lt;th style=&amp;quot;text-align: right;&amp;quot; colspan=3&amp;gt;Totals&amp;lt;/th&amp;gt;&amp;#039;..&lt;br /&gt;
		&amp;#039;&amp;lt;th style=&amp;quot;text-align: right;&amp;quot;&amp;gt;&amp;#039;..lang:formatNum(P)..&amp;#039;&amp;lt;/th&amp;gt;&amp;#039;..&lt;br /&gt;
		&amp;#039;&amp;lt;th style=&amp;quot;text-align: right;&amp;quot;&amp;gt;&amp;#039;..lang:formatNum(a)..&amp;#039;&amp;lt;/th&amp;gt;&amp;#039;..&lt;br /&gt;
		&amp;#039;&amp;lt;th style=&amp;quot;text-align: right;&amp;quot;&amp;gt;&amp;#039;..lang:formatNum(f)..&amp;#039;&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&amp;#039;&lt;br /&gt;
	return require(&amp;#039;Module:Suppress categories&amp;#039;).main(wikiTable)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>imported&gt;MSGJ</name></author>
	</entry>
</feed>