Modul:Portál

A Wikipédiából, a szabad enciklopédiából

Portál[mi ez?] • [dokumentáció: mutat, szerkeszt] • [tesztek: létrehozás]

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

local function prepareArgs(args)
	local prepared, other = {}, {}
	for _, v in ipairs( args ) do
		if mw.title.new( 'Portál:' .. v ) and mw.title.new( 'Portál:' .. v ).exists then
			table.insert( prepared, { mw.text.trim( v ) } )
		-- ne pakoljon a prepared[0]-ba, gyakori {{portál|X|-|}} paramétermegadás
		-- javítása (kategorizálandó?)
		elseif #prepared > 0 and prepared[#prepared][2] == nil then
			prepared[#prepared][2] = v
		end
	end
	for n, v in pairs( args ) do
		if type(n) ~= 'number' and v ~= '' then
			other[ n ] = v
		end
	end
	if #prepared == 0 then
		prepared = nil
	end
	return prepared, 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( 'Portál:' .. 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 = string.format( "%s '''[[Portál:%s|%s]]'''", 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 = {
		['min-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(frame)
	local args = getArgs( frame, { trim = false, removeBlanks = false } )
	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( 'portalbox noprint noviewer' )
		:css(divCss)
	return tostring( div )
end

return p