Module auxiliaire utilisé par Module:Stats et ses sous-modules afin de construire les tables de stats.

CleanArgs

Cette fonction permet de préparer les arguments afin qu'ils puissent être employés par les autres fonctions des modules de stats.

Pour ce faire, elle :

  • Récupère les arguments renseignés au moment de l'appel de modèle (donc pas dans le tag invoke mais au moment où le modèle invoquant est appelé).
  • Supprime tout argument qui contient une chaîne vide.
  • Récupère certains arguments susceptibles d'être employés dans la définition du modèle et non lors de son appel :

Fonctions auxiliaires

Ces fonctions implémentent des méthodes classiques.

round

Arrondi à l'entier le plus proche

strsub

Sous-chaîne de caractère, avec la possibilité d'utiliser des valeurs négatives pour compter à partir de la fin de la chaîne plutôt que son début.

Fonctions de table

Ces fonctions définissent des éléments de tableau de stats.

Fonctions basiques

Fonctions de structure fixes ou contenant des données simples.

Fonction Argument(s) Utilisation
OpenTabber theme Ouvre un tabber dans un div avec la classe StatTabber ainsi que le thème renseigné.
CloseTabber - Ferme le tabber (à la fin du modèle)
NewTab title Ouvre un onglet de tabber avec le titre renseigné.
CloseTab - Ferme un onglet de tabber.
OpenContainer theme Ouvre un tableau conteneur avec le thème renseigné.
OpenBox class Ouvre un sous-tableau avec la classe renseignée.
ContainerLine - Crée une nouvelle ligne de conteneur.
CloseContainer - Ferme un conteneur ou sous-tableau.
CloseFinal - Fermeture finale du modèle.
Header text, colspan Crée un en-tête de tableau avec le texte indiqué et occupant le nombre de colonnes renseigné par colspan
Separator text, colspan Crée une ligne de séparation avec le texte indiqué et occupant le nombre de colonnes renseigné par colspan

Fonctions de contenu

Fonctions qui créent du contenu avec des données complexes :

LabelRow

Crée une ligne contenant uniquement des titres, centrés. Son argument labels est une liste de tableaux. Chaque tableau doit contenir les informations suivantes pour créer une case de titre :

Champ Utilité
label Contenu du titre.
style Style CSS de la case
colspan Nombre de colonnes occupées

DataRow

Crée une ligne contenant uniquement du contenu, centré. Son argument data est une liste de tableaux. Chaque tableau doit contenir les informations suivantes pour créer une case de contenu :

Champ Utilité
data Contenu de la case
style Style CSS de la case
class Classe CSS de la case
rowspan Nombre de lignes occupées
colspan Nombre de colonnes occupées
th Transforme la case en case de titre

MixedRow

Crée une ligne contenant des cases de titre et de contenu combinées, aligné à gauche. Son argument contents est une liste de tableaux. Chaque tableau doit contenir les informations suivantes pour créer une case de contenu :

Champ Utilité
text Contenu de la case (de donnée ou de titre)
label Renseigne si la case est un titre
style Style CSS de la case
rowspan Nombre de lignes occupées
colspan Nombre de colonnes occupées
th Transforme la case en case de titre

local Template = {}

--Récupère les arguments du modèle invoquant le module, et nettoie les inputs en retirant les chaînes vides
--Récupère aussi l'argument thème donné par le modèle lors de l'invocation.
function Template.CleanArgs(frame)
	local TemplateCallArgs = {"theme", "boss"} -- arguments susceptibles d'être renseignés par le modèle et non lors de son appel
    local args = {}
    for arg, value in pairs(frame:getParent().args) do
        if (value ~= "" and value ~="\n") then args[arg] = value end
    end
    for _, arg in ipairs(TemplateCallArgs) do
	    if frame.args[arg] then
	    	args[arg] = frame.args[arg]
		end
	end
    return args
end

------------------------------------
-------Fonctions auxiliaires--------
------------------------------------
--Fonction d'arrondi à l'unité
function Template.round(num)
    return math.floor(num + 0.5)
end

--- Adapted from Dev:String
function Template.strsub( s, i, j )
    local len = mw.ustring.len( s )
 
    -- Convert negatives for range checking
    if i < 0 then
        i = len + i + 1
    end
    if j < 0 then
        j = len + j + 1
    end
 
    if i > len or j > len or i < 1 or j < 1 then
    	return ""
        --return str._error( 'string subset index out of range', frame )
    end
    if j < i then
    	return ""
        --return str._error( 'string subset indices out of order', frame )
    end
 
    return mw.ustring.sub( s, i, j )
end

