Aller au contenu

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

De Stargate Wiki Sémantique
Contenu supprimé Contenu ajouté
Aucun résumé des modifications
Aucun résumé des modifications
Ligne 13 : Ligne 13 :
local function sort_episodes(list)
local function sort_episodes(list)
table.sort(list, function(a, b)
table.sort(list, function(a, b)

if a.series == b.series then
-- 1. Trier par série
if tonumber(a.season) == tonumber(b.season) then
return tonumber(a.episode) < tonumber(b.episode)
if a.series ~= b.series then
end
return a.series < b.series
return tonumber(a.season) < tonumber(b.season)
end
end

return a.series < b.series
-- 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)
end
end

Version du 3 juin 2026 à 12:36

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,
            ep.season,
            ep.episode,
            ep.id,
            frame:preprocess(ep.title_fr or ""),   -- ✔ modèles interprétés
            frame:preprocess(ep.title_en or ""),   -- ✔ idem
            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