« Module:Fiche de créature » : différence entre les versions
Page créée avec « 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... » |
mAucun résumé des modifications |
||
(8 versions intermédiaires par le même utilisateur non affichées) | |||
Ligne 28 : | Ligne 28 : | ||
if not value then | if not value then | ||
value = part.defaultvalue | value = part.defaultvalue | ||
if not value then | |||
return nil | |||
end | |||
end | end | ||
Ligne 43 : | Ligne 42 : | ||
function p.buildlist(part) | function p.buildlist(part) | ||
local title = part.title | local title = part.title | ||
local | local prefix = part.prefix | ||
if not title or not | local maxitems = part.max | ||
if not title or not prefix or not maxitems then | |||
return nil | return nil | ||
end | end | ||
-- create items | -- create items | ||
local | local items = {} | ||
for | for i = 1, maxitems do | ||
local v = p. | local v = p.builditem({ value = prefix..i }) | ||
if v then | if not v then | ||
break | |||
end | end | ||
table.insert(items, v) | |||
end | end | ||
if | if #items == 0 then | ||
return nil | return nil | ||
end | end | ||
-- create list | -- create list | ||
local list = mw.html.create('dl') | local list = mw.html.create('dl') | ||
:addClass('creature-card-list') | :addClass('creature-card-list') | ||
:tag(' | :tag('dt') | ||
:wikitext(title) | :wikitext(title) | ||
:done() | :done() | ||
Ligne 92 : | Ligne 93 : | ||
end | end | ||
icon = icons._build({ icon }) | icon = icons._build({ icon, 'petit' }) | ||
local row = mw.html.create('tr') | local row = mw.html.create('tr') | ||
Ligne 115 : | Ligne 116 : | ||
local rows = part.rows | local rows = part.rows | ||
if not rows then | |||
return nil | |||
end | |||
end | |||
-- CREATE ROW | -- CREATE ROW | ||
Ligne 169 : | Ligne 152 : | ||
tab:allDone() | tab:allDone() | ||
return tab | return tab | ||
end | end | ||
Ligne 197 : | Ligne 164 : | ||
['row'] = p.buildrow, | ['row'] = p.buildrow, | ||
['list'] = p.buildlist, | ['list'] = p.buildlist, | ||
} | } | ||
Ligne 210 : | Ligne 176 : | ||
moduledata.name = localdata.modulename | moduledata.name = localdata.modulename | ||
local | local card = mw.html.create('div') | ||
for i, j in pairs(moduledata.parts) do | for i, j in pairs(moduledata.parts) do | ||
card:node(p.buildblock(j)) | |||
end | end | ||
return tostring(card) | return tostring(card) | ||
end | end | ||
return p | return p |
Dernière version du 9 août 2024 à 15:09
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