Модуль:Сетка
Материал из Hilarious Wiki
Для документации этого модуля может быть создана страница Модуль:Сетка/док
local p = {}
-- Отдельная ячейка
function p.cell(f)
local args = f.args or f
if f == mw.getCurrentFrame() and args[1] == nil then
args = f:getParent().args
end
args[1] = mw.text.trim( args[1] or '' )
local animated = args[1]:find( ';' )
local pageName = mw.title.getCurrentTitle().subpageText
local class = args['класс']
local align = args['выравн']
local background = args['фон']
local border = args['граница']
local default = args['умолчание']
local defaultCSS = args['умолчаниеCSS']
local mods = {}
if args['моды'] then
for mod in mw.text.gsplit(args['моды'], '%s*;%s*') do
table.insert(mods, mod)
end
end
local title = args['назв']
local link = args['ссылка']
local result = {'<span class="grid ' .. (class or '')}
table.insert(result, '"')
if align or background or border then
table.insert(result, 'style="')
if align then
table.insert(result, 'vertical-align: ' .. align .. ';')
end
if background then
table.insert(result, 'background-color: ' .. background .. ';')
end
if border then
table.insert(result, 'outline: 2px solid ' .. border .. ';')
end
table.insert(result, '"')
end
table.insert(result, '>')
if class ~= 'hidden' then
table.insert(result, '<span class="border"><span> </span></span>')
end
if default then
table.insert(result, '<span class="default-image">[[Файл:Grid ' .. default .. '.png|link=]]</span>')
end
if defaultCSS then
table.insert(result, '<span class="default-image">' .. defaultCSS .. '</span>')
end
-- Начало кода Сетка/Ячейка
if animated then
table.insert(result, '<span class="animated" style="overflow:hidden;display:block;width:32px">')
end
local b = false
for frame in mw.text.gsplit(args[1], '%s*;%s*') do
local num, mod, name
if frame:find(',') then
local fullname
fullname, num = frame:match('([^,]+),(%d+)')
if fullname:find(':') then
name, mod = fullname:match('([^:]+):m(%d+)')
mod = mods[tonumber(mod)]
else
name = fullname
mod = nil
end
else
num = nil
if frame:find(':') then
name, mod = frame:match('([^:]+):m(%d+)')
mod = mods[tonumber(mod)]
else
name = frame
mod = nil
end
end
if b then
table.insert(result, '<span class="image active">')
b = false
else
table.insert(result, '<span class="image">')
end
-- Начало кода Сетка/Спрайт
table.insert(result, '<span class="gridsprite" ')
if title then
if mw.ustring.lower(title) ~= 'нет' then
table.insert(result, 'title="' .. title .. '"')
end
else
if frame ~= '' then
if mw.ustring.lower(link or '') == 'нет' then
table.insert(result, 'title="' .. name .. '"')
end
end
end
table.insert(result, '>')
if frame ~= '' then
table.insert(result, '[[Файл:Grid ')
if mod then
table.insert(result, name .. ' (' .. mod .. ')')
else
table.insert(result, name)
end
table.insert(result, '.png|32px|link=')
if not title then
if link then
if mw.ustring.lower(link) ~= 'нет' then
if mod then
table.insert(result, mod .. '/' .. link)
else
table.insert(result, link)
end
end
else
if mod then
table.insert(result, mod .. '/' .. name)
else
table.insert(result, name)
end
end
end
table.insert(result, ']]')
if tonumber(num) then
num = tonumber(num)
if (num > 1) and (num < 1000) then
table.insert(result, '<span class="number" ')
if title then
if mw.ustring.lower(title) ~= 'нет' then
table.insert(result, 'title="' .. title .. '"')
end
else
if frame ~= '' then
if mw.ustring.lower(link or '') == 'нет' then
table.insert(result, 'title="' .. name .. '"')
end
end
end
table.insert(result, '>')
if title then
table.insert(result, tostring(num))
else
if link then
if mw.ustring.lower(link) == 'нет' then
table.insert(result, '|' .. tostring(num) .. '<span>' .. tostring(num) .. '</span>')
else
table.insert(result, '[[')
if mod then
table.insert(result, mod .. '/' .. name)
else
table.insert(result, name)
end
table.insert(result, '|' .. tostring(num) .. '<span>' .. tostring(num) .. '</span>]]')
end
else
table.insert(result, '[[')
if mod then
table.insert(result, mod .. '/' .. name)
else
table.insert(result, name)
end
table.insert(result, '|' .. tostring(num) .. '<span>' .. tostring(num) .. '</span>]]')
end
end
table.insert(result, '</span>')
end
end
else
table.insert(result, '[[Файл:Grid layout Empty.png|32px|link=]]')
end
table.insert(result, '</span>')
table.insert(result, '</span>')
-- Конец кода Сетка/Спрайт
end
if animated then
table.insert(result, '</span>')
end
-- Конец кода Сетка/Ячейка
table.insert(result, '</span>')
return table.concat(result)
end
--- Варианты сеток; прописаны в модуле для избежания многочисленных вызовов {{#invoke:}} на одну сетку
-- Верстак
function p.craftingTable( f )
local args = f.args or f
if f == mw.getCurrentFrame() and f.args["Выход"] == nil then
args = f:getParent().args
end
local arrow = 'Arrow (small)'
local shapeless = ''
if args["Стрелка"] or '' ~= '' then
arrow = args["Стрелка"]
end
if args["бесформенный"] or '' ~= '' then
shapeless = '<span title="Этот рецепт — бесформенный; ресурсы могут располагаться в сетке верстака в любом порядке.">[[Файл:Grid layout Shapeless.png|link=]]</span>'
elseif args["фиксированный"] or '' ~= '' then
local notFixed = ''
if args["нефиксировано"] or '' ~= '' then
notFixed = ', кроме ' .. args["нефиксировано"]
end
shapeless = '<span title="Этот рецепт — фиксированный, его ингредиенты не могут быть перемещены или зеркально отражены' .. notFixed .. '.">[[Файл:Grid layout Fixed.png|link=]]</span>'
end
local html = {
'{| class="grid-Crafting_Table" cellpadding="0" cellspacing="0"',
'| ' .. p.cell{ args.A1, ["моды"] = args["Моды"], ["ссылка"] = args["A1Ссылка"], ["назв"] = args["A1Назв"] },
'| ' .. p.cell{ args.B1, ["моды"] = args["Моды"], ["ссылка"] = args["B1Ссылка"], ["назв"] = args["B1Назв"] },
'| ' .. p.cell{ args.C1, ["моды"] = args["Моды"], ["ссылка"] = args["C1Ссылка"], ["назв"] = args["C1Назв"] },
'| rowspan="2" class="arrow" | [[Файл:Grid layout ' .. arrow .. '.png|link=]]',
'| rowspan="3" | ' .. p.cell{ args["Выход"], ["моды"] = args["Моды"], ["ссылка"] = args["ВСсылка"], ["назв"] = args["ВНазв"], ["класс"] = 'output' },
'|-',
'| ' .. p.cell{ args.A2, ["моды"] = args["Моды"], ["ссылка"] = args["A2Ссылка"], ["назв"] = args["A2Назв"] },
'| ' .. p.cell{ args.B2, ["моды"] = args["Моды"], ["ссылка"] = args["B2Ссылка"], ["назв"] = args["B2Назв"] },
'| ' .. p.cell{ args.C2, ["моды"] = args["Моды"], ["ссылка"] = args["C2Ссылка"], ["назв"] = args["C2Назв"] },
'|-',
'| ' .. p.cell{ args.A3, ["моды"] = args["Моды"], ["ссылка"] = args["A3Ссылка"], ["назв"] = args["A3Назв"] },
'| ' .. p.cell{ args.B3, ["моды"] = args["Моды"], ["ссылка"] = args["B3Ссылка"], ["назв"] = args["B3Назв"] },
'| ' .. p.cell{ args.C3, ["моды"] = args["Моды"], ["ссылка"] = args["C3Ссылка"], ["назв"] = args["C3Назв"] },
'| class="shapeless" | ' .. shapeless,
'|}'
}
return table.concat( html, '\n' );
end
-- Печка
function p.furnace(f)
local args = f
if f == mw.getCurrentFrame() then
args = f:getParent().args
end
args = require( 'Module:ProcessArgs' ).norm( args )
local progress = 'Furnace Progress'
local burning = ' (in-active)'
local smelting = burning
local fuelUsage = 'Fire'
if args["Прогресс"] then
progress = args["Прогресс"] .. ' Progress'
if args["ТМод"] then
progress = progress .. ' (' .. args["ТМод"] .. ')'
end
end
if args["Ресурс"] and args["Топливо"] then
burning = ''
if args["Выход"] then
smelting = ''
end
end
if args["Расход"] then
fuelUsage = args["Расход"]
if args["ТМод"] then
fuelUsage = fuelUsage .. ' (' .. args["ТМод"] .. ')'
end
end
local html = {
'{| class="grid-Furnace" cellpadding="0" cellspacing="0"',
'| ' .. p.cell{ args["Ресурс"], ["моды"] = args["Моды"], ["ссылка"] = args["РСсылка"], ["назв"] = args["РНазв"] },
'| rowspan="3" class="arrow" | [[Файл:Grid layout ' .. progress .. smelting .. '.png|link=]]',
'| rowspan="3" class="output" | ' .. p.cell{ args["Выход"], ["моды"] = args["Моды"], ["ссылка"] = args["ВСсылка"], ["назв"] = args["ВНазв"], ["класс"] = 'output' },
'|-',
'| [[Файл:Grid layout ' .. fuelUsage .. burning .. '.png|link=]]',
'|-',
'| ' .. p.cell{ args["Топливо"], ["моды"] = args["Моды"], ["ссылка"] = args["ТСсылка"], ["назв"] = args["ТНазв"] },
'|}'
}
return table.concat( html, '\n' );
end
-- Варочная стойка
function p.brewingStand( f )
local args = f
if f == mw.getCurrentFrame() then
args = f:getParent().args
end
args = require( 'Module:ProcessArgs' ).norm( args )
local inactive = ' (In-active)'
if args["Ресурс"] and ( args["Выход1"] or args["Выход2"] or args["Выход3"] ) then
inactive = ''
end
local html = {
'<div class="grid-Brewing_Stand">',
'{| cellpadding="0" cellspacing="0"',
'| class="bubbles" | [[Файл:Grid layout Brewing Bubbles.gif|link=]]',
'| class="input" | ' .. p.cell{ args["Ресурс"], ["моды"] = args["Моды"], ["ссылка"] = args["РСсылка"], ["назв"] = args["РНазв"] },
'| [[Файл:Grid layout Brewing Arrow' .. inactive .. '.png|link=]]',
'|-',
'| class="output1" | ' .. p.cell{ args["Выход1"], ["моды"] = args["Моды"], ["ссылка"] = args["В1Ссылка"], ["назв"] = args["В1Назв"], ["умолчание"] = 'layout Brewing Empty' },
'| class="output2" | ' .. p.cell{ args["Выход2"], ["моды"] = args["Моды"], ["ссылка"] = args["В2Ссылка"], ["назв"] = args["В2Назв"], ["умолчание"] = 'layout Brewing Empty' },
'| class="output3" | ' .. p.cell{ args["Выход3"], ["моды"] = args["Моды"], ["ссылка"] = args["В3Ссылка"], ["назв"] = args["В3Назв"], ["умолчание"] = 'layout Brewing Empty' },
'|-',
'| class="paths" colspan="3" | [[Файл:Grid layout Brewing Paths.png|link=]]',
'|}',
'</div>'
}
return table.concat( html, '\n' );
end
return p