------------------------------------
--Fonctions de génération de table--
------------------------------------
function Template.OpenTabber(theme)
    return '<div class="StatTabber '..theme..'"><tabber>'
end

--Ouverture de tab
function Template.NewTab(title)
    return "|-|\n"..title.."=\n"
end

--Ouverture de tab qui gère les intitulés variables selon le jeu
function Template.OpenTab(args, game)
    gameTitles={
        ["KH1"] = function(args) if args["KHFM"] ~= nil then return "KHFM" else return "KH" end end,
        ["COM"] = function(args) if args["1.5"] then return "1.5" elseif args["REC"] ~= nil then return "Re:COM" else return "COM" end end,
        ["KH2"] = function(args) if args["KH2FM"] ~= nil then return "KH2FM" else return "KH2" end end,
        ["BBS"] = function(args) if args["BBSFM"] ~= nil then return "BBSFM" else return "BBS" end end,
        ["CHI"] = function(args) return "KHχ" end,
        ["KHUX"]= function(args) return "KHUχ" end,
        ["REM"]=function(args) return "KH3ReM" end,
    }
    if gameTitles[game] ~= nil then return "|-|\n"..gameTitles[game](args).."=\n" end
    return Template.NewTab(game)
end

function Template.CloseTab()
    return ""--"|-|"
end

function Template.OpenContainer(theme)
    return '{|class="StatBox '..(theme or "")..'"\n|\n'
end

function Template.OpenBox(class)
    return '{|class="subTable'..(class and ' '..tostring(class) or '')..'"\n'
end

function Template.ContainerLine()
    return [[|-
|
]]
end

function Template.CloseContainer()
    return "|}\n"
end

function Template.CloseFinal()
    return "|}"
end


function Template.Header(text, colspan)
    return '!class="SectionHeader" colspan="'..tostring(colspan)..'"|' .. text .. "\n"
end

function Template.Separator(text, colspan)
    return [[|- class="LabelRow"
!class="Label" colspan="]] .. tostring(colspan).. '"|' .. text .. "\n"
end

function Template.LabelRow(labels)
    local stringBuilder = '|- class="LabelRow"\n'
    for _, label in ipairs(labels) do
        stringBuilder = stringBuilder .. '!class="Label"'
        if label["style"] ~= nil then
            stringBuilder = stringBuilder .. ' style = "' ..label["style"] .. '"'
        end
        if label["colspan"] ~= nil then
            stringBuilder = stringBuilder .. ' colspan = "' .. tostring(label["colspan"]) .. '"'
        end
        stringBuilder = stringBuilder .. '|'.. label["label"] .. '\n'
    end
    return stringBuilder
end

function Template.DataRow(data)
    local stringBuilder = '|- class="DataRow"\n'
    for _, data in ipairs(data) do
        if data["th"] ~= nil then
            stringBuilder = stringBuilder .. '!class="'..data["class"] .. '"'
        else
            stringBuilder = stringBuilder .. '|class="'..data["class"] .. '"'
        end
        if data["style"] ~= nil then
            stringBuilder = stringBuilder .. ' style = "' .. tostring(data["style"]) .. '"'
        end
        if data["colspan"] ~= nil then
            stringBuilder = stringBuilder .. ' colspan = "' .. tostring(data["colspan"]) .. '"'
        end
        if data["rowspan"] ~= nil then
            stringBuilder = stringBuilder .. ' rowspan = "' .. tostring(data["rowspan"]) .. '"'
        end
        stringBuilder = stringBuilder .. '|' .. tostring(data["data"]).."\n"
    end
    return stringBuilder
end

function Template.MixedRow(contents)
    local stringBuilder = '|- class="MixedRow"\n'
    for _, content in ipairs(contents) do
        if content["label"] ~= nil then
            stringBuilder = stringBuilder .. '!class="Label"'
        else
            stringBuilder = stringBuilder .. '|class="Data"'
        end
        if content["style"] ~= nil then
            stringBuilder = stringBuilder .. ' style = "' ..content["style"] .. '"'
        end
        if content["colspan"] ~= nil then
            stringBuilder = stringBuilder .. ' colspan = "' .. tostring(content["colspan"]) .. '"'
        end
        if content["rowspan"] ~= nil then
            stringBuilder = stringBuilder .. ' rowspan = "' .. tostring(content["rowspan"]) .. '"'
        end
        stringBuilder = stringBuilder .. '|'.. tostring(content["text"]) .. '\n'
    end
    return stringBuilder
end

function Template.CloseTabber()
    return '</tabber></div>'
end

-------------------------------
--Fin des génération de table--
-------------------------------

return Template
Sauf mention contraire, le contenu de la communauté est disponible sous licence CC-BY-SA.