Aller au contenu

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

De Stargate Wiki Sémantique
Contenu supprimé Contenu ajouté
Aucun résumé des modifications
Aucun résumé des modifications
 
(2 versions intermédiaires par le même utilisateur non affichées)
Ligne 31 : Ligne 31 :


return s
return s
end

-- Exécution des parseurs MediaWiki
local function parse(wikitext)
return mw.getCurrentFrame():preprocess(wikitext)
end
end


Ligne 46 : Ligne 51 :
local title = safe(entry[3])
local title = safe(entry[3])


local wikitext
if ns == "" then
if ns == "" then
return string.format("[[%s|%s]]", link, title)
wikitext = string.format("[[%s|%s]]", link, title)
else
else
return string.format("[[%s:%s|%s]]", ns, link, title)
wikitext = string.format("[[%s:%s|%s]]", ns, link, title)
end
end

return parse(wikitext)
end
end


Ligne 65 : Ligne 73 :
local title = safe(entry[3])
local title = safe(entry[3])


return string.format("[[Crédits:%s|%s]]", link, title)
return parse(string.format("[[Crédits:%s|%s]]", link, title))
end
end


Ligne 80 : Ligne 88 :
local title = safe(entry[3])
local title = safe(entry[3])


return string.format("[[Retranscription:%s|%s]]", link, title)
return parse(string.format("[[Retranscription:%s|%s]]", link, title))
end
end


Ligne 95 : Ligne 103 :
local title = safe(entry[3])
local title = safe(entry[3])


return string.format("[[Citations:%s|%s]]", link, title)
return parse(string.format("[[Citations:%s|%s]]", link, title))
end
end


Ligne 110 : Ligne 118 :
local title = safe(entry[3])
local title = safe(entry[3])


return string.format("[[:Catégorie:Images de %s|%s]]", link, title)
return parse(string.format("[[:Catégorie:Images de %s|%s]]", link, title))
end
end


Ligne 154 : Ligne 162 :


return safe(entry[3])
return safe(entry[3])
end

-- Alias → pages
function p.aliasToPages()
local map = {}

for alias, entry in pairs(data) do
local link = entry[2]

if not map[alias] then
map[alias] = { link }
else
local exists = false
for _, v in ipairs(map[alias]) do
if v == link then
exists = true
break
end
end
if not exists then
table.insert(map[alias], link)
end
end
end

return map
end

-- Affichage des alias en conflit (alias → plusieurs pages)
function p.showAliasConflicts()
local map = p.aliasToPages()
local out = {}

table.insert(out, "== Alias pointant vers plusieurs pages ==")

local found = false

for alias, pages in pairs(map) do
if #pages > 1 then
found = true
table.insert(out,
"* <code>" .. alias .. "</code> → " .. table.concat(pages, " / ")
)
end
end

if not found then
table.insert(out, "* Aucun conflit détecté")
end

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



Dernière version du 5 juin 2026 à 21:39

Documentation icon Documentation module[créer]
local data = mw.loadData("Module:Episode/data")
local p = {}

-- Sécurisation des valeurs nil
local function safe(v)
    return v or ""
end

-- Normalisation robuste des alias
local function normalizeAlias(s)
    if not s then return "" end

    s = mw.ustring.lower(s)

    local accents = {
        ["à"]="a", ["á"]="a", ["â"]="a", ["ä"]="a", ["ã"]="a", ["å"]="a",
        ["ç"]="c",
        ["è"]="e", ["é"]="e", ["ê"]="e", ["ë"]="e",
        ["ì"]="i", ["í"]="i", ["î"]="i", ["ï"]="i",
        ["ñ"]="n",
        ["ò"]="o", ["ó"]="o", ["ô"]="o", ["ö"]="o", ["õ"]="o",
        ["ù"]="u", ["ú"]="u", ["û"]="u", ["ü"]="u",
        ["ý"]="y", ["ÿ"]="y"
    }

    s = mw.ustring.gsub(s, ".", accents)
    s = mw.ustring.gsub(s, "[’']", "")
    s = mw.ustring.gsub(s, "[^%w]", " ")
    s = mw.ustring.gsub(s, "%s+", " ")
    s = mw.text.trim(s)

    return s
