Открыть меню
Открыть персональное меню
Вы не представились системе
Your IP address will be publicly visible if you make any edits.

Модуль:RenderSubnotes: различия между версиями

Материал из wiki.iccup.org
Нет описания правки
Нет описания правки
 
(не показано 18 промежуточных версий этого же участника)
Строка 19: Строка 19:
         if key:match("^note_%d+_%d+$") and value ~= "" then
         if key:match("^note_%d+_%d+$") and value ~= "" then
             local mainKey = key:match("^(note_%d+)")
             local mainKey = key:match("^(note_%d+)")
            local subNoteIndex = tonumber(key:match("_(%d+)$"))
             if notes[mainKey] then
             if notes[mainKey] then
                 table.insert(notes[mainKey].subNotes, value)
                 notes[mainKey].subNotes[subNoteIndex] = value
             end
             end
         end
         end
Строка 44: Строка 45:


         -- Проверяем, есть ли вложенные примечания
         -- Проверяем, есть ли вложенные примечания
         if #note.subNotes > 0 then
         if next(note.subNotes) ~= nil then
             result = result .. '<ul>'
             result = result .. '<ul>'
             for _, subNote in ipairs(note.subNotes) do
 
                 result = result .. '<li>' .. subNote .. '</li>'
            -- Сортируем вложенные примечания и добавляем в результат
            local sortedSubNotes = {}
             for index, subNote in pairs(note.subNotes) do
                 if subNote ~= nil then -- Проверка на наличие значения
                    table.insert(sortedSubNotes, {index = index, value = subNote})
                end
             end
             end
            table.sort(sortedSubNotes, function(a, b) return a.index < b.index end)
            for _, subNote in ipairs(sortedSubNotes) do
                result = result .. '<li>' .. subNote.value .. '</li>'
            end
             result = result .. '</ul>'
             result = result .. '</ul>'
         end
         end
Строка 58: Строка 70:
     return result
     return result
end
end
local function checkMatchingNumber(descrKey, imageKey)
    -- Извлекаем цифры после первого подчеркивания
    local descrNumber = descrKey:match("_%d+"):sub(2)
    local imageNumber = imageKey:match("_%d+"):sub(2)
    -- Сравниваем цифры
    return descrNumber == imageNumber
end


-- Новая функция для рендеринга действий с изображениями
-- Новая функция для рендеринга действий с изображениями
Строка 74: Строка 96:
         end
         end
     end
     end
    local test = {}
 
     -- Собираем изображения для каждого действия
     -- Собираем изображения для каждого действия
     for key, value in pairs(items) do
     for key, value in pairs(items) do
  for keyImage, valueImage in pairs(parent.args) do
  for keyImage, valueImage in pairs(parent.args) do
if keyImage:match("^itemsActionImage_%d+_%d+$") and value ~= "" then
if keyImage:match("^itemsActionImage_%d+_%d+$") and value ~= "" then
    table.insert(value.images, value)
    if checkMatchingNumber(key, keyImage) then
    table.insert(value.images, valueImage)
    end
     end
     end
       end
       end
Строка 91: Строка 115:
     end)
     end)
      
      
    -- table.sort(itemImageOrder, function (a, b)
local result = '<ul class="items-actions-list">'
    --    local aNum = tonumber(a:match("%d+"))
    --     local bNum = tonumber(b:match("%d+"))
    --    return aNum < bNum
    -- end)
 
     -- Если нет действий, выводим сообщение
     -- Если нет действий, выводим сообщение
     if next(items) == nil then
     if next(items) == nil then
         return "Действия не указаны."
         return result .. "<li class='items-actions-list-item'>Действия не указаны.</li>"
     end
     end


     -- Формируем список действий с изображениями
     -- Формируем список действий с изображениями
    local result = '<ul>'
     for _, itemKey in ipairs(itemOrder) do
     for _, itemKey in ipairs(itemOrder) do
         local item = items[itemKey]
         local item = items[itemKey]
      test[itemKey] = item
