Module:IllustrationsEnDésordre

 Documentation

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:, sans Fichier: et sans Image:.
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
bateau


 


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
chien dalmatien
piments
bateau


 


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]. (Smiley: triste)



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;'>&nbsp;</br>" .. '\n'    if ( mw.ustring.len(szMsg) > 0 ) then szCode = szMsg end    return szCodeendreturn p