Модуль:Схема
Материал из 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