Module:IllustrationsEnDésordre
Utilisation
Fonctions exportables :
Construire()
: à partir des données passées en paramètres et dans le code, construit une galerie verticale d'illustrations. L'ordre des illustrations change à chaque fois que la page est rafraîchie via purge.
Usage
Par défaut, le module
- affiche en désordre des images
- insère une espace verticale avant et après chaque image
- centre chaque image
- supprime les liens « automatiques » des images vers les fichiers sur Wikimedia Commons
- colore le texte de chaque légende en blanc pour la rendre invisible à la lecture (la sélectionner la fait apparaître)
- encadre chaque légende avec ⇒ et ⇐.
Paramètres à passer au module
On peut passer au module (et non PAS au modèle) ces paramètres qui modifient les comportements par défaut :
|zoom=<NombreEntier>
(optionnel) : module du même facteur la taille de chaque image (un pourcentage ; ne pas mettre%
)|numeros=oui
(optionnel) : numérote les images|images_css=<code CSS>
(optionnel) : applique des commandes CSS à la présentation de chaque image|legende_css=<code CSS>
(optionnel) : applique des commandes CSS à la présentation de chaque légende|legende_left=<caractères>
(optionnel) : caractère qui « encadre » chaque image à gauche|legende_right=<caractères>
(optionnel) : caractère qui « encadre » chaque image à droite
En plus des paramètres plus haut, on peut passer :
- triplet
<nom fichier1>|<taille1>|<légende1>
(optionnel) - triplet
<nom fichier2>|<taille2>|<légende2>
(optionnel) - triplet
<nom fichier3>|<taille3>|<légende3>
(optionnel) - ...
- Les noms de fichiers sont écrits sans
File:
, sansFichier:
et sansImage:
. - Les tailles doivent être exprimées en
px
(le moteur de Wikipédia ne reconnaît aucune autre mesure :-(.
Exemples
- Ce code dans un modèle ou une page
{{#invoke:IllustrationsEnDésordre|Construire ¶
|Doni aux Maldives cropped.jpg|200px|bateau}} ¶
- donne
- Ce code dans un modèle ou une page
{{#invoke:IllustrationsEnDésordre|Construire ¶
|zoom=25 ¶
|legendes_css=color:green; ¶
|Doni aux Maldives cropped.jpg|200px|bateau}} ¶
|Dried spicy red peppers (4888546786).jpg|500px|piments ¶
|Dalmatien.jpg|500px|chien dalmatien ¶
}}
- donne
Mise en garde
L'ordre des images est calculé à partir de nombres produits par un PRNG, entité mathématique qui génère une suite de nombres pseudo-aléatoires. Pour calculer cet ordre, il faut amorcer le PRNG avec un nombre aléatoire, qui amorce en quelque sorte le puits des nombres pseudo-aléatoires. Dans le jargon informatique, on parle de seed (graine, amorce).
Au moment où la page est chargée par MediaWiki, un seed amorce le PRNG. Néanmoins, recharger la même page ne rafraîchit pas le seed. Changer d'onglet ne change pas le seed. Pour que l'ordre change, il faut charger dans un autre navigateur ou exiger un purge [1].
La documentation de ce module est générée par le modèle {{Documentation module}}.
Elle est incluse depuis sa sous-page de documentation. Veuillez placer les catégories sur cette page-là.
Les éditeurs peuvent travailler dans le bac à sable (créer).
Voir les statistiques d'appel depuis le wikicode sur l'outil wstat et les appels depuis d'autres modules.
local p = {}local szMsg = ''local szCode = ''function p.Construire( frame ) ----------------------------------------------------- -- Noter les paramètres nommés dans l'appel du module ----------------------------------------------------- local nZoom = tonumber(frame.args.zoom) if nZoom == nil then nZoom = 100 end local szImagesCss = frame.args.images_css if szImagesCss == nil then szImagesCss = 'margin:150px 0 150px 0;' end local szLegendesCss = frame.args.legendes_css if szLegendesCss == nil then szLegendesCss = 'color:white; font-size:200%; padding:0 1em 0 1em;' end local szLegendesLeft = frame.args.legendes_left if szLegendesLeft == nil then szLegendesLeft = '⇒' end local szLegendesRight = frame.args.legendes_right if szLegendesRight == nil then szLegendesRight = '⇐' end local szIsNumeros = frame.args.numeros if szIsNumeros == nil then szIsNumeros = 'non' end local szIsEnOrdre = frame.args.en_ordre if szIsEnOrdre == nil then szIsEnOrdre = 'non' end ------------------------------------------------------- -- Noter les paramètres anonymes dans l'appel du module ------------------------------------------------------- -- Chaque ligne comprend obligatoirement 3 éléments local nNbreColonnes = 3 local aParamSansNom = {} local nNbreParamSansNom = 0 local szInfo = '' for i, v in ipairs(frame.args) do aParamSansNom[i] = mw.text.trim(v) nNbreParamSansNom = nNbreParamSansNom + 1 szInfo = szInfo .. 'Paramètre ' .. i .. ' : ' .. aParamSansNom[i] .. '<br>\n' if nNbreParamSansNom % nNbreColonnes == 0 then szInfo = szInfo .. '<br>\n' end szCode = szCode .. i .. ' : ' .. aParamSansNom[i] .. '<br>\n' end if nNbreParamSansNom <= 0 then szMsg = '<span style="font-size:200%; color:red;">Prière de saisir les paramètres d\'au moins 1 illustration.</span>' .. '<br>\n' return szMsg end if nNbreParamSansNom > (300 * nNbreColonnes) then szMsg = '<span style="font-size:200%; color:red;">Prière de saisir les paramètres de pas plus que 300 illustrations.</span>' .. '<br>\n' return szMsg end if nNbreParamSansNom % nNbreColonnes ~= 0 then szMsg = '<span style="font-size:200%; color:red;">Prière de saisir ' .. nNbreColonnes .. ' paramètres par ligne.</span>' .. '<br>\n' .. szInfo return szMsg end ----------------------------------------------------------------------------- -- Copie des paramètres des illustrations dans une liste plus facile à -- manipuler ultérieurement ----------------------------------------------------------------------------- local pics = {} local nSize = 0 for i = 1, nNbreParamSansNom, nNbreColonnes do pics[tostring(nSize) .. '_0'] = aParamSansNom[i + 0] pics[tostring(nSize) .. '_1'] = tostring(tonumber( string.match( aParamSansNom[i + 1], '[%d]+[%.]*[%d]*' ) ) * nZoom/100) .. string.match( aParamSansNom[i + 1], 'px' )-- szMsg = szMsg .. pics[tostring(nSize) .. '_1'] .. '<br>' pics[tostring(nSize) .. '_2'] = aParamSansNom[i + 2] nSize = nSize + 1 end ------------------------------------------------------------------------------ -- Pour assurer que toutes les illustrations soient affichées au moins une fois, -- n'utiliser que des nombres premiers pour calculer l'ordre de chaque illustration -- (application du petit théorème de Fermat). -- Par exemple, si le nombre premier 37 est retenu et que la liste comporte 5 -- entrées, alors -- 1x37 mod 5 = 2 -- 2x37 mod 5 = 4 -- 3x37 mod 5 = 1 -- 4x37 mod 5 = 3 -- 5x37 mod 5 = 0 -- Chaque indice étant unique, chaque illustration sera prise une seule fois. -- Des paires <nombre premier>-<nombre d'entrées> ne produisent pas une liste -- d'indices uniques, -- mais c'est l'exception. -- Les nombres premiers retenus sont plus grands que 300 par choix personnel. -- Ils doivent être suffisamment grands de façon à excéder le nombre maximal -- d'illustrations si on veut l'unicité des indices. ------------------------------------------------------------------------------ local tnPremiers = { 307, 311, 313, 317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397,401, 409, 419, 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499 } math.randomseed( os.time() % 32000 + 1 ) local nPos = math.floor( math.random(1, #tnPremiers) ) local nPas = tnPremiers[ nPos ] -------------------------------------------------------------- -- Liste des indices à utiliser, selon leur ordre d'apparition -------------------------------------------------------------- local tszPersoIds = {} for i = 0, nSize - 1, 1 do if szIsEnOrdre == 'non' then tszPersoIds[i] = ((i + 1) * nPas) % nSize else tszPersoIds[i] = iend tszPersoIds[i] = tostring(tszPersoIds[i])-- szMsg = szMsg .. i .. ' -- ' .. tszPersoIds[i] .. '<br>' end -------------------------------- -- Construction du code HTML/CSS -------------------------------- local szCode = "" for id = 0, #tszPersoIds do szCode = szCode .. "<div style='" .. szImagesCss .."'>" if szIsNumeros == 'oui' then szCode = szCode .. (id + 1) end szCode = szCode .. "[[File:" .. pics[tszPersoIds[id] .. '_0'] szCode = szCode .. "|" .. pics[tszPersoIds[id] .. '_1'] szCode = szCode .. "|centre|link=]]" .. '\n' szCode = szCode .. "<center>" .. szLegendesLeft .. "<span style='" .. szLegendesCss .. "'>" .. pics[tszPersoIds[id] .. '_2'] .. "</span>" .. szLegendesRight .. "</center>" .. '\n' end szCode = szCode .. "<br style='margin:150px 0 0 0;'> </br>" .. '\n' if ( mw.ustring.len(szMsg) > 0 ) then szCode = szMsg end return szCodeendreturn p