Module:Flex columns

From OpenStreetMap Wiki
Jump to navigation Jump to search
[Edit] [Purge] Documentation

Usage

Implements {{Flex columns}}

local p = {}

local function setCleanArgs(argsTable)
	local cleanArgs = {}
	for key, val in pairs(argsTable) do
		if type(val) == 'string' then
			val = val:match('^%s*(.-)%s*$')
			if val ~= '' then
				cleanArgs[key] = val
			end
		else
			cleanArgs[key] = val
		end
	end
	return cleanArgs
end

p.main = function(frame)
	local parent = frame.getParent(frame)
	local output = p._main(parent.args)
	return -- frame:extensionTag{
		-- name='templatestyles', args = { src='Module:Flex columns/styles.css'}
		-- } ..
	frame:preprocess(output)
end

p._main = function(_args)
	local args = setCleanArgs(_args)
	local ii = 1
	local container = mw.html.create('div')
		:css('clear', 'both' )
		:css('width', '100%' )
		:css('display', 'flex' )
		:css('flex-wrap', 'wrap' )
	while args[ii] do
		local column = container:tag('div')
		:css('float', 'left' )
		:css('width', '50%' )
		:css('min-width', '360px')
		:css('padding', '0 0.5em')
		:css('box-sizing', 'border-box')
		:css('flex', '1')
		:css('display', 'flex')
		:css('flex-direction', 'column')
		:wikitext(args[ii])
		if ii==1 then
			column:css('padding-left',0)
		end
		if not(args[ii+1]) then
			column:css('padding-right',0)
		end
		if args['flex'..ii] then
			column:css('flex', args['flex'..ii])
		end
		ii = ii + 1
	end
	return tostring(container)
end

return p