Модуль:Grid — различия между версиями
Материал из Playzone Minecraft Wiki
(к удалению) |
Softer (обсуждение | вклад) м (1 версия импортирована) |
(нет различий)
| |
Текущая версия на 00:26, 18 января 2017
Для документации этого модуля может быть создана страница Модуль:Grid/doc
--[[ МОДУЛЬ ВЫСТАВЛЕН К УДАЛЕНИЮ:
Это устаревший аналог модулей Инвентарный слот и Интерфейс.
]]
local p = {}
-- Individual cell
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 input = ''
if args[2] ~= nil then
local s = mw.text.split(args[1], '%s*,%s*')
local t = mw.text.split(args[2], '%s*,%s*')
local o = ""
for i = 1, #t do o = o .. s[i] .. ',' .. t[i] .. ';' end
input = o:sub(1,#o-1)
else
input = string.gsub(args[1], ',', ';')
end
-- Comment this next line out if you're not using aliases
-- ! TBI
--[[local aliases = mw.loadData( 'Модуль:Grid/Aliases' )
local modAliases = args.modaliases or ''
if modAliases ~= '' then
modAliases = mw.loadData( 'Модуль:' .. modAliases )
else
modAliases = nil
end
if aliases or modAliases then
local frames = {}
for frame in mw.text.gsplit( input, '%s*;%s*' ) do
local frameParts = p.getParts( frame, args['мод'] )
local id = frameParts.name
if frameParts.mod then
id = frameParts.mod .. ':' .. id
end
local alias
if modAliases and modAliases[id] then
alias = modAliases[id]
elseif aliases and aliases[id] then
alias = aliases[id]
end
if alias then
local aliasFrames = {}
for aliasFrame in mw.text.gsplit( alias, '%s*;%s*' ) do
local aliasParts = p.getParts( aliasFrame )
aliasParts.title = frameParts.title or aliasParts.title or ''
aliasParts.mod = frameParts.mod or aliasParts.mod or 'Minecraft'
aliasParts.num = frameParts.num or aliasParts.num or ''
aliasParts.text = frameParts.text or aliasParts.text or ''
aliasFrames[#aliasFrames + 1] = string.format( '[%s]%s:%s,%s[%s]', aliasParts.title, aliasParts.mod, aliasParts.name, aliasParts.num, aliasParts.text )
end
frames[#frames + 1] = table.concat( aliasFrames, ';' )
else
frames[#frames + 1] = frame
end
end
args[1] = table.concat( frames, ',' )
end ]]
-- ! TBI
local animated = input:find( ';' )
local pageName = mw.title.getCurrentTitle().subpageText
local class = args.class or ''
local imgClass = args.imgclass or ''
local style = args.style or ''
local align = args.align or ''
local numStyle = args.numstyle or ''
local cell = {}
for frame in mw.text.gsplit( input, '%s*;%s*' ) do
if frame == '' then
if animated then
table.insert( cell, '<span class="item"><br></span>' )
else
table.insert( cell, '<br>' )
end
else
local parts = p.getParts( frame, args['мод'] )
local tooltipTitle = parts.title
local mod = parts.mod
local name = parts.name
local num = parts.num
local tooltipDesc = parts.text
local img
if mod then
img = name .. ' (' .. mod .. ')'
else
img = name
end
local link = args.link or ''
if link == '' then
if name == pageName then
link = 'none'
elseif mod then
link = mod .. '/' .. name
else
link = name
end
end
local title = args.title or ''
if title == '' then
if tooltipTitle then
title = tooltipTitle:gsub( '&[0-9a-fk-or]', '' )
end
if mw.text.trim( title ) == '' or link:lower() == 'none' or link ~= name:gsub( '%s%(.*', '' ) then
title = name
end
end
if not tooltipTitle and title:lower() == 'none' then
tooltipTitle = 0
end
local alt = img
if title:lower() ~= 'none' then
alt = title
end
if link:lower() == 'none' then
link = ''
end
if title:lower() == 'none' then
title = ''
end
local tooltip = ''
if tooltipTitle then
tooltip = ' data-minetip-title="' .. tooltipTitle .. '"'
end
if tooltipDesc then
tooltip = tooltip .. ' data-minetip-text="' .. tooltipDesc .. '"'
end
local image = {
'<span class="item ' .. imgClass .. '" title="' .. title .. '"' .. tooltip .. '>',
'[[Файл:Grid ' .. img .. '.png|32x32px|link=' .. link .. '|alt=' .. alt .. ']]',
'</span>',
}
image[1] = image[1]:gsub( ' title=""', '' )
image[2] = image[2]:gsub( '||', '|' )
if num and num > 1 and num < 1000 then
if link ~= '' then
num = '[[' .. link .. '|' .. num .. ']]'
end
if numStyle ~= '' then
numStyle = ' style="' .. numStyle .. '"'
end
table.insert( image, 3, '<span class="number"' .. numStyle .. '>' .. num .. '</span>' )
end
table.insert( cell, table.concat( image, '' ) )
end
end
if animated then
cell[1] = cell[1]:gsub( 'class="item', 'class="item active' )
class = 'animated ' .. class
end
local styles = {}
if align ~= '' then
table.insert( styles, 'vertical-align:' .. align )
end
if style ~= '' then
table.insert( styles, style )
end
if #styles > 0 then
styles = ' style="' .. table.concat( styles, ';' ) .. '"'
else
styles = ''
end
local html = {
'<span class="grid ' .. class .. '"' .. styles .. '>',
table.concat( cell, '' ),
'</span>'
}
if ( args.default or '' ) ~= '' then
local defaultClass = ''
if animated then
defaultClass = ' skip'
end
table.insert( html, 2, '<span class="default-item' .. defaultClass .. '">[[Файл:Grid ' .. args.default .. '.png|32x32px|alt=|link=]]</span>' )
end
html = table.concat( html, '' ):gsub( ' "', '"' )
return html
end
function p.getParts( frame, mod )
local parts = {}
parts.title = frame:match( '^%[%s*([^%]]+)%s*%]' )
parts.mod = mw.text.trim( frame:match( '([^:%]]+):' ) or mod or '' )
local vanilla = { v = 1, vanilla = 1, mc = 1, minecraft = 1 }
if parts.mod == '' or vanilla[mw.ustring.lower( parts.mod )] then
parts.mod = nil
end
local nameStart = ( frame:find( ':' ) or frame:find( '%]' ) or 0 ) + 1
if nameStart - 1 == #frame then
nameStart = 1
end
parts.name = mw.text.trim( frame:sub( nameStart, ( frame:find( '[,%[]', nameStart ) or 0 ) - 1 ) )
parts.num = math.floor( frame:match( ',%s*(%d+)' ) or 0 )
if parts.num == 0 then
parts.num = nil
end
parts.text = frame:match( '%[%s*([^%]]+)%s*%]$' )
return parts
end
--- GUI variants; called directly to avoid the overhead of a bunch of #invoke calls per GUI
-- Crafting table
function p.craftingTable( f )
local args = f
if f == mw.getCurrentFrame() then
args = f:getParent().args
end
local arrow = 'Arrow (small)'
local shapeless = ''
if args['Стрелка'] or '' ~= '' then
arrow = args['Стрелка'] .. ' (' .. args['Мод'] .. ')'
end
if args['бесформенный'] or '' ~= '' then
shapeless = '<span title="Этот рецепт является бесформенным; ресурсы в сетке крафта могут быть размещены в любом порядке.">[[Файл:Grid layout Shapeless.png|link=]]</span>'
end
local html = {
'{| class="grid-Crafting_Table" cellpadding="0" cellspacing="0"',
'| ' .. p.cell{ args.A1, ['мод'] = args['Мод'], link = args.A1link, title = args.A1title },
'| ' .. p.cell{ args.B1, ['мод'] = args['Мод'], link = args.B1link, title = args.B1title },
'| ' .. p.cell{ args.C1, ['мод'] = args['Мод'], link = args.C1link, title = args.C1title },
'| rowspan="2" class="arrow" | [[File:Grid layout ' .. arrow .. '.png|link=]]',
'| rowspan="3" | ' .. p.cell{ args['Выход'], ['мод'] = args.Mod, link = args.Olink, title = args.Otitle, class = 'output' },
'|-',
'| ' .. p.cell{ args.A2, ['мод'] = args['Мод'], link = args.A2link, title = args.A2title },
'| ' .. p.cell{ args.B2, ['мод'] = args['Мод'], link = args.B2link, title = args.B2title },
'| ' .. p.cell{ args.C2, ['мод'] = args['Мод'], link = args.C2link, title = args.C2title },
'|-',
'| ' .. p.cell{ args.A3, ['мод'] = args['Мод'], link = args.A3link, title = args.A3title },
'| ' .. p.cell{ args.B3, ['мод'] = args['Мод'], link = args.B3link, title = args.B3title },
'| ' .. p.cell{ args.C3, ['мод'] = args['Мод'], link = args.C3link, title = args.C3title },
'| 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( 'Модуль: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.Output then
smelting = ''
end
end
if args.FuelUsage then
fuelUsage = args.FuelUsage
if args.Mod then
fuelUsage = fuelUsage .. ' (' .. args['Мод'] .. ')'
end
end
local html = {
'{| class="grid-Furnace" cellpadding="0" cellspacing="0"',
'| ' .. p.cell{ args['Ресурс'], ['мод'] = args['Мод'], link = args.Ilink, title = args.Ititle },
'| rowspan="3" class="arrow" | [[Файл:Grid layout ' .. progress .. smelting .. '.png|link=]]',
'| rowspan="3" class="output" | ' .. p.cell{ args['Выход'], ['мод'] = args['Мод'], link = args.Olink, title = args.Otitle, class = 'output' },
'|-',
'| [[File:Grid layout ' .. fuelUsage .. burning .. '.png|link=]]',
'|-',
'| ' .. p.cell{ args['Топливо'], ['мод'] = args['Мод'], link = args.Flink, title = args.Ftitle },
'|}'
}
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( 'Модуль:ProcessArgs' ).norm( args )
local inactive = ' (In-active)'
if args.Input and ( args.Output1 or args.Output2 or args.Output3 ) 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.Input, mod = args.Mod, link = args.Ilink, title = args.Ititle },
'| [[File:Grid layout Brewing Arrow' .. inactive .. '.png|link=]]',
'|-',
'| class="output1" | ' .. p.cell{ args.Output1, mod = args.Mod, link = args.O1link, title = args.O1title, default = 'layout Brewing Empty' },
'| class="output2" | ' .. p.cell{ args.Output2, mod = args.Mod, link = args.O2link, title = args.O2title, default = 'layout Brewing Empty' },
'| class="output3" | ' .. p.cell{ args.Output3, mod = args.Mod, link = args.O3link, title = args.O3title, default = 'layout Brewing Empty' },
'|-',
'| class="paths" colspan="3" | [[Файл:Grid layout Brewing Paths.png|link=]]',
'|}',
'</div>'
}
return table.concat( html, '\n' );
end
return p