Módulo:ECD

Fonte: Enciclopédia de conhecimento da Igreja de Deus
Saltar para a navegação Saltar para a pesquisa

A documentação para este módulo pode ser criada na página Módulo:ECD/doc

local m = {}
function m.EAD (frame)
		-- Esta é a função antiga que não é mais usada, ela é mantida apenas para permitir a visualização
		-- correta de versões antigas da EAD/Lista, a versão atualmente usada é a m.link
		
		local page = frame.args[1]
		return m.placar(page)
end
function m.link (frame)
		-- Função que gera a linha da tabela em [[Wikipédia:Escolha do artigo em destaque/Lista]]
		local titulo = frame.args[1]
		local title = mw.title.new('Wikipédia:Escolha do artigo em destaque/' .. titulo)
		local page = title:getContent()
		
		local placar = m.placar(page)
		
		-- Colocando os dados na tabela
		local template = [=[|-
|[[Wikipédia:Escolha do artigo em destaque/%s|%s]] 
|style="text-align:center; font-size:smaller;"|[[%s|Art]] / [[Discussão:%s|disc]]%s]=]
		return mw.ustring.format(template, titulo, titulo, titulo, titulo, placar)
end
function m.erro(texto)
		return mw.ustring.format('\n|colspan=6 style="color:#800; font-size:small"|(erro: [[Módulo:ECD|módulo]] %s)', texto)
