Módulo:ECD: diferenças entre revisões

Origem: Wikipédia, a enciclopédia livre.
Conteúdo apagado Conteúdo adicionado
m correção
para sumir os erros de Lua apontado em wp:Café dos programadores#Tabelas em EAD
Linha 77: Linha 77:
local a, b, prazo, hora, min, dia, mes, ano = mw.ustring.find(page, "%S((%d%d)h(%d%d)min '''UTC''' de (%d%d?) de (%S+) de (%d%d%d%d))")
local a, b, prazo, hora, min, dia, mes, ano = mw.ustring.find(page, "%S((%d%d)h(%d%d)min '''UTC''' de (%d%d?) de (%S+) de (%d%d%d%d))")
local a, b, diab, mesb, anob = mw.ustring.find(page, "voto contra no dia (%d%d?) de (%S+) de (%d%d%d%d)")
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 == 1 and "0" .. dia or dia, #diab == 1 and "0" .. diab or diab
dia, diab = #(dia or '') == 1 and "0" .. dia or dia, #(diab or '') == 1 and "0" .. diab or diab
local destaque = mw.ustring.find(page, "{{Voto artigo destacado}}")
local destaque = mw.ustring.find(page, "{{Voto artigo destacado}}")
local bom = mw.ustring.find(page, "{{Voto artigo bom}}")
local bom = mw.ustring.find(page, "{{Voto artigo bom}}")
Linha 87: Linha 87:
while i do
while i do
if i > coment then
if i > coment then
elseif i > nenhum then placar[1] = placar[1] + 1
elseif i > (nenhum or 0) then placar[1] = placar[1] + 1
elseif i > bom then placar[2] = placar[2] + 1
elseif i > bom then placar[2] = placar[2] + 1
elseif destaque and i > destaque then placar [3] = placar[3] + 1
elseif destaque and i > destaque then placar [3] = placar[3] + 1
Linha 96: Linha 96:
-- Verificação do prazo (se já se passaram 15 ou 30 dias)
-- Verificação do prazo (se já se passaram 15 ou 30 dias)
local agora = tonumber(os.date("%Y%m%d%H%M"))
local agora = tonumber(os.date("%Y%m%d%H%M"))
local tempo = tonumber(ano .. meses[mes] .. dia .. hora .. min) < agora and 2 or
local tempo = tonumber((ano or '0000') .. (meses[mes] or '00') .. (dia or '00') .. (hora or '00') .. (min or '00')) < agora and 2 or
tonumber(anob .. meses[mesb] .. diab .. hora .. min) < agora and 1 or 0
tonumber(anob .. meses[mesb] .. diab .. hora .. min) < agora and 1 or 0
prazo = not destaque and placar[1] == 0 and tempo == 0 and mw.ustring.format(
prazo = not destaque and placar[1] == 0 and tempo == 0 and mw.ustring.format(
"style=\"text-align:center;white-space:nowrap;\" title=\"speedy close: %s de %s de %s\"|%s" ..
"style=\"text-align:center;white-space:nowrap;\" title=\"speedy close: %s de %s de %s\"|%s" ..
frame:callParserFunction('#tag:ref', {'', name = 'speed-close'}) , diab, mesb, anob, prazo) or
frame:callParserFunction('#tag:ref', {'', name = 'speed-close'}) , diab, mesb, anob, prazo) or
tempo == 2 and "style=\"text-align:center;white-space:nowrap; background-color:#FCC\"|" .. prazo or
tempo == 2 and "style=\"text-align:center;white-space:nowrap; background-color:#FCC\"|" .. (prazo or 0) or
"style=\"text-align:center;white-space:nowrap;\"|" .. prazo
"style=\"text-align:center;white-space:nowrap;\"|" .. prazo

Revisão das 21h09min de 16 de abril de 2020

Documentação do módulo[ver] [editar] [histórico] [purgar]

