Модуль:Версия модификации

[создать | история | обновить]Документация
У этого модуля нет документации. Если вы знаете, как использовать этот модуль, пожалуйста, добавьте соответствующую информацию.
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 --[=[ Сравнивает два номера версий, соответствующих одному и тому же формату: оба номера версий должны состоять из последовательностей чисел одинаковой длины, в которых числа разделены точками. Поведение функции не определено при использовании любого другого формата. Параметры:  • ver1 (строка): номер первой версии;  • ver2 (строка): номер второй версии.   Возвращает булево значение, равное `true`, если и только если ver1 больше ver2. ]=] local function compare_version(ver1, ver2) local parts1 = mw.text.split(ver1, '%.') local parts2 = mw.text.split(ver2, '%.') for i, part in ipairs(parts1) do local part1_number = tonumber(part) local part2_number = tonumber(parts2[i]) if part1_number > part2_number then return true elseif part1_number < part2_number then return false end end return false end --[=[ Форматирует один номер версии согласно приведённому типу ветки. Параметры:  • version (строка): номер версии  • branch_type (строка): тип ветки   Возвращает строку с готовым вики-текстом. ]=] local function format_single_version(version, branch_type) local ver_class = get_version_class(branch_type) local tooltip = get_tooltip(branch_type) return '<code class="explain tooltip ' .. ver_class .. '" title="' .. tooltip .. '">' .. version .. '</code>' end --[=[ Функция, форматирующая номера версий какой-либо модификации. Параметры:  • mod_struct: структура с данными о соответствующей модификации (см.  документацию модуля [[Модуль:Версия модификации/Данные]]).   Возвращает строку с готовым вики-текстом. ]=] local function format_ver(mod_struct) local versions = {} for i, branch in ipairs(mod_struct) do table.insert(versions, format_single_version(branch.v, branch.type)) end return table.concat(versions, " / ") end --[=[ Функция, форматирующая номера версий какой-либо модификации вместе с соответствующими версиями Minecraft. Предназначена для использования в карточках модификаций. Параметры:  • mod_struct: структура с данными о соответствующей модификации (см.  документацию модуля [[Модуль:Версия модификации/Данные]]).   Возвращает строку с готовым вики-текстом. ]=] local function format_infobox(mod_struct) local versions1 = {} for i, branch in ipairs(mod_struct) do if not versions1[branch.mc] then versions1[branch.mc] = {} end table.insert(versions1[branch.mc], branch) end local versions2 = {} for mcver, branch_array in pairs(versions1) do table.insert(versions2, {mcver, branch_array}) end table.sort(versions2, function(ver1, ver2) return compare_version(ver1[1], ver2[1]) end) local result = {} for i, v in ipairs(versions2) do table.insert(result, ';' .. v[1]) for i2, branch in ipairs(v[2]) do table.insert(result, ':' .. format_single_version(branch.v, branch.type)) end end return table.concat(result, '\n') 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 local formatters = { ver = format_ver, infobox = format_infobox, mc = format_mc, mct = format_mct } --[=[ Точка входа для шаблона [[Шаблон:Модверсия]]. Для информации о параметрах см. документацию этого шаблона. ]=] function p.main(args) local mod_data = mw.loadData([[Модуль:Версия модификации/Данные]]) local mod_struct = assert( mod_data[args.mod], ("Модификации %s не найдено"):format(args.mod) ) 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 formatters[output_format] then format = output_format else error(("Указан неверный формат: %s"):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 
В данной статье используются материалы из статьи «Модуль:Версия модификации» с вики-сайта Minecraft Wiki, расположенного на Фэндоме, и они распространяются согласно лицензии Creative Commons Attribution-NonCommercial-ShareAlike 3.0. Авторы статьи.