« Module:Bandeau » : différence entre les versions

De Lagny-sur-Marne Wiki
Aller à la navigation Aller à la recherche
0x010D (discussion | contributions)
Aucun résumé des modifications
0x010D (discussion | contributions)
fonctions de bandeau générique, d'article, de section, d'ébauche fonctionnels.
Ligne 9 : Ligne 9 :
--Créer une fonction exportable pour les bandeaux système (ns:8).
--Créer une fonction exportable pour les bandeaux système (ns:8).
--Gérer les images multiples.
--Gérer les images multiples.
 
local p = {}
local p = {}


local format = mw.ustring.format
local trim = require('Module:Outils').trim
local yesno = require('Module:yesno')
local class = mw.loadData('Module:Bandeau/Class/Test')
-- local paramEbauche = mw.loadData('Module:Bandeau/Ébauche') -- ne sera chargé que pour un bandeau d'ébauche.


local cfg = {}
local cfg = {
forme = 'test-bandeau-simple',
niveau = 'test-bandeau-niveau-neutre',
formatLien = '[[Fichier:%s|%spx|alt=%s]]',
tailleIcone = '45x45',
erreurArgument = 'Paramètre <code>|%s=</code> manquant',
erreurEbaucheParam = 'le thème « %s » du modèle [[Modèle:Ébauche|{{ébauche}}]] n’est pas [[Aide:Ébauche/Aide paramètres|défini]].',
erreurEbaucheType = 'le thème « %s » doit apparaître en tête de liste du modèle [[Modèle:Ébauche|{{ébauche}}]].',
ebaucheImage = '<span style="white-space:nowrap;word-spacing:5px">%s</span>',
ebaucheTitre = '%s est une [[Aide:Ébauche|ébauche]].',
ebaucheTitreSujet = '%s est une [[Aide:Ébauche|ébauche]] concernant %s.',
ebaucheCateg = '[[Catégorie:Wikipédia:ébauche %s]]',
}
 
local function erreur(texte, formatstring, tag)
local res = mw.html.create(tag or 'span')
res :addClass('error')
:wikitext('Erreur : ')


cfg.classeSimple = 'simple'
if formatstring then
cfg.niveauNeutre = 'neutre'
res:wikitext(string.format(formatstring, texte))
cfg.formatLien = '[[Fichier:%s|40px|alt=%s|link=]]'
else
cfg.erreurArgument = 'Paramètre <code>|%s=</code> manquant'
res:wikitext(texte)
end


local icones = {
return tostring(res)
grave = 'Fairytale no.svg',
end
['modéré'] = 'Emblem-important.svg',
information = 'Information icon.svg',
['ébauche'] = 'Nuvola apps kedit.svg'
}


function p._bandeau(argsBandeau)
function p._bandeau(args)
args = argsBandeau
local res = mw.html.create('div')
local res = mw.html.create('div')
local cells = mw.html.create()
local icone = trim(args.image) or trim(args['icône'])
local backgroundIcone = class.icones[icone] or ''
local texte = (trim(args.texte) or erreur('texte', cfg.erreurArgument))


res
res :attr{ id = args.id }
:addClass('test-bandeau-' .. (args.classe or cfg.classeSimple))
:addClass(class.formes[args.forme] or cfg.forme)
:addClass('test-bandeau-niveau-' .. (args.niveau or cfg.niveauNeutre))
:addClass(class.niveau[args.niveau] or cfg.niveau)
:addClass('plainlinks')
:addClass('plainlinks')
:cssText(args.style) --Provisoire
:addClass(args.class)
 
:cssText(args.style)
if args.image then
local imageFormat = res:tag('div')
if yesno(args.centrer) then
:addClass('test-bandeau-image')
cells = mw.html.create('div')
 
:addClass('test-bandeau-centrer')
if mw.ustring.sub(args.image, 1, 1) == '[' then
end
imageFormat:wikitext(args.image)
if icone and backgroundIcone == '' then
else
local iconeWiki = icone
imageFormat:wikitext(mw.ustring.format(cfg.formatLien,
if not icone:match('%[') then
args.image,
local alt = args['légende'] or '|link='
args['légende'] or ''))
local taille = args['taille icône'] or cfg.tailleIcone
iconeWiki = mw.ustring.format(cfg.formatLien, icone, taille, alt)
end
end
cells
:tag('div')
:addClass('test-bandeau-cell test-bandeau-icone')
:cssText(args.styleImage) --Provisoire
:wikitext(iconeWiki)
:done()
elseif backgroundIcone ~= '' and args.forme == 'section' then
texte = '&ensp;' .. texte
end
end
res
cells
:tag('p')
:tag('div')
:addClass('test-bandeau-texte')
:addClass('test-bandeau-cell ' .. backgroundIcone)
:wikitext(args.texte)
:cssText(args.styleTexte) --Provisoire
:wikitext(texte)
:newline()
:done()
res :node(cells)
if trim(args['supplément']) then
res :tag('p') 
:wikitext(args['supplément'])
:done()
:done()
:wikitext(args['supplément'])
end
 
