Módulo:Tree chart
Uso
Implementa la Plantilla:Tree chart; la documentación completa sobre la sintaxis del gráfico existe en Plantilla:Tree chart/doc
Este módulo utiliza la biblioteca mw.html para crear filas de celdas de tabla cuyos bordes dibujan líneas para mostrar las relaciones entre los elementos. Cuando un parámetro sin nombre coincide con una clave en el Módulo:Tree chart/data, el módulo creará un bloque con estilos tal como se define en la tabla. Cada clave de la tabla tiene una subtabla con 0, 1 o 2 claves propias: t
para la fila "superior" y b
para la "fila inferior". Cualquier parámetro sin nombre cuyo valor no exista en la tabla se usará para crear elementos en el gráfico, y se buscarán parámetros con nombre adicionales para ese valor.
Errores
Con la migración a Lua, se han eliminado los siguientes errores:
- "Template:Chart/cellb" - causado por algún problema con
{{!xt}}
siendo usado en vez de{{xt}}
. - "Template:Chart/celltTemplate:Chart/cellb" - causado por algún problema con
{{!xt}}
siendo usado en vez de{{xt}}
, o{{!xt}}
en vez de{{xt}}
. - "Template:Chart/celly tTemplate:Chart/celly b" - causado por algún problema con
{{!xt}}
siendo usado en vez de{{xt}}
.
require('strict')
local p = {}
local cells = mw.loadData('Module:Tree chart/data')
function p._main(cell_args)
local ret = mw.html.create()
local top = ret:tag('tr')
:css{ height = '1px',
['text-align'] = 'center' }
local bottom = ret:tag('tr')
:css{ height = '1px',
['text-align'] = 'center' }
for _, v in ipairs(cell_args) do
if type(v) == 'string' then
top:wikitext(cells[v].t)
bottom:wikitext(cells[v].b)
else
top:tag('td')
:attr{ colspan = v.colspan or cell_args.colspan or 6,
rowspan = v.rowspan or cell_args.rowspan or 2 }
:css{ padding = '0.2em',
border = (v.border or cell_args.border or '2') .. 'px solid black' }
:cssText(v.boxstyle or cell_args.boxstyle)
:wikitext(v.text)
end
end
return tostring(ret)
end
function p.main(frame)
local args = require('Module:Arguments').getArgs(frame, {wrappers = 'Template:Tree chart', trim = false, removeBlanks = false})
local cell_args = {
colspan = args.colspan,
rowspan = args.rowspan,
border = args.border,
boxstyle = args.boxstyle
}
for _, val in ipairs(args) do
local trimmedVal = val:match('^%s*(.-)%s*$')
if trimmedVal == '' then
trimmedVal = '$'
end
if cells[trimmedVal] then
table.insert(cell_args, trimmedVal)
else
-- Unnamed params behave weirdly
-- white space at the front counts for param_{{{1}}}, but not whitespace at the end, so remove it
local rightTrimmedVal = val:gsub('%s+$','')
table.insert(cell_args, {
text = args[trimmedVal] or ('{{{'..trimmedVal..'}}}'),
colspan = args['colspan_'..rightTrimmedVal],
rowspan = args['rowspan_'..rightTrimmedVal],
border = args['border_'..rightTrimmedVal],
boxstyle = args['boxstyle_'..rightTrimmedVal]
})
end
end
return p._main(cell_args)
end
return p