Module:Authority control/documentation: Difference between revisions
reapply edit, forgot to sync the sandbox... |
m 1 revision imported |
(No difference)
|
Latest revision as of 23:33, 31 August 2024
Documentation for this module may be created at Module:Authority control/documentation/doc
require('strict')
local p = {}
local frame = mw.getCurrentFrame()
local config_file = frame.args.config and frame.args.config~='' and ('/' .. frame.args.config) or ''
local config = mw.loadData('Module:Authority control/config' .. config_file)
local title = mw.title.getCurrentTitle()
local namespace = title.namespace
local testcases = title.subpageText == config.i18n.testcases
local makelink = require(config.i18n.ACmodule).makelink
local lang = mw.getContentLanguage()
local function needsAttention(sortkey)
return '[[' .. config.i18n.category .. ':' .. config.i18n.attentioncat .. '|' .. sortkey .. title.text .. ']]'
end
local function addCat(cat, sortkey)
if cat and cat ~= '' and (namespace == 0 or namespace == 14 or testcases) then
local category, redlinkcat = '', ''
if testcases == false and mw.title.new(cat, 14).exists == false then
redlinkcat = needsAttention('N')
end
category = '[[' .. config.i18n.category .. ':' .. cat
if sortkey then
category = category .. '|' .. sortkey .. title.text
end
category = category .. ']]' .. redlinkcat
return category
else
return ''
end
end
local getstatement = function(id, propid, qualid)
local statement = mw.wikibase.getBestStatements('P' .. id, 'P' .. propid)
local value
if statement and statement[1] and statement[1].mainsnak.datavalue.value.id then
value = statement[1].mainsnak.datavalue.value.id
local qual
if qualid and statement[1].qualifiers['P' .. qualid][1].datavalue.value then
qual = statement[1].qualifiers['P' .. qualid][1].datavalue.value
end
return value, qual
end
end
local getname = function(property)
local name
for _, propnameqid in ipairs(config.property_items) do
name = getstatement(property, propnameqid)
if name then break end
end
if name then
return frame:expandTemplate{
title = 'Wikidata fallback link',
args = {name}
}
else
return ''
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()
local doc = ''
local row = function(conf)
local example_qid = getstatement(conf.property, 1855)
local example = example_qid and frame:expandTemplate{
title = 'Hlist',
args = {tostring(
mw.html.create('ul')
:node(makelink(conf, example_qid))
)}
} or ''
local out
if conf.remark then
out = '<tr><th rowspan=2 data-sort-value=' .. conf.property .. '>'
else
out = '<tr><th data-sort-value=' .. conf.property .. '>'
end
out = out .. frame:expandTemplate{
title = 'Wikidata property link',
args = {conf.property}
} .. '</th>'
.. '<td>' .. getname(conf.property) .. '</td>'
.. '<td style="text-align: center">' .. config.sections[conf.section].name .. '</td>'
.. '<td>' .. example .. '</td></tr>'
if conf.remark then
out = out .. '<tr class="expand-child"><td colspan="3">'
.. "'''Remarks:''' " .. frame:preprocess{text = conf.remark}
.. "</td></tr>"
end
return out
end
local doc = '<table class="wikitable sortable">' ..
'<tr><th data-sort-type=number>' .. config.i18n.WDproperty .. '</th>'
.. '<th>' .. lang:ucfirst(config.i18n.identifier) .. '</th>'
.. '<th>' .. config.i18n.Section .. '</th>'
.. '<th>' .. config.i18n.Appears_as .. '</th></tr>'
for _, conf in pairs(config.config) do
doc = doc .. row(conf)
end
doc = doc .. '</table>'
return doc
end
function p.whitelisttable()
local Table = '<table class="wikitable sortable">'..
'<tr><th>' .. config.i18n.Code .. '</th>'..
'<th>' .. config.i18n.Topic .. '</th>'..
'<th>' .. lang:ucfirst(config.i18n.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()
local Table = '<table class="wikitable sortable">'..
'<tr><th>' .. config.i18n.Section .. '</th>' ..
'<th>' .. config.i18n.Description .. '</th>'..
'<th>' .. lang:ucfirst(config.i18n.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=config.i18n.linktemplate,
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()
local function whichTOC() -- standardize TOC behavior via {{CatAutoTOC}}
return frame:expandTemplate{ title = 'CatAutoTOC', args = { align = 'center' } }
end
local function wpa(id, faulty)
local outString = ''
for _, conf in pairs(config.config) do
if conf.category==id then
outString = frame:expandTemplate{
title = 'Category explanation',
args = {'articles with ' .. getname(conf.property) .. ' identifiers.'..' Please do not add [[Wikipedia:Categorization#Subcategorization|subcategories]].\nPages in this category should only be added by [[Module:Authority control]].'}
} .. 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' }
} .. frame:expandTemplate{
title = 'Polluted category'
} .. whichTOC()
end
end
if faulty then
outString = outString .. addCat(config.i18n.faultcat,id) .. addCat(string.format(config.i18n.cat, id))
else
outString = outString .. addCat(config.i18n.maincat,id)
end
return outString
end
if namespace == 14 then --cat space
local wpfaultyID = mw.ustring.match(title.text, 'Articles with faulty (.+) identifiers')
local wpID = mw.ustring.match(title.text, 'Articles with (.+) identifiers')
if wpfaultyID then
return wpa(wpfaultyID, true)-- must be before wpID check, in case they both match
elseif wpID then
return wpa(wpID, false)
else
return needsAttention('U')
end
end
end
function p.idproposal()
local property = frame.args.property or ''
local out = '<ul><li>Wikidata property: ' .. frame:expandTemplate{title='Wikidata property link', args={'P' .. property}} .. '</li>'
out = out .. '<li>Section: '
local section = frame.args.section or ''
if section~='' then
out = out .. config.sections[section].name .. ' (' .. section .. ')'
else
out = out .. 'Not specified'
end
out = out .. '</li><li>Link: '
local link = frame.args.link or ''
if link=='' then
link = mw.wikibase.getBestStatements('P' .. property, 'P1630') or ''
link = link[1].mainsnak.datavalue.value
end
if link~='' then
out = out .. '<code>' .. link .. '</code>'
else
out = out .. 'Not specified'
end
out = out .. '</li><li>Label: '
local label = frame.args.label or ''
if label~='' then
out = out .. label
else
out = out .. 'Not specified'
end
out = out .. '</li><li>Example: '
local example = mw.wikibase.getBestStatements('P'..property,'P1855') or ''
if example then
example = example[1].qualifiers['P'..property][1].datavalue.value
example = frame:expandTemplate{title = 'Hlist', args = {makelink({[1]='', link=link, label=label}, example)}}
out = out .. example
else
out = out .. 'Not available'
end
out = out .. '</li></ul>'
return out
end
return p