Модуль:Схема

Материал из Playzone Minecraft Wiki
Перейти к: навигация, поиск

Для документации этого модуля может быть создана страница Модуль:Схема/doc

local p = {}
function p.table( f )
	local args = f.args
	if args[1] == nil then
		args = f:getParent().args
	end
	local caption = args["пояснение"] or ''
	local captionstyle = args["стильпояснения"] or ''
	local clear = args["очищать"] or ''
	local float = args["выравн"] or ''
	local size = tonumber( args["разм"] ) or 32
	local style = args["стиль"] or ''
	local tablestyle = args["стильтаблицы"] or ''
	local sprite = require( 'Модуль:Спрайт' )
	local ids = mw.loadData( 'Модуль:Схема/ID' )["IDы"]
	local titles = mw.loadData( 'Модуль:Схема/Комментарии' )
	local isTable = false
	if args[2] or '' ~= '' then
		isTable = true
	end
	local categories = {}
	
	if size ~= 32 then
		tablestyle = 'font-size:' .. size .. 'px;' .. tablestyle
	end
	
	local cols = 0
	local maxcols = 0
	local schematic = {}
	local title = ''
	for _, cell in ipairs( args ) do
		cell = mw.text.trim( cell )
		if isTable and cell ~= '-' then
			cols = cols + 1
			if cols > maxcols then
				maxcols = cols
			end
		end
		
		if cell == '' or cell == 'воздух' then
			if isTable then
				table.insert( schematic, '|' )
			else
				table.insert( schematic, '<br>' )
			end
		elseif isTable and cell == '-' then
			cols = 0
			
			table.insert( schematic, '|-' )
		else
			local layers = {}
			title = {}
			for layer in mw.text.gsplit( cell, '%s*+%s*' ) do
				local idData = ids[layer]
				if idData then
					local image, spriteCat = sprite.sprite{
						["настройки"] = 'Схема/Спрайт',
						["данныеID"] = idData,
						["масштаб"] = size / 16
					}
					table.insert( layers, image )
					table.insert( categories, spriteCat )
					
					if titles[layer] then
						table.insert( title, 1, titles[layer] )
					end
				else
					table.insert( layers, '<span class="text">' .. layer .. '</span>' )
				end
			end
			if args["текст"] then
				table.insert( layers, '<span class="text">' .. args["текст"] .. '</span>' )
			end
			
			if #title == 1 then
				title = mw.language.new("ru"):ucfirst(title[1])
			elseif #title > 0 then
				title = 'Сверху вниз: ' .. table.concat( title, '; ' )
			else
				title = ''
			end
			
			layers = table.concat( layers, '' )
			if isTable then
				if layers ~= '' then
					layers = '| title="' .. title .. '" | <div>' .. layers .. '</div>'
				else
					layers = '|'
				end
			end
			
			table.insert( schematic, layers )
		end
	end
	
	local attr = 'class="schematic" style="' .. tablestyle .. '"'
	if isTable then
		table.insert( schematic, 1, '{|' .. attr )
		table.insert( schematic, '|}' )
	else
		if #schematic == 0 then
			table.insert( schematic, '<br>' )
		end
		table.insert( schematic, 1, '<span ' .. attr .. ' title="' .. title .. '">' )
		table.insert( schematic, '</span>' )
	end
	
	local out
	if caption ~= '' or float ~= '' then
		if float == '' then
			float = 'right'
		end
		if clear == '' then
			clear = 'none'
		end
		
		local captionwidth = maxcols * ( size + 1 ) + 1
		if captionwidth < 182 then
			captionwidth = 182
		end
		
		if not args["безсправки"] and mw.title.getCurrentTitle().prefixedText ~= 'Справка:Схемы' then
			caption = '<span style="float:right;padding-left:0.5em">' ..
				sprite.sprite{
					["настройки"] = "КомментСпрайт",
					["ссылка"] = 'Справка:Схемы',
					["назв"] = 'Справка по схемам'
				} ..
				'</span>' .. caption
		end
		
		out = {
			'<div class="thumb t' .. float .. '" style="clear:' .. clear .. ';' .. style .. '">',
				'<div class="thumbinner" style="display:inline-block;max-width:' .. captionwidth .. 'px">\n',
					table.concat( schematic, '\n' ),
					'\n<div class="thumbcaption" style="' .. captionstyle .. '">\n' .. caption .. '</div>',
				'</div>',
			'</div>'
		}
		out = table.concat( out )
	else
		if isTable then
			out = table.concat( schematic, '\n' )
		else
			-- Inline schematic should be a single line
			out = table.concat( schematic )
		end
	end
	out = mw.ustring.gsub(mw.ustring.gsub(out, ' style=""', '' ), ' title=""%s*|?', '' )
	
	return out .. table.concat( categories )
end
return p