Module:Fiche de créature
Ce module est un générateur de fiche de créature dont la structure est définie dans sous-module. Structurellement, il s'agit d'une réadaptation du module Infobox.
Usage modifier
build(frame)
est la seule fonction exportable. Elle ne prend en entrée que le paramètre nom
, le nom du sous-module dans lequel est défini la structure de la fiche de créature.
Par exemple le modèle {{Fiche de créature de Fallout}}} contient {{#invoke:Fiche de créature|build|nom=Fallout}}
, indiquant qu'il faut charger Module:Fiche de créature/Fallout. Les paramètres passés au modèle sont disponibles dans Module:Fiche de créature/Localdata qui lui-même peut être appelé dans les sous-modules pour générer des structures plus complexes.
Structure du sous-module modifier
La structure de la fiche de créature est définie par une table contenue dans un sous-module dont le format est le suivant.
{
parts = {} -- contient les différentes parties de la fiche de créature
}
La table parts
contient elle-même d'autres tables qui définissent le type de structure à générer. Il est possible de définir deux types de structure, des tableaux ou des listes.
- Table
{ type = "table", title = "", rows = {} }
Paramètre | Type | Obligatoire | Description |
---|---|---|---|
title |
string | Non | Un en-tête pour le tableau |
rows |
table | Oui | Table contenant des tables de type row et qui définissent les lignes du tableau à générer
|
{ type = "row", label = "", icon = "", value = "" }
Paramètre | Type | Obligatoire | Description |
---|---|---|---|
label |
function string |
Oui | Le libellé de la ligne |
icon |
string | Oui | Nom d'une icône définie dans le modèle {{Icône}}. |
value |
function string |
Oui | Paramètre que l'utilisateur renseignera. |
- Liste
{ type = "list", title = "", prefix = "", max = 0 }
Paramètre | Type | Obligatoire | Description |
---|---|---|---|
title |
string | Oui | Un en-tête pour la liste |
prefix |
string | Oui | Préfixe du paramètre pour les éléments de la liste |
max |
number | Oui | Nombre maximal d'éléments dans la liste |
local p = {}
-- données concernant les paramètres passés au modèle
local localdata = {}
-- Icônes utilisées pour illustrer chaque donnée
local icons = require( 'Module:Icône' )
local function getValue(value, part)
if type(value) == 'string' then
return localdata[value]
elseif type(value) == 'function' then
return value(localdata, part)
elseif type(value) == 'table' then
-- si plusieurs paramètres possibles (legacy de vieux code), prendre le premier non vide
-- à retirer une fois les fiches au propre
for i, j in pairs(value) do
if localdata[j] then
return localdata[j]
end
end
end
end
function p.builditem(part)
local value, number = getValue(part.value, part)
if not value then
value = part.defaultvalue
if not value then
return nil
end
end
local item = mw.html.create('dd')
:wikitext(value)
:done()
return item
end
function p.buildlist(part)
local title = part.title
local prefix = part.prefix
local maxitems = part.max
if not title or not prefix or not maxitems then
return nil
end
-- create items
local items = {}
for i = 1, maxitems do
local v = p.builditem({ value = prefix..i })
if not v then
break
end
table.insert(items, v)
end
if #items == 0 then
return nil
end
-- create list
local list = mw.html.create('dl')
:addClass('creature-card-list')
:tag('dt')
:wikitext(title)
:done()
for i, j in pairs(items) do
list:node(j)
end
list:allDone()
return list
end
function p.buildrow(part)
local icon = part.icon
local label = part.label
local value, number = getValue(part.value, part)
if type(label) == 'function' then
label = label(localdata, localdata.item)
end
if not value then
value = part.defaultvalue
end
if value == nil or label == nil or icon == nil then
return nil
end
icon = icons._build({ icon, 'petit' })
local row = mw.html.create('tr')
:tag('th')
:attr('scope', 'row')
:wikitext(icon .. ' ' ..label)
:done()
:tag('td')
:tag('div')
:wikitext('\n' .. value)
:done()
:allDone()
:done()
return row
end
function p.buildtable(part)
local tab = mw.html.create('table')
:addClass('creature-card-table')
local rows = part.rows
if not rows then
return nil
end
-- CREATE ROW
local expandedrows = {}
for k, row in ipairs(rows) do
local v = p.buildblock(row)
if v then
table.insert(expandedrows, v)
end
end
if (#expandedrows == 0) then
return nil
end
rows = expandedrows
-- ADD TITLE
local title
if part.title then
title = mw.html.create('caption')
:attr({ colspan = '2' })
:wikitext(part.title)
:done()
end
if title then
tab:node(title)
end
for i, j in pairs(rows) do
tab:node(j)
end
tab:allDone()
return tab
end
function p.buildblock(block)
if type(block) == 'function' then
block = block(localdata)
end
-- Liste des types de block acceptés
local blocktypes = {
['table'] = p.buildtable,
['row'] = p.buildrow,
['list'] = p.buildlist,
}
return blocktypes[block.type](block)
end
function p.build(args)
localdata = require('Module:Fiche de créature/Localdata')
-- chargement du module de paramétrage
local moduledata = require('Module:Fiche de créature/' .. localdata.modulename)
moduledata.name = localdata.modulename
local card = mw.html.create('div')
for i, j in pairs(moduledata.parts) do
card:node(p.buildblock(j))
end
return tostring(card)
end
return p