end
function m.placar (page)
		frame = mw.getCurrentFrame()
		meses = {["janeiro"] = "01", ["fevereiro"] = "02", ["março"] = "03", ["abril"] = "04", ["maio"] = "05", ["junho"] = "06",
						["julho"] = "07", ["agosto"] = "08", ["setembro"] = "09", ["outubro"] = "10", ["novembro"] = "11", ["dezembro"] = "12"}
		local placar = {0,0,0}
		
		-- Buscas no texto
		-- Prazo de discussão
		local a, b, prazod, diad, mesd, anod = mw.ustring.find(page, " até às %d%dh%d%dmin '''UTC''' de ((%d%d?) de (%S+) de (%d%d%d%d))")
		-- Prazo de votação
		local a, b, prazo, hora, min, dia, mes, ano = mw.ustring.find(page, "<section begin=\"fim do prazo\"/>((%d%d)h(%d%d)min '''UTC''' de (%d%d?) de (%S+) de (%d%d%d%d))")
		-- Prazo de speed close (deve ser mantido para a correta visualização do histórico da lista das EAD)
		local a, b, diab, mesb, anob = mw.ustring.find(page, "voto contra no dia (%d%d?) de (%S+) de (%d%d%d%d)")
		dia, diab = #(dia or '') == 1 and "0" .. dia or dia, #(diab or '') == 1 and "0" .. diab or diab
		-- Seções de votos
		local destaque = mw.ustring.find(page, "{{Voto artigo destacado}}")
		local bom = mw.ustring.find(page, "{{Voto artigo bom}}")
		local nenhum = mw.ustring.find(page, "{{Voto artigo normal}}")
		if not prazo then
				return m.erro'não encontrou prazo na página de votação'
		end
		-- Verificação dos prazos
		local agora = tonumber(os.date("%Y%m%d%H%M"))
		local timestamp = tonumber(ano .. meses[mes] .. (#dia == 1 and '0' or '') .. dia .. hora .. min)
		local timestampd = diad and tonumber(anod .. meses[mesd] .. (#diad == 1 and '0' or '') .. diad .. hora .. min)
		local timestampb = diab and tonumber(anob .. meses[mesb] .. (#diab == 1 and '0' or '') .. diab .. hora .. min)
		-- tempo == 2 quer dizer que terminou o prazo, tempo == 1 terminou o prazo do speed close, -1 está na discussão
		local tempo = timestamp < agora and 2 or diab and timestampb < agora and 1 or diad and timestampd > agora and -1 or 0
		-- Linha exibida no perído de discussão
		if tempo == -1 then
			local tempod = timestampd - agora > 2000 and prazod or string.format("%dh%dmin '''UTC'''", hora, min)
				local linha = mw.ustring.format([=[
|style="text-align:center; color:#bbb"|%s
|style="text-align:center; color:#bbb"|0
|style="text-align:center; color:#bbb"|0
|style="text-align:center;white-space:nowrap"|em discussão até %s
|style="text-align:center; color:#bbb"|%s
|style="text-align:center; color:#bbb"|0]=],
						destaque and '0' or '—', tempod, destaque and '0' or '—')
				return linha
		end
		-- Contagem dos votos
		-- placar[3] são os votos para destacado, placar[2] votos para bom e placar[1] para artigo normal
		local pos, p
		if destaque then
				pos, p = destaque, 3
		elseif bom then
				pos, p = bom, 2
		else
				return m.erro'não encontrou seções de voto na página de votação'
		end
		local linhavazia = 0
		local linha = mw.ustring.find(page, "\n", pos) + 1
		local proxima = mw.ustring.find(page, "\n", linha)
		while proxima do
				proxima = proxima + 1
				local a, b = mw.ustring.find(page, '<!--[^\n]-->', linha)
				-- conta voto
				if mw.ustring.sub(page, linha, linha) == '#' and proxima > linha + 10 then
						-- pula voto riscado
			if not mw.ustring.find(mw.ustring.sub(page, linha, proxima), '^#:*<s>.+</s>') then
								placar[p] = placar[p] + 1
						end
						linhavazia = 0
				-- próximo placar
				elseif p == 3 and bom >= linha and bom < proxima or p == 2 and nenhum >= linha and nenhum < proxima then
						p = p - 1
						linhavazia = 0
				-- pula linha vazia ou com pucos caracteres ou espaços ou com <!-- comentário -->
				elseif (proxima < linha + 7 or a and b < proxima) and linhavazia < 4 then
						linhavazia = linhavazia + 1
				else
						break
				end
				linha = proxima
				proxima = mw.ustring.find(page, "\n", linha)
		end
		pos, p = nil, nil
		
		-- Decide o formato da célula da tabela que mostra o prazo
		if not destaque and diab and placar[1] == 0 and tempo == 0 then
						-- aqui existia o speedy-close, não é mais usado
						elseif tempo == 2 then
						-- fundo vermelho quando o prazo termina
						prazo = "style=\"text-align:center;white-space:nowrap; background-color:#FCC\"|" .. (prazo or 0)
		else
						prazo = "style=\"text-align:center;white-space:nowrap;\"|" .. prazo
		end
						
		-- Percentagem de votos para artígo destacado
		local percentD
		if destaque and placar[3] + placar[2] > 0 then
						local p = math.floor(placar[3] / (placar[1] + placar[2] + placar[3]) * 100)
						local negrito = (placar[3] >= 7 and placar[3] >= 3 * (placar[2] + placar[1]))
						percentD = negrito and "'''" .. p .. "%'''" or p > 0 and p .. "%" or "0"
		else
						percentD = "—"
		end
		
		-- Percentagem de votos para artigo bom
		local percentB
		if placar[3] + placar[2] > 0 then
						local p = math.floor((placar[2] + placar[3]) / (placar[1] + placar[2] + placar[3]) * 100)
						local negrito = (tempo == 1 and placar[2] + placar[3] >= 7
																							and placar[2] + placar[3] >= 3 * placar[1]
																							and percentD ~= "'''100%'''"
																							or not destaque and tempo == 0
																							and placar[2] >= 7 and placar [1] == 0)
						percentB = negrito and "'''" .. p .. "%'''" or p .. "%"
		else
						percentB = "0"
		end
		
		-- Placar
		local placarD = destaque and (placar[3] >= 7 and placar[3] >= 3 * (placar[2] + placar[1]) and
						"style=\"text-align:center;background-color:#FFF8CC\"|'''" .. placar[3] .. "'''" or -- Artigo destacado
						"style=\"text-align:center;\"|" .. placar[3]) or
						"style=\"text-align:center;\"|—" -- A eleição é para artigo bom
		local placarB = (not destaque and placar[2] >= 7 and placar[3] + placar[1] == 0 and tempo == 0 or
						placar[2] >= 7 and placar[2] >= 3 * (placar[3] + placar[1])) and
						"style=\"text-align:center;background-color:#CCCCCC\"|'''" .. placar[2] .. "'''" or -- Artigo bom
						"style=\"text-align:center;\"|" .. placar[2]
		local placarN = tempo == 2 and #placarD < 40 and #placarB < 40 and
						"style=\"text-align:center;background-color:#FCC\"|'''" .. placar[1] .. "'''" or -- Artigo normal
						"style=\"text-align:center;\"|" .. placar[1]
		
		-- Colocando os dados na tabela
		return mw.ustring.format("\n|%s\n|%s\n|%s\n|%s\n|style=\"text-align:center;\"|%s||style=\"text-align:center;\"|%s",
						placarD, placarB, placarN, prazo, percentD, percentB)
end
return m