Дополнительные действия
DarkMuse (обсуждение | вклад) Нет описания правки |
DarkMuse (обсуждение | вклад) Нет описания правки |
||
| (не показано 177 промежуточных версий 2 участников) | |||
| Строка 1: | Строка 1: | ||
local p = {} | local p = {} | ||
-- Основная функция для рендеринга примечаний | |||
function p.renderNotes(frame) | function p.renderNotes(frame) | ||
local parent = frame:getParent() | local parent = frame:getParent() | ||
local notes = {} | local notes = {} | ||
local noteOrder = {} | |||
-- | -- Собираем основные примечания и сохраняем их порядок | ||
for key, value in pairs(parent.args) do | for key, value in pairs(parent.args) do | ||
if key:match("^note_%d+$") and value ~= "" then | if key:match("^note_%d+$") and value ~= "" then | ||
notes[key] = {value = value, subNotes = {}} | notes[key] = {value = value, subNotes = {}} | ||
table.insert(noteOrder, key) -- Сохраняем порядок ключей | |||
end | |||
local mainKey = key:match("^(note_%d+_%d+)") | end | ||
if | |||
-- Собираем вложенные примечания и добавляем к соответствующим основным | |||
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 | 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) | |||
-- Если нет примечаний, выводим сообщение | -- Если нет примечаний, выводим сообщение | ||
| Строка 25: | Строка 38: | ||
end | end | ||
-- Формируем список примечаний | -- Формируем список примечаний с учетом порядка | ||
local result = '<ul>' | local result = '<ul>' | ||
for _, | for _, noteKey in ipairs(noteOrder) do | ||
local note = notes[noteKey] | |||
result = result .. '<li>' .. note.value | result = result .. '<li>' .. note.value | ||
if | |||
-- Проверяем, есть ли вложенные примечания | |||
if next(note.subNotes) ~= nil then | |||
result = result .. '<ul>' | result = result .. '<ul>' | ||
for | |||
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 | |||
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 | end | ||
result = result .. '</ul>' | result = result .. '</ul>' | ||
end | end | ||
result = result .. '</li>' | result = result .. '</li>' | ||
end | end | ||
result = result .. '</ul>' | 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 | 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