Module:Archives

Depi Wikipedya, ansiklopedi lib

La documentation pour ce module peut être créée à Module:Archives/doc

-- luacheck: globals mw, no max line length

local lib_date = require('Module:Date')
local p = {}

function p.an(frame)
  local page, debut, fin, separateur, tag1, tag2, tag3, prependToResult, appendToResult

  if frame ~= nil then
    if frame.args[1] ~= nil then page = mw.text.trim(frame.args[1]) end
    if frame.args[2] ~= nil then debut = tonumber(mw.text.trim(frame.args[2])) end
    if frame.args[3] ~= nil then fin = tonumber(mw.text.trim(frame.args[3])) end
    if frame.args[4] ~= nil then separateur = mw.text.trim(frame.args[4]) end
  end
  if debut == nil or debut == "" then debut = 2004 end
  if fin == nil or fin == "" then fin = tonumber(os.date("%Y")) end
  if separateur == nil then separateur = "" end

  local ListeAnnees = {}
  if separateur == "grille" then
    prependToResult = '{| cellpadding="5" style="border:1px solid #aaaaaa; margin-top:1em; margin-bottom:0.5em" rules="all" align="center"\n| '
  elseif separateur == "image" then
    prependToResult = "<ul>"
    tag1 = '<li style="float:left;margin:2px 2px 2px 8px;display:inline;">[[Fichier:Breathe-document-save.svg|30px|link='
    tag2 = "]]<br>"
    tag3 = "</li>"
  end

  while debut <= fin do
    local lien = page .. "/" .. tostring(debut)
    local texte = tostring(debut)
    if separateur == "image" then
      table.insert(ListeAnnees, tag1 .. lien .. tag2 .. "[[" .. lien .. "|" .. texte .. "]]" .. tag3)
    else
      table.insert(ListeAnnees, "[[" .. lien .. "|" .. texte .. "]]")
    end
    debut = debut + 1
  end

  if separateur == "grille" then
    appendToResult = "\n|}\n"
    separateur = " || "
  elseif separateur == "image" then
    appendToResult = "</ul>\n"
    separateur = " "
  else
    separateur = separateur .. " "
  end

  return (prependToResult or '') .. table.concat(ListeAnnees, separateur) .. (appendToResult or '')
end

function p.mois(frame)
  return p.periode("mois", frame)
end

function p.semaine(frame)
  return p.periode("semaine", frame)
end

