Modul:GovernmentComposition

Acest format implementează {{Guvern}}.

Folosire din pagini

modificare

Din pagini, se poate folosi prin includerea formatului {{Guvern}} conform instrucțiunilor din pagina sa de documentare.

Folosire din formate

modificare

Din formate, se pot apela direct două funcții:

  1. fromArray în care i se va putea da ca parametru un tabel cu parametri exact așa cum sunt precizați la {{Guvern}}
  2. fromArgs în care i se va putea da următorii parametri:
  • primul parametru este un tabel-listă ale cărui intrări au următoarea structură:
    • position - numele funcției
    • ministers - un tabel-listă ale cărui intrări au următoarea structură:
      • name - numele ministrului
      • startTime - șir de caractere ce reprezintă data începerii mandatului
      • endTime - șir de caractere ce reprezintă data sfârșitului mandatului
      • party - obiect cu următoarele câmpuri:
        • name - numele partidului
        • abbr - un indice în tabelul de culori, vezi parametrul al patrulea
        • color - culoarea CSS a fundalului celulei de tabel în care se va afișa partidul
  • al doilea parametru este un flag boolean, care dacă are valoarea true declanșează afișarea coloanei de partid
  • al treilea parametru este un flag boolean, care dacă are valoarea true declanșează afișarea coloanei de nr. crt.
  • al patrulea parametru este un tabel ce mapează acronimele partidelor la culoarea celulelor de fundal.

local TableTools = require('Modul:TableTools')
local StringUtils = require('Modul:StringUtils')
local illWd = require('Modul:Ill-wd').fromArgs
local polPartyData = mw.loadData('Modul:Polparty/countrydata')

local emptyToNil = function(arg) return StringUtils._emptyToNil({arg}) end
local prependToString = function(arg1, arg2) return StringUtils._prependToString({arg1, arg2}) end
local p = {}

