Basculer le menu
Changer de menu des préférences
Basculer le menu personnel
Non connecté(e)
Votre adresse IP sera visible au public si vous faites des modifications.

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
Les témoins (''cookies'') nous aident à fournir nos services. En utilisant nos services, vous acceptez notre utilisation de témoins.