« Module:Episode » : différence entre les versions
Apparence
Contenu supprimé Contenu ajouté
Aucun résumé des modifications |
Aucun résumé des modifications |
||
| Ligne 1 : | Ligne 1 : | ||
mw.logObject(require("Module:Episode/MultiSeries"), "MULTI") |
|||
------------------------------------------------------------ |
------------------------------------------------------------ |
||
-- Module:Episode |
-- Module:Episode |
||
Version du 2 juin 2026 à 15:23
| 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. |
mw.logObject(require("Module:Episode/MultiSeries"), "MULTI")
------------------------------------------------------------
-- Module:Episode
-- API publique pour accéder aux épisodes Stargate
-- Utilise Module:Episode/MultiSeries (indexation complète)
------------------------------------------------------------
local p = {}
local Multi = require("Module:Episode/MultiSeries")
------------------------------------------------------------
-- Normalisation locale (même logique que MultiSeries)
------------------------------------------------------------
local function normalize(str)
if not str then return "" end
str = mw.ustring.lower(str)
str = mw.ustring.toNFD(str)
str = mw.ustring.gsub(str, "%pM", "")
str = str:gsub("'%s*", "")
str = str:gsub("[{}]", " ")
str = str:gsub("[%p]", " ")
str = str:gsub("[^%w%s]", " ")
str = str:gsub("%s+", " ")
str = mw.text.trim(str)
return str
end
------------------------------------------------------------
-- Récupération d’un épisode par ID
------------------------------------------------------------
function p.getEpisodeById(id)
if not id then return nil end
return Multi.by_id[id]
end
------------------------------------------------------------
-- Récupération d’un épisode par alias
------------------------------------------------------------
function p.getEpisodeByAlias(alias)
if not alias then return nil end
alias = normalize(alias)
local list = Multi.by_alias[alias]
if not list then return nil end
-- Si un seul épisode correspond → renvoyer directement
if #list == 1 then
return list[1]
end
-- Sinon renvoyer la liste complète (ambiguïté)
return list
end
------------------------------------------------------------
-- Récupération d’un épisode par titre de page
------------------------------------------------------------
function p.getEpisodeByPage(page)
if not page then return nil end
return Multi.by_page[normalize(page)]
end
------------------------------------------------------------
-- Récupération d’un épisode par série + saison + numéro
------------------------------------------------------------
function p.getEpisode(series, season, episode)
if not (series and season and episode) then return nil end
local key = series .. "-" .. season
local list = Multi.by_season[key]
if not list then return nil end
for _, ep in ipairs(list) do
if ep.episode == tonumber(episode) then
return ep
end
end
return nil
end
------------------------------------------------------------
-- Génération d’un lien vers l’épisode
------------------------------------------------------------
function p.getEpisodeLink(ep)
if not ep then return "" end
return string.format("[[%s:%s]]", ep.namespace_fr or "Épisode", ep.page_title_fr)
end
------------------------------------------------------------
-- Génération d’un lien complet (FR + EN)
------------------------------------------------------------
function p.getEpisodeFullLink(ep)
if not ep then return "" end
local fr = string.format("[[%s:%s|%s]]",
ep.namespace_fr or "Épisode",
ep.page_title_fr,
ep.title_fr or ep.page_title_fr
)
local en = string.format("[[%s:%s|%s]]",
ep.namespace_en or "Episode",
ep.page_title_en,
ep.title_en or ep.page_title_en
)
return fr .. " / " .. en
end
------------------------------------------------------------
-- Raccourcis API pour #invoke
------------------------------------------------------------
function p.id(frame)
local id = frame.args[1] or frame.args.id
local ep = p.getEpisodeById(id)
if not ep then return "" end
return p.getEpisodeLink(ep)
end
function p.alias(frame)
local alias = frame.args[1] or frame.args.alias
local ep = p.getEpisodeByAlias(alias)
if not ep then return "" end
if type(ep) == "table" and ep.id then
return p.getEpisodeLink(ep)
end
-- Ambiguïté : renvoyer la liste
local out = {}
for _, e in ipairs(ep) do
table.insert(out, p.getEpisodeLink(e))
end
return table.concat(out, " • ")
end
function p.page(frame)
local page = frame.args[1] or frame.args.page
local ep = p.getEpisodeByPage(page)
if not ep then return "" end
return p.getEpisodeLink(ep)
end
return p