Module:Yesno

De Stargate Wiki Sémantique
Révision datée du 27 janvier 2016 à 03:20 par LIMAFOX76 (discussion | contributions) (Page créée avec « -- Fonction permettant le traitement consistent d'une entrée wikitexte de forme booléenne. return function (val, default, emptyDefault) -- If your wiki uses non-ascii... »)
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)
Documentation icon Documentation module[afficher] [modifier] [historique] [purger]

Utilisation

Ce module propose une interface consistante pour traiter les entrées champ booléennes ou de style booléen. Alors que Lua autorise comme valeur booléennes true et false, les modèles en code wiki ne peuvent exprimer des valeurs booléennes qu'au travers de champs égaux à « oui », « non », etc. Ce module traite ce type de champs et les transforment en entrées booléennes qui peuvent être traitées par Lua. Il retourne la valeur nil en l'absence de paramètre, ceci afin de faire la différence entre nil et false. Lorsque ce paramètre a une valeur imprévue, le module retourne la valeur par défaut ou nil. Ce module accepte aussi les autres structures Lua comme entrée comme les booléens, les nombres, les tables et les fonctions.

Syntaxe

yesno(valeur, défaut, défautVide)

Paramètres

Champ Fonction
valeur Valeur à tester
défaut Valeur par défaut pour les valeurs qui ne sont ni assimilé à des booléens ni nil.
défautVide Si ce paramètre n'est pas nil, ce sera la valeur par défaut pour les chaines vides ou uniquement composée d'espaces, sauts de ligne…

Utilisation

Tout d'abord, il faut charger le module. Très important, ce module ne peut être chargé que depuis d'autres modules Lua et non depuis des pages wikis classiques. Pour celles-ci, utilisez plutôt le modèle {{Ouinon}}.

local yesno = require('Module:Yesno')

Certaines valeurs retournent toujours true, d'autres valeurs retournent toujours false. La valeur nil retourne toujours nil.

-- Ces valeurs retournent toujours true :
yesno('oui')
yesno('yes')
yesno('y')
yesno('true')
yesno('1')
yesno(1)
yesno(true)

-- Ces valeurs retournent toujours false :
yesno('non')
yesno('no')
yesno('n')
yesno('false')
yesno('0')
yesno(0)
yesno(false)

-- Une valeur nil retourne nil :
yesno(nil)

Les chaines sont converties en minuscules avant d'être évaluées :

-- Ces valeurs retournent toujours true :
yesno('Oui')
yesno('OUI')
yesno('oUi')
yesno('tRuE')

-- Ces valeurs retournent toujours false :
yesno('Non')
yesno('NON')
yesno('nOn')
yesno('fALsE')

Une valeur par défaut peut être spécifiée pour les valeurs autres que celle listée ci-dessus. Si aucune valeur par défaut n'est fournie le module retourne nil pour ces valeurs.

-- Ces valeurs retournent nil :
yesno('foo')
yesno({})
yesno(5)
yesno(function() return 'Ceci est une fonction.' end)

-- Ces valeurs retournent true :
yesno('foo', true)
yesno({}, true)
yesno(5, true)
yesno(function() return 'This is a function.' end, true)

-- Ces valeurs retournent "bar" :
yesno('foo', 'bar')
yesno({}, 'bar')
yesno(5, 'bar')
yesno(function() return 'This is a function.' end, 'bar')

Une chaine vide est évalué à la valeur du troisième paramètre s'il est défini, sinon à la valeur par défaut.

yesno('')               -- Retourne nil.
yesno('', true)         -- Retourne true.
yesno('', true, nil)    -- Retourne true.
yesno('', true, false)  -- Retourne false.
yesno('', 'foo', 'bar') -- Retourne 'bar'.

Attention, cette dernière fonctionnalité est différente du module présent sur en: qui n'a qu'une valeur par défaut.

-- Fonction permettant le traitement consistent d'une entrée wikitexte de forme booléenne.

return function (val, default, emptyDefault)
	-- If your wiki uses non-ascii characters for any of "yes", "no", etc., you
	-- should replace "val:lower()" with "mw.ustring.lower(val)" in the
	-- following line.
	val = type(val) == 'string' and val:lower() or val
	if val == nil then
		return nil
	elseif val == true 
		or val == 'yes'
		or val == 'y'
		or val == 'oui'
		or val == 'o'
		or val == 'true'
		or val == 'vrai'
		or tonumber(val) == 1
	then
		return true
	elseif val == false
		or val == 'no'
		or val == 'n'
		or val == 'non'
		or val == 'false'
		or val == 'faux'
		or tonumber(val) == 0
	then
		return false
	elseif emptyDefault ~= nil and type(val) == 'string' and val:match( '^%s*$' ) then
		return emptyDefault
	else
		return default
	end
end