Módulo:Mandatos

Origem: Wikipédia, a enciclopédia livre.
Documentação do módulo[ver] [editar] [histórico] [purgar]

Descrição[editar código-fonte]

Módulo criado para gerar mais facilmente a linha do tempo de mandatos. Essa página foi inicialmente criada para gerar o Gráfico de burocratas, mas pode ser utilizada para descrever outros mandatos.

Para produzir o gráfico, é utilizada a Extensão EasyTimeline.

Uso[editar código-fonte]

{{#invoke:Mandatos|linhadotempo
 | datainicio=
 | datafim=
 | prefixo_barra=

 ...

}}
datainicio

Data de início do gráfico, no formato dd/mm/yyyy.

datafim

Data de término do gráfico, no formato dd/mm/yyyy. Para que o limite do gráfico se ajuste automaticamente com o passar do tempo, pode-se utilizar variáveis como "14/05/2024" (data atual) ou "31/12/2024" (fim do ano atual).

prefixo_barra

A cada ano de sucessão, é gerada uma barra horizontal descrevendo o ano. Essa propriedade permite que um texto seja informado como prefixo a esse texto. Ex.: "Usuários eleitos em"

demais parâmetros

Esse módulo espera uma lista de parâmetros não nomeados onde cada um informa um conjunto de três valores separados por ponto-e-vírgula. Os parâmetros são os seguites:

  1. data inicial do mandato, formato dd/mm/yyyy
  2. data final do mandato, formato dd/mm/yyyy
  3. nome do usuário

Para as datas, é possível informar ainda "today", para que a data se atualize automaticamente para a data atual; ou "end" para que a data seja sempre a última data do gráfico (mesma informada no parâmetro "datafim").

Exemplos[editar código-fonte]

A título de exemplo, o código a seguir:

{{#invoke:Mandatos|linhadotempo
 | datainicio=01/01/2022
 | datafim=31/12/{{CURRENTYEAR}}
 | prefixo_barra=Usuários eleitos em
 | 01/01/2022 ; 19/03/2022 ; Usuário 1
 | 10/02/2022 ; 20/03/2024 ; Usuário 2
 | 06/06/2023 ; 21/10/2023 ; Usuário 3
 | 15/07/2023 ; end        ; Usuário 4
 | 20/01/2024 ; 22/03/2024 ; Usuário 5
 | 27/02/2024 ; today      ; Usuário 6
 | 03/05/2024 ; 01/11/2024 ; Usuário 7
}}

produz o gráfico:

User:Usuário 7User:Usuário 6User:Usuário 5User:Usuário 4User:Usuário 3User:Usuário 2User:Usuário 1

Ver também[editar código-fonte]

local p = {}

function p.linhadotempo(frame)
	timeline_header = [=[
ImageSize  = width:800 height:auto barincrement:21
PlotArea   = right:20 left:20 top:5 bottom:60
Legend     = position:bottom orientation:horizontal
			
Colors     =
 id:bg        value:rgb(0.9,0.9,1)
 id:major     value:black
 id:minor     value:rgb(0.8,0.8,0.8)
 id:text      value:black
 id:header    value:rgb(0.6,0.6,0.9)
 id:htext     value:white
 id:atual     value:rgb(0.5,0.9,0.5) legend:Atuais_titulares
 id:antigo    value:rgb(0.9,0.8,0.5) legend:Antigos_titulares
			
BackgroundColors = canvas:bg
			
TimeAxis   = orientation:horizontal
DateFormat = dd/mm/yyyy
]=]
	
	period = 	[=[
Period = from:%s till:%s
]=]
	scalemajor	= 	[=[
ScaleMajor = gridcolor:major unit:year  increment:1 start:%s
]=]
	scaleminor	=	[=[
ScaleMinor = gridcolor:minor unit:month increment:1 start:%s
]=]
		
	bardata = 	[=[
BarData    =
]=]
			  
	bardata_base = 	[=[
 Bar:H%.4d
 Barset:S%.4d
]=]

	plotdata = [=[
PlotData   =
 width:15 textcolor:text
]=]
  			   
  	plotdata_base = [=[
 bar:H%.4d color:header textcolor:htext width:20 shift:(-95,-5) fontsize:m from:%s till:end text:"%s%.4d"
]=]

	barset_base = 	[=[
 barset:S%.4d
  shift:(5,-5) anchor:from fontsize:m
]=]
	
	barsetline_base_old = 	[=[
  color:antigo  from:%s till:%s text:"[[User:%s|%s]]"
]=]

	barsetline_base_new = [=[
  color:atual  from:%s till:%s text:"[[User:%s|%s]]"
]=]
					  
	barset_sep = 	[=[
 barset:break
]=]

	data_inicio, ano_inicio = extraidata(frame.args.datainicio)
	data_fim, ano_fim = extraidata(frame.args.datafim)
	prefixo_barra = frame.args.prefixo_barra or ""
	if prefixo_barra ~= "" then
		prefixo_barra = prefixo_barra .. " "
	end
	
	local barsets = {}
	local pos = 1
	while frame.args[pos] do
		usu_data_ini, usu_ano_ini, usu_data_fim, usu_ano_fim, usu, active = extraimandato(frame.args[pos])
		if usu then
			if active then
				barsetline_base = barsetline_base_new
			else
				barsetline_base = barsetline_base_old
			end
			barsets[usu_ano_ini] = (barsets[usu_ano_ini] or "") ..
									string.format(barsetline_base,usu_data_ini,usu_data_fim,usu,usu)
		end
		pos = pos + 1
	end

	local bardata_content = bardata
	local plotdata_content = plotdata
	local barset_content = ""
	for ano=ano_inicio,ano_fim do
		bardata_content = bardata_content .. string.format(bardata_base,ano,ano)
		plotdata_content = plotdata_content .. string.format(plotdata_base,ano,data_inicio,prefixo_barra,ano)
		barset_content = barset_content .. string.format(barset_base,ano)
		barset_content = barset_content .. ( barsets[ano] or "" )
		barset_content = barset_content .. barset_sep
	end

	local param = ""
	param = param .. timeline_header
	param = param .. string.format(period,data_inicio,data_fim)
	param = param .. string.format(scalemajor,data_inicio)
	param = param .. string.format(scaleminor,data_inicio)
	param = param .. bardata_content
	param = param .. plotdata_content
	param = param .. barset_content

	return frame:callParserFunction( '#tag:timeline', param )
end

function extraimandato(csvline)
	_, _, usu_ini, usu_fim, usu = string.find(csvline,"^%s*([^;]-)%s*;%s*([^;]-)%s*;%s*([^;]-)%s*$")
	
	if usu_ini then
		usu_data_ini, usu_ano_ini = extraidata(usu_ini)
	end
	if usu_fim then
		if ( usu_fim == "today" ) or ( usu_fim == "end" ) then
			active = true
		else
			active = false
		end
		usu_data_fim, usu_ano_fim = extraidata(usu_fim)
	end
	if usu then
		-- remove espacos do final
		usu = string.gsub(usu,"%s*$","")
	end
	
	return usu_data_ini, usu_ano_ini, usu_data_fim, usu_ano_fim, usu, active
end

function extraidata(data)
	if data == "today" then
		-- data atual
		data = os.date("%d/%m/%Y")
	elseif data == "end" then
		-- data final do gráfico
		data = data_fim
	end
		
	_, _, dia, mes, ano = string.find(data,"(%d+)/(%d+)/(%d+)")
	datacompleta = string.format('%.2d/%.2d/%.4d',dia,mes,ano)
	return datacompleta, tonumber(ano)
end

return p