function p.periode(unite, frame)
  local page, AnneeDebut, PeriodeDebut, AnneeFin, PeriodeFin, separateur, format, LimiteFin, PeriodeFinTemp, tag1, tag2, tag3

  if frame ~= nil then
    if frame.args[1] ~= nil then page = mw.text.trim(frame.args[1]) end
    if frame.args[2] ~= nil then
      AnneeDebut = mw.ustring.gsub(frame.args[2], "(.+)%-(.+)", "%1")
      AnneeDebut = tonumber(AnneeDebut)
      PeriodeDebut = mw.ustring.gsub(frame.args[2], "(.+)%-(.+)", "%2")
      PeriodeDebut = tonumber(PeriodeDebut)
    end
    if frame.args[3] ~= nil then
      AnneeFin = mw.ustring.gsub(frame.args[3], "(.+)%-(.+)", "%1")
      AnneeFin = tonumber(AnneeFin)
      PeriodeFin = mw.ustring.gsub(frame.args[3], "(.+)%-(.+)", "%2")
      PeriodeFin = tonumber(PeriodeFin)
    end
    if frame.args[4] ~= nil then
      separateur = mw.text.trim(frame.args[4])
    else
      separateur = ""
    end
    if frame.args[5] ~= nil then
      if mw.text.trim(frame.args[5]) == "" then
        format = "nom"
      else
        format = mw.text.trim(frame.args[5])
      end
    else
      format = "nom"
    end
  end
  if AnneeDebut == nil or AnneeDebut == "" then
    AnneeDebut = 2004
  end
  if PeriodeDebut == nil or PeriodeDebut == "" then
    PeriodeDebut = 01
  end
  if AnneeFin == nil or AnneeFin == "" then
    AnneeFin = tonumber(os.date("%Y"))
  end
  if unite == "semaine" then
    LimiteFin = tonumber(52)
    PeriodeFinTemp = tonumber(os.date("%W"))
  else
    LimiteFin = tonumber(12)
    PeriodeFinTemp = tonumber(os.date("%m"))
  end
  if PeriodeFin == nil or PeriodeFin == "" then PeriodeFin = PeriodeFinTemp end

  local ListePeriode = ""
  if separateur == "grille" then
    ListePeriode = '{| cellpadding="5" style="border:1px solid #aaaaaa; margin-top:1em; margin-bottom:0.5em" rules="all" align="center"\n! ' .. AnneeDebut .. " || "
  elseif separateur == "image" then
    ListePeriode = "<ul>"
    tag1 = '<li style="float:left;margin:2px 2px 2px 8px;display:inline;">[[Fichier:Breathe-document-save.svg|30px|link='
    tag2 = "]]<br>"
    tag3 = "</li>"
  end
  while AnneeDebut <= AnneeFin do
    while PeriodeDebut <= LimiteFin do
      local lien, texte

      if unite == "semaine" then
        lien = page .. "/semaine " .. PeriodeDebut .. " " .. tostring(AnneeDebut)
        if separateur == "grille" then
          texte = PeriodeDebut
        else
          texte = PeriodeDebut .. " " .. tostring(AnneeDebut)
        end

      elseif format == "nom" then
        lien = page .. "/" .. lib_date.determinationMois(PeriodeDebut) .. " " .. tostring(AnneeDebut)
        if separateur == "grille" then
          texte = lib_date.determinationMois(PeriodeDebut)
        else
          texte = lib_date.determinationMois(PeriodeDebut) .. " " .. tostring(AnneeDebut)
        end

      elseif format == "abréviation" then
        lien = page .. "/" .. lib_date.determinationMois(PeriodeDebut) .. " " .. tostring(AnneeDebut)
        texte = mw.text.truncate(lib_date.determinationMois(PeriodeDebut),3)
      else
        lien = page .. "/" .. tostring(AnneeDebut) .. "/" .. tostring(PeriodeDebut)
        texte = tostring(AnneeDebut) .. "/" .. tostring(PeriodeDebut)
      end

      if separateur == "image" then
        ListePeriode = ListePeriode .. tag1 .. lien .. tag2 .. "[[" .. lien .. "|" .. texte .. "]]" .. tag3
      else
        ListePeriode = ListePeriode .. "[[" .. lien .. "|" .. texte .. "]]"
      end

      if AnneeDebut == AnneeFin and PeriodeDebut == PeriodeFin then
        PeriodeDebut = LimiteFin
      elseif PeriodeDebut < LimiteFin then
        if separateur == "grille" then
          ListePeriode = ListePeriode .. " || "
        elseif separateur == "image" then
          ListePeriode = ListePeriode .. " "
        else
          ListePeriode = ListePeriode .. separateur .. " "
        end
      end
      PeriodeDebut = PeriodeDebut + 1
    end

    if AnneeDebut < AnneeFin or PeriodeDebut < PeriodeFin then
      -- Changement d'année sauf pour la toute dernière ligne
      if separateur == "grille" then
        ListePeriode = ListePeriode .. "\n|-\n! " .. AnneeDebut+1 .. " || "
      else
        ListePeriode = ListePeriode .. "\n\n"
      end
    end
    PeriodeDebut = 1
    AnneeDebut = AnneeDebut + 1
  end

  if separateur == "grille" then
    ListePeriode = ListePeriode .. "\n|}\n"
  elseif separateur == "image" then
    ListePeriode = ListePeriode .. "</ul>\n"
  end

  return ListePeriode
end

return p