Модуль:tablerole

Вернуться

Строка 33: Строка 33:
end
end


function p.render(frame)
function p.role(frame)
     local args = frame:getParent().args
     local args = frame:getParent().args
     -- Поддерживаем как позиционный аргумент 1, так и именованный title
     -- Поддерживаем как позиционный аргумент 1, так и именованный title
Строка 86: Строка 86:
         elseif lowerVal == "нет" or lowerVal == "no" or lowerVal == "false" then
         elseif lowerVal == "нет" or lowerVal == "no" or lowerVal == "false" then
             displayVal = '<span style="color: red;">✖ Нет</span>'
             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
-- Функция для вывода со стилем роли и шаблонами ячеек
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
         end