Aller au contenu

Module:Archives

Une page de Wikipédia, l'encyclopédie libre.

 Documentation[voir] [modifier] [historique] [purger]

Utilisation

[modifier le code]

Ce module est conçu pour une utilisation à travers le modèle Modèle:ArchivesLua. Il fournit des fonctions pour la mise en forme automatique des liens vers les archives d'une page de discussion.

Fonctions exportables

[modifier le code]
  • an(frame) – Prend en argument un frame contenant dans l'ordre les paramètres ci-dessous et retourne la liste des liens d'archives d'une page année par année.
    1. page : nom de la page wikipédia dont on veut les archives ;
    2. debut : année des premières archives (par défaut, 2004) ;
    3. fin : année des dernières archives (par défaut, l'année en cours);
    4. separateur : séparateur à utilise entre les liens d'archive (par défaut, pas de séparateur).
  • periode(unite, frame) – Prend en argument une chaîne de caractères unite qui adapte la forme des liens d'archive uniquement lorsqu'il vaut "semaine" (applique le formatage par mois par défaut) et un frame contenant dans l'ordre les paramètres ci-dessous et retourne la liste des liens d'archives d'une page, pour une séparation des archives plus complexe que par année.
    1. page : nom de la page wikipédia dont on veut les archives ;
    2. AnneeDebut-PeriodeDebut : date de début des archives avec AnneeDebut et PeriodeDebut des nombres, la période étant un numéro de mois ou de semaine ;
    3. AnneeFin-PeriodeFin : date de fin des archives au même format que la date de début (par défaut, la date du jour) ;
    4. separateur : séparateur à utilise entre les liens d'archive (par défaut, pas de séparateur) ;
    5. format : "nom" ou "abréviation", dans le deuxième cas le nom du mois est tronqué après le troisième caractère (Par défaut, "nom").
  • semaine(frame) – Retourne periode("semaine", frame) ;
  • mois(frame) – Retourne periode("mois", frame).

Modules externes et autres éléments dont ce module a besoin pour fonctionner

[modifier le code]
  • mw.text.trim – Enlève les espaces et autres caractères au début et à la fin d'une chaine de caractères ;
  • mw.text.truncate – Tronque une chaîne de caractères et y ajoute des points de suspension ;
  • mw.ustring.gsub – Remplace toutes les occurrences d'un motif dans une chaîne de caractères par une chaîne de remplacement ;
  • Module:Date – Module fournissant des fonctions de traitement des dates.

Modules lua utilisant ce module

[modifier le code]

Aucun

Modèles appelant directement ce module

[modifier le code]

Dans Modèle:ArchivesLua, ce module est appelé par le code suivant :

{{#invoke:archives
|{{{période|{{{1|an}}}}}}
|{{{page|{{{2|}}}}}}
|{{{début|{{{3|}}}}}}
|{{{fin|{{{4|}}}}}}
|{{{séparateur|{{{5|}}}}}}
|{{{format|{{{6|}}}}}}
}}
-- 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