Module:Correction syntaxique : Différence entre versions

De Wikonsult
Sauter à la navigation Sauter à la recherche
w.fr>Od1n
(élément inline pour éviter les erreurs de markup "block dans inline" (cf. discussion))
(Aucune différence)

Version du 4 janvier 2018 à 14:17

Utilisation

Fonctions exportables :

  • verifierLesArguments(frame) – vérifie l'existence des arguments passés à un modèle

Exemple

En plaçant dans la source d'un modèle le code suivant, chaque appel du modèle va vérifier la présence d'arguments autres que nom, prenom et age :

{{#invoke: Correction syntaxique | verifierLesArguments
 | nom =
 | prenom =
 | age = 
}}

Si d'autres arguments sont présents, alors :

  • du code caché sera écrit dans la page (visible en consultant la source HTML de la page, ou en affichant via CSS ou JavaScript les éléments .erreur_syntaxe_modele)
  • et la page sera ajoutée dans la catégorie cachée Page appelant un modèle avec un paramètre inconnu.

Configuration

Il est possible de spécifier la catégorie à remplir en ajoutant un paramètre _catégorie :

{{#invoke: Correction syntaxique | verifierLesArguments
 | nom =
 | prenom =
 | age = 
 | _catégorie = Catégorie:Modèle Foobar avec un paramètre inconnu
}}

(la saisie du namespace Catégorie: peut être omise)

Semble remplir la même fonction que Module:Check for unknown parameters.




local p = {}

local function _verif(passed_args, modele_args, cat)
    local rv = ""
    local nombre = 0
    for a,b in pairs(passed_args) do
        if (modele_args[a] == nil and b ~= "") then
            nombre = nombre + 1
            rv = rv .. '<span class="erreur_syntaxe_modele" style="display:none">' .. "L'argument " .. mw.text.nowiki(a) .. " (valeur " .. mw.text.nowiki(b) .. ") n'existe pas dans le modèle appelé</span>"
        end
    end
    if (nombre > 0) then
        local categorie
        if (cat) and (cat ~= "") then
            categorie = tostring(mw.title.new(cat, "Catégorie"))
        else
            categorie = "Catégorie:Page appelant un modèle avec un paramètre inconnu"
        end
        if (nombre > 10) then
            rv = rv .. "[[" .. categorie .. "|+]]"
        else
            rv = rv .. "[[" .. categorie .. "]]"
        end
    end
    return rv
end

function p.verif( passed_args, modele_args_list, cat )
	local modele_args = {}
	for i, v in ipairs( modele_args_list ) do
		if tonumber( v ) then
			modele_args[ tonumber( v ) ] = true
		else
			modele_args[ v ] = true
		end
	end
	return _verif( passed_args, modele_args, cat )
end

function p.verifierLesArguments(frame)
    local passed_args = frame:getParent().args
    local modele_args = frame.args
    local cat = modele_args["_catégorie"]
    return _verif(passed_args, modele_args, cat)
end

return p