return tostring(res)
return tostring(res)
end
end
Ligne 65 : Ligne 103 :
htmlTexte
htmlTexte
:tag('strong')
:tag('strong')
:wikitext(args.titre or erreur(true, 'titre'))
:addClass('test-bandeau-titre')
:wikitext(trim(args.titre) or erreur('titre', cfg.erreurArgument))
:done()
:done()
:tag('br')
:wikitext(' ' .. (args.date or ''))
:done()
:newline():newline()
:tag('span')
:wikitext(args.texte)
:css('font-size', '0.9em')
:css('line-height', '1.2em')
:wikitext(args.texte or erreur(true, 'texte'))


local parametres = {
local parametres = {
classe = 'article',
forme = 'article',
niveau = args.niveau,
niveau = args.niveau,
image = args['icône'] or args['icône-complexe'] or icones[niveau],
id = args.id,
['icône'] = trim(args['icône']) or trim(args['icône-complexe']) or args.niveau,
texte = tostring(htmlTexte),
texte = tostring(htmlTexte),
['supplément'] = args['supplément']
['supplément'] = args['supplément']
Ligne 83 : Ligne 120 :


return p._bandeau(parametres)
return p._bandeau(parametres)
end
function p._bandeauSection(args)
local res = mw.html.create('div')
local icone = trim(args.image) or trim(args['icône'])
local backgroundIcone = class.icones[icone] or ''
local texte = '&ensp;' .. (trim(args.texte) or erreur('texte', cfg.erreurArgument))
res :addClass('test-bandeau-section')
:addClass(class.niveau[args.niveau] or cfg.niveau)
if icone and backgroundIcone == '' then
local iconeWiki = icone
if not icone:match('%[') then
local alt = args['légende'] or '|link='
iconeWiki = mw.ustring.format(cfg.formatLien, icone, '20x17', alt)
end
res :wikitext(iconeWiki)
:done()
end
res :addClass(backgroundIcone)
:wikitext(texte)
:done()
return tostring(res)
end
end


p['_ébauche'] = function (args)
p['_ébauche'] = function (args)
local htmlTexte = mw.html.create()
local paramEbauche = mw.loadData('Module:Bandeau/Ébauche')
local donnees = {
local ebauches, gestionErreur = {}, {}
Italie = {
local frame = mw.getCurrentFrame()
icone = 'Italy looking like the flag.svg',
local parametres = {
sujet = 'l’[[Portail:Italie|Italie]]',
icone = 'icône',
selon = '; pour plus d’indications, visitez le [[Projet:Italie|projet Italie]]',
sujet = 'sujet',
categ = 'Italie'
selon = 'selon',
},
categ = 'catégorie',
lac = {
type  = 'type',
icone = 'Icon river reservoir.svg',
message = 'message'
sujet = 'un [[lac]]',
categ = 'lac'
}
}
}
local ebauches, gestionErreur = {}, {}
local getEbaucheTable = function( theme )
-- récupére les paramètres lié au theme, à partir du module:Bandeau/Ébauche ou du modèle:Ébauche/paramètres theme
local modele = 'Modèle:Ébauche/paramètres ' .. theme
local params
if paramEbauche[theme] then
params = { nom = theme }
for n, v in pairs(paramEbauche[theme]) do
params[n] = v
end
elseif mw.title.new( modele ).exists then
params = { nom = theme }
for n, v in pairs(parametres)  do
local param = frame:expandTemplate{title = modele, args = {v}}
params[n] = trim(param)
end
end
return params
end
local ebaucheParam = function( i, param )
-- foction qui retourne la valeur de param pour l'ébauche i, ou une valeur par défaut.
return ebauches[i] and ebauches[i][param] or paramEbauche[''][param]
end
for i, theme in ipairs(args) do
-- récupération des paramètres de tous les thèmes
theme = trim(theme)
if theme then
local t = getEbaucheTable(theme)
if t then
table.insert(ebauches, t)
else
table.insert(
gestionErreur,
erreur(theme, cfg.erreurEbaucheParam, 'div')
)
end
end
end
local images, titres, categs = {}, {}, {}
local tailleIcone = cfg.tailleIcone
if #ebauches > 3 then
tailleIcone = '35x25'
end
for i, ebauche in ipairs(ebauches) do
-- mise en forme des images
if ebauche.icone then
table.insert(
images,
cfg.formatLien:format(
ebauche.icone,
tailleIcone,
ebauche.altIcone or ''
)
)
end
if math.fmod(#ebauches, 3) == 1 and (#ebauches - i) == 2
or math.fmod(i, 3) == 0 and (#ebauches - i) > 1
then
-- sur plusieurs lignes s'il y a plus de 3 images, avec minimum deux images sur la dernière ligne.
table.insert(images,'<br>')
end
if i > 1 and ebauche.type and ebauche.type ~= paramEbauche[''].type then
-- remplace "Cet article par "Ce portail" ou autre en fonction du premier thème.
table.insert(
gestionErreur,
erreur(ebauche.nom, cfg.erreurEbaucheType, 'div')
)
end
-- récupères les différents noms de thème
table.insert(titres, ebauche.sujet)
-- mise en forme des catégories
if ebauche.categ then
table.insert( categs, cfg.ebaucheCateg:format( ebauche.categ ) )
end
end
for i, ebauche in ipairs(args) do
local image
if donnees[ebauche] then
if trim(args['icône']) then
ebauches[i] = donnees[ebauche]
local theme = getEbaucheTable(args['icône'])
else
if theme and theme.icone then
table.insert(gestionErreur, ebauche)
image = cfg.formatLien:format(theme.icone, tailleIcone, '')
end
end
elseif #images == 1 then
image = images[1]
elseif #images > 1 then
image = cfg.ebaucheImage:format(table.concat(images, ' '))
end
local titre
if #titres > 0 then
titre = cfg.ebaucheTitreSujet:format(
ebaucheParam(1, 'type'),
mw.text.listToText(titres)
)
else
titre = cfg.ebaucheTitre:format(ebaucheParam(1, 'type'))
end
end
 
local texte
if #ebauches == 0 then
texte = (ebaucheParam(1, 'message')) .. '.'
else
texte = (ebaucheParam(1, 'message')) .. ' ' .. (ebaucheParam(1, 'selon')) .. '.'
end
local parametres = {
local parametres = {
classe = 'article',
niveau = 'ébauche',
niveau = args.niveau,
['icône'] = image,
image = args['icône'] or args['icône-complexe'] or icones[niveau],
titre = titre,
texte = args.texte,
texte = texte,
['supplément'] = args['supplément']
id = args.id
}
}
 
return p._bandeau(parametres)
local categ = ''
end
if not yesno(args.nocat) then
 
categ = table.concat(categs)
function erreur(gestionArg, texte)
if categ == '' then
local res = mw.html.create('span')
categ = cfg.ebaucheCateg:format('')
:addClass('error')
end
:wikitext('Erreur : ')
end
 
if gestionArg then
local messageErreur = table.concat(gestionErreur)
res:wikitext(format(cfg.erreurArgument, texte))
if messageErreur:len() > 0 and not yesno(args.nocat) then
else
messageErreur = messageErreur .. '[[Catégorie:Page utilisant un modèle avec une syntaxe erronée|Ébauche]]'
res:wikitext(texte)
end
end


return tostring(res)
return p._bandeauAvertissement(parametres) .. messageErreur .. categ
end
end


-- Insertion dans la table p des fonctions appelées par les
-- Insertion dans la table p des fonctions appelées par les
-- modèles à l'aide d'un adaptateur de fonction.
-- modèles à l'aide d'un adaptateur de fonction.
function adaptateur(nomFonction)
local function adaptateur(nomFonction)
return function (frame)
return function (frame)
local args = {}
return p[nomFonction](frame:getParent().args or frame.args)
local argsParent = frame:getParent().args
--Paramètres vides interprétés par Lua
for cle, val in pairs(argsParent) do
if val ~= '' then
args[cle] = mw.text.trim(val)
end
end
 
return p[nomFonction](args)
end
end
end
end
   
   
local nomsFonction = {'bandeau', 'bandeauAvertissement', 'ébauche'}  
local nomsFonction = {'bandeau', 'bandeauAvertissement', 'bandeauSection', 'ébauche' }  
for _, nomFonction in ipairs(nomsFonction) do
for _, nomFonction in ipairs(nomsFonction) do
p[nomFonction] = adaptateur('_' .. nomFonction)
p[nomFonction] = adaptateur('_' .. nomFonction)

Version du 3 janvier 2016 à 23:07

--Ce module implémente les modèles de bandeau.

--Standardisation des bandeaux (). --Créer une fonction exportable pour le modèle Modèle:Bandeau (ns:all). --Créer une fonction exportable pour les bandeaux d'article (ns:0). --Créer une fonction exportable pour les bandeaux de section (ns:0). --Créer une fonction exportable pour les bandeaux d'ébauche (ns:0). --Créer une fonction exportable pour les bandeaux de discussion (ns:1). --Créer une fonction exportable pour les bandeaux système (ns:8). --Gérer les images multiples.

local p = {}

local trim = require('Module:Outils').trim local yesno = require('Module:yesno') local class = mw.loadData('Module:Bandeau/Class/Test') -- local paramEbauche = mw.loadData('Module:Bandeau/Ébauche') -- ne sera chargé que pour un bandeau d'ébauche.

local cfg = { forme = 'test-bandeau-simple', niveau = 'test-bandeau-niveau-neutre', formatLien = '%s', tailleIcone = '45x45', erreurArgument = 'Paramètre |%s= manquant', erreurEbaucheParam = 'le thème « %s » du modèle Erreur Lua dans package.lua à la ligne 80 : module 'Module:Bandeau/Class/Test' not found. n’est pas défini.', erreurEbaucheType = 'le thème « %s » doit apparaître en tête de liste du modèle Erreur Lua dans package.lua à la ligne 80 : module 'Module:Bandeau/Class/Test' not found..', ebaucheImage = '%s', ebaucheTitre = '%s est une ébauche.', ebaucheTitreSujet = '%s est une ébauche concernant %s.', ebaucheCateg = , }

local function erreur(texte, formatstring, tag) local res = mw.html.create(tag or 'span') res :addClass('error') :wikitext('Erreur : ')

if formatstring then res:wikitext(string.format(formatstring, texte)) else res:wikitext(texte) end

return tostring(res) end

function p._bandeau(args) local res = mw.html.create('div') local cells = mw.html.create() local icone = trim(args.image) or trim(args['icône']) local backgroundIcone = class.icones[icone] or local texte = (trim(args.texte) or erreur('texte', cfg.erreurArgument))

res :attr{ id = args.id } :addClass(class.formes[args.forme] or cfg.forme) :addClass(class.niveau[args.niveau] or cfg.niveau) :addClass('plainlinks') :addClass(args.class) :cssText(args.style)

if yesno(args.centrer) then cells = mw.html.create('div') :addClass('test-bandeau-centrer') end if icone and backgroundIcone == then local iconeWiki = icone if not icone:match('%[') then local alt = args['légende'] or '|link=' local taille = args['taille icône'] or cfg.tailleIcone iconeWiki = mw.ustring.format(cfg.formatLien, icone, taille, alt) end cells :tag('div') :addClass('test-bandeau-cell test-bandeau-icone') :cssText(args.styleImage) --Provisoire :wikitext(iconeWiki) :done() elseif backgroundIcone ~= and args.forme == 'section' then texte = ' ' .. texte end cells :tag('div') :addClass('test-bandeau-cell ' .. backgroundIcone) :cssText(args.styleTexte) --Provisoire :wikitext(texte) :newline() :done()

res :node(cells)

if trim(args['supplément']) then res :tag('p') :wikitext(args['supplément']) :done() end

return tostring(res) end

function p._bandeauAvertissement(args) local htmlTexte = mw.html.create()

htmlTexte :tag('strong') :addClass('test-bandeau-titre') :wikitext(trim(args.titre) or erreur('titre', cfg.erreurArgument)) :done() :wikitext(' ' .. (args.date or )) :newline():newline() :wikitext(args.texte)

local parametres = { forme = 'article', niveau = args.niveau, id = args.id, ['icône'] = trim(args['icône']) or trim(args['icône-complexe']) or args.niveau, texte = tostring(htmlTexte), ['supplément'] = args['supplément'] }

return p._bandeau(parametres) end

function p._bandeauSection(args) local res = mw.html.create('div') local icone = trim(args.image) or trim(args['icône']) local backgroundIcone = class.icones[icone] or local texte = ' ' .. (trim(args.texte) or erreur('texte', cfg.erreurArgument))

res :addClass('test-bandeau-section') :addClass(class.niveau[args.niveau] or cfg.niveau)

if icone and backgroundIcone == then local iconeWiki = icone if not icone:match('%[') then local alt = args['légende'] or '|link=' iconeWiki = mw.ustring.format(cfg.formatLien, icone, '20x17', alt) end res :wikitext(iconeWiki) :done() end res :addClass(backgroundIcone) :wikitext(texte) :done()

return tostring(res) end

p['_ébauche'] = function (args) local paramEbauche = mw.loadData('Module:Bandeau/Ébauche') local ebauches, gestionErreur = {}, {} local frame = mw.getCurrentFrame() local parametres = { icone = 'icône', sujet = 'sujet', selon = 'selon', categ = 'catégorie', type = 'type', message = 'message' } local getEbaucheTable = function( theme ) -- récupére les paramètres lié au theme, à partir du module:Bandeau/Ébauche ou du modèle:Ébauche/paramètres theme local modele = 'Modèle:Ébauche/paramètres ' .. theme local params if paramEbauche[theme] then params = { nom = theme } for n, v in pairs(paramEbauche[theme]) do params[n] = v end elseif mw.title.new( modele ).exists then params = { nom = theme } for n, v in pairs(parametres) do local param = frame:expandTemplate{title = modele, args = {v}} params[n] = trim(param) end end return params end local ebaucheParam = function( i, param ) -- foction qui retourne la valeur de param pour l'ébauche i, ou une valeur par défaut. return ebauches[i] and ebauches[i][param] or paramEbauche[][param] end

for i, theme in ipairs(args) do -- récupération des paramètres de tous les thèmes theme = trim(theme) if theme then local t = getEbaucheTable(theme) if t then table.insert(ebauches, t) else table.insert( gestionErreur, erreur(theme, cfg.erreurEbaucheParam, 'div') ) end end end

local images, titres, categs = {}, {}, {} local tailleIcone = cfg.tailleIcone if #ebauches > 3 then tailleIcone = '35x25' end for i, ebauche in ipairs(ebauches) do -- mise en forme des images if ebauche.icone then table.insert( images, cfg.formatLien:format( ebauche.icone, tailleIcone, ebauche.altIcone or ) ) end if math.fmod(#ebauches, 3) == 1 and (#ebauches - i) == 2 or math.fmod(i, 3) == 0 and (#ebauches - i) > 1 then -- sur plusieurs lignes s'il y a plus de 3 images, avec minimum deux images sur la dernière ligne. table.insert(images,'
') end

if i > 1 and ebauche.type and ebauche.type ~= paramEbauche[].type then -- remplace "Cet article par "Ce portail" ou autre en fonction du premier thème. table.insert( gestionErreur, erreur(ebauche.nom, cfg.erreurEbaucheType, 'div') ) end

-- récupères les différents noms de thème table.insert(titres, ebauche.sujet)

-- mise en forme des catégories if ebauche.categ then table.insert( categs, cfg.ebaucheCateg:format( ebauche.categ ) ) end end

local image if trim(args['icône']) then local theme = getEbaucheTable(args['icône']) if theme and theme.icone then image = cfg.formatLien:format(theme.icone, tailleIcone, ) end elseif #images == 1 then image = images[1] elseif #images > 1 then image = cfg.ebaucheImage:format(table.concat(images, ' ')) end

local titre if #titres > 0 then titre = cfg.ebaucheTitreSujet:format( ebaucheParam(1, 'type'), mw.text.listToText(titres) ) else titre = cfg.ebaucheTitre:format(ebaucheParam(1, 'type')) end local texte if #ebauches == 0 then texte = (ebaucheParam(1, 'message')) .. '.' else texte = (ebaucheParam(1, 'message')) .. ' ' .. (ebaucheParam(1, 'selon')) .. '.' end

local parametres = { niveau = 'ébauche', ['icône'] = image, titre = titre, texte = texte, id = args.id }

local categ = if not yesno(args.nocat) then categ = table.concat(categs) if categ == then categ = cfg.ebaucheCateg:format() end end

local messageErreur = table.concat(gestionErreur) if messageErreur:len() > 0 and not yesno(args.nocat) then messageErreur = messageErreur .. end

return p._bandeauAvertissement(parametres) .. messageErreur .. categ end

-- Insertion dans la table p des fonctions appelées par les -- modèles à l'aide d'un adaptateur de fonction. local function adaptateur(nomFonction) return function (frame) return p[nomFonction](frame:getParent().args or frame.args) end end

local nomsFonction = {'bandeau', 'bandeauAvertissement', 'bandeauSection', 'ébauche' } for _, nomFonction in ipairs(nomsFonction) do p[nomFonction] = adaptateur('_' .. nomFonction) end

return p