L'Abri
Advertisement

Ce module est principalement destiné à valider les champs des infobox, bien qu'il soit également utilisable pour effectuer automatiquement d'autres tâches basées sur les champs des infobox.

Actuellement, il contient une seule fonction, validateFields, qui insère du texte lorsqu'il est spécifié en fonction des vérifications effectuées sur des champs uniques. C'est évidemment utile pour ajouter automatiquement des catégories basées sur des champs d'infobox, mais ce n'est pas le seul type de texte qui peut être inséré. À l'heure actuelle, un seul champ peut être vérifié d'une seule manière pour déterminer s'il faut insérer un morceau de texte particulier. Si des fonctionnalités plus complexes sont requises à l'avenir, elles seront mises en œuvre en fonction des besoins.

Il existe actuellement quatre types de vérifications qui peuvent être effectuées : present, absent, egale et contient. Autant de vérifications que vous le souhaitez peuvent être effectuées avec un seul appel, simplement en les ajoutant les uns à la suite des autres. Une seule vérification a trois ou quatre arguments. Le premier est le type de contrôle (présent, absent, égale ou contient). Le second est le nom du champ. Le dernier est le texte à insérer si la vérification est vraie. Si la vérification est soit égale ou contient, un quatrième argument immédiatement après le nom du champ est requis, qui contient ce que vous voulez vérifier que le champ est égal ou contient.

Utilisation

Présence du champ :

{{#invoke:Validation|validateFields|present|nom du champ|texte à insérer}}

Absence du champ :

{{#invoke:Validation|validateFields|absent|nom du champ|texte à insérer}}

La valeur du champ égale :

{{#invoke:Validation|validateFields|egale|nom du champ|la valeur du champ de texte doit être égale à|texte à insérer}}

La valeur du champ contient :

{{#invoke:Validation|validateFields|contient|nom du champ|la valeur du champ de texte doit contenir|text to be inserted}}

Vérifications multiples :

{{#invoke:Validation|validateFields|première vérification|args...|seconde vérification|args...|troisième vérification...}}

Exemple d'utilisation

Mettons une Infobox contenant le champ déprécié id, le champ requis nom, et le champ anniversaire. Nous voulons ajouter des pages avec le champ obsolète et des pages manquant le champ requis aux catégories pertinentes, et nous voulons ajouter toutes les instances d'un anniversaire particulier (13 septembre) à une autre catégorie. Nous pouvons nous occuper de tout cela à la fois avec un seul appel dans le modèle d'infobox après la balise </infobox> :

{{#invoke:Validation|validateFields|present|id|[[Catégorie:Infoboxes avec le champ id]]|absent|nom|[[Catégorie:Infoboxes sans le champ nom]]|egale|anniversaire|13 septembre|[[Catégorie:Anniversaires du 13 septembre]]}}

local p = {};

function present(field, comp)
    return field ~= nil
end

function absent(field, comp)
    return field == nil
end

function equals(field, comp)
    return field ~= nil and field:lower() == comp:lower()
end

function contains(field, comp)
    return field ~= nil and string.find(field:lower(), comp:lower()) ~= nil
end

function check(field, comp, func, ret)
    if func(field, comp) then
        return ret .. " "
    else
        return ""
    end
end

function handleErrors(funcName, func, comp, checkRet)
    missingComp = ((funcName == "equals") or (funcName == "contains")) and (comp == nil)
    if (missingComp) or (func == nil) or (checkRet == nil) then
        error("Invalid args passed to validateFields. Check [[Module:Validation/doc]] for proper usage.", 0)
    end
end

-- This function will insert text into an infobox based on the properties of a field.
-- Currently, this function can only look at one field for a given text insertion,
-- but it is possible to check multiple fields and insert text separately for each one.
function p.validateFields(frame)
    functions = {["present"]=present, ["absent"]=absent, ["equals"]=equals, ["contains"]=contains}
    infoboxArgs = frame:getParent().args
    args = frame.args
    i = 1
    ret = ""

    while (args[i] ~= nil) do
        inc = 3
        field = infoboxArgs[args[i + 1]]
        comp = nil
        func = functions[args[i]]
        checkRet = args[i + 2]

        if (args[i] == "equals") or (args[i] == "contains") then
            inc = 4
            comp = args[i + 2]
            checkRet = args[i + 3]
        end

        errRet, errMsg = pcall(handleErrors, args[i], func, comp, checkRet)
        if (not errRet) then
            return errMsg
        end

        ret = ret .. check(field, comp, func, checkRet)
        i = i + inc
    end

    return ret
end

return p
Advertisement