Module:Infobox/SousPages
De Nefald
Autres actions
La documentation pour ce module peut être créée à Module:Infobox/SousPages/doc
local p = {}
-- Construit la liste des sous-pages en wikiliens, séparateur • sur une ligne.
-- config.sousPagesNamespace : namespace DPL à interroger ('' = espace principal, 'Plugin' = ns Plugin, etc.)
-- Retourne nil si aucune sous-page, ou si args.sous_pages == 'non' (opt-out manuel).
--
-- Si la page courante est elle-même une sous-page (ex. Plugin:NefaldCore/API), on liste les
-- pages sœurs (enfants de la racine, ex. NefaldCore) et la page courante apparaît en gras,
-- non cliquable (.infobox-souspage-active), comme sur Modèle:Navigation_sous-pages.
-- Sinon (page principale), on liste ses propres sous-pages, aucune n'est la page courante.
function p.build(args, config, frame)
if args.sous_pages == 'non' then
return nil
end
local title = mw.title.getCurrentTitle()
local namespace = (config and config.sousPagesNamespace) or ''
local base = (title.text ~= title.rootText) and title.rootText or title.text
-- Séparateur '@@' improbable dans un titre : évite tout souci de trim d'espaces/retours
-- à la ligne par MediaWiki sur les arguments de #dpl.
-- skipthispage=no : DPL exclut par défaut la page appelante de ses propres résultats ;
-- sur une sous-page on veut au contraire qu'elle apparaisse (pour le bold .infobox-souspage-active).
local dpl = '{{#dpl:namespace=' .. namespace
.. '|titlematch=' .. base .. '/%'
.. '|format=,%PAGE%,@@,'
.. '|skipthispage=no'
.. '|ignorecase=true|order=ascending|ordermethod=title}}'
local raw = frame:preprocess(dpl)
if not raw then
return nil
end
raw = mw.text.trim(raw)
if raw == '' then
return nil
end
local parts = {}
for fullTitle in (raw .. '@@'):gmatch('(.-)@@') do
local trimmed = mw.text.trim(fullTitle)
if trimmed ~= '' then
local display = trimmed:match('([^/]+)$') or trimmed
if trimmed == title.prefixedText then
table.insert(parts, '<span class="infobox-souspage-active">' .. display .. '</span>')
else
table.insert(parts, '[[' .. trimmed .. '|' .. display .. ']]')
end
end
end
if #parts == 0 then
return nil
end
return frame:preprocess(table.concat(parts, ' • '))
end
return p