Module:Aẓṭṭa n twlafin d izwal
La documentation pour ce module peut être créée à Module:Aẓṭṭa n twlafin d izwal/doc
local module = {}
function module.grille(liste_blocs, base_largeur, limite_par_ligne, style, style_ligne, style_case)
-- Génère une grille redimensionnable en HTML utilisant Flex.
-- :param liste_blocs : tableau indexé du contenu à afficher dans chaque case
-- :param base_largeur : largeur minimale en px, em, etc. d'une case
-- :param limite_par_ligne : permet de limiter le nombre de case par ligne
-- :param style : style CSS à appliquer à la grille elle-même
-- :param style_ligne : style CSS à appliquer à la grille elle-même
-- :param style_case : style CSS à appliquer à chaque case
local i_ligne = 1
local grille = mw.html.create('div')
grille:cssText(style)
local ligne = mw.html.create('div')
ligne:css('display', 'flex')
:css('flex-direction', 'row')
:css('flex-wrap', 'wrap')
:css('text-align', 'center')
:css('align-items', 'center')
:cssText(style_ligne)
for i,contenu in ipairs(liste_blocs) do
-- dépassement du nombre d'éléments par ligne
if i > i_ligne*limite_par_ligne then
-- on ferme le block div de la ligne et on repart sur un nouveau
grille:node(ligne)
i_ligne = i_ligne + 1
ligne = mw.html.create('div')
ligne:css('display', 'flex')
:css('flex-direction', 'row')
:css('flex-wrap', 'wrap')
:css('text-align', 'center')
:css('align-items', 'center')
:cssText(style_ligne)
end
local case = mw.html.create('div')
case:css('display', 'flex')
:css('flex-direction', 'column')
:css('flex', '1 1 '..base_largeur)
:cssText(style_case)
:wikitext(contenu)
ligne:node(case)
end
grille:node(ligne)
return tostring(grille)
end
function parse_list(str)
-- Découpe une liste non numérotée en tableau Lua indexé
-- motif de découpage: les * précédées de retour à la ligne
local parse = mw.text.split(str, '\n%*')
local res = {}
local res_i = 1
-- suppression des lignes vides
for i, ligne in pairs(parse) do
if mw.text.trim(ligne) ~= '' then
res[res_i] = ligne
res_i = res_i + 1
end
end
return res
end
function module.grille_equilibree(frame)
-- Retourne une grille HTML redimensionnable
-- à partir d'une liste wiki non numérotée
-- :param 0: liste wiki non numérotée
-- :param largeur: largeur minimale d'une case
-- :param nombre: nombre max d'éléments par ligne
local args = {}
local argsParent = frame.args
-- Paramètres vides interprétés par Lua.
-- paramètres non nommés
for cle, val in ipairs(argsParent) do
if val ~= '' then
args[cle] = val
end
end
-- paramètres nommés
for cle, val in pairs(argsParent) do
if val ~= '' then
args[cle] = val
end
end
-- valeurs par défaut
if args['largeur'] == nil then
args['largeur'] = '5em'
end
if args['nombre'] == nil then
args['nombre'] = 6
else
args['nombre'] = tonumber(args['nombre'])
end
local items = parse_list(args[1])
return module.grille(
items, args['largeur'], args['nombre'],
args['style'], args['style ligne'], args['style case']
)
end
return module