result = result .. '<li class="items-actions-list-item">'
        result = result .. '<li>'
if #item.images > 0 then
       
             result = result .. '<span class="items-actions-list-item-image">'
        -- for _, itemImageKey in ipairs(itemOrderImage) do
        -- result = result .. '<span>[[File:' .. image .. '|50px]]</span>'
        -- end
 
        -- Проверяем, есть ли изображения для текущего действия
        if #item.images > 0 then
             result = result
             for _, image in ipairs(item.images) do
             for _, image in ipairs(item.images) do
 
                 result = result .. '[[File:' .. image .. '|50px|50px|link=]]'
                 result = result
             end
             end
             result = result .. '</span>'
             result = result .. '</span>'
         end
         end
 
         result = result .. '<span class=items-actions-list-item-text>' .. item.description .. '</span>' .. '<li>'  
         result = result .. '</li>'
      end
    end
     result = result .. '</ul>'
     result = result .. '</ul>'
result = mw.dumpObject(test)
     return result
     return result
end
end


return p
return p

Текущая версия от 21:32, 10 ноября 2024

Описание[править код]

Модуль RenderSubnotes используется для рендеринга примечаний и действий с изображениями в карточках героев или других информационных блоках. Этот модуль предоставляет две основные функции: renderNotes для отображения примечаний и renderItemsAction для рендеринга действий с изображениями.

Использование[править код]

Функция renderNotes[править код]

Функция renderNotes используется для отображения примечаний, где примечания могут быть как основными, так и вложенными. Основные примечания задаются параметрами вида note_1, note_2 и так далее. Вложенные примечания задаются параметрами вида note_1_1, note_1_2 и так далее.

Пример использования:

{{#invoke:RenderSubnotes|renderNotes
| note_1 = Примечание 1
| note_1_1 = Подпримечание 1.1
| note_1_2 = Подпримечание 1.2
| note_2 = Примечание 2
}}

Функция renderItemsAction[править код]

Функция renderItemsAction используется для отображения действий с изображениями. Описание действия задается параметром вида itemsActionDescr_1, а изображение – параметром itemsActionImage_1_1, где числа после символа подчеркивания должны совпадать для правильной привязки изображения к действию.

Пример использования:

{{#invoke:RenderSubnotes|renderItemsAction
| itemsActionDescr_1 = Описание действия 1
| itemsActionImage_1_1 = action_image_1.png
| itemsActionImage_1_2 = action_image_2.png
| itemsActionDescr_2 = Описание действия 2
| itemsActionImage_2_1 = action_image_3.png
}}

Параметры[править код]

Параметры для renderNotes[править код]

  • note_X – основное примечание, где X – порядковый номер.
  • note_X_Y – вложенное примечание, где X – номер основного примечания, а Y – номер вложенного примечания.

Параметры для renderItemsAction[править код]

  • itemsActionDescr_X – описание действия, где X – порядковый номер.
  • itemsActionImage_X_Y – изображение для действия, где X – номер действия, а Y – номер изображения для данного действия.

Примечания[править код]

  • Основные примечания могут иметь несколько уровней вложенности.
  • Изображения для действий должны быть привязаны к правильным действиям с помощью одинаковых порядковых номеров в параметрах.



local p = {}

