Модуль:TableRole
Материал из Space Station 14 | Время приключений Вики
Дополнительные действия
Для документации этого модуля может быть создана страница Модуль:TableRole/doc
local p = {}
function p.render(frame)
local args = frame:getParent().args
-- Поддерживаем как позиционный аргумент 1, так и именованный title
local title = args[1] or args.title or "Информация"
-- Используем встроенную библиотеку mw.html (рекомендация MediaWiki)
local root = mw.html.create('table')
:addClass('wikitable')
-- Заголовок таблицы
root:tag('tr')
:tag('th')
:attr('colspan', '2')
:css('text-align', 'center')
:css('background', '#08245c')
:wikitext(title)
-- Собираем все ключи, кроме первого (заголовка)
local keys = {}
for k, _ in pairs(args) do
if k ~= 1 and k ~= "1" and k ~= "title" then
table.insert(keys, k)
end
end
-- Умная сортировка: если ключи числовые (например, 01, 2, 10),
-- они сортируются как числа, а текстовые — по алфавиту
table.sort(keys, function(a, b)
local numA, numB = tonumber(a), tonumber(b)
if numA and numB then
return numA < numB
elseif numA then
return true -- Числа идут раньше строк
elseif numB then
return false
else
return tostring(a) < tostring(b)
end
end)
-- Перебираем каждый параметр и формируем строки таблицы
for _, k in ipairs(keys) do
local rawVal = args[k]
local trimmedVal = mw.text.trim(rawVal)
local lowerVal = trimmedVal:lower()
local displayVal = trimmedVal
-- Красивое оформление для да/нет
if lowerVal == "да" or lowerVal == "yes" or lowerVal == "true" then
displayVal = '<span style="color: green; font-weight: bold;">✔ Да</span>'
elseif lowerVal == "нет" or lowerVal == "no" or lowerVal == "false" then
displayVal = '<span style="color: red;">✖ Нет</span>'
end
-- Добавляем строку в таблицу
root:tag('tr')
:tag('td'):wikitext(k):done()
:tag('td'):wikitext(displayVal):done()
end
return tostring(root)
end
return p