Modul:Vorlage:Babel

aus Wikipedia, der freien Enzyklopädie

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

-- Babel -- 20150708
-- ursprünglich aus der Esperanto-Wikipedia, aber von Tlustulimu teilweise nach dem 
-- englischen Modul angepaßt, weil anders der erste unbenannte Parameter nicht
-- wie gewünscht funktionierte.

function subtitle(text)
	-- This function builds subtitles in the box
				local sub_title = mw.html.create('table')
				  :css('text-align','center')
				  :css('width','100%')
				  :css('margin','0 auto')
				local row =  sub_title:tag('tr')
				local sub_title_cell =  row:tag('th')
				   :css('background-color','#EEFFCC')
				   :css('border','1px dotted #FFCC99')
				   :css('padding','0.3em')				   
				   :wikitext(text)
				   :done()
				-- sub_title:done()
				return tostring(sub_title)
end	


local p = {}

function p.babel(frame)  
	-- This function builds the babel box used by the {{babel}} template.
	if not getArgs then
		getArgs = require('Module:Arguments').getArgs
	end
	--local args = getArgs(frame, {wrappers = 'Template:Babel'})
	local args = getArgs(frame, {wrappers = 'Benutzer:Tlustulimu/Vorlage:Babel'})

	local tab = ""
	local frame = mw.getCurrentFrame()	
	local first = false
	if args[1] and args[1]:find('%S') then
		first = true
	end
	
	-- variables for the babel cells
	local t1 = "<tr><td>"
	local t2 = "</td></tr>"
	local mf = args.mw or "{{GENDER:{{BASEPAGENAME}}|m|w|}}"
	
	-- "remove" args[1] so it isn't looked at in the loop
	-- table.remove(args,1) doesn't produce desired result
	if first == false then
		args[1] = ''	
	end	
	
	-- creates the table cell's beginning
	tab = tab .. t1

	-- Keep track of how many columns are in this table
	local col_span = 1
	for _, v in ipairs( args ) do
		-- ! indicates a new cell should be created
		if v:find('%S') and v ~= '!' then
			if mw.ustring.sub(v,1,2) == "[[" then
				tab = tab .. v 
			elseif mw.ustring.sub(v,1,2) == "{{" and mw.ustring.sub(v,1,3) ~= "{{{" then	
				tab = tab .. v 
			elseif mw.ustring.sub(v,1,1) == "<" then
				tab = tab .. v 
			-- converts the text with ## at the begining into subtitle	
			elseif mw.ustring.sub(v,1,2) == "##" then
				v = mw.ustring.sub(v,3)
				tab = tab .. subtitle(v) 
			-- code for {{#Babel, because the parser analyzed this before Lua can work			
			elseif mw.ustring.sub(v,1,3) == "#b#" or mw.ustring.sub(v,1,3) == "#B#"	then
				local v = mw.ustring.sub(v,4) 
				-- removes the internal links 
				v = mw.ustring.gsub(v,"%[%[Project:Babel%|Babel – Benutzerinformationen%]%]","",1)
				v = mw.ustring.gsub(v,"%[%[:Kategorie:Benutzer:nach Sprache%|Benutzer nach Sprache%]%]","",1)				
				v = '<div style="width:246px; float:left;">' .. v .. "</div>"
				tab = tab .. v
				
			else	
				tab = tab .. frame:preprocess('{{User '..v.. '|mw=' .. mf .. '}}') 
			end
		-- Recycling body_cells for <td>
		elseif v and v == '!' then
			col_span = col_span + 1
			tab = tab .. '</td><td>' -- end of the table cell and beginn of a new one, for more then one column
--			body_cells = row2:tag('td')
		end
	end

	-- creates the title line of the table
	local fl = args.float or args.align or ""
	local color = args.color or ""
	local header = ""
	local t = args.titel or args.Titel or '[[Wikipedia:Babel|Babel:]]'	
	local c = ""
	local c2 = ""
	if color ~= "" then
		c = 'style="background-color:' .. color .. ';" '
		c2 = 'style="background-color:' .. color .. '; " | '		
	end
	local margin = ""
	-- correction of the left and right margins, if the box is floated to the left side
	if fl == "left" then
		margin = "margin-left:0; margin-right:1em;"
	end
	if first == true then
		-- code from the template {{Babel-HTML-Kopf}}, but with added width
		header = '<table style="width:248px; ' .. frame:preprocess('{{Babel-Style|float=' .. fl .. '}}') .. margin .. '" id="userboxes">'
		if col_span > 1 then
			header = header .. '<tr><th ' .. c .. 'colspan="' .. col_span .. '">' .. t .. '</th></tr>' 
		else
			header = header .. '<tr><th ' .. c .. '>' .. t .. '</th></tr>' 
		end
		tab = header .. tab
	else
		-- code from the template {{Babel-Kopf}}, but with added width
		header = '{| style="width:248px; ' .. frame:preprocess('{{Babel-Style|float=' .. fl .. '}}') .. margin .. '" id="userboxes"'
		if col_span > 1 then
			header = header .. '\n! ' .. c .. 'colspan="' .. col_span .. '" | ' .. t			
		else
			header = header .. '\n! ' .. c2 .. t
		end
		tab = header .. "\n" .. tab		
	end	


	
	-- for user according to the location (country, town, village etc.)
	local maxaus = 20
	for i = 1, maxaus do
		local a = args['aus' .. i] or ""
		if a ~="" then
			-- for a title before the location
			local title = args['aus' .. i .. "-titel"] or ""
			if title ~= "" then
				tab = tab .. subtitle(title) 				
			end
			tab = tab .. frame:preprocess('{{Benutzer:Vorlage/aus ' .. a .. '}}') 
		end
	end	

	-- for special boxes
	local maxspec = 15
	if args['Spezialbox'] then
			-- for a title before the special box
			local title = args['Spezialbox-titel'] or ""
			if title ~= "" then
				tab = tab .. subtitle(title) 				
			end		
		local s = args['Spezialbox']		
		tab = tab .. s 
	end
	for i = 2, maxspec do
		local s = args['Spezialbox' .. i] or ""
		if s ~="" then
			-- for a title before the special box
			local title = args['Spezialbox' .. i .. "-titel"] or ""
			if title ~= "" then
				tab = tab .. subtitle(title) 				
			end				
			tab = tab .. s 
		end
	end	

 

	-- code for the template {{Benutzer SUL}}
	if args['SUL-Projekt'] ~= nil and args['SUL-Projekt'] ~= "" then
			local p = args['SUL-Projekt']
			local l = args['SUL-Sprache'] or ""
			-- for title before the information about the user's SUL
			local title = args['SUL-Titel'] or ""
			if title ~= "" then
				tab = tab .. subtitle(title)
			end				
			tab = tab .. frame:preprocess('{{Benutzer SUL|1=' .. l .. '|2=' .. p 
				.. '}}') 
	end		

	-- creates the table cell's end
	tab = tab .. t2
	if color ~= "" then
		c = "background-color:" .. color .. ";"
	end	
	if args['Fußzeile'] or args['fußzeile'] then
		local f = args['Fußzeile'] or args['fußzeile']
		if col_span > 1 then
			tab = tab .. '<tr><td colspan="' .. col_span .. '" style="text-align:center;' .. c .. '">' .. f .. t2
		else	
			tab = tab .. '<tr><td style="text-align:center; ' .. c .. '">' .. f .. t2
		end
	else
		if first == true then
			local kat = "'''[[:Kategorie:Benutzer:nach Sprache|Benutzer nach Sprache]]'''"
			if col_span > 1 then
				tab = tab .. '<tr><td colspan="' .. col_span .. '" style="text-align: center; ' .. c .. '">' .. kat .. t2
			else
				tab = tab .. '<tr><td style="text-align: center; ' .. c .. '">' .. kat .. t2
			end
		end
	end
	
 	-- creates the end of the table
 	if first == true then
		tab = tab .. "</table>"
 	end
 
	return tostring(tab)
	
end

return p