function p.fromArgs(structureList, showParty, showNumber, colormap)
	colormap = colormap or {}
	local tableElement = mw.html.create('table')
		:addClass('wikitable')
	local headerRow = tableElement:tag('tr')
	if showNumber then
		headerRow:tag('th'):css('background', '#ccc'):wikitext('Nr. crt.')
	end
	headerRow:tag('th'):css('background', '#ccc'):wikitext('Minister')
	headerRow:tag('th'):css('background', '#ccc'):wikitext('Nume')
	if showParty then
		headerRow:tag('th'):css('background', '#ccc'):wikitext('Partid')
	end
	headerRow:tag('th'):css('background', '#ccc'):wikitext('În funcție din')
	headerRow:tag('th'):css('background', '#ccc'):wikitext('Până la')
	
	local positionIdx = 1
	for _,eachStructurePart in ipairs(structureList) do
		local crtRow = tableElement:tag('tr')
		if showNumber then
			crtRow:tag('td'):wikitext(tostring(positionIdx))
			positionIdx = positionIdx + 1
		end
		
		crtRow:tag('td'):attr('rowspan', tostring(#eachStructurePart.ministers))
			:wikitext(eachStructurePart.position)
		local createNewRow = false
		for _,eachMinister in ipairs(eachStructurePart.ministers) do
			if createNewRow then crtRow = tableElement:tag('tr') else createNewRow = true end
			crtRow:tag('td'):wikitext(eachMinister.name)
			if showParty then
				local bgcolor = colormap[eachMinister.party and eachMinister.party.abbr]
				if not bgcolor and eachMinister.party then
					bgcolor = eachMinister.party.color
				end

				crtRow:tag('td'):css('background', bgcolor):wikitext(eachMinister.party and eachMinister.party.name or nil)
			end
			crtRow:tag('td'):wikitext(eachMinister.startTime)
			crtRow:tag('td'):wikitext(eachMinister.endTime)
		end
	end
	
	return tostring(tableElement)
end

local function isYes(value)
	return value and (value == 'da' or value == 'true' or value == 'yes')
end

function p.fromArray(args)
	local structure = {}
	local showParty = isYes(args['afișează_partid']) or isYes(args['arată_partid'])
	local showNumber = isYes(args['afișează_nr_crt']) or isYes(args['arată_număr'])
	local country = args['țară'] and mw.text.trim(args['țară']) or nil
	local colormap = {}
	for eachArg,eachValue in pairs(args) do
		local postMatch, postNrStr = mw.ustring.match(eachArg, '(post(%d+))')
		if postMatch then
			local postNr = tonumber(postNrStr)
			if postMatch == eachArg then
				structure[postNr] = structure[postNr] or {}
				structure[postNr].position = eachValue
			else
				structure[postNr] = structure[postNr] or {}
				local ministerMatch, ministerNrStr = mw.ustring.match(eachArg, '(ministru(%d+))', 1 + mw.ustring.len(postMatch))
				if ministerMatch then
					local ministerNr = tonumber(ministerNrStr)
					structure[postNr].ministers = structure[postNr].ministers or {}
					structure[postNr].ministers[ministerNr] = structure[postNr].ministers[ministerNr] or {}
					local paramName = mw.ustring.sub(eachArg, 1 + mw.ustring.len(postMatch) + 1 + mw.ustring.len(ministerMatch) + 1)
					if paramName == 'nume' or paramName == '' then
						structure[postNr].ministers[ministerNr].name = eachValue
					elseif paramName == 'început' then
						structure[postNr].ministers[ministerNr].startTime = eachValue
					elseif paramName == 'sfârșit' then
						structure[postNr].ministers[ministerNr].endTime = eachValue
					elseif paramName == 'culoarepartid' then
						structure[postNr].ministers[ministerNr].party = structure[postNr].ministers[ministerNr].party or {}
						structure[postNr].ministers[ministerNr].party.color = prependToString(eachValue, '#')
					elseif paramName == 'partid' then
						structure[postNr].ministers[ministerNr].party = structure[postNr].ministers[ministerNr].party or {}
						local partyEntry = country and country ~= '' and polPartyData[country][eachValue] or nil
						if partyEntry then
							structure[postNr].ministers[ministerNr].party.color = structure[postNr].ministers[ministerNr].party.color or prependToString(partyEntry.color, '#')
							structure[postNr].ministers[ministerNr].party.name = partyEntry.link and ('[[' .. partyEntry.link .. '|' .. (partyEntry.abbr or eachValue) .. ']]') or partyEntry.q and illWd(partyEntry.q, eachValue) or eachValue
						else
							structure[postNr].ministers[ministerNr].party.name = eachValue
						end
						structure[postNr].ministers[ministerNr].party.abbr = eachValue
					elseif paramName == 'partidq' then
						structure[postNr].ministers[ministerNr].party = structure[postNr].ministers[ministerNr].party or {}
						structure[postNr].ministers[ministerNr].party.name = illWd(eachValue)
					elseif paramName == 'q' then
						structure[postNr].ministers[ministerNr].name = illWd(eachValue)
					end
				end
			end
		end
		
		local colorMatch, colorParty = mw.ustring.match(eachArg, '(culoare_(%w+))')
		if colorMatch == eachArg then
			colormap[colorParty] = prependToString(mw.text.trim(eachValue), '#')
		end
	end
	structure = TableTools.compressSparseArray(structure)
	for _,eachStructurePart in ipairs(structure) do
		if eachStructurePart.ministers then
			eachStructurePart.ministers = TableTools.compressSparseArray(eachStructurePart.ministers)
		end
	end
	return p.fromArgs(structure, showParty, showNumber, colormap)
end

function p.fromFrame(frame)
	if frame then
		local parentFrame = frame:getParent()
		if parentFrame and parentFrame.args then
			return p.fromArray(parentFrame.args)
		end
	end
	if frame and frame.args then
		return p.fromArray(frame.args)
	end
	return error('Nu s-au găsit parametri pentru modul')
end
return p