وحدة:ضبط استنادي/documentation
المظهر
صُنفت هذه الوحدة على أنها في مرحلة بيتا. عندما تصل الوحدة لهذه المرحلة، يمكن أن يوسع استخدامها في الصفحات الأخرى. لكن يجب توخي الحذر من أن الوحدات في هذه المرحلة ما زالت حديثة العهد لذلك وجب توخي الحذر عند الاستخدام وملاحظة أي أخطاء تنتج عنها. من العرف أن المجتمع سوف يوصل الوحدات في هذه المرحلة للتي بعدها عبر صفحات النقاش الخاصة بالوحدة أو أي مكان يعلن عن هذه الوحدة عبر ملاحظة أن هذه الوحدة تعمل بشكل صحيح والجميع راضٍ عن أدائها. |
صفحات متصلة |
---|
require('strict')
local p = {}
local configfile = 'وحدة:ضبط استنادي/config' -- default configuation module
local arg = mw.getCurrentFrame().args.config
if arg and arg~='' then
configfile = 'وحدة:ضبط استنادي/config/' .. arg
end
local config
if mw.title.new(configfile).exists then
config = mw.loadData(configfile)
else
return error('Invalid configuration file',0)
end
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 redlinkcat = ''
if testcases == false and mw.title.new(cat, 14).exists == false then
redlinkcat = needsAttention('N')
end
if sortkey then
cat = '[[' .. config.i18n.category .. ':'..cat..'|' .. sortkey .. title.text .. ']]'
else
cat = '[[' .. config.i18n.category .. ':'..cat..']]'
end
cat = cat .. redlinkcat
return cat
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(frame)
local function checkcat(category,label,idf)
local ret='[[:' .. config.i18n.category .. ':'..category..'|'..label..']]'
if mw.title.new(category, 14).exists == false then
ret = ret..' <span class="plainlinks" style="font-size:85%;">[['..tostring(mw.uri.fullUrl('Category:'..category,'action=edit&preload=Template:ضبط استنادي/مسبق&preloadparams[]=' .. (idf or '')))..' إنشاء]]</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 row = function(conf)
local category = conf.category or conf[1]
local articleCat = string.format(config.i18n.cat,category)
local articleCount = mw.site.stats.pagesInCategory(articleCat,'pages')
local errorCat = conf.errorcat or string.format(
config.i18n.cat,
category .. ' ' .. config.i18n.faulty
)
local errorCount = mw.site.stats.pagesInCategory(errorCat,'pages')
P = P + 1 --property count
a = a + articleCount
f = f + errorCount
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 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 _, example = getstatement(conf.property, 1855, conf.property)
if not example then example = '' end
example = frame:expandTemplate{title = "Hlist", args = {'\n' .. makelink(conf,{id=example},1)}} .. '\n'
local getname = function(nameprop)
local name = getstatement(conf.property,nameprop)
if name then
return frame:expandTemplate{title='رابط ويكي بيانات بديل',args={name}}
end
end
local name = getname(1629) or getname(10726) or getname(9073) or getname(2378) or ''
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='خاصية',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 .. ">'''ملاحظات:''' " .. frame:preprocess{text = conf.remark} .. "</td></tr>"
end
return out
end
local doc = '<table class="wikitable sortable">' ..
'<tr><th>' .. lang:ucfirst(config.i18n.identifier) .. '</th>' ..
'<th>' .. config.i18n.Section .. '</th>' ..
'<th data-sort-type=number>' .. config.i18n.WDproperty .. '</th>' ..
'<th>' .. config.i18n.Appears_as .. '</th>'
if count then
doc = doc .. '<th>[[:' .. config.i18n.category .. ':' .. config.i18n.maincat .. '|' .. config.i18n.Articles .. ']] '
.. '([[:' .. config.i18n.category .. ':' .. config.i18n.faultcat .. '|' .. config.i18n.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 .. '>' .. config.i18n.Totals .. '</th>' ..
'<th style="text-align: right;">' .. P .. '</th>' ..
'<th style="text-align: right;">' .. lang:formatNum(a) .. ' ([[:' .. config.i18n.category .. ':' .. config.i18n.allfaultycat .. '|' .. f .. ']])</th></tr>'
end
doc = doc .. '</table>'
return doc
end
function p.errorTable(frame)
local Table = '<table class="wikitable sortable">'..
'<tr><th>' .. config.i18n.WDproperty .. '</th>'..
'<th>' .. config.i18n.identifiers .. ' ' .. lang:ucfirst(config.i18n.faulty) .. '</th>'..
'<th>[[:' .. config.i18n.category .. ':' .. config.i18n.faultcat .. '|' .. config.i18n.Tracking_category .. ']]</th></tr>'
local f, P = 0, 0, 0 --cumulative sums
for _, conf in pairs(config.config) do
local category = conf.errorcat or string.format(
config.i18n.cat,
(conf.category or conf[1]) .. ' ' .. config.i18n.faulty
)
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 = 'خاصية', args = { id = 'f', conf.property } } .. '</td>'..
'<td style="text-align:center;">'..tostring(count)..'</td>'..
'<td>[[:' .. config.i18n.category .. ':'..category..']]</td></tr>'
end
end
Table = Table..'<tr><th>' .. config.i18n.Totals .. '</th>'..
'<th style="text-align:center;">' .. '[[:' .. config.i18n.category .. ':' .. config.i18n.allfaultycat .. '|' .. tostring(f) .. ']]</th>'..
'<th style="text-align:center;">'..tostring(P)..'</th></tr></table>'
return Table
end
function p.whitelisttable(frame)
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='خاصية', args={'P' .. property}})
end
Table = Table .. '<td>' .. table.concat(plist,', ') .. '</td></tr>'
end
Table = Table .. '</table>'
return Table
end
function p.sectiontable(frame)
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='خاصية', 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 function whichTOC(frame) -- standardize TOC behavior via {{فهرس تصنيف آلي}}
return frame:expandTemplate{ title = 'فهرس تصنيف آلي', args = { align = 'center' } }
end
local function wpa(frame,id,faulty)
for _,conf in pairs(config.config) do
if conf.category == id or conf[1] == id then
local getname = function(nameprop)
local name = mw.wikibase.getBestStatements('P'..conf.property,nameprop)
if name and name[1] and name[1].mainsnak.datavalue.value.id then
return frame:expandTemplate{title='رابط ويكي بيانات بديل',args={name[1].mainsnak.datavalue.value.id}}
end
end
local name = getname('P1629') or getname('P10726') or getname('P9073') or getname('P2378') or ''
local outString = frame:expandTemplate{ title = 'شرح تصنيف', args = {'مقالات مع معرفات '..name..' الرجاء عدم إضافة [[ويكيبيديا:تصنيف|تصنيفات فرعية]].\nالصفحات في هذا التصنيف تضاف فقط من [[وحدة:ضبط استنادي]].'}}
.. frame:expandTemplate{ title = 'تصنيف أكثر', args = {'ويكيبيديا:ضبط استنادي', ':d:Property:P'..conf.property} }
.. frame:expandTemplate{ title = 'تصنيف فارغ' }
.. frame:expandTemplate{ title = 'تصنيف صيانة', args = { hidden = 'yes', tracking = 'yes' } }
.. frame:expandTemplate{ title = 'تصنيف ملوث' }
.. whichTOC( frame )
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
end
end
if namespace == 14 then --cat space
local wpfaultyID = mw.ustring.match(title.text, 'مقالات فيها معرفات (.+) خاطئة')
local wpID = mw.ustring.match(title.text, 'مقالات فيها معرفات (.+)')
if wpfaultyID then
return wpa(frame,wpfaultyID,true)-- must be before wpID check, in case they both match
elseif wpID then
return wpa(frame,wpID,false)
else
return needsAttention('U')
end
end
end
function p.idproposal(frame)
local property = frame.args.property or ''
local out = '<ul><li>Wikidata property: ' .. frame:expandTemplate{title='خاصية', 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 = {'\n' .. makelink({[1]='',link=link,label=label},{id=example},1)}} .. '\n'
out = out .. example
else
out = out .. 'Not available'
end
out = out .. '</li></ul>'
return out
end
return p