Открыть меню
Переключить меню настроек
Открыть персональное меню
Вы не представились системе
Ваш IP-адрес будет виден всем, если вы внесёте какие-либо изменения.

Модуль: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