Saltar para o conteúdo

Módulo:EAD

Origem: Wikipédia, a enciclopédia livre.

local m = {}

function m.linha (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 dados, indicacao, tituloart = m.dados(page)
  tituloart = tituloart or titulo
  
  local icone = ''
  if indicacao == 'destacado' or indicacao == 'bom' then
    icone = '[[Ficheiro:Cscr-featured' .. (indicacao == 'bom' and '2' or '1') .. '-candidate.png|16px|ligação=]] '
  end
  
  -- Colocando os dados na tabela
  local template = [=[|-
|%s[[Wikipédia:Escolha do artigo em destaque/%s|%s]] 
|style="text-align:center; font-size:smaller;"|[[%s|Art]] / [[Discussão:%s|disc]]%s]=]
  return string.format(template, icone, titulo, tituloart, tituloart, tituloart, dados)
end

function m.erro(texto)
  return string.format('\n|colspan=6 style="color:#800; font-size:small"|(erro: [[Módulo:EAD|módulo]] %s)', texto)
end

function m.dados (page)
  local placar = {0,0,0}
  
  -- Buscas no texto
  -- Indicação para destacado ou bom
  local pos, _ , indicacao = string.find(page, "\n%* Indicação para: *(%a+)")
  if indicacao then
    indicacao = string.lower(indicacao)
    if indicacao == 'artigo' then
      pos, _ , indicacao = string.find(page, "\n%* Indicação para: *%a+ +(%a+)")
      if indicacao then
        indicacao = string.lower(indicacao)
      end
    end
  end
  if not indicacao or indicacao ~= 'destacado' and indicacao ~= 'bom' then
    return m.erro'não encontrou se a indicação é para destacado ou bom'
  end
  
  -- Título do artigo --
  local pos, _ , tituloart = string.find(page, "\n%== *%[%[([^]\n]+)%]%] *==\n")
  
  -- Prazo mínimo
  local prazo, prazosort
  local posprazo, _, hora, min, dia, mes, ano = string.find(page, " até às [a-z<>]*(%d%d)h(%d%d)min '''UTC''' de (%d%d?) de (%S+) de (%d%d%d%d)")
  if not posprazo then
    prazo = '<small>(não encontrado)</small>'
    prazosort = ''
  else
    prazo = string.format('%sh%smin de %s de %s de %s', hora, min, dia, mes, ano)
    local 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"}
    prazosort = string.format(' data-sort-value="%s%s%02d%s%s"', ano, meses[mes], dia, hora, min)
  end

  -- Proponente
  local pos, _, proponente = string.find(page, "%[%[Us[ue][^]:\n]+:([^|/]+)|")
  if not pos then
    pos = 1
  end
  if not proponente or (posprazo and pos > posprazo) then
    proponente = '?'
  else
    proponente = string.format('%s ([[Usuário(a) Discussão:%s|discussão]])', proponente, proponente)
  end

  -- Estado da proposta
  local estado
  a, b, conclusao = string.find(page, "^{{[Rr]esultado EAD|[dat1]+=[^|}]-|tipo=(%d)}}")
  if conclusao then
    estado = "consenso [[Ficheiro:Cscr-featured" .. conclusao .. ".png|15x15px]]"
  elseif string.find(page, "^{{[Rr]esultado EAD|[dat1]+=[^|}]-}}") then
    estado = "recusado [[Ficheiro:Symbol declined.svg|15x15px]]"
  else
    -- Contagem dos votos
    -- placar[3] são os votos para destacado, placar[2] votos para bom e placar[1] para artigo normal
    local buscapredef = "{{([AaCcNn][^}\n]+)}}"
    local _, pos, predef = string.find(page, buscapredef, pos)
    while predef do
      local apoio = string.find(predef, '^[Aa]poio')
      if apoio then
        local apoiobom = string.find(predef, '^[Aa]poio|[Aa]poio para [Bb]om')
        if apoiobom then
          placar[2] = placar[2] + 1
        else
          placar[3] = placar[3] + 1
        end
      elseif string.find(predef, '^[Nn]ão apoio') or mw.ustring.find(predef, '^[Cc]ontra') then
        placar[1] = placar[1] + 1
      end
      _, pos, predef = string.find(page, buscapredef, pos)
    end
  
    if indicacao == 'bom' then
      estado = string.format('%d [[Ficheiro:Symbol support vote.svg|ligação=|15x15px]] / %d [[Ficheiro:Symbol declined.svg|15x15px]]',
        placar[3] + placar[2], placar[1])
    elseif placar[2] > 0 then
      estado = string.format('%d [[Ficheiro:Symbol support vote.svg|ligação=|15x15px]] / %d [[Ficheiro:Cscr-featured2.png|15x15px]] / %d [[Ficheiro:Symbol declined.svg|15x15px]]',
        placar[3], placar[2], placar[1])
    else
      estado = string.format('%d [[Ficheiro:Symbol support vote.svg|ligação=|15x15px]] / %d [[Ficheiro:Symbol declined.svg|15x15px]]',
        placar[3], placar[1])
    end
  end

  -- Colocando os dados na tabela
  return string.format("\n|%s\n|style=\"white-space: nowrap\"|%s\n|style=\"white-space: nowrap\"%s|%s",
    estado, proponente, prazosort, prazo), indicacao, tituloart

end

return m