Модуль:Contributions
Перейти к навигации
Перейти к поиску
local split = mw.text.split
local tools = require 'Module:TableTools'
local pivot = tools.pivot
local values = tools.values
local namespaces = mw.site.namespaces
namespaces [0].name = 'Основное'
local columns = {
{ id = 'Участник', name = 'Участник' }
, { id = 'Всего', name = 'Всего' }
}
for id, record in pairs (namespaces) do
columns[#columns + 1] = {
id = id
, name = record.name
}
end
local function query (limit)
local users = mw.smw.ask {
'[[-User edit count per namespace::+]] [[-User edit count per namespace.User edit count::>0]]'
, '?-User edit count per namespace=Участник'
, '?-User edit count per namespace.User edit count=Всего'
, '?Пространство имён=namespace'
, '?Число правок=edits'
, sort = '-User edit count per namespace.User edit count'
, order = 'desc'
, limit = limit
}
local pivot = values (pivot (
users,
{ 'Участник', 'Всего' },
'namespace',
'edits'
))
table.sort (pivot, function (record1, record2)
return (record1.total or 0) > (record2.total or 0) -- descending order
end )
return pivot
end
local function wikitable (tbl)
local headers = {}
for col, namespace in ipairs (columns) do
headers [col] = namespace.name
end
local rows = {
'\n{| class="wikitable sortable"\n'
, '! ' .. table.concat (headers, ' !! ')
}
for _, record in ipairs (tbl) do
local row = {}
for index, column in ipairs (columns) do
local value = record [column.id]
row [index] = value and tostring (value) or ''
end
rows [#rows + 1] = '| ' .. table.concat (row, ' || ' )
end
return table.concat (rows, '\n|-\n') .. '\n|}\n'
end
return {
table = function (frame)
return wikitable (query (frame.args.limit or 500))
end
}