Aller au contenu

« Module:Episode/test » : différence entre les versions

De Stargate Wiki Sémantique
Aucun résumé des modifications
m LIMAFOX76 a déplacé la page Module:Episode/test vers Module:Episode REAL/test sans laisser de redirection
(Aucune différence)

Version du 3 juin 2026 à 14:15

Documentation icon Documentation module[créer]
------------------------------------------------------------
-- Module:Episode/test
-- Affiche tous les épisodes de toutes les séries
-- Utilise Module:Episode/MultiSeries
------------------------------------------------------------

local p = {}
local Multi = require("Module:Episode/MultiSeries")

------------------------------------------------------------
-- Tri : série → saison → épisode
------------------------------------------------------------
local function sort_episodes(list)
    table.sort(list, function(a, b)

        -- 1. Trier par série
        if a.series ~= b.series then
            return a.series < b.series
        end

        -- 2. Détection films (pas de saison)
        local a_is_film = (a.season == nil)
        local b_is_film = (b.season == nil)

        -- 3. Si un seul est un film → les films après les épisodes
        if a_is_film and not b_is_film then return false end
        if b_is_film and not a_is_film then return true end

        -- 4. Si les deux sont des films → tri par titre FR
        if a_is_film and b_is_film then
            return (a.title_fr or a.page_title_fr or a.id)
                 < (b.title_fr or b.page_title_fr or b.id)
        end

        -- 5. Tri normal séries : saison → épisode
        local sa = tonumber(a.season)
        local sb = tonumber(b.season)

        if sa ~= sb then
            return sa < sb
        end

        return tonumber(a.episode) < tonumber(b.episode)
    end)
end

------------------------------------------------------------
-- Génération du tableau wiki
------------------------------------------------------------
local function render_table(frame, list)
    local out = {}

    table.insert(out, '{| class="wikitable sortable" style="width:100%"')
    table.insert(out, "! Série !! Saison !! Épisode !! ID !! Titre FR !! Titre EN !! Alias (normalisés)")

    for _, ep in ipairs(list) do
        table.insert(out, "|-")
		table.insert(out, string.format(
		    "| %s || %s || %s || %s || %s || %s || %s",
		    ep.series or "",
		    ep.season or "",
		    ep.episode or "",
		    ep.id or "",
		    frame:preprocess(ep.title_fr or ep.page_title_fr or ""),
		    frame:preprocess(ep.title_en or ep.page_title_en or ""),
		    table.concat(ep.aliases or {}, "<br>")
		))
    end

    table.insert(out, "|}")
    return table.concat(out, "\n")
end

------------------------------------------------------------
-- Fonction principale #invoke
------------------------------------------------------------
function p.all(frame)
    local list = {}

    -- Copier la liste complète
    for _, ep in ipairs(Multi.episodes) do
        table.insert(list, ep)
    end

    -- Trier
    sort_episodes(list)

    -- Rendre le tableau
    return render_table(frame, list)
end

return p