Module:IllustrationsEnDésordre

Une page de Wikipédia, l'encyclopédie libre.

 Documentation[voir] [modifier] [historique] [purger]

Utilisation[modifier le code]

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[modifier le code]

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[modifier le code]

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[modifier le code]

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[modifier le code]

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] = i
	end
    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 szCode
end

return p