Módulo:EAD

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

Módulo para exibir as linhas das candidaturas a artigo destacado e bom em WP:EAD/L.

Uso[editar código-fonte]

{{#invoke:EAD|linha|título do artigo}}

Padrões[editar código-fonte]

Para este módulo funcionar corretamente é preciso que a pagina da candidatura siga os seguintes padrões:

  • Deve conter uma linha começada por * Indicação para: seguido de destacado, bom, artigo destacado ou artigo bom.
  • A primeira ligação para página de usuário encontrada na página será usada como o proponente da candidatura.
  • O prazo mínimo será a primeira data no padrão " até às ##h##min UTC de ## de mês de ####". Pode ter um <includeonly> antes das horas.
  • Todos os {{Apoio}} e {{apoio}} são contados como apoio, mesmo se estiver riscado ou dentro de um <nowiki>, então essa predefinição não deve ser usada sem a intenção de indicar um voto.
  • O {{Apoio|Apoio para bom}} ou {{apoio|Apoio para bom}}, se estiverem em uma candidatura para artigo destacado serão contadas como apoio para bom e exibidas separadamente dos apoios para destacados. Nas candidaturas para artigo bom essa indicação será somada aos apoios normais.
  • Todos os {{Não apoio}}, {{não apoio}}, {{Contra}} e {{contra}} são contados como não apoio, mesmo se estiverem riscados ou dentro de um <nowik>.
  • Quando a página iniciar com {{Resultado EAD|1=...|tipo=N}} ou {{Resultado EAD|data=...|tipo=N}} com N sendo 1 ou 2, isso será considerado que a candidatura foi fechada com consenso para destacado (1) ou bom (2).
  • Quando a página iniciar com {{Resultado EAD|1=...}} ou {{Resultado EAD|data=...}} (sem o |tipo=), isso será considerado que a candidatura foi recusada.

Ao não seguir esses padrões os apoios e não apoios podem não ser contados corretamente e as indicações de prazo, proponente, tipo de candidatura e resultado podem apresentar erro.

Ver também[editar código-fonte]

  • Módulo:ECD (usado antigamente quando a escolha era por votação)

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 = m.dados(page)
  
  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, titulo, titulo, titulo, 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
  
  -- 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, _, usuarioa, proponente = string.find(page, "%[%[(Usuári[ao]%(?a?%)?):([^|/]+)|")
  if not pos then
    pos = 1
  end
  if not proponente or (posprazo and pos > posprazo) then
    proponente = '?'
  else
    proponente = string.format('%s ([[%s Discussão:%s|discussão]])', proponente, usuarioa, 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

end

return m