« Module:Utilisateur:François Melchior/Utile » : différence entre les versions

Un livre de Wikilivres.
Contenu supprimé Contenu ajouté
Aucun résumé des modifications
Aucun résumé des modifications
Ligne 70 : Ligne 70 :
-- Renvoie l'inclusion de la page sinon.
-- Renvoie l'inclusion de la page sinon.
if t.namespace == 0 then page = ":" .. page end
if t.namespace == 0 then page = ":" .. page end
return mw.text.trim(frame:expandTemplate{title = page, args = templateArgs})
--return mw.text.trim(frame:expandTemplate{title = page, args = templateArgs})
return tostring(string.gsub(frame:expandTemplate{title = page, args = templateArgs}, "\n$", ""))
end
end



Version du 28 octobre 2013 à 10:48

La documentation pour ce module peut être créée à Module:Utilisateur:François Melchior/Utile/Documentation

local M = {}

function M.sprint_r(var, spaces)
    if type(spaces) ~= "string" then spaces = "" end
    if type(var) == "table" then
        local r = {}
        for k, v in pairs(var) do
            if type(k) == "string" then k = '"' .. k .. '"' end
            table.insert(r, "[" .. tostring(k) .. "]" .. " = " .. M.sprint_r(v, spaces .. "    "))
        end
        return "{\n" .. spaces .. table.concat(r, ",\n" .. spaces) .. "\n" .. spaces .. "}"
    elseif type(var) == "string" then
        return '"' .. var .. '"'
    else return tostring(var) end
end
--------------------------------------
function M.showIfExist(frame)
    local page = mw.text.trim(frame.args[1] or "")
    
    --[[ Ajoute l'espace de noms Modèle si aucun précisé.
    local possibleNamespace = string.match(page, "^([^:/]*):")
    if not (possibleNamespace == "" or mw.site.namespaces[possibleNamespace]) then
        page = "Template:" .. page
    end]]--Faut pas en fait!
    
    -- Crée un objet title pour la page demandée, ou un faux si le titre n'est pas valide.
    local t = mw.title.new(page) or {id = 0}
    
    -- Crée une copie des paramètres pour le modèle.
    local templateArgs = {}
    local l = 1
    for k, v in pairs(frame.args) do
        if type(k) == "number" then
            if k > l then
                l = k - 1
                templateArgs[l] = v
            end
        else templateArgs[k] = v end
    end
    local alternative = mw.text.trim(templateArgs[l] or "")
    templateArgs[l] = nil
    
    local remplacement = function(capture)
        if capture == "" then return page end
        local parserFunctions = {
            ["localurl"] = true,
            ["fullurl"] = true,
            ["canonicalurl"] = true,
            ["filepath"] = true,
            ["urlencode"] = true
            }
        local arg
        local avecArg = string.find(capture, "|", 1, true)
        if avecArg then
            arg = string.sub(capture, avecArg + 1)
            capture = string.sub(capture, 1, avecArg - 1)
        end
        if parserFunctions[capture] then
            return frame:callParserFunction(capture, page, arg)
        end
    end
    
    -- Renvoie le texte alternatif si la page n'existe pas.
    if t.id == 0 then
        return tostring(string.gsub(alternative,"{{_|?([^}]*)}}", remplacement))
          -- <del>Utilisation d'une table pour ne pas avoir de problèmes de "%"</del>
          -- Note: tostring car gsub renvoie 2 valeurs
    end
    
    -- Renvoie l'inclusion de la page sinon.
    if t.namespace == 0 then page = ":" .. page end
    --return mw.text.trim(frame:expandTemplate{title = page, args = templateArgs})
    return tostring(string.gsub(frame:expandTemplate{title = page, args = templateArgs}, "\n$", ""))
end

M.afficheSiExiste = M.showIfExist -- alias

return M