Module:Vikitablo
Ce module vise à fournir des fonctions qui facilite la construction de tableau, que ce soit avec des données générées automatiquement, ou simplement des grandes quantités de données qu’on souhaite pouvoir présenter sous diverses formes de matrices.
L’idée générale du module ne le rend pas adapté à une invocation direct dans un modèle. Il est conçu pour être appelé dans un autre module, qui s’occupe de l’alimenter en données pour les cellules et en informations de mise en forme.
Liste des fonctions
modifierLa fonction linvikigxi prend un tableau de chaînes et renvois la ligne où chaque élément du tableau constitue une cellule.
- titoligxi(titolo)
- Modifie le titre du tableau en l’affectant de titolo.
- titolo
- (obligatoire) la chaîne qui servira de titre au tableau
- linialdonu()
- Ajoute un ligne au tableau. Les prochains appels de cxelaldonu ajoutera les cellules à cette nouvelle ligne.
- cxelaldonu(datumo, titoligu, stilo )
- Ajoute une cellule à la ligne courante. La première ligne est automatiquement créée lors du premier ajout d’une cellule. Aussi si le premier ajout de cellule est précédé d’appels à linialdonu, le tableau contiendra autant de lignes vides.
- datumo
- (obligatoire) la chaîne qui correspond au contenu de la cellule.
- titoligu
- (facultatif) le booléen qui indique si la cellule est une cellule titre.
- stilo
- (facultatif) chaîne qui contient les paramètres de mise en forme de la cellule, par exemple 'colspan="2" style="background:black"'.
- linvikigxi( cxelaro )
- Construit et renvoie une ligne de tableau wiki à partir du tableau cxelaro formant une cellule distincte pour chaque élément de cxelaro.
- cxelaro
- (obligatoire) tableau de chaînes.
- viktabligxi(klaso)
- Construit et renvoie le tableau wiki conformément aux données précédemment passés.
- klaso
- (facultatif) chaîne qui nourrit le champ class du tableau. Initialisé à wikitable alternance centre par défaut.
- kolonaldonu(datumaro, kolono, titoligo, stilo )
- Ajoute le tableau datumaro en tant que kolono-ième colonne du tableau wiki. Si le booléen titoligo est vrai, les cellules sont des cellules titres. La chaîne stilo permet de passer des paramètres de mise en forme qui s’applique à toutes les cellules de la colonne.
Tests
modifierLe module fourni une page de tester : Module:Vikitablo/testu.
--[[ ĉi modulo celas liveri vikitablonj ilonj
--]]
local modulo = {}
-- Konstatoj
kanona_stilo = 'class="wikitable alternance centre"'
-- la viktablo strukturo
liniaro = {}
cxelstilaro = {} -- cxelstilaro[e][i] memoru stilon por la ea linio, ia kolonelo
cxeltitolaro = {}
tablo = {
['titolo'] = '',
['liniaro'] = liniaro,
['cxelstilaro'] = cxelstilaro,
['stilo'] = kanona_stilo,
['cxeltitolaro'] = cxeltitolaro
}
-- linio, kolonelo
-- definu titolo
function modulo.titoligxi(titolo)
tablo['titolo'] = titolo
end
-- aldonu linio
function modulo.linialdonu()
table.insert( liniaro, {} ) -- novan vakan lineon
end
-- aldonu ĉelon
-- stilo estas ĉelo argumentoj
-- titoligu indikas se la ĉelo estas titolo
function modulo.cxelaldonu(datumo, titoligo, stilo )
if #liniaro == 0 then
modulo.linialdonu()
end
linio = liniaro[#liniaro]
table.insert(linio, datumo)
ba = #liniaro -- numero de linio
be = #linio -- numero de ĉelo
modulo.titoligu(ba, be, titoligo)
modulo.cxelstiligu(ba, be, stilo)
cxelstilaro[ba] = cxelstilaro[ba] or {}
cxelstilaro[ba][be] = stilo
end
function modulo.titoligu(linio, kolono, titoligo)
-- ĉu la ĉelo estas titolo?
cxeltitolaro[linio] = cxeltitolaro[linio] or {}
mw.log('titoligu:linio/kolono', linio, kolono)
cxeltitolaro[linio][kolono] = titoligo or false
end
function modulo.cxelstiligu(linio, kolono, stilo)
-- ĉu la ĉelo havas apartan stilon?
cxelstilaro[linio] = cxelstilaro[linio] or {}
cxelstilaro[linio][kolono] = stilo
end
function modulo.kolonaldonu(datumaro, kolono, titoligo, stilo )
kolono = kolono or 1
for A, datumo in ipairs(datumaro) do
mw.log('kolonaldun: A', A)
liniaro[A] = liniaro[A] or {}
liniaro[A][kolono] = datumo
modulo.titoligu(A, kolono, titoligo)
modulo.cxelstiligu(A, kolono, stilo)
end
end
function modulo.linvikigxi( cxelaro )
viklino = "|-\n|"
return viklino .. table.concat( cxelaro, "\n|" )
end
function modulo.viktabligxi(stilo)
stilo = stilo or tablo.stilo
viktablo = '{| ' .. stilo .. '\n'
if tablo.titolo ~= '' then
viktablo = viktablo .. '|+ ' .. tablo.titolo .. '\n'
end
for i,linio in ipairs(liniaro) do
viktablo = viktablo .. '|- \n'
for j,datumo in ipairs(linio) do
-- Reminder: ba and be or bi <=> if ba then be else bi end
cxelmarko = cxeltitolaro[i][j] and '! ' or '| '
cxelstilo = cxelstilaro[i][j] and (cxelstilaro[i][j] .. ' | ') or ''
viktablo = viktablo .. cxelmarko .. cxelstilo .. datumo .. '\n'
end
end
viktablo = viktablo .. '|}\n '
return viktablo
end
return modulo