Sari la conținut

Modul:Infobox

Permanently protected module
De la Wikipedia, enciclopedia liberă
--
-- This module implements {{Infobox}}
--
 
local p = {}
local getArgs = require('Modul:Arguments').getArgs
local args = {}

p._infobox = function(origArgs)

	local child = origArgs["child"] or "no"
	local bodyclass = origArgs["bodyclass"] or "infocaseta"
	local antet = origArgs["antet"] or "default"
	local aboveclass = origArgs["aboveclass"] or antet
	local abovestyle = origArgs["abovestyle"] or ""
	local culoare_cadru = origArgs["culoare cadru"] or "F5F5DC"
	local culoare_text = origArgs["culoare text"] or "000000"
	local titlestyle = origArgs["titlestyle"] or ""
	local title = origArgs["title"] or ""
	local above = origArgs["above"] or ""
	local wikidataEnabled = origArgs["wikidata"] or ""
	
	local out = ""
	
	if child ~= "yes" then
		out = out .. "<table class=\"" .. bodyclass .. "\" cellspacing=\"2\">"
		-- caption
		out = out .. "<tr><td colspan=\"2\" class=\"antet " .. aboveclass .. "\" style=\"background-color:#" .. culoare_cadru .. ";color:#" .. culoare_text .. ";" .. titlestyle .. "\">" .. title .. "</td></tr>"
		-- header
		if above ~= "" then
			local aboveTr = mw.html.create('tr'):tag('td')
				:attr('colspan', '2')
				:addClass(aboveclass)
				:css('text-align', 'center')
				:css('font-size', '125%')
				:css('font-weight', 'bold')
				:cssText(abovestyle)
				:wikitext(above):allDone()
			out = out .. tostring(aboveTr)
		end
	else
		if title ~= "" then
			out = out .. "\'\'\'" .. title .. "\'\'\'"
		end
	end

	--subheaders
	local subheaders = {}
	subheaders[1] = origArgs["subheader"] or origArgs["subheader1"] or ""
	local subhIndex = 2
	while (origArgs["subheader" .. tostring(subhIndex)] or "") ~= "" do
		subheaders[subhIndex] = origArgs["subheader" .. tostring(subhIndex)] or ""
		subhIndex = subhIndex + 1
	end
	local subheaderstyle = origArgs["subheaderstyle"] or ""
	local subheaderclass = origArgs["subheaderclass"] or ""
	for subHeaderIdx = 1,#subheaders do
		if subheaders[subHeaderIdx] ~= "" then
			local subhTr = mw.html.create('tr'):tag('td'):attr('colspan', '2')
				:addClass(subheaderclass)
				:css('text-align', 'center')
				:cssText(subheaderstyle)
				:wikitext(subheaders[subHeaderIdx]):allDone()
			out = out .. tostring(subhTr)
		end
	end
	
	--images
	local images = {}
	local captions = {}
	images[1] = origArgs["image"] or ""
	captions[1] = origArgs["caption"] or ""
	local imgIndex = 2
	while (origArgs["image" .. tostring(imgIndex)] or "") ~= "" do
		images[imgIndex] = origArgs["image" .. tostring(imgIndex)]
		captions[imgIndex] = origArgs["caption" .. tostring(imgIndex)] or ""
		imgIndex = imgIndex + 1
	end
	local imageclass = origArgs["imageclass"]
	local imagestyle = origArgs["imagestyle"]
	local captionstyle = origArgs["captionstyle"]
	for i = 1,#images do
		if images[i] ~= "" then
			local imageRow = mw.html.create('tr')
			local imageTd = imageRow
				:tag('td'):attr('colspan', '2')
					:addClass(imageclass)
					:css('text-align', 'center')
					:cssText(imagestyle)
					:wikitext(images[i])
			if captions[i] ~= "" then
				imageTd:tag('br')
				imageTd:tag('span'):cssText(captionstyle)
					:wikitext(captions[i])
			end
			out = out .. tostring(imageRow)
		end
	end
	
	-- rows
	local labelstyle = origArgs["labelstyle"] or ""
	local datastyle = origArgs["datastyle"] or ""
	local headerstyle = origArgs["headerstyle"] or ""
	local elementIndex = 1
	local headers = {}
	local data = {}
	local labels = {}
	local classes = {}
	local styles = {}
	local processingOrder = {}

	for k,v in pairs(origArgs) do
		local headerStart
		local headerEnd
		local labelStart
		local labelEnd
		local dataStart
		local dataEnd
		headerStart, headerEnd = mw.ustring.find(k, "header")
		labelStart, labelEnd = mw.ustring.find(k, "label")
		dataStart, dataEnd = mw.ustring.find(k, "data")
		styleStart, styleEnd = mw.ustring.find(k, "style")
		
		local nr = ""
		if dataStart == 1 then
			nr = mw.ustring.sub(k, 1 + dataEnd, mw.ustring.len(k))
		elseif labelStart == 1 then
			nr = mw.ustring.sub(k, 1 + labelEnd, mw.ustring.len(k))
		elseif headerStart == 1 then
			nr = mw.ustring.sub(k, 1 + headerEnd, mw.ustring.len(k))
		elseif styleStart == 1 then
			nr = mw.ustring.sub(k, 1 + styleEnd, mw.ustring.len(k))
		end

		if nr ~= "" and processingOrder[nr] == nil and tonumber(nr) ~= nil then
			headers[elementIndex] = origArgs["header" .. nr] or ""
			labels[elementIndex] =  origArgs["label" .. nr] or ""
			data[elementIndex] = origArgs["data" .. nr] or ""
			classes[elementIndex] =  origArgs["class" .. nr] or ""
			styles[elementIndex] = origArgs["style" .. nr] or ""
			processingOrder[tonumber(nr)] = elementIndex
			elementIndex = elementIndex + 1
		end
	end

	local processingElement = 1
	while processingElement <= table.maxn(processingOrder) do
		elementIndex = processingOrder[processingElement]
		if elementIndex ~= nil then
			local crtHeader = headers[elementIndex]
			local crtData = data[elementIndex]
			local crtLabel = labels[elementIndex]
			local crtClass = classes[elementIndex]
			local crtStyle = styles[elementIndex]
			if crtHeader ~= "" then
				local headerTr = mw.html.create('tr')
				local headerTh = headerTr:tag('th')
					:attr('colspan', '2')
					:css('text-align', 'center')
					:css('background-color', '#' .. culoare_cadru)
					:css('color', '#' .. culoare_text)
					:cssText(headerstyle)
					:wikitext(crtHeader)
				out = out .. tostring(headerTr)
			elseif crtLabel ~= "" then
				if crtData ~= "" then
					local dataAndLabelTr = mw.html.create('tr')
						:tag('th'):cssText(labelstyle)
							:wikitext(crtLabel):done()
						:tag('td'):addClass(crtClass)
							:cssText(datastyle):cssText(crtStyle)
							:wikitext(crtData):allDone()
					out = out .. tostring(dataAndLabelTr)
				end
			elseif crtData ~= "" then
				local dataTr = mw.html.create('tr')
					:tag('td'):attr('colspan', '2')
						:addClass(crtClass)
						:css('text-align', 'center')
						:cssText(datastyle)
						:cssText(crtStyle)
						:wikitext(crtData):allDone()
				out = out .. tostring(dataTr)
			end
		end
		processingElement = processingElement + 1
	end
	
	--below
	local belowstyle = origArgs["belowstyle"] or ""
	local below = origArgs["below"] or ""
	if below ~= "" then
		out = out .. "<tr><td colspan=\"2\" style=\"text-align:center; " .. belowstyle .. "\">" .. below .. "</td></tr>"
	end
	
	--tnavbar
	local name = origArgs["name"] or ""
	if name ~= "" then
		local navBarTr = mw.html.create('tr'):tag('td')
			:css('text-align', 'right')
			:attr('colspan', '2')
			:wikitext(mw.getCurrentFrame():expandTemplate{title = "Tnavbar", args = { name }}):done()
		out = out .. tostring(navBarTr)
	end
	if child ~= "yes" then
		local doc = origArgs["doc"] or ""
		if doc ~= "" then
			local infodocTr = mw.html.create('tr'):wikitext(mw.getCurrentFrame():expandTemplate{title = "infodoc", args = {colspan = "2", culoare = culoare_cadru, link = doc, wikidata = wikidataEnabled }})
			out = out .. tostring(infodocTr)
		end
		out = out .. "</table>"
	end
	
	return out
end

p.infobox = function(frame)
	local origArgs = getArgs(frame)
	return p._infobox(origArgs)
end
return p