Module:Palette de navigation
De Ekopedia
Ce module implémente le modèle {{Utilisateur:Hlm Z./Palette de navigation}}. Voir la page du modèle pour les instructions d'utilisation.
Fonctions exportables[modifier]
-
palette(frame)
– Fonction principale du module appelable avec#invoke
dans un modèle renvoyant la structure HTML de la palette. -
_palette(args)
– Fonction subsidiaire du module appelable avecrequire()
dans un autre module renvoyant la structure HTML de la palette.
Autres fonctions[modifier]
-
erreur()
– Retourne un message d'erreur en rouge visible par l'utilisateur. -
formatageLigne(liste)
– Prend en argument la liste des éléments de la palette et retourne le formatage wikifié de cette liste. -
liens()
– Retourne la mise en forme du lien modifier disponible en haut à gauche de la palette. -
entete()
– Construit l'entête des palettes et retourne le titre, l'état et le bouton modifier des palette. -
banniere()
– Construit les bannières inférieures et supérieures des palettes. -
listeSimple(liste, n, pariteLigne)
– Retourne les listes simples pairs ou impairs. L'argumentpariteLigne
permet de désactiver les listes pairs (option pour les sections). -
listeGroupe(groupe, liste, n)
– Retourne les groupes avec listes pairs ou impairs. -
ligne(prefixe, n)
– Retourne la ligne des palettes (liste, groupe et sous-groupe). Cette méthode permet également les sous-groupes récursifs. -
section(n)
– Retourne les sections déroulantes des palettes (liste, sous-groupe et sous-liste). Cette méthode permet les sous-groupes grâce à l'appel de la méthodelignePalette(prefixe, n)
. -
contenu()
– Construit le corps des palettes (ligne ou section).
Exemples[modifier]
Pour des exemples, voir la page de test permettant de tester diverses modifications apportées.
--Ce module implémente le modèle {{Palette de navigation}}. local p = {} -- Redéfinition utile. local format = mw.ustring.format local lignes = 30 -- Nombre maximal de ligne. local altern = 1 -- Variable d'alternance des lignes. local styles = 'Module:Palette de navigation/styles.css' local function erreur(texte, argManquant) local res = mw.html.create('span') :addClass('error') :wikitext('Erreur : ') if argManquant then res:wikitext(format('Paramètre <code>|%s=</code> introuvable', texte)) else res:wikitext(texte) end return tostring(res) end local function formatageListe(liste) if liste:match('^\n') then return liste end return '\n' .. liste .. '\n' end local function liens(args) local titre = mw.title.new(args['modèle'], args.namespace or 'Modèle') local lien = function(abbr, texte, action) return mw.html.create('li') :wikitext('[' .. titre:fullUrl(action) .. ' ') :tag('abbr') :addClass('abbr') :attr('title', abbr) :cssText(args.couleur) :wikitext(texte) :done() :wikitext(']') end local res = mw.html.create('div') :addClass('palette-liens liste-horizontale') :addClass('noprint plainlinksneverexpand') res :tag('ul') :node(lien('Voir ce modèle', 'v')) :node(lien('Modifier ce modèle', 'm', 'action=edit')) return res end local function entete(args) local res = mw.html.create() local modele = args['modèle'] -- Paramètre modèle. if modele and modele ~= 'inactif' then res:node(liens(args)) elseif not modele then res:wikitext(erreur('modèle', true)) end -- Titre de la palette. res :tag('div') :addClass('palette-titre') :cssText(args.couleur) :wikitext(args.titre or erreur('titre', true)) return res end local function banniere(args, banniere) if banniere then local res = mw.html.create('div') :addClass('palette-banniere liste-horizontale') :cssText(args.couleur) :wikitext(formatageListe(banniere)) return res end end local function image(args) if args.image then local res = mw.html.create('div') :addClass('palette-image') if args.image:match('^%[') or args.image:match('^%<') then res:wikitext(args.image) else local lienImage = '[[Fichier:%s|100px]]' res:wikitext(format(lienImage, args.image)) end return res end end local function listeSimple(args, liste, n, pariteLigne) local res = mw.html.create('li') :addClass('palette-ligne-simple') :tag('div') :addClass('palette-liste-simple') -- Parité d'une liste simple (sans groupe). :addClass(altern % 2 == 0 and pariteLigne and 'palette-pair' or nil) :addClass('liste-horizontale') :cssText(args.styleliste) :wikitext(formatageListe(liste)) :done() altern = altern + 1 return tostring(res) end local function listeGroupe(args, groupe, liste, n) local res = mw.html.create('li') :addClass('palette-ligne') :tag('div') :addClass('palette-groupe') :cssText(args.couleur) :wikitext(groupe) :done() :tag('div') :addClass('palette-liste') -- Parité d'une liste avec groupe. :addClass(altern % 2 == 0 and 'palette-pair' or nil) :addClass('liste-horizontale') :wikitext(formatageListe(liste)) :done() altern = altern + 1 return tostring(res) end local function ligne(args, n, prefixe) prefixe = prefixe or '' local liste = args['liste' .. prefixe .. n] local groupe = args['groupe' .. prefixe .. n] -- Liste seule. if liste and not groupe then return listeSimple(args, liste, n, true) -- Liste et groupe présent. elseif groupe and liste then return listeGroupe(args, groupe, liste, n) -- Groupe seul avec sous-ligne. elseif groupe then local sousLignes = '' for i = 1, lignes do local ligneCourante = ligne(args, i, prefixe .. n .. '.') if not ligneCourante then break end sousLignes = sousLignes .. ligneCourante end -- Détection des erreurs de paramètrage. if sousLignes == '' then return erreur('Gestion incorrecte des groupes/sous-groupes') end -- Construction des sous-lignes. local res = mw.html.create('li') :addClass('palette-ligne') :tag('div') :addClass('palette-groupe') :cssText(args.couleur) :wikitext(groupe) :done() :tag('div') :addClass('palette-listes') :tag('ul') :node(sousLignes) :allDone() return tostring(res) end end local function section(args, n) local section = args['section' .. n] local liste = args['liste' .. n] -- Liste seule. if liste and not section then return listeSimple(args, liste, n, true) -- Section avec liste simple ou sous-ligne. elseif liste or section then local res = mw.html.create('li') :addClass('palette mw-collapsible mw-collapsed') :css('border', '0') :css('border-top', '2px solid white') :css('font-size', '100%') local contenuSection = res:tag('div') :addClass('palette-section') :cssText(args.couleur) :wikitext(section) :done() :tag('div') :addClass('mw-collapsible-content') :tag('ul') -- Section avec liste simple. if liste and section then contenuSection:node(listeSimple(args, liste, n, false)) return tostring(res) end -- Section avec sous-ligne. local sousLignes = '' for i = 1, lignes do local ligneCourante = ligne(args, i, n .. '.') if not ligneCourante then break end sousLignes = sousLignes .. ligneCourante end -- Détection des erreurs de paramètrage. if sousLignes == '' then return erreur('Gestion incorrecte des sections') end contenuSection:wikitext(sousLignes) return tostring(res) end end local function contenu(args) local res = mw.html.create('ul') local contenu = '' if args.image then res:addClass('palette-image') end -- Détection d'une section. On suppose ici que la liste des arguments est -- ordonnée et ne comporte aucun saut. if args['section1'] and (args['liste1'] or args['liste1.1'] or args['groupe1.1']) then for i = 1, lignes do local sectionCourante = section(args, i) if not sectionCourante then break end res:node(sectionCourante) altern = 1 end -- Détection d'une ligne. else for i = 1, lignes do local ligneCourante = ligne(args, i) if not ligneCourante then break end res:node(ligneCourante) end end return res end function p._palette(args) local loadStyles = mw.getCurrentFrame():extensionTag('templatestyles', '', { src = styles }) local res = mw.html.create('div') :addClass('palette mw-collapsible') :wikitext(loadStyles) local etat = args['état'] -- Paramètre état. if etat == 'fermé' then res:addClass('mw-collapsed') elseif etat == 'ouvert' then res:addClass('mw-uncollapsed') end res :node(entete(args)) :tag('div') :addClass('mw-collapsible-content') :node(banniere(args, args.dessus)) :node(args.contenu or contenu(args)) :node(image(args)) :node(banniere(args, args.dessous)) return res end function p.palette(frame) local 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] = val end end return p._palette(args) end return p