モジュール:Authority control/documentation

    提供:Wikiminati

    このモジュールについての説明文ページを モジュール:Authority control/documentation/doc に作成できます

    require('strict')
    local p = {}
    local title = mw.title.getCurrentTitle()
    local namespace = title.namespace
    local testcases = (string.sub(title.subpageText,1,9) == 'testcases')
    local makelink = require('Module:Authority control').makelink
    
    local function needsAttention(sortkey)
    	return '[[Category:Pages with authority control identifiers needing attention|' .. sortkey .. title.text .. ']]'
    end
    
    local function addCat(cat,sortkey)
    	if cat and cat ~= '' and (namespace == 0 or namespace == 14 or testcases) then
    		local redlinkcat = ''
    		if testcases == false and mw.title.new(cat, 14).exists == false then
    			redlinkcat = needsAttention('N')
    		end
    		if sortkey then
    			cat = '[[Category:'..cat..'|' .. sortkey .. title.text .. ']]'
    		else
    			cat = '[[Category:'..cat..']]'
    		end
    		cat = cat .. redlinkcat
    		return cat
    	else
    		return ''
    	end
    end
    
    local loadConfig = function(arg)
    	local configfile = 'Module:Authority control/config' -- default configuation module
    	if arg and arg~='' then
    		configfile = 'Module:Authority control/config/' .. arg
    	end
    	if mw.title.new(configfile).exists then
    		return mw.loadData(configfile)
    	else
    		return false
    	end
    end
    -- Creates a human-readable standalone wikitable version of conf, and tracking categories with page counts, for use in the documentation
    function p.docConfTable(frame)
    	local config = loadConfig(frame.args.config)
    	if not config then return error('Invalid configuration file',0)	end
    	local getlink = require("Module:Wikidata table")._getLink
    	local function checkcat(category,label)
    		local ret='[[:Category:'..category..'|'..label..']]'
    		if mw.title.new(category,14).exists == false then
    			ret = ret..' <span class="plainlinks" style="font-size:85%;">&#91;['..tostring(mw.uri.fullUrl('Category:'..category,'action=edit&preload=Template:Authority_control/preload'))..' create]&#93;</span>'
    		end
    		return ret
    	end
    	local doc = ''
    	local a, P, f = 0, 0, 0 --cumulative sums
    	local count = frame.args.count or false
    	local columns = 3 + (count and 1 or 0)
    	local lang = mw.getContentLanguage()
    	local row = function(conf)
    		local category = conf.category or conf[1]
    		local articleCat = 'Articles with '..category..' identifiers'
    		local articleCount = mw.site.stats.pagesInCategory(articleCat,'pages')
    		local errorCat = conf.errorcat or 'Articles with faulty '..(conf.category or conf[1])..' identifiers'
    		local errorCount =  mw.site.stats.pagesInCategory(errorCat,'pages')
    		P = P + 1 --property count
    		a = a + articleCount
    		f = f + errorCount
    		local example = mw.wikibase.getBestStatements('P'..conf.property,'P1855') or ''
    		if example then
    			example = example[1].qualifiers['P'..conf.property][1].datavalue.value
    			example = mw.getCurrentFrame():expandTemplate{title = "Hlist", args = {'\n' .. makelink(conf,{id=example},1)}} .. '\n'
    		end
    		local name = mw.wikibase.getBestStatements('P'..conf.property,"P1629")
    		if name and name[1] and name[1].mainsnak.datavalue.value.id then
    			name = getlink(name[1].mainsnak.datavalue.value.id)
    		else
    			name = ''
    		end
    		local out = ''
    		if conf.remark then
    			out = out .. '<tr><td rowspan=2>'
    		else
    			out = out .. '<tr><td>'
    		end
    		out = out .. name .. '</td>' ..
    			'<td style="text-align: center">' .. config.sections[conf.section].name .. '</td>' ..
    			'<td data-sort-value=' .. conf.property .. '>' .. frame:expandTemplate{title='Wikidata property link',args={id='f',conf.property}} .. '</td>' ..
    			'<td>' .. example .. '</td>'
    		if count then
    			out = out .. '<td style="text-align: right;">'..checkcat(articleCat,lang:formatNum(articleCount))..' ('..checkcat(errorCat,errorCount)..')</td>'
    		end
    		out = out .. '</tr>'
    		if conf.remark then
    			out = out .. "<tr class='expand-child'><td colspan=" .. columns .. ">'''Remarks:''' " .. frame:preprocess{text = conf.remark} .. "</td></tr>"
    		end
    		return out
    	end
    	local doc = '<table class="wikitable sortable">' ..
    	  '<tr><th>Identifier</th>' ..
    	  '<th>Section</th>' ..
    	  '<th data-sort-type=number>Wikidata property</th>' ..
    	  '<th>Appears as</th>'
    	if count then
    	 	doc = doc .. '<th>[[:Category:Articles with authority control information|Articles]] ([[:Category:Articles with faulty authority control information|Faults]])</th>'
    	end
    	doc = doc .. '</tr>'
    	for _, conf in pairs(config.config) do
    		doc = doc .. row(conf)
    	end
    	if count then
    		doc = doc .. '<tr><th style="text-align: right;" colspan=' .. columns-1 .. '>Totals</th>' ..
    			'<th style="text-align: right;">' .. P .. '</th>' ..
    			'<th style="text-align: right;">' .. lang:formatNum(a) .. ' ([[:Category:All articles with faulty authority control information|' .. f .. ']])</th></tr>'
    	end
    	doc = doc .. '</table>'
    	return doc
    end
    
    function p.errorTable(frame)
    	local config = loadConfig(frame.args.config)
    	if not config then return error('Invalid configuration file',0)	end
    	local Table = '<table class="wikitable sortable">'..
    	  '<tr><th>Wikidata property</th>'..
    	  '<th>Faulty IDs</th>'..
    	  '<th>[[:Category:Articles with faulty authority control information|Tracking category]]</th></tr>'
    	local f, P = 0, 0, 0 --cumulative sums
    	for _, conf in pairs(config.config) do
    		local category = conf.errorcat or 'Articles with faulty '..(conf.category or conf[1])..' identifiers'
    		local count =  mw.site.stats.pagesInCategory(category,'pages')
    		if count > 0 then
    			P = P + 1
    			f = f + count
    			Table = Table..'<tr><td>'..frame:expandTemplate{ title = 'Wikidata property link', args = { id = 'f', conf.property } } .. '</td>'..
    				'<td style="text-align:center;">'..tostring(count)..'</td>'..
    				'<td>[[:Category:'..category..']]</td></tr>'
    		end
    	end
    	Table = Table..'<tr><th>Totals</th>'..
    		'<th style="text-align:center;">' .. '[[:Category:All articles with faulty authority control information|' .. tostring(f) .. ']]</th>'..
    		'<th style="text-align:center;">'..tostring(P)..'</th></tr></table>'
    	return Table
    end
    
    function p.whitelisttable(frame)
    	local config = loadConfig(frame.args.config)
    	if not config then return error('Invalid configuration file',0)	end
    	local Table = '<table class="wikitable sortable">'..
    	  '<tr><th>Code</th>'..
    	  '<th>Topic</th>'..
    	  '<th>Identifiers</th></tr>'
    	for code, wlist in pairs(config.whitelists) do
    		Table = Table .. '<tr><th>' .. code .. '</th>'..
    			'<td>[[' .. mw.wikibase.getSitelink('Q' .. wlist.topic) .. ']]</td>'
    		local plist = {}
    		for _, property in pairs(wlist.properties) do
    			table.insert(plist,frame:expandTemplate{title='Wikidata property link', args={'P' .. property}})
    		end
    		Table = Table .. '<td>' .. table.concat(plist,', ') .. '</td></tr>'
    	end
    	Table = Table .. '</table>'
    	return Table
    end
    
    function p.sectiontable(frame)
    	local config = loadConfig(frame.args.config)
    	if not config then return error('Invalid configuration file',0)	end
    	local Table = '<table class="wikitable sortable">'..
    	  '<tr><th>Section</th>'..
    	  '<th>Description</th>'..
    	  '<th>Identifiers</th></tr>'
    	for number,section in ipairs(config.sections) do
    		Table = Table .. '<tr><th>' .. number .. '</th>' ..	'<td>' .. section.name .. '</td>'
    		local plist = {}
    		for _,id in pairs(config.config) do
    			if id.section == number then
    				table.insert(plist,frame:expandTemplate{title='Wikidata property link', args={'P' .. id.property}})
    			end
    		end
    		Table = Table .. '<td>' .. table.concat(plist,', ') .. '</td></tr>'
    	end
    	Table = Table .. '</table>'
    	return Table
    end
    
    -- Main/External Call for Pages with authority control identifiers
    function p.autoDetect(frame)
    	local config = loadConfig(frame.args.config)
    	if not config then return error('Invalid configuration file',0)	end
    	local function whichTOC(frame) -- standardize TOC behavior via {{CatAutoTOC}}
    		return frame:expandTemplate{ title = 'CatAutoTOC', args = { align = 'center' } }
    	end
    	local ac_conf = require('Module:Authority control/config').config
    	local rmCats = require('Module:Suppress categories').main
    	--For use in [[Category:Articles with faulty authority control information]], i.e. on [[Category:Articles with faulty VIAF identifiers]]
    	local function wpfaulty( frame, id )
    		for _, conf in pairs(ac_conf) do
    			if conf.category == id or conf[1] == id then
    				local outString = frame:expandTemplate{ title = 'Cat more', args = {'Wikipedia:Authority control', conf.idlink or conf[1]..' (identifier)', ':d:Property:P'..conf.property} }
    					.. frame:expandTemplate{ title = 'Possibly empty category' }
    					.. frame:expandTemplate{ title = 'Wikipedia category', args = { hidden = 'yes', tracking = 'yes' } }
    					.. frame:expandTemplate{ title = 'Polluted category' }
    					.. whichTOC( frame )
    					.. '\nPages in this category should only be added by [[Module:Authority control]].'
    					.. addCat('Articles with '..id..' identifiers')
    					.. addCat('Articles with faulty authority control information',id)
    				return outString
    			end
    		end
    		return ''
    	end
    	--For use in [[Category:Articles with authority control information]], i.e. on [[Category:Articles with VIAF identifiers]]
    	local function wp(frame,id )
    		for _, conf in pairs( ac_conf ) do
    			if conf.category == id or conf[1] == id then
    				local link = '[[' .. (conf.idlink or conf[1] .. ' (identifier)') .. '|' .. conf[1] .. ']]'
    				local outString = frame:expandTemplate{ title = 'Category explanation', args = {'articles with '..link..' identifiers.'..' Please do not add [[Wikipedia:Categorization#Subcategorization|subcategories]].'} }
    					.. frame:expandTemplate{ title = 'Cat more', args = {'Wikipedia:Authority control', ':d:Property:P'..conf.property} }
    					.. frame:expandTemplate{ title = 'Possibly empty category' }
    					.. frame:expandTemplate{ title = 'Wikipedia category', args = { hidden = 'yes', tracking = 'yes' } }
    					.. whichTOC( frame )
    					.. '\nPages in this category should only be added by [[Module:Authority control]].'
    					.. addCat('Articles with authority control information',id)
    				return outString
    			end
    		end
    		return ''
    	end
    	if namespace == 14 then --cat space
    		local wpfaultyID = mw.ustring.match(title.text, 'Articles with faulty ([%w%.%- ]+) identifiers')
    		local wpID       = mw.ustring.match(title.text, 'Articles with ([%w%.%- ]+) identifiers')
    		if wpfaultyID then
    			return wpfaulty(frame,wpfaultyID)-- must be before wpID check, in case they both match
    		elseif wpID then
    			return wp(frame, wpID)-- to keep the regex simple
    		else
    			return needsAttention('U')
    		end
    	end
    	return ''
    end
    
    return p