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.
Version datée du 3 août 2026 à 09:31 par Hiob (discussion | contributions) (Port depuis codex.nefald.fr : détection automatique des sous-pages dans l'infobox (via create-page on MediaWiki MCP Server))
(diff) ← Version précédente | Version actuelle (diff) | Version suivante → (diff)

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.