Module:PdsM
La documentation pour ce module peut être créée à Module:PdsM/Documentation
--[[
Le module PdsM permet évite de répéter le modèle Pds sur plusieurrs ligne.
Il permet aussi d’intercaler un texte décoré avec WsCss
décoré du préfixe style:: en argument de droite
EXEMPLE :
{{#invoke:PdsM|construire
|texte de gauche|texte de droite
|texte de gauche|style::WsCss
|l=largeur totale (ex. : 25em)
|x=espacement en em qui s’adapte à la taille de la police de caractère
|ld=largeur de la section réservée au texte de droite (ex : 10em)
|altd=alignement du texte de droite (altd=g)
|m=motif à pas fixe fin(2px) ou xfin(1px)
|indent=indentation en em du texte de gauche + ou - (ex. : 2)
}}
]]
local p = {}
local szMsg = ''
local szCode = ''
-- Fonction recopiée de module:Table
-- https://fr.wikisource.org/w/index.php?title=Module:Table&oldid=10679048
function p.out_arg( arg, default )
if arg and arg ~= '' then
return arg
end
return default
end
function p.construire( frame )
-- Chaque ligne comprend 2 éléments par défaut
local nNbreColonnes = 2
--------------------------------------------------------
-- Noter les paramètres nommés dans l'appel du modèle :
--
-- Il s'agit de tous les paramètres du module:Table
-- (voir documentation de modèle:Table)
--------------------------------------------------------
local args = {}
local div1 = '<div style= "position:relative; max-width:'
local div2 = '<div style="position:relative; '
local divf = ''
local div3 = '<div style="position:relative; z-index:2; '
local indp = ''
local divd = ''
local nNbreParamSansNom = 0
args = frame.args
if args[1] == nil then
args = frame:getParent().args
end
local x = args['x'] or .5
if args['l'] ~=nil then
div1 = div1 .. args['l']
else
div1 = div1 .. '100%'
end
div1 = div1 .. '; margin-bottom:0;">'
local indent = tonumber(args['indent'] or 0)
if args['m'] ~=nil then
divf = '<div style="position:absolute; z-index:1; bottom:.4em; '
if indent < 0 then
divf = divf .. 'width:calc(100% - ' .. -indent .. 'em; ' ..
'margin-left:' .. -indent .. 'em; border-bottom:'
else
divf = divf .. 'width:100%; border-bottom:'
end
if args['m'] == 'fin' then
divf = divf .. '2px dotted"></div>'
else
divf = divf .. '1px dotted"></div>'
end
end
if indent < 0 then
div3 = div3 .. 'margin-left:' .. -indent .. 'em; ' ..
'text-indent:' .. indent .. 'em; ' ..
'width:calc(100% + ' .. indent .. ')em; '
else
div3 = div3 .. 'width:100%; '
end
if args['m'] ==nil then
div3 = div3 .. 'background-image:radial-gradient(black 1px, white 0px); '
.. 'background-size: ' .. x .. 'em ' .. x .. 'em; '
.. 'background-repeat:repeat-x; '
.. 'background-position: left bottom ' .. .4 - x/2 .. 'em;"'
end
div3 = div3 .. '> <span style="z-index:3; padding-right:'
if args['m'] ~=nil then
div3 = div3 .. '2px; '
else
div3 = div3 .. x/2 .. 'em; '
end
-- à faire background white
if indent > 0 then
indp = '<span style="display:inline-block;min-width:' .. indent .. 'em; '
.. 'max-width:' .. indent .. 'em"></span>'
end
divd = divd .. '<div style="float:right"><div style="position:absolute; '
.. 'z-index:2; bottom:0; right:0; text-indent:0; '
if args['ld'] ~=nil then
divd = divd .. 'width:' .. args['ld'] .. '; '
end
if args['altd'] ~= nil then
if args['altd'] == 'd' then
divd = divd .. 'text-align:right;'
elseif args['altd'] == 'g' then
divd = divd .. 'text-align:left;'
end
end
divd = divd .. 'white-space:nowrap"><span style="z-index:2; background: white;'
if args['m'] ~= nil then
divd = divd .. 'padding-left:4px;" '
else
divd = divd .. 'padding-left:' .. x*1.5 .. 'em;" '
end
-- Noter les paramètres sans nom dans l'appel du modèle
-- qui doivent être inscrits en trio : section, titre et page (même vide)
-------------------------------------------------------
local aParamSansNom = {}
local szInfo = ''
for i, v in ipairs(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 % nNbreColonnes ~= 0 then
szMsg = '<span style="font-size:200%; color:red;">Prière de saisir ' .. nNbreColonnes .. ' paramètres par ligne.</span>' .. '<br>\n' .. szInfo
end
if args[1] == nil or args[1] == '' then
aParamSansNom[1] = '​'
aParamSansNom[2] = '​'
args['m'] = 'dots'
args['sp'] = args['sp'] or '1'
nNbreParamSansNom = 2
args['pad'] = 0
end
--if true then return nNbreParamSansNom end
---------------------
-- Créer le code HTML
---------------------
-- Pour chaque paire définissant une ligne, ajouter le code pertinent
--------------------------------------------------------------------
local util = require("Module:StyleM")
for n = 1, nNbreParamSansNom, nNbreColonnes do
--if true then return aParamSansNom[n + 1] end
if mw.ustring.sub(aParamSansNom[n + 1],1,7) == 'style::' then
local style = mw.ustring.sub(aParamSansNom[n + 1],8)
szCode = szCode .. '<div style = "' .. util.toCss(style
.. ';text-align:center; ') .. '>' .. aParamSansNom[n] .. '</div>'
elseif args['m'] ~=nil then
if args['m'] == "dots" then
szCode = szCode .. '<div style="display:flex; max-width:100%;'
if args['l'] ~=nil then
szCode = szCode .. 'width:' .. args['l']
end
szCode = szCode .. ';" ><span style="padding-right:' .. (args['pad'] or '.3') .. 'em; '
if indent > 0 then
szCode = szCode .. 'text-indent:' .. indent .. 'em ; '
end
szCode = szCode .. '">' .. aParamSansNom[n] .. '</span>'
.. '<div class="no_erreurs_communes" '
.. 'style=" flex: 1; direction: rtl; overflow: hidden; '
.. 'white-space:nowrap; font-weight:bold; letter-spacing:'
.. (args['sp'] or '.3') .. 'em">'
.. '.........................................................'
.. '.........................................................'
.. '............................................</div>'
if aParamSansNom[n + 1] ~= '' then
szCode = szCode .. ' <span style="padding-left:' .. (args['pad'] or '.3') .. 'em; '
if args['ld'] ~=nil then
szCode = szCode .. 'width:' .. args['ld'] .. '; '
end
if args['altd'] ~=nil then
if args['altd'] == 'd' then
szCode = szCode .. 'text-align:right; '
end
end
szCode = szCode .. '">' .. aParamSansNom[n + 1] .. '</span></div>'
end
end
else
szCode = szCode .. div1 .. div2
if aParamSansNom[n + 1] ~= '' and args['ld'] ~=nil then
szCode = szCode .. 'margin-right:' .. args['ld'] .. '">'
else
szCode = szCode .. '">'
end
szCode = szCode .. divf .. div3
if aParamSansNom[n] == '' then
aParamSansNom[n] = ' '
else
szCode = szCode .. 'background: white; '
end
szCode = szCode .. '">' .. indp .. aParamSansNom[n] .. '</span></div></div>'
if aParamSansNom[n + 1] ~= '' then
szCode = szCode .. divd .. '>' .. aParamSansNom[n + 1]
.. '</span></div></div>'
end
szCode = szCode .. '</div><div style="clear:right;"></div>'
end
end
if string.len( szMsg ) ~= 0 then
szCode = szMsg
end
return szCode
end
return p