Для документации этого модуля может быть создана страница Модуль:Dante/doc
local p = {}
-- Цвета для каждого отдела
local department_colors = {
["Командование"] = "#372686", -- фиолетовый
["Медицинский Отдел"] = "#28a745", -- зелёный
["Служба безопасности"] = "#dc3545", -- красный
["Антагонисты"] = "#ffc107" -- жёлтый
}
-- Список ролей с иконками
local roles = {
["Командование"] = {
{role = "Капитан", icon = "File:Капитан.png"},
{role = "Глава персонала", icon = "File:Глава_Персонала.png"},
{role = "Глава службы безопасности", icon = "File:Глава Службы Безопасности.png"},
{role = "Старший Инженер", icon = "File:Старший_инженер.png"},
{role = "Научный руководитель", icon = "File:Научный руководитель.png"},
{role = "Главный врач", icon = "File:Главный врач.png"},
{role = "Квартирмейстер", icon = "File:Квартирмейстер.png"}
}
-- Добавь сюда другие отделы, если нужно
}
-- Основная функция для генерации HTML
function p.roles(frame)
local department = frame.args[1] or "Неизвестно"
local list = roles[department]
local color = department_colors[department] or "#FFFFFF" -- белый, если цвет не найден
if not list then
return "<b>Неизвестный отдел: " .. department .. "</b>"
end
-- Начинаем формировать HTML
local out = {}
table.insert(out, string.format(
'<div class="nomobile"><div class="biglink" style="margin:0px; text-shadow: 2px 3px black, 3px 5px %s; text-align: center; font-size: 40px; line-height:50px"><span class="sprite">[[File:cmd_dep.png|64px|link=%s]]</span> [[%s]]</div>',
color, department, department
))
table.insert(out, "<center><b>Глава отдела: [[Капитан]]<br>[[Радио|Канал отдела '':к'']]</b></center>")
-- Выводим заголовок для сотрудников отдела
table.insert(out, string.format('<div style="padding:2px;background:%s;border-radius:.3em;margin-bottom:.2em"><center><b>Сотрудники отдела:</b></center></div>', color))
-- Разделим роли на две части (чтобы было удобнее)
local role_section1 = {}
local role_section2 = {}
-- Перебираем роли и добавляем их в разделы
for i, roleData in ipairs(list) do
local role_html = string.format(
'<div style="display:flex; flex-direction:column; align-items:center; padding:5px;"><div><br>[[%s]]</div><div class="sprite">[[%s|146x146px|link=%s]]</div></div>',
roleData.role, roleData.icon, roleData.role
)
if i <= math.ceil(#list / 2) then
table.insert(role_section1, role_html)
else
table.insert(role_section2, role_html)
end
end
-- Вставляем разделы ролей в HTML
table.insert(out, '<div style="display:flex; width:55%; justify-content:space-around; flex-wrap:wrap">')
table.insert(out, table.concat(role_section1, "\n"))
table.insert(out, '</div>')
table.insert(out, '<div style="display:flex; width:65%; justify-content:space-around; flex-wrap:wrap">')
table.insert(out, table.concat(role_section2, "\n"))
table.insert(out, '</div>')
-- Заключение с дополнительной информацией
table.insert(out, string.format(
'<div style="padding:2px;background:%s;border-radius:.3em;margin-bottom:.2em"><center><b>Связанные руководства:</b></center></div>',
color
))
table.insert(out, "<center>[[Стандартные Рабочие Процедуры (Командование)]] • [[Задачи станции]]</center>")
table.insert(out, "<br></div>")
-- Возвращаем сгенерированный HTML
return table.concat(out, "\n")
end
return p