Модуль:tablerole
| Строка 95: | Строка 95: | ||
return tostring(root) | return tostring(root) | ||
end | |||
-- Функция для вывода со стилем роли и шаблонами ячеек | |||
function p.role(frame) | |||
local args = frame:getParent().args | |||
local title = args[1] or args.title or "Информация" | |||
local root = mw.html.create('table') | |||
:addClass('wikitable') | |||
-- Заголовок таблицы с вашим стилем и точкой | |||
root:tag('tr') | |||
:tag('th') | |||
:attr('colspan', '2') | |||
:css('background-color', 'rgba(0, 0, 255, 0.12)') | |||
: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 | |||
-- Сортировка по заданному порядку | |||
table.sort(keys, function(a, b) | |||
local posA = orderMap[a] | |||
local posB = orderMap[b] | |||
if posA and posB then | |||
return posA < posB | |||
elseif posA then | |||
return true | |||
elseif posB 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 | |||
-- Вызов шаблонов через frame:expandTemplate | |||
if lowerVal == "да" or lowerVal == "yes" or lowerVal == "true" then | |||
displayVal = frame:expandTemplate{ title = 'Шаблон:Ячейка/Да' } | |||
elseif lowerVal == "нет" or lowerVal == "no" or lowerVal == "false" then | |||
displayVal = frame:expandTemplate{ title = 'Шаблон:Ячейка/Нет' } | |||
end | |||
-- Добавляем строку в таблицу | |||
root:tag('tr') | |||
:tag('td'):wikitext(k):done() | |||
:tag('td'):wikitext(displayVal):done() | |||
end | |||
return tostring(root) | |||
end | |||
-- Функция для генерации строки для общей таблицы навыков | |||
function p.row(frame) | |||
local args = frame:getParent().args | |||
-- Получаем название роли (позиционный аргумент 1 или title) | |||
local title = args[1] or args.title or "Роль" | |||
-- Добавляем точку в конце, если её там нет | |||
if not title:match("%.$") then | |||
title = title .. "." | |||
end | |||
local cells = {} | |||
-- Первая ячейка — название роли со стилем | |||
table.insert(cells, string.format('|style="background-color:rgba(0, 0, 255, 0.12);"|\'\'\'%s\'\'\'', title)) | |||
-- Перебираем все навыки в строгом порядке из predefinedOrder | |||
for _, skillName in ipairs(predefinedOrder) do | |||
-- Ищем значение параметра регистронезависимо | |||
local val = nil | |||
for k, v in pairs(args) do | |||
if type(k) == "string" and k:lower() == skillName:lower() then | |||
val = v | |||
break | |||
end | |||
end | |||
local lowerVal = val and mw.text.trim(val):lower() or "нет" | |||
-- Выбираем шаблон в зависимости от значения | |||
if lowerVal == "да" or lowerVal == "yes" or lowerVal == "true" then | |||
table.insert(cells, '|{{Шаблон:Ячейка/Да}}') | |||
else | |||
table.insert(cells, '|{{Шаблон:Ячейка/Нет}}') | |||
end | |||
end | |||
-- Объединяем ячейки через перенос строки | |||
return table.concat(cells, "\n") | |||
end | end | ||
return p | return p | ||