-- Основная функция для рендеринга примечаний
function p.renderNotes(frame)
    local parent = frame:getParent()
    local notes = {}
    local noteOrder = {}

    -- Собираем основные примечания и сохраняем их порядок
    for key, value in pairs(parent.args) do
        if key:match("^note_%d+$") and value ~= "" then
            notes[key] = {value = value, subNotes = {}}
            table.insert(noteOrder, key) -- Сохраняем порядок ключей
        end
    end

    -- Собираем вложенные примечания и добавляем к соответствующим основным
    for key, value in pairs(parent.args) do
        if key:match("^note_%d+_%d+$") and value ~= "" then
            local mainKey = key:match("^(note_%d+)")
            local subNoteIndex = tonumber(key:match("_(%d+)$"))
            if notes[mainKey] then
                notes[mainKey].subNotes[subNoteIndex] = value
            end
        end
    end

    -- Сортируем `noteOrder` для корректного отображения по порядку ключей
    table.sort(noteOrder, function(a, b)
        local aNum = tonumber(a:match("%d+"))
        local bNum = tonumber(b:match("%d+"))
        return aNum < bNum
    end)

    -- Если нет примечаний, выводим сообщение
    if next(notes) == nil then
        return "Примечаний нет."
    end

    -- Формируем список примечаний с учетом порядка
    local result = '<ul>'
    for _, noteKey in ipairs(noteOrder) do
        local note = notes[noteKey]
        result = result .. '<li>' .. note.value

        -- Проверяем, есть ли вложенные примечания
        if next(note.subNotes) ~= nil then
            result = result .. '<ul>'

            -- Сортируем вложенные примечания и добавляем в результат
            local sortedSubNotes = {}
            for index, subNote in pairs(note.subNotes) do
                if subNote ~= nil then -- Проверка на наличие значения
                    table.insert(sortedSubNotes, {index = index, value = subNote})
                end
            end
            table.sort(sortedSubNotes, function(a, b) return a.index < b.index end)

            for _, subNote in ipairs(sortedSubNotes) do
                result = result .. '<li>' .. subNote.value .. '</li>'
            end

            result = result .. '</ul>'
        end

        result = result .. '</li>'
    end
    result = result .. '</ul>'

    return result
end

local function checkMatchingNumber(descrKey, imageKey)
    -- Извлекаем цифры после первого подчеркивания
    local descrNumber = descrKey:match("_%d+"):sub(2)
    local imageNumber = imageKey:match("_%d+"):sub(2)

    -- Сравниваем цифры
    return descrNumber == imageNumber
end


-- Новая функция для рендеринга действий с изображениями
function p.renderItemsAction(frame)
    local parent = frame:getParent()
    local items = {}
    local itemsImage = {}
    local itemOrder = {}
    local itemImageOrder = {}

    -- Собираем основные действия и их описания
    for key, value in pairs(parent.args) do
        if key:match("^itemsActionDescr_%d+$") and value ~= "" then
            items[key] = {description = value, images = {}}
            table.insert(itemOrder, key) -- Сохраняем порядок ключей
        end
    end

    -- Собираем изображения для каждого действия
    for key, value in pairs(items) do
	  for keyImage, valueImage in pairs(parent.args) do
		if keyImage:match("^itemsActionImage_%d+_%d+$") and value ~= "" then
	     if checkMatchingNumber(key, keyImage) then
    		table.insert(value.images, valueImage)
    	 end
    	end
       end
    end

    -- Сортируем `itemOrder` для корректного отображения по порядку ключей
    table.sort(itemOrder, function(a, b)
        local aNum = tonumber(a:match("%d+"))
        local bNum = tonumber(b:match("%d+"))
        return aNum < bNum
    end)
    
	local result = '<ul class="items-actions-list">'
	
    -- Если нет действий, выводим сообщение
    if next(items) == nil then
        return result .. "<li class='items-actions-list-item'>Действия не указаны.</li>"
    end

    -- Формируем список действий с изображениями
    for _, itemKey in ipairs(itemOrder) do
        local item = items[itemKey]
		result = result .. '<li class="items-actions-list-item">'
		if #item.images > 0 then
            result = result .. '<span class="items-actions-list-item-image">'
            for _, image in ipairs(item.images) do
                result = result .. 	'[[File:' .. image .. '|50px|50px|link=]]'
            end
            result = result .. '</span>'
        end
        result = result .. '<span class=items-actions-list-item-text>' .. item.description .. '</span>' .. '<li>' 
       end
    result = result .. '</ul>'
    return result
end

return p