Módulo usado como {{#invoke:ECD|ARTIGO}} para gerar a lista de artigos a destacar.

local m = {}

function m.EAD (frame)
  local page = frame.args[1]
  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
  local a, b, prazo, hora, min, dia, mes, ano = mw.ustring.find(page, "%S((%d%d)h(%d%d)min '''UTC''' de (%d%d?) de (%S+) de (%d%d%d%d))")
  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 == 1 and "0" .. dia or dia, #diab == 1 and "0" .. diab or diab
  local destaque = mw.ustring.find(page, "\">Artigo destacado<")
  local bom = mw.ustring.find(page, "\">Artigo bom<")
  local nenhum = mw.ustring.find(page, "\">Artigo de qualidade 4 ou inferior")
  local coment = mw.ustring.find(page, "Comentários e sugestões")
  local i = mw.ustring.find(page, "\n#[^:\n]")
  
  -- Contagem dos votos
  while i do
    if i > coment then
    elseif i > nenhum then placar[1] = placar[1] + 1
    elseif i > bom then placar[2] = placar[2] + 1
    elseif destaque and i > destaque then placar [3] = placar[3] + 1
    end
    i = mw.ustring.find(page,"\n#[^:\n]", i + 10)
  end
  
  -- Verificação do prazo (se já se passaram 15 ou 30 dias)
  local agora = tonumber(os.date("%Y%m%d%H%M"))
  local tempo = tonumber(ano .. meses[mes] .. dia .. hora .. min) < agora and 2 or
      tonumber(anob .. meses[mesb] .. diab .. hora .. min) < agora and 1 or 0
  prazo = not destaque and placar[1] == 0 and tempo == 0 and mw.ustring.format(
      "style=\"text-align:center;white-space:nowrap;\" title=\"speedy close: %s de %s de %s\"|%s" ..
      frame:callParserFunction('#tag:ref', {'', name = 'speed-close'}) , diab, mesb, anob, prazo) or
      tempo == 2 and "style=\"text-align:center;white-space:nowrap; background-color:#FCC\"|" .. prazo or
      "style=\"text-align:center;white-space:nowrap;\"|" .. prazo
      
  -- Percentagem de votos para artígo destacado
  local percentD = destaque and (placar[3] + placar[2] > 0 and
      math.floor(placar[3] / (placar[1] + placar[2] + placar[3]) * 100) .. "%" or 0)
  percentD = percentD and (placar[3] >= 7 and placar[3] >= 3 * (placar[2] + placar[1]) and
      "'''" .. percentD .. "'''" or percentD == "0%" and "0" or percentD) or "—"
  -- Percentagem de votos para artigo bom
  local percentB = placar[3] + placar[2] > 0 and
      math.floor((placar[2] + placar[3]) / (placar[1] + placar[2] + placar[3]) * 100) .. "%" or 0
  percentB = (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] >= 5 and placar [1] == 0) and "'''" .. percentB .. "'''" or
      percentB == "0%" and "0" or percentB
      
  local placarD = destaque and (placar[3] >= 7 and placar[3] >= 3 * (placar[2] + placar[1]) and
      "\n|style=\"text-align:center;background-color:#FFF8CC\"|'''" .. placar[3] .. "'''" or -- Artigo destacado
      "\n|style=\"text-align:center;\"|" .. placar[3]) or
      "\n|style=\"text-align:center;\"|—" -- A eleição é para artigo bom
  local placarB = (not destaque and placar[2] >= 5 and placar[3] + placar[1] == 0 and tempo == 0 or
      placar[2] >= 7 and placar[2] >= 3 * (placar[3] + placar[1])) and
      "\n|style=\"text-align:center;background-color:#CCCCCC\"|'''" .. placar[2] .. "'''" or -- Artigo bom
      "\n|style=\"text-align:center;\"|" .. placar[2]
  local placarN = tempo == 2 and #placarD < 40 and #placarB < 40 and
      "\n|style=\"text-align:center;background-color:#FCC\"|'''" .. placar[1] .. "'''" or -- Artigo normal
      "\n|style=\"text-align:center;\"|" .. placar[1]
  
  -- Colocando os dados na tabela
  return mw.ustring.format("%s%s%s\n|%s\n|style=\"text-align:center;\"|%s||style=\"text-align:center;\"|%s",
      placarD, placarB, placarN, prazo, percentD, percentB)
end

function m.link (frame)
  local titulo = frame.args[1]
  local title = mw.title.new('Wikipédia:Escolha do artigo em destaque/' .. titulo)
  local page = title:getContent()
  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
  local a, b, prazo, hora, min, dia, mes, ano = mw.ustring.find(page, "%S((%d%d)h(%d%d)min '''UTC''' de (%d%d?) de (%S+) de (%d%d%d%d))")
  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
  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}}")
  local coment = mw.ustring.find(page, "== Comentários e sugestões ==")
  local i = mw.ustring.find(page, "\n#[^:\n]")
  
  -- Contagem dos votos
  while i do
    if i > coment then
    elseif i > (nenhum or 0) then placar[1] = placar[1] + 1
    elseif i > bom then placar[2] = placar[2] + 1
    elseif destaque and i > destaque then placar [3] = placar[3] + 1
    end
    i = mw.ustring.find(page,"\n#[^:\n]", i + 10)
  end
  
  -- Verificação do prazo (se já se passaram 15 ou 30 dias)
  local agora = tonumber(os.date("%Y%m%d%H%M"))
  local tempo = tonumber((ano or '0000') .. (meses[mes] or '00') .. (dia or '00') .. (hora or '00') .. (min or '00')) < agora and 2 or
      tonumber(anob .. meses[mesb] .. diab .. hora .. min) < agora and 1 or 0
  prazo = not destaque and placar[1] == 0 and tempo == 0 and mw.ustring.format(
      "style=\"text-align:center;white-space:nowrap;\" title=\"speedy close: %s de %s de %s\"|%s" ..
      frame:callParserFunction('#tag:ref', {'', name = 'speed-close'}) , diab, mesb, anob, prazo) or
      tempo == 2 and "style=\"text-align:center;white-space:nowrap; background-color:#FCC\"|" .. (prazo or 0) or
      "style=\"text-align:center;white-space:nowrap;\"|" .. prazo
      
  -- Percentagem de votos para artígo destacado
  local percentD = destaque and (placar[3] + placar[2] > 0 and
      math.floor(placar[3] / (placar[1] + placar[2] + placar[3]) * 100) .. "%" or 0)
  percentD = percentD and (placar[3] >= 7 and placar[3] >= 3 * (placar[2] + placar[1]) and
      "'''" .. percentD .. "'''" or percentD == "0%" and "0" or percentD) or "—"
  -- Percentagem de votos para artigo bom
  local percentB = placar[3] + placar[2] > 0 and
      math.floor((placar[2] + placar[3]) / (placar[1] + placar[2] + placar[3]) * 100) .. "%" or 0
  percentB = (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] >= 5 and placar [1] == 0) and "'''" .. percentB .. "'''" or
      percentB == "0%" and "0" or percentB
      
  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] >= 5 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
  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
|%s
|%s
|%s
|style="text-align:center"|%s||style="text-align:center"|%s]=]
  return mw.ustring.format(template, titulo, titulo, titulo, titulo,
  	  placarD, placarB, placarN, prazo, percentD, percentB)
end

return m