Module:Fabricant de tables
Apparence
La documentation pour ce module peut être créée à Module:Fabricant de tables/doc
local simpleTable = {}
function simpleTable:new()
local obj = {}
obj.rows = {}
setmetatable(obj, simpleTable)
self.__index = self
return obj
end
function simpleTable:sortColumn(num)
self.sortColumn = num
end
function simpleTable:addRow(rowvals, rowkey)
table.insert(self.rows, {rowvals, rowkey}) -- insérée sans tri, peut-être devrait-on la mettre directement à sa place ?
end
function simpleTable:addHeaders(vals)
self.headers = vals
end
function simpleTable:addClass(class)
self.class = class
end
function simpleTable:addTitle(title)
self.title = title
end
function simpleTable:addSource(src)
self.source = src
end
local function sortRows(rows, sortcolumn) -- effectue le classement défini par :sortColumn ou addRow, à nettoyer et améliorer
table.sort(
rows,
function(a, b)
if sortcolumn then -- classement par colonne
local v1, v2 = a[1][sortcolumn], b[1][sortcolumn]
if v1 and v2 then
return v1 < v2
end
end
if (a[2] and b[2]) then -- classement par une valeur autre stockée en valeur 2 dans chaque objet colonne ({val, sortkey})
return a[2] < b[2]
end
end
)
end
function simpleTable:show()
local frame = mw.getCurrentFrame()
local tab = mw.html.create('table'):addClass(self.class or 'wikitable sortable')
if self.headers then
local h = mw.html.create('tr')
for i, j in pairs(self.headers) do
h:tag('th'):wikitext(j):done()
end
tab:node(h):done()
end
sortRows(self.rows, self.sortColumn)
for i, rowvals in pairs(self.rows) do
local newrow = mw.html.create('tr')
for j, val in pairs(rowvals[1]) do
newrow:tag('td'):wikitext(val):done()
end
tab:node(newrow):done()
end
tab:done()
return '<table><tr><th>' .. (self.title or '') .. '</th></tr><tr><td>' .. tostring(tab) .. '<small>' .. (self.source or '') .. '</small></td></tr></table>'
end
return simpleTable