Aller au contenu

Module:Vikitablo

Une page de Wikiversité, la communauté pédagogique libre.

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

[modifier le wikicode]

La 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.

Le 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