Módulo:ECD
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