Test Wikimedia Commons
testcommonswiki
https://test-commons.wikimedia.org/wiki/Main_Page
MediaWiki 1.45.0-wmf.4
first-letter
Media
Special
Talk
User
User talk
Commons
Commons talk
File
File talk
MediaWiki
MediaWiki talk
Template
Template talk
Help
Help talk
Category
Category talk
Creator
Creator talk
TimedText
TimedText talk
Sequence
Sequence talk
Institution
Institution talk
Data
Data talk
TimedText
TimedText talk
Module
Module talk
Translations
Translations talk
Data:Chart Example Data.tab
486
2417
5003
4990
2025-06-04T15:48:04Z
CCiufo-WMF
1354
5003
Tabular.JsonConfig
application/json
{"license":"CC0-1.0","description":{"en":"Some meaningless example data about Middle-Earth"},"schema":{"fields":[{"name":"a1","type":"string","title":{"en":"Date"}},{"name":"a2","type":"number","title":{"en":"Elves"}},{"name":"a3","type":"number","title":{"en":"Ents"}},{"name":"a4","type":"number","title":{"en":"Orcs"}},{"name":"a5","type":"number","title":{"en":"Hobbits"}},{"name":"a6","type":"number","title":{"en":"Trolls"}}]},"data":[["1993/09/09",25,37,8,8,10],["1993/09/14",36,33,8,10,11],["1993/09/20",35,35,6,11,11],["1993/09/25",30,37,8,10,13],["1993/09/26",31,36,7,11,13],["1993/09/26",28,34,7,12,15],["1993/09/30",25,39,6,12,17],["1993/10/02",26,38,8,12,14],["1993/10/08",22,37,8,12,18],["1993/10/16",22,40,7,13,16],["1993/10/19",21,39,6,14,17],["1993/10/22",18,43,7,14,18],["1993/10/22",16,44,7,12,19],["1993/10/25",16,41,1,13,18]]}
iwh8bw9ma01n6ol6ipag0xz3axanubf
Data:Example Line Chart.chart
486
2419
5011
4981
2025-06-04T17:30:36Z
CCiufo-WMF
1354
5011
Chart.JsonConfig
application/json
{"license":"CC0-1.0","version":1,"type":"line","xAxis":{"title":{"en":"Date"}},"yAxis":{"title":{"en":"%support"}},"transform":{"module":"TabUtils","function":"select","args":{"cols":"a1,a2,a3"}},"source":"Chart Example Data.tab","title":{"en":"Sample Line Chart"}}
oxe66c6521ygn9j227b3t3ivwva429w
Module:TabUtils
828
2434
5004
2025-06-04T16:11:16Z
Brooke Vibber (WMF)
1355
test
5004
Scribunto
text/plain
--
-- Experimental tabular data utilities for Chart transforms
-- See https://www.mediawiki.org/wiki/Extension:Chart/Transforms
--
local p = {}
function colmap( tab )
local cols = {}
for i, field in tab.schema.fields do
cols[field.name] = i
end
return cols
end
--
-- Arguments:
-- * select: comma-separated list of column names to keep, otherwise returns all cols
-- * where: column name to match on, otherwise returns all rows
-- * equals, gt, lt, gte, lte: value to compare against to keep rows
--
function p.select( tab, args )
local map = colmap(tab)
local where = nil
if args.where then
end
if args.cols then
local cols = mw.text.split( args.cols, ",", true )
local newfields = {}
local newdata = {}
for i, name in ipairs( cols ) do
newfields[i] = tab.schema.fields[map[name]]
end
for n, row in ipairs( tab.data ) do
local newrow = {}
for i, name in ipairs( cols ) do
newrow[i] = row[map[name]]
end
newdata[n] = newrow
end
tab.schema.fields = newfields
tab.schema.data = newdata
end
return tab
end
function p.demo()
local item = mw.ext.data.get("Data:Sample weekly temperature dataset.tab", "_")
return mw.dumpObject(p.select, item, {
["cols"]="month,high"
})
end
return p
ou2gwyldbynr5ycjazwjqcmkl5u0smv
5005
5004
2025-06-04T16:17:57Z
Brooke Vibber (WMF)
1355
5005
Scribunto
text/plain
--
-- Experimental tabular data utilities for Chart transforms
-- See https://www.mediawiki.org/wiki/Extension:Chart/Transforms
--
local p = {}
function colmap( tab )
local cols = {}
for i, field in ipairs(tab.schema.fields) do
cols[field.name] = i
end
return cols
end
--
-- Arguments:
-- * select: comma-separated list of column names to keep, otherwise returns all cols
-- * where: column name to match on, otherwise returns all rows
-- * equals, gt, lt, gte, lte: value to compare against to keep rows
--
function p.select( tab, args )
local map = colmap(tab)
local where = nil
if args.where then
end
if args.cols then
local cols = mw.text.split( args.cols, ",", true )
local newfields = {}
local newdata = {}
for i, name in ipairs( cols ) do
newfields[i] = tab.schema.fields[map[name]]
end
for n, row in ipairs( tab.data ) do
local newrow = {}
for i, name in ipairs( cols ) do
newrow[i] = row[map[name]]
end
newdata[n] = newrow
end
tab.schema.fields = newfields
tab.schema.data = newdata
end
return tab
end
function p.demo()
local tab = mw.ext.data.get("Sample_weekly_temperature_dataset.tab", "_")
--return mw.dumpObject(p.select(tab, {
-- ["cols"]="month,high"
--}))
return mw.dumpObject({["hello"]="bar"})
end
return p
antum3pvpc3v63bcatkttw4l2vpef7m
5006
5005
2025-06-04T16:18:49Z
Brooke Vibber (WMF)
1355
5006
Scribunto
text/plain
--
-- Experimental tabular data utilities for Chart transforms
-- See https://www.mediawiki.org/wiki/Extension:Chart/Transforms
--
local p = {}
function colmap( tab )
local cols = {}
for i, field in ipairs(tab.schema.fields) do
cols[field.name] = i
end
return cols
end
--
-- Arguments:
-- * select: comma-separated list of column names to keep, otherwise returns all cols
-- * where: column name to match on, otherwise returns all rows
-- * equals, gt, lt, gte, lte: value to compare against to keep rows
--
function p.select( tab, args )
local map = colmap(tab)
local where = nil
if args.where then
end
if args.cols then
local cols = mw.text.split( args.cols, ",", true )
local newfields = {}
local newdata = {}
for i, name in ipairs( cols ) do
newfields[i] = tab.schema.fields[map[name]]
end
for n, row in ipairs( tab.data ) do
local newrow = {}
for i, name in ipairs( cols ) do
newrow[i] = row[map[name]]
end
newdata[n] = newrow
end
tab.schema.fields = newfields
tab.schema.data = newdata
end
return tab
end
function p.demo()
--local tab = mw.ext.data.get("Sample_weekly_temperature_dataset.tab", "_")
--return mw.dumpObject(p.select(tab, {
-- ["cols"]="month,high"
--}))
--return mw.text.jsonEncode({["hello"]="bar"})
return "hello"
end
return p
s83eiobgquh0kq5zhhqrw8agdtbdpwz
5007
5006
2025-06-04T16:21:25Z
Brooke Vibber (WMF)
1355
wip
5007
Scribunto
text/plain
--
-- Experimental tabular data utilities for Chart transforms
-- See https://www.mediawiki.org/wiki/Extension:Chart/Transforms
--
local p = {}
function colmap( tab )
local cols = {}
for i, field in ipairs(tab.schema.fields) do
cols[field.name] = i
end
return cols
end
--
-- Arguments:
-- * select: comma-separated list of column names to keep, otherwise returns all cols
-- * where: column name to match on, otherwise returns all rows
-- * equals, gt, lt, gte, lte: value to compare against to keep rows
--
function p.select( tab, args )
local map = colmap(tab)
local where = nil
if args.where then
end
if args.cols then
local cols = mw.text.split( args.cols, ",", true )
local newfields = {}
local newdata = {}
for i, name in ipairs( cols ) do
newfields[i] = tab.schema.fields[map[name]]
end
for n, row in ipairs( tab.data ) do
local newrow = {}
for i, name in ipairs( cols ) do
newrow[i] = row[map[name]]
end
newdata[n] = newrow
end
tab.schema.fields = newfields
tab.data = newdata
end
return tab
end
function p.demo()
local tab = mw.ext.data.get("Sample_weekly_temperature_dataset.tab", "_")
mw.logObject(p.select(tab, {
["cols"]="month,high"
}))
end
return p
g9vx414cm1pkrma4ikncwb91lpf6rix
5008
5007
2025-06-04T16:38:03Z
Brooke Vibber (WMF)
1355
test
5008
Scribunto
text/plain
--
-- Experimental tabular data utilities for Chart transforms
-- See https://www.mediawiki.org/wiki/Extension:Chart/Transforms
--
local p = {}
function colmap( tab )
local cols = {}
for i, field in ipairs(tab.schema.fields) do
cols[field.name] = i
end
return cols
end
--
-- Arguments:
-- * select: comma-separated list of column names to keep, otherwise returns all cols
-- * where: column name to match on, otherwise returns all rows
-- * equals, ne, gt, lt, gte, lte: value to compare against to keep rows
--
function p.select( tab, args )
local map = colmap(tab)
local where = nil
if args.where then
local index = map[args.where]
local field = tab.schema.fields[index]
local function convert( val )
if field.type == "number" then
return tonumber(val)
elseif field.type == "localized" then
error("todo: support localized fields")
else
return val
end
end
local comparator
if args.equals then
local against = convert( args.equals )
comparator = function ( val )
return val == against
end
elseif args.ne then
local against = convert( args.ne )
comparator = function ( val )
return val ~= against
end
elseif args.gt then
local against = convert( args.gt )
comparator = function ( val )
return val > against
end
elseif args.lt then
local against = convert( args.lt )
comparator = function ( val )
return val < against
end
elseif args.gte then
local against = convert( args.gte )
comparator = function ( val )
return val >= against
end
elseif args.lte then
local against = convert( args.lte )
comparator = function ( val )
return val <= against
end
else
error("'where' must provide argument for 'equals', 'ne', 'gt', 'lt', 'gte', or 'lte'")
end
local newdata = {}
for _, row in ipairs(tab.data) do
if comparator( row[index] ) then
table.insert(newdata, row)
end
end
tab.data = newdata
end
if args.cols then
local cols = mw.text.split( args.cols, ",", true )
local newfields = {}
local newdata = {}
for i, name in ipairs( cols ) do
newfields[i] = tab.schema.fields[map[name]]
end
for n, row in ipairs( tab.data ) do
local newrow = {}
for i, name in ipairs( cols ) do
newrow[i] = row[map[name]]
end
newdata[n] = newrow
end
tab.schema.fields = newfields
tab.data = newdata
end
return tab
end
function p.demo()
local tab = mw.ext.data.get("Sample_weekly_temperature_dataset.tab", "_")
mw.logObject(p.select(tab, {
["cols"]="month,high",
["where"]="high",
["lt"]="25"
}))
end
return p
rw1qz8f6yb1hegtez52tl5esh5keyxi
5009
5008
2025-06-04T16:50:29Z
Brooke Vibber (WMF)
1355
5009
Scribunto
text/plain
--
-- Experimental tabular data utilities for Chart transforms
-- See https://www.mediawiki.org/wiki/Extension:Chart/Transforms
--
local p = {}
function colmap( tab )
local cols = {}
for i, field in ipairs(tab.schema.fields) do
cols[field.name] = i
end
return cols
end
--
-- select: subset a data set by column reference or comparison on row values
--
-- Arguments:
-- * cols: comma-separated list of column names to keep, otherwise returns all cols
-- * where: column name to match on, otherwise returns all rows
-- * equals, ne, gt, lt, gte, lte: value to compare against to keep rows
--
function p.select( tab, args )
local map = colmap(tab)
local where = nil
if args.where then
local index = map[args.where]
local field = tab.schema.fields[index]
local function convert( val )
if field.type == "number" then
return tonumber(val)
elseif field.type == "localized" then
error("todo: support localized fields")
else
return val
end
end
local comparator
if args.equals then
local against = convert( args.equals )
comparator = function ( val )
return val == against
end
elseif args.ne then
local against = convert( args.ne )
comparator = function ( val )
return val ~= against
end
elseif args.gt then
local against = convert( args.gt )
comparator = function ( val )
return val > against
end
elseif args.lt then
local against = convert( args.lt )
comparator = function ( val )
return val < against
end
elseif args.gte then
local against = convert( args.gte )
comparator = function ( val )
return val >= against
end
elseif args.lte then
local against = convert( args.lte )
comparator = function ( val )
return val <= against
end
else
error("'where' must provide argument for 'equals', 'ne', 'gt', 'lt', 'gte', or 'lte'")
end
local newdata = {}
for _, row in ipairs(tab.data) do
if comparator( row[index] ) then
table.insert(newdata, row)
end
end
tab.data = newdata
end
if args.cols then
local cols = mw.text.split( args.cols, ",", true )
local newfields = {}
local newdata = {}
for i, name in ipairs( cols ) do
newfields[i] = tab.schema.fields[map[name]]
end
for n, row in ipairs( tab.data ) do
local newrow = {}
for i, name in ipairs( cols ) do
newrow[i] = row[map[name]]
end
newdata[n] = newrow
end
tab.schema.fields = newfields
tab.data = newdata
end
return tab
end
function p.demo()
local tab = mw.ext.data.get("Sample_weekly_temperature_dataset.tab", "_")
mw.logObject(p.select(tab, {
["cols"]="month,high",
["where"]="high",
["lt"]="25"
}))
end
return p
pj5ji4war3qlxwnye20yq8atmcs6sg1
5010
5009
2025-06-04T16:53:47Z
Brooke Vibber (WMF)
1355
5010
Scribunto
text/plain
--
-- Experimental tabular data utilities for Chart transforms
-- See https://www.mediawiki.org/wiki/Extension:Chart/Transforms
--
local p = {}
function colmap( tab )
local cols = {}
for i, field in ipairs( tab.schema.fields ) do
cols[field.name] = i
end
return cols
end
--
-- select: subset a data set by column reference or comparison on row values
--
-- Arguments:
-- * cols: comma-separated list of column names to keep, otherwise returns all cols
-- * where: column name to match on, otherwise returns all rows
-- * equals, ne, gt, lt, gte, lte: value to compare against to keep rows
--
function p.select( tab, args )
local map = colmap( tab )
local where = nil
if args.where then
local index = map[args.where]
local field = tab.schema.fields[index]
local function convert( val )
if field.type == "number" then
return tonumber( val )
elseif field.type == "localized" then
error( "todo: support localized fields" )
else
return val
end
end
local comparator
if args.equals then
local against = convert( args.equals )
comparator = function ( val )
return val == against
end
elseif args.ne then
local against = convert( args.ne )
comparator = function ( val )
return val ~= against
end
elseif args.gt then
local against = convert( args.gt )
comparator = function ( val )
return val > against
end
elseif args.lt then
local against = convert( args.lt )
comparator = function ( val )
return val < against
end
elseif args.gte then
local against = convert( args.gte )
comparator = function ( val )
return val >= against
end
elseif args.lte then
local against = convert( args.lte )
comparator = function ( val )
return val <= against
end
else
error( "'where' must provide argument for 'equals', 'ne', 'gt', 'lt', 'gte', or 'lte'" )
end
local newdata = {}
for _, row in ipairs( tab.data ) do
if comparator( row[index] ) then
table.insert( newdata, row )
end
end
tab.data = newdata
end
if args.cols then
local cols = mw.text.split( args.cols, ",", true )
local newfields = {}
local newdata = {}
for i, name in ipairs( cols ) do
table.insert( newfields, tab.schema.fields[map[name]] )
end
for n, row in ipairs( tab.data ) do
local newrow = {}
for i, name in ipairs( cols ) do
table.insert( newrow, row[map[name]] )
end
newdata[n] = newrow
end
tab.schema.fields = newfields
tab.data = newdata
end
return tab
end
function p.demo()
local tab = mw.ext.data.get( "Sample_weekly_temperature_dataset.tab", "_" )
mw.logObject( p.select( tab, {
["cols"] = "month,high",
["where"] = "high",
["lt"] = "25"
}))
end
return p
qv2duvkd9287ot192sxckbryj57xc7g