ФЭНДОМ


 
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 '' )
 
	if not args.noalias then
		-- Comment this next line out if you're not using aliases
		local aliases = mw.loadData( 'Module:Grid/Aliases' )
 
		local modAliases = args.modaliases or ''
		if modAliases ~= '' then
			modAliases = mw.loadData( 'Module:' .. modAliases )
		else
			modAliases = nil
		end
 
		if aliases or modAliases then
			local frames = {}
			for frame in mw.text.gsplit( args[1], '%s*;%s*' ) do
				local frameParts = p.getParts( frame, args.mod )
 
				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
					table.insert( frames, p.expandAlias( frameParts, alias ) )
				else
					table.insert( frames, frame )
				end
			end
 
			args[1] = table.concat( frames, ';' )
		end
	end
 
	local animated = args[1]: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( args[1], '%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.mod )
			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 = 'Mods/' .. 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 .. '>',
					'[[File: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 .. '">[[File:Grid ' .. args.default .. '.png|32x32px|alt=|link=]]</span>' )
	end
 
	html = table.concat( html, '' ):gsub( ' "', '"' )
	return html
end
 
function p.expandAlias( frameParts, alias )
	-- If the frame has no parts, we can just return the alias as-is
	if not frameParts.title and not frameParts.mod and not frameParts.num and not frameParts.text then
		return alias
	end
 
	local expandedFrames = {}
	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 ''
 
		table.insert( expandedFrames, string.format( '[%s]%s:%s,%s[%s]', aliasParts.title, aliasParts.mod, aliasParts.name, aliasParts.num, aliasParts.text ) )
	end
 
	return table.concat( expandedFrames, ';' )
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.arrow or '' ~= '' then
		arrow = args.arrow .. ' (' .. args.Mod .. ')'
	end
	if args.shapeless or '' ~= '' then
		shapeless = '<span title="This recipe is shapeless; the inputs may be placed in any arrangement in the crafting grid.">[[File:Grid layout Shapeless.png|link=]]</span>'
	elseif args.fixed or '' ~= '' then
		local notFixed = ''
		if args.notfixed or '' ~= '' then
			notFixed = '; except for ' .. args.notfixed .. ', which can go anywhere'
		end
		shapeless = '<span title="This recipe is fixed, the input arrangement may not be moved or mirrored' .. notFixed .. '.">[[File:Grid layout Fixed.png|link=]]</span>'
	end
 
	local html = {
		'{| class="grid-Crafting_Table" cellpadding="0" cellspacing="0"',
		'| ' .. p.cell{ args.A1, mod = args.Mod, link = args.A1link, title = args.A1title },
		'| ' .. p.cell{ args.B1, mod = args.Mod, link = args.B1link, title = args.B1title },
		'| ' .. p.cell{ args.C1, mod = args.Mod, link = args.C1link, title = args.C1title },
		'| rowspan="2" class="arrow" | [[File:Grid layout ' .. arrow .. '.png|link=]]',
		'| rowspan="3" | ' .. p.cell{ args.Output, mod = args.Mod, link = args.Olink, title = args.Otitle, class = 'output' },
		'|-',
		'| ' .. p.cell{ args.A2, mod = args.Mod, link = args.A2link, title = args.A2title },
		'| ' .. p.cell{ args.B2, mod = args.Mod, link = args.B2link, title = args.B2title },
		'| ' .. p.cell{ args.C2, mod = args.Mod, link = args.C2link, title = args.C2title },
		'|-',
		'| ' .. p.cell{ args.A3, mod = args.Mod, link = args.A3link, title = args.A3title },
		'| ' .. p.cell{ args.B3, mod = args.Mod, link = args.B3link, title = args.B3title },
		'| ' .. p.cell{ args.C3, mod = args.Mod, link = args.C3link, title = args.C3title },
		'| class="shapeless" | ' .. shapeless,
		'|}'
	}
 
	return table.concat( html, '\n' );
end
 
-- Furnace
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.Progress then
		progress = args.Progress .. ' Progress'
		if args.Mod then
			progress = progress .. ' (' .. args.Mod .. ')'
		end
	end
 
	if args.Input and args.Fuel then
		burning = ''
		if args.Output then
			smelting = ''
		end
	end
 
	if args.FuelUsage then
		fuelUsage = args.FuelUsage
		if args.Mod then
			fuelUsage = fuelUsage .. ' (' .. args.Mod .. ')'
		end
	end
 
	local html = {
		'{| class="grid-Furnace" cellpadding="0" cellspacing="0"',
		'| ' .. p.cell{ args.Input, mod = args.Mod, link = args.Ilink, title = args.Ititle },
		'| rowspan="3" class="arrow" | [[File:Grid layout ' .. progress .. smelting .. '.png|link=]]',
		'| rowspan="3" class="output" | ' .. p.cell{ args.Output, mod = args.Mod, link = args.Olink, title = args.Otitle, class = 'output' },
		'|-',
		'| [[File:Grid layout ' .. fuelUsage .. burning .. '.png|link=]]',
		'|-',
		'| ' .. p.cell{ args.Fuel, mod = args.Mod, link = args.Flink, title = args.Ftitle },
		'|}'
	}
 
	return table.concat( html, '\n' );
end
 
-- Brewing Stand
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.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" | [[File: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" | [[File:Grid layout Brewing Paths.png|link=]]',
			'|}',
		'</div>'
	}
 
	return table.concat( html, '\n' );
end
 
return p

Обнаружено использование расширения AdBlock.


Викия — это свободный ресурс, который существует и развивается за счёт рекламы. Для блокирующих рекламу пользователей мы предоставляем модифицированную версию сайта.

Викия не будет доступна для последующих модификаций. Если вы желаете продолжать работать со страницей, то, пожалуйста, отключите расширение для блокировки рекламы.