Модуль:Многослойная схема
Внешний вид
Для документации этого модуля может быть создана страница Модуль:Многослойная схема/doc
local p = {}
local getLayerSize = function( data )
local width = 0
local height = #data
for _, v in ipairs( data ) do
width = math.max( #v, width )
end
return width, height
end
p.main = function( f )
local args = f
if f == mw.getCurrentFrame() then
args = f:getParent().args
else
f = mw.getCurrentFrame()
end
local blockGrid = require( [[Модуль:БлокСетка]] ).grid
local keys = {}
for k, v in pairs( args ) do
if type( k ) == 'string' and #k == 1 then
keys[k] = v
end
end
local layerNames = {}
local layers = {}
local width = 0
local height = 0
local scale = args["масштаб"] or 1
for _, v in ipairs( args ) do
if v:match( '%-%-%-%-' ) then
table.insert( layerNames, mw.text.trim( string.sub( v, 5 ) ) )
else
local data = mw.text.split( mw.text.trim( v, '\n' ), '\n' )
local layerWidth, layerHeight = getLayerSize( data )
width = math.max( layerWidth, width )
height = math.max( layerHeight, height )
data.keys = keys
data.scale = scale
table.insert( layers, blockGrid( data ) )
end
end
local name = args["название"]:gsub( ' ', '_' )
local defaultLayer = args["по-умолчанию"]
local body = mw.html.create( 'div' ):addClass( 'layered-blueprint' ):css( {
width = width * 16 * scale .. 'px',
['min-height'] = height * 16 * scale .. 'px'
} )
for i, v in ipairs( layerNames ) do
local tab_div = mw.html.create( 'div' )
tab_div
:attr( 'id', name .. '-layer' .. i )
:attr( 'class', 'layered-blueprint-tab' )
:attr( 'data-name', name )
:attr( 'data-checked', tostring( v == defaultLayer or not defaultLayer and i == 1 ) )
:wikitext( v )
body:wikitext( tostring( tab_div ) )
body:tag( 'div' ):addClass( 'layered-blueprint-layer' ):newline():wikitext( layers[i] )
end
return body
end
return p