Modul:Navigationsleiste

aus Wikipedia, der freien Enzyklopädie

Die Dokumentation für dieses Modul kann unter Modul:Navigationsleiste/Doku erstellt werden

-- Bitte weitere Funktionalität bei Bedarf hinzufügen.
-- Dieses Modul kann auch die Konvertierungen bestehender
-- Vorlagen vom Typ Navigationsleiste aufnehmen.

p = {}

-- Zweizeilige Navigationsleiste, die annotierbare Gruppen bildet
--   1. Zeile: Annotierbare Gruppen von Wikilinks, 2. Zeile: Annotationen
function p.Gemeindeteile( frame )
	local align, align2, samebox = 'center', nil, 'no'
	local border, color = '1px solid dimgray', 'dimgray'
	local lnks = mw.html.create( 'div' )
		:cssText( 'text-align:#ALIGN' )
		:tag( 'p' )
	local refs = mw.html.create( 'div' )
		:cssText( 'text-align:#ALGN2;color:#TCOLOR;font-size:small' )
		:tag( 'p' )
	local ref, ret = 0, {}
	
	for k, v in pairs( frame.args )
	do  local br, sup = nil, { '' }
		v = mw.text.trim( v )
		v = v:gsub( '^sup:[,%s%d]+', function( s )
			s:gsub( '%d+', function( _s ) sup[ #sup + 1 ] = _s end )
			return '' end )
		v, br = v:gsub( '^<br.->', '' )
		if type( k ) == 'number'
		then if not v:find( '^%[.*%]$' )
		then ref = ref + 1
			if ref > 1 and br < 1 then refs:wikitext( ' &nbsp; ' ) end
			if br > 0 then refs = refs:done():tag( 'p' ) end
			refs:wikitext( '<sup>' .. tostring( ref ) .. '</sup>&#8239;' .. v )
		else if #sup < 2 then sup[ #sup + 1 ] = tostring( ref + 1 ) end
			if ref > 0 and br < 1 then lnks:wikitext( ' •&nbsp;' ) end
			if br > 0 then lnks = lnks:done():tag( 'p' ) end
			lnks:tag( 'span' )
				:cssText( 'color:#TCOLOR;padding:1px 2px' )
				:cssText( 'border-bottom:#BORDER;border-right:#BORDER' )
				:wikitext( v:gsub( '%s*,%s*', '&nbsp;• ' ):sub( 1 ) )
			lnks:tag( 'sup' )
				:cssText( 'color:#TCOLOR' )
				:wikitext( table.concat( sup, '&#8239;' ) )
		end
		else if k:lower() == 'bild'   then ret.BILD = v
		else if k:lower() == 'titel'  then ret.TITEL = v
		else if k:lower() == 'rahmen' then border = v
		else if k:lower() == 'farbe'  then color = v
		else if k:lower() == 'zeilen' then align = v
		else if k:lower() == 'zeile2' then align2 = v
		else if k:lower() == 'einzug' then samebox = v
		end end end end end end end end
	end

	ret.INHALT = ( tostring( lnks:done() ) .. tostring( refs:done() ) )
		:gsub( '#BORDER', border )
		:gsub( '#TCOLOR', color )
		:gsub( '#ALIGN', align )
		:gsub( '#ALGN2', align2 or align )
	
	if samebox == 'fit' or samebox == 'yes'
	then local margin = '0px'
		if ret.BILD then margin = ret.BILD:gsub( '^.-([%d]+)px.*$', '%1' ) end
		ret.INHALT = '<div style="margin-left:' ..
			tostring( tonumber( margin ) + 8 ) ..
			'px">' .. ret.INHALT .. '</div>'
	end
	
	-- noch nicht als Modul verfügbar, expandTemplate nutzen
	return frame:expandTemplate{ title = 'Navigationsleiste', args = ret }
end

return p