Módulo:Linha do tempo anual

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

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

O Módulo:Linha do tempo anual monta uma tabela de eventos agrupados por ano. É possível definir um idicador de cor à esquerda para cada linha de evento.

Esse Módulo é usado principalmente na Predefinição:Linha do tempo anual.

Cabeçalho de TemplateData

As informações a seguir (editar) são definidas com TemplateData. Isso possibilita o seu uso pelo Editor Visual e por outras ferramentas.

Tabela de eventos agrupados por ano com indicação por cor

Parâmetros da predefinição[Editar dados da predefinição]

ParâmetroDescriçãoTipoEstado
EventoAAAA-MM-DD {{cor}}

O formato do parâmetro segue o padrão ISO 8601. A {{cor}} é opcional. O valor do parâmetro é o conteúdo do evento.

Exemplo
2011-03-28 yellow = [[Estação Butantã (Metrô de São Paulo)|Butantã]]
Stringopcional

Exemplo de Uso[editar código-fonte]

{{#invoke:Linha do tempo anual|main
| titulo = Inauguração das estações de metrô de São Paulo

| 1975-09-26 red = [[Estação Santana]]
| 1980 green =
| 1998-04-29 blue = [[Estação Tucuruvi]]
| 1998-04-29 = [[Estação Parada Inglesa]]
}}
Inauguração das estações de metrô de São Paulo
1975
26 de setembroEstação Santana
1998
29 de abrilEstação Parada Inglesa
29 de abrilEstação Tucuruvi

--Adaptação de Module:Release_timeline anglófono
-- https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual
-- http://tylerneylon.com/a/learn-lua/

require('strict')
local getArgs = require('Module:Arguments').getArgs
local p = {}

local function emptyRow (tableElement)
	local tr = tableElement:tag('tr')
	tr:tag('td'):css('border', 'none')
	tr:tag('td'):css('border', 'none')
	tr:tag('td'):css('border', 'none')
end

local function readArgs (args)
	local keysByYear = {}
	local itemByKey = {}

	for key, value in pairs(args) do
		if string.find(key, '^%d%d%d%d') then
			local _, _, isodate, year, month, day, color = string.find(key, '^((%d%d%d%d)-?(%d?%d?)-?(%d?%d?))%s?(%S*)$')

			itemByKey[key] = {
				text = value,
				color = color ~= '' and color or 'transparent',
				date = mw.language.getContentLanguage():formatDate(day ~= '' and '[[d "de" F]]' or '[[F]]', isodate)
			}

			keysByYear[year] = keysByYear[year] or {}
			keysByYear[year][key] = true
		end
	end

	return keysByYear, itemByKey, args.titulo or 'Linha do tempo'
end

local function iSortedKeys (atable)
	local keys = {}

	for key in pairs(atable) do table.insert(keys, tostring(key)) end
	table.sort(keys)

	return ipairs(keys)
end

local function tableSize (atable)
  local size = 0
  for _ in pairs(atable) do size = size + 1 end
  return size
end

--------------------------------------------------------------------------------

function p.main(frame)
	local args = getArgs(frame)
	local keysByYear, itemByKey, title = readArgs(args)

	local tableElement = mw.html.create('table')
		:addClass('wikitable')
		:css('border-collapse', 'separate')

	tableElement:tag('caption'):wikitext(title)

	emptyRow(tableElement)

	for i, year in iSortedKeys(keysByYear) do
		local keys = keysByYear[year]
		local yearRowElement = tableElement:tag('tr')

		yearRowElement:tag('td')
			:attr('scope', 'row')
			:attr('rowspan', tableSize(keys) + 1)
			:css('border', 'none')
			:css('border-right', '1px solid gray')
			:css('vertical-align', 'top')
			:wikitext(year)

		yearRowElement:tag('td')
			:css('display', 'none')

		for i, key in iSortedKeys(keys) do
			local tr = tableElement:tag('tr')

			tr:tag('td')
				:css('border', 'none')
				:css('text-align', 'right')
				:css('vertical-align', 'top')
				:css('width', '120px')
				:wikitext(itemByKey[key].date)

			tr:tag('td')
				:css('border', 'none')
				:css('border-left', '16px solid ' .. itemByKey[key].color)
				:wikitext(itemByKey[key].text)
		end

		emptyRow(tableElement)
	end

	return tableElement
end

return p