мНет описания правки |
Нет описания правки |
||
Строка 21: | Строка 21: | ||
return classes[branch_type] or classes.stable |
return classes[branch_type] or classes.stable |
||
+ | end |
||
+ | |||
+ | --[=[ |
||
+ | Получает текст всплывающей подсказки для номера версии в зависимости от типа |
||
+ | ветки. |
||
+ | |||
+ | Параметры: |
||
+ | • branch_type: тип ветки (см. документацию к модулю |
||
+ | [[Модуль:Версия модификации/Данные]]). Ветки без типов или с неизвестным |
||
+ | тмпом считаются стабильными. |
||
+ | |||
+ | Возвращает строку, содержащую текст всплывающей подсказки. |
||
+ | ]=] |
||
+ | local function get_tooltip(branch_type) |
||
+ | local tooltips = { |
||
+ | stable = "Стабильная версия", |
||
+ | beta = "Бета-версия", |
||
+ | alpha = "Альфа-версия", |
||
+ | unmaintained = "Неподдерживаемая версия" |
||
+ | } |
||
+ | |||
+ | return tooltips[branch_type] or tooltips.stable |
||
end |
end |
||
Строка 37: | Строка 59: | ||
local version = branch.v |
local version = branch.v |
||
local ver_class = get_version_class(branch.type) |
local ver_class = get_version_class(branch.type) |
||
+ | local tooltip = get_tooltip(branch.type) |
||
− | table.insert(versions, '<code class="' .. ver_class .. '">' .. version .. '</code>') |
+ | table.insert(versions, '<code class="explain tooltip ' .. ver_class .. '" title="' .. tooltip .. '">' .. version .. '</code>') |
end |
end |
||
return table.concat(versions, " / ") |
return table.concat(versions, " / ") |
Версия от 17:45, 21 декабря 2019
local p = {}
--[=[
Получает CSS-класс(ы) code, в который помещается номер версии модификации. Эти
классы нужны для различного оформления номеров версий из веток с разной
стабильностью (релизная / стабильная, бета-версия, альфа-версия).
Параметры:
• branch_type: тип ветки (см. документацию к модулю
[[Модуль:Версия модификации/Данные]]). Ветки без типов или с неизвестным
тмпом считаются стабильными.
Возвращает строку, содержащую соответствующие классы.
]=]
local function get_version_class(branch_type)
local classes = {
stable = "modversion modversion-stable",
beta = "modversion modversion-beta",
alpha = "modversion modversion-alpha",
unmaintained = "modversion modversion-unmaintained"
}
return classes[branch_type] or classes.stable
end
--[=[
Получает текст всплывающей подсказки для номера версии в зависимости от типа
ветки.
Параметры:
• branch_type: тип ветки (см. документацию к модулю
[[Модуль:Версия модификации/Данные]]). Ветки без типов или с неизвестным
тмпом считаются стабильными.
Возвращает строку, содержащую текст всплывающей подсказки.
]=]
local function get_tooltip(branch_type)
local tooltips = {
stable = "Стабильная версия",
beta = "Бета-версия",
alpha = "Альфа-версия",
unmaintained = "Неподдерживаемая версия"
}
return tooltips[branch_type] or tooltips.stable
end
--[=[
Функция, форматирующая номера версий какой-либо модификации.
Параметры:
• mod_struct: структура с данными о соответствующей модификации (см.
документацию модуля [[Модуль:Версия модификации/Данные]]).
Возвращает строку с готовым вики-текстом.
]=]
local function format_ver(mod_struct)
local versions = {}
for i, branch in ipairs(mod_struct) do
local version = branch.v
local ver_class = get_version_class(branch.type)
local tooltip = get_tooltip(branch.type)
table.insert(versions, '<code class="explain tooltip ' .. ver_class .. '" title="' .. tooltip .. '">' .. version .. '</code>')
end
return table.concat(versions, " / ")
end
--[=[
Функция, форматирующая номера версий Minecraft, с которыми совместима какая-либо
модификация.
Параметры:
• mod_struct: структура с данными о соответствующей модификации (см.
документацию модуля [[Модуль:Версия модификации/Данные]]).
Возвращает строку с готовым вики-текстом.
]=]
local function format_mc(mod_struct)
local versions = {}
for i, branch in ipairs(mod_struct) do
table.insert(versions, branch.mc)
end
return table.concat(versions, " / ")
end
--[=[
Функция, форматирующая номера версий Minecraft, с которыми совместима какая-либо
модификация. Эта функция предназначена для встраивания значения в таблицу и
окрашивает ячейку с результатом в красный / зелёный цвет в зависимости от того,
есть ли у модификации ветка, поддерживающая последнюю версию Minecraft (Java
Edition).
Параметры:
• mod_struct: структура с данными о соответствующей модификации (см.
документацию модуля [[Модуль:Версия модификации/Данные]]).
Возвращает строку с готовым вики-текстом.
]=]
local function format_mct(mod_struct)
local versions = {}
local supports_latest = false
local latest = mw.loadData([[Модуль:Версия/Данные]]).m
for i, branch in ipairs(mod_struct) do
local mc_version = branch.mc
if mc_version == latest then
supports_latest = true
end
table.insert(versions, mc_version)
end
local result = table.concat(versions, " / ")
if supports_latest then
result = 'style="background: #C6EFCE; color: #006100" |' .. result
else
result = 'style="background: #FFC7CE; color: #9C0006" |' .. result
end
return result
end
--[=[
Точка входа для шаблона [[Шаблон:Модверсия]]. Для информации о параметрах см.
документацию этого шаблона.
]=]
function p.main(args)
local mod_data = mw.loadData([[Модуль:Версия модификации/Данные]])
local mod_struct = assert(
mod_data[args.mod],
("Модификации %s не найдено"):format(args.mod)
)
local formatters = {
ver = format_ver,
mc = format_mc,
mct = format_mct
}
local formatter = assert( formatters[args.format], ("Некорректный формат: %s"):format(args.format) )
return formatter(mod_struct)
end
function p.version(f)
local args = require([[Модуль:ProcessArgs]]).merge(true)
local mod_name = assert(args[1], "Не указано название модификации")
local output_format = args[2]
local format = "ver"
if output_format then
if (output_format == "mct") or (output_format == "mc") then
format = output_format
else
error(("Указан неверный формат: %s. Укажите или mc, или mct"):format(output_format))
end
end
return p.main({mod = mod_name, format = format})
end
--[=[
Дополнительная точка входа для документации шаблона [[Шаблон:Модверсия]].
Никаких параметров не принимает. Возвращает таблицу со всеми известными
модификациями.
]=]
function p.list_all()
local mod_data = mw.loadData([[Модуль:Версия модификации/Данные]])
local all_mods = {}
for k, v in pairs(mod_data) do
table.insert(all_mods, {k, v})
end
table.sort(all_mods, function(a, b) return a[2].name < b[2].name end)
local result = {}
table.insert(result, '{| class="wikitable"\n! Код\n! Название\n! Версия модификации\n! Версия Minecraft')
for i, mod in ipairs(all_mods) do
table.insert(result, '|-\n| <code>' .. mod[1] .. '</code>\n| [[' .. mod[2].name .. ']]\n| ' .. format_ver(mod[2]) .. '\n| ' .. format_mc(mod[2]))
end
table.insert(result, '|}')
return table.concat(result, '\n')
end
return p