Aller au contenu

Module:Archives

Une page de Wikiversité, la communauté pédagogique libre.

info Documentation du Module:Archives : v · d · m · h.


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


function p.an(frame)
  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])
      if separateur == "grille" then
        separateur = "||"
      end
    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 == "||" then 
    table.insert(ListeAnnees, '{| cellpadding="5" style="border:1px solid #aaaaaa; margin-top:1em; margin-bottom:0.5em" rules="all" align="center"\n|')
  elseif separateur == "image" then
    table.insert(ListeAnnees, "<ul>")
    tag1 = '<li style="float:left;margin:2px 2px 2px 8px;display:inline;">[[Image:Nuvola devices nfs mount.png|30px|link='
    tag2 = "]]<br/>"
    tag3 = "</li>"
  end

  while debut <= fin do
    lien = page .. "/" .. tostring(debut)
    if separateur == "<br>" then 
        texte = lien
    else
        texte = tostring(debut)
    end
    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 == "||" then
    table.insert(ListeAnnees, "\n|}\n")
  elseif separateur == "image" then
    table.insert(ListeAnnees, "</ul>\n")
    separateur = ""
  end

  return table.concat(ListeAnnees, separateur .. " ")
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)
  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
      if mw.text.trim(frame.args[4]) == "grille" then
        separateur = "||"
      else
        separateur = mw.text.trim(frame.args[4])
      end
    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 == "||" then 
    ListePeriode = '{| cellpadding="5" style="border:1px solid #aaaaaa; margin-top:1em; margin-bottom:0.5em" rules="all" align="center"\n!' .. AnneeDebut .. "\n|"
    if PeriodeDebut >= 2 then
    	ListePeriode = ListePeriode .. 'colspan="' .. PeriodeDebut - 1 .. '"| ||'
    end
  elseif separateur == "image" then
    ListePeriode = "<ul>"
    tag1 = '<li style="float:left;margin:2px 2px 2px 8px;display:inline;">[[Image:Nuvola devices nfs mount.png|30px|link='
    tag2 = "]]<br/>"
    tag3 = "</li>"
  end
  while AnneeDebut <= AnneeFin do
    while PeriodeDebut <= LimiteFin do

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

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

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

      if separateur == "<br>" then 
            texte = lien
      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 ~= "image" then
          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 == "||" then 
        ListePeriode = ListePeriode .. "\n|-\n!" .. AnneeDebut+1 .. "\n|"
      else
        ListePeriode = ListePeriode .. "\n\n"
      end
    end
    PeriodeDebut = 1
    AnneeDebut = AnneeDebut + 1
  end

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

  return ListePeriode
end


return p