« Module:Episode/test » : différence entre les versions
Apparence
Contenu supprimé Contenu ajouté
Aucun résumé des modifications |
m LIMAFOX76 a déplacé la page Module:Episode REAL/test vers Module:Episode/test sans laisser de redirection |
||
| (3 versions intermédiaires par le même utilisateur non affichées) | |||
| 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) |
||
| ⚫ | |||
-- 1. Trier par série |
|||
| ⚫ | |||
if a.series ~= b.series then |
|||
return a.series < b.series |
|||
| ⚫ | |||
end |
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) |
|||
| ⚫ | |||
-- 5. Tri normal séries : saison → épisode |
|||
| ⚫ | |||
local sb = tonumber(b.season) |
|||
| ⚫ | |||
| ⚫ | |||
end |
|||
| ⚫ | |||
end) |
end) |
||
end |
end |
||
| Ligne 34 : | Ligne 56 : | ||
for _, ep in ipairs(list) do |
for _, ep in ipairs(list) do |
||
table.insert(out, "|-") |
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 |
end |
||
Dernière version du 3 juin 2026 à 14:15
| Il sera peut-être nécessaire de créer une page documentation pour ce module Scribunto programmé dans la page créer Les éditeurs peuvent faire des tests sur les pages bac à sable (créer | miroir) et études de cas (créer) du module. Veuillez ajouter les catégories dans la sous-page /documentation. Sous-pages de ce module. |
------------------------------------------------------------
-- 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