end

-- Exécution des parseurs MediaWiki
local function parse(wikitext)
    return mw.getCurrentFrame():preprocess(wikitext)
end

-- Function 1: Get full episode link from key
function p.getEpisode(frame)
    local key = normalizeAlias(frame.args[1])
    local entry = data[key]

    if not entry then
        return "Épisode non référencé"
    end

    local ns  = safe(entry[1])
    local link = safe(entry[2])
    local title = safe(entry[3])

    local wikitext
    if ns == "" then
        wikitext = string.format("[[%s|%s]]", link, title)
    else
        wikitext = string.format("[[%s:%s|%s]]", ns, link, title)
    end

    return parse(wikitext)
end

-- Function 2: Force namespace to "Credits:"
function p.getCreditsLink(frame)
    local key = normalizeAlias(frame.args[1])
    local entry = data[key]

    if not entry then
        return "Épisode non référencé"
    end

    local link = safe(entry[2])
    local title = safe(entry[3])

    return parse(string.format("[[Crédits:%s|%s]]", link, title))
end

-- Function 3: Force namespace to "Transcript:"
function p.getTranscriptLink(frame)
    local key = normalizeAlias(frame.args[1])
    local entry = data[key]

    if not entry then
        return "Épisode non référencé"
    end

    local link = safe(entry[2])
    local title = safe(entry[3])

    return parse(string.format("[[Retranscription:%s|%s]]", link, title))
end

-- Function 4: Force namespace to "Quotes:"
function p.getQuotesLink(frame)
    local key = normalizeAlias(frame.args[1])
    local entry = data[key]

    if not entry then
        return "Épisode non référencé"
    end

    local link = safe(entry[2])
    local title = safe(entry[3])

    return parse(string.format("[[Citations:%s|%s]]", link, title))
end

-- Function 5: Force namespace to "Category:Images from"
function p.getImagesLink(frame)
    local key = normalizeAlias(frame.args[1])
    local entry = data[key]

    if not entry then
        return "Épisode non référencé"
    end

    local link = safe(entry[2])
    local title = safe(entry[3])

    return parse(string.format("[[:Catégorie:Images de %s|%s]]", link, title))
end

-- Function 6: Retrieve from link
function p.getEpisodeLink(frame)
    local key = normalizeAlias(frame.args[1])
    local entry = data[key]

    if not entry then
        return "Épisode non référencé"
    end

    return safe(entry[2])
end

-- Function 7: Get full episode link only from key
function p.getEpisodeFullLink(frame)
    local key = normalizeAlias(frame.args[1])
    local entry = data[key]

    if not entry then
        return "Épisode non référencé"
    end

    local ns = safe(entry[1])
    local link = safe(entry[2])

    if ns == "" then
        return link
    else
        return ns .. ":" .. link
    end
end

-- Function 8: Get episode title only from key
function p.getEpisodeTitle(frame)
    local key = normalizeAlias(frame.args[1])
    local entry = data[key]

    if not entry then
        return "Episode not found"
    end

    return safe(entry[3])
end

-- Alias → pages
function p.aliasToPages()
    local map = {}

    for alias, entry in pairs(data) do
        local link = entry[2]

        if not map[alias] then
            map[alias] = { link }
        else
            local exists = false
            for _, v in ipairs(map[alias]) do
                if v == link then
                    exists = true
                    break
                end
            end
            if not exists then
                table.insert(map[alias], link)
            end
        end
    end

    return map
end

-- Affichage des alias en conflit (alias → plusieurs pages)
function p.showAliasConflicts()
    local map = p.aliasToPages()
    local out = {}

    table.insert(out, "== Alias pointant vers plusieurs pages ==")

    local found = false

    for alias, pages in pairs(map) do
        if #pages > 1 then
            found = true
            table.insert(out,
                "* <code>" .. alias .. "</code> → " .. table.concat(pages, " / ")
            )
        end
    end

    if not found then
        table.insert(out, "* Aucun conflit détecté")
    end

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

return p