Modul:Címlap

A Wikikönyvekből, a szabad elektronikus könyvtárból.
Ugrás a navigációhoz Ugrás a kereséshez

A modult a Modul:Címlap/doc lapon tudod dokumentálni

local getArgs = require('Modul:Arguments').getArgs
local p = {}

local function prepareArgs(args)
	local prepared, other = {}, {}
	for n, v in pairs(args) do
		if (type(n) == 'number') then
			local n2 = math.floor( (n+1) / 2)
			local nmod = n % 2
			if (nmod == 0) then
				nmod = 2
			end
			if prepared[n2] then
				prepared[n2][nmod] = v
			else
				prepared[n2] = { [nmod] = v }
			end
		else
			other[n] = v
		end
	end
	local sorted = {}
	local isContent = false
	for n, v in ipairs(prepared) do
		if v[1] ~= nil then
			table.insert( sorted, v )
			isContent = true
		end
	end
	if not isContent then
		sorted = nil
	end
	return sorted, other
end

local function text(name, extra, css, desc)
	local frame = mw.getCurrentFrame()
	local function ucfirst(t)
		return mw.language.getContentLanguage():ucfirst(t)
	end
	local function special(prop)
		return frame:expandTemplate { title = 'Portál/speciális', args = { name, prop } }
	end
	local file, txt
	local specialImg = special('ikon')
	local subpage = mw.title.new( 'Címlap:' .. ucfirst(name) .. '/ikon' )
	if (specialImg and specialImg ~= '') then
		file = specialImg
	elseif (subpage.exists) then
		file = frame:expandTemplate{ title = subpage }
	elseif (mw.title.new( 'Media:Portál ' .. name .. '.png' ).exists) then
		file = 'Portál ' .. name .. '.png'
	else
		file = 'Portal.svg'
	end
	file = '[[Fájl:' .. file .. '|25x25px|' .. name .. ']]'
	local specialTxt = special('név')
	if (specialTxt and specialTxt ~= '') then
		txt = specialTxt
	else
		txt = ucfirst(name) .. (extra or '') .. 'portál'
	end
	txt = ("%s '''[[Címlap:%s|%s]]'''"):format(file, name, txt)
	if desc then
		txt = txt .. ' ' .. frame:expandTemplate{ title = 'Portál/leírások', args = { name } }
	end
	local li = mw.html.create( 'li' )
	li
		:css(css)
		:wikitext(txt)
	return tostring(li)
end

local function getUl(args)
	local desc = (#args == 1)
	local function one(n, baseCss, moreCss)
		baseCss['float']	= moreCss.float
		baseCss['width']	= moreCss.width
		baseCss['margin-left']	= moreCss.mleft
		baseCss['margin-right']	= moreCss.mright
		return text(args[n][1], args[n][2], baseCss, desc)
	end
	local ul = mw.html.create( 'ul' )
	local css = {
		['display']	= 'block',
		['clear']	= 'both',
		['list-style-type']	= 'none',
		['list-style-image']	= 'none',
		['width']	= '100%',
		['vertical-align']	= 'middle',
		['margin']	= '0 0 1em',
		['padding']	= '0',
		['min-height'] = '27px'
	}
	ul:css(css)
	local liCss = {
		['height']	= '27px',
		['line-height']	= '25px',
		['margin-bottom']	= '0',
		['margin-top']	= '0.5em',
		['padding'] = '0',
		['border']	= '1px solid #ccf',
		['background-color']	= '#f0eeff'
	}
	for n, v in pairs(args) do
		local pos = n % 3
		local moreCss = {}
		if pos == 1 then
			moreCss.float	= 'left'
			if (args[n+2]) then
				moreCss.width	= '33%'
				moreCss.mleft	= '-4px'
				moreCss.mright	= '1%'
			elseif (args[n+1]) then
				moreCss.width	= '49%'
				moreCss.mleft	= '-3px'
				moreCss.mright	= '1%'
			else
				moreCss.width	= '100%'
				moreCss.mleft	= '0'
				moreCss.mright	= '0'
			end
		elseif pos == 2 then
			if (args[n+1]) then
				moreCss.float	= 'left'
				moreCss.width	= '32%'
				moreCss.mleft	= '0'
				moreCss.mright	= '1%'
			else
				moreCss.float	= 'right'
				moreCss.width	= '49%'
				moreCss.mleft	= '1%'
				moreCss.mright	= '-3px'
			end
		else
			moreCss.float	= 'right'
			moreCss.width	= '33%'
			moreCss.mleft	= '0'
			moreCss.mright	= '-4px'
		end
		ul:wikitext( one(n, liCss, moreCss) )
	end
	return tostring(ul)
end

function p._main(args)
	local configs
	args, configs = prepareArgs(args)
	local div = mw.html.create( 'div' )
	local divCss = {
		['margin-left']  = '0',
		['margin-right'] = '2px'
	}
	if (args) then
		div:wikitext( getUl(args) )
		if (args[3]) then
			divCss['margin-left']  = '4px'
			divCss['margin-right'] = '4px'
		elseif (args[2]) then
			divCss['margin-left']  = '3px'
			divCss['margin-right'] = '3px'
		end
	else
		-- ha a usernek baja van
		local errDiv = mw.html.create( 'div' )
		errDiv
			:addClass( 'error' )
			:css( 'font-size', 'larger' )
			:wikitext( "A {{portál}} sablon számára legalább egy paramétert meg kell adnod!" )
		div:wikitext( tostring( errDiv ) )
	end
	div
		:addClass( 'noprint' )
		:css(divCss)
		:tag( 'div' )
			:css( 'clear', 'both' )
	return tostring( div )
end

function p.main(frame)
	local args = getArgs( frame, { trim = false } )
	return p._main( args )
end

return p