Module:TNT: Difference between revisions
From Test Wiki
Content deleted Content added
m Changed protection level for "Module:TNT": High-risk Lua module: per request at WP:RFPP to match Module:Excerpt ([Edit=Require template editor access] (indefinite) [Move=Require template editor access] (indefinite)) |
MacFan4000 (talk | contribs) m 1 revision imported |
||
| (11 intermediate revisions by 8 users not shown) | |||
| Line 50: | Line 50: | ||
id = mw.text.trim(v) |
id = mw.text.trim(v) |
||
elseif type(k) == 'number' then |
elseif type(k) == 'number' then |
||
params[k - 2] = mw.text.trim(v) |
|||
elseif k == 'lang' and v ~= '_' then |
elseif k == 'lang' and v ~= '_' then |
||
lang = mw.text.trim(v) |
lang = mw.text.trim(v) |
||
| Line 96: | Line 96: | ||
local data = loadData(dataset) |
local data = loadData(dataset) |
||
local names = {} |
local names = {} |
||
for _, field in |
for _, field in ipairs(data.schema.fields) do |
||
table.insert(names, field.name) |
table.insert(names, field.name) |
||
end |
end |
||
local numOnly = true |
|||
local params = {} |
local params = {} |
||
local paramOrder = {} |
local paramOrder = {} |
||
for _, row in |
for _, row in ipairs(data.data) do |
||
local newVal = {} |
local newVal = {} |
||
local name = nil |
local name = nil |
||
for pos, |
for pos, columnName in ipairs(names) do |
||
local columnName = names[pos] |
|||
if columnName == 'name' then |
if columnName == 'name' then |
||
name = |
name = row[pos] |
||
else |
else |
||
newVal[columnName] = |
newVal[columnName] = row[pos] |
||
end |
end |
||
end |
end |
||
if name then |
if name then |
||
if ( |
|||
(type(name) ~= "number") |
|||
and ( |
|||
(type(name) ~= "string") |
|||
or not string.match(name, "^%d+$") |
|||
) |
|||
) then |
|||
numOnly = false |
|||
end |
|||
params[name] = newVal |
params[name] = newVal |
||
table.insert(paramOrder, name) |
table.insert(paramOrder, name) |
||
| Line 120: | Line 129: | ||
-- Work around json encoding treating {"1":{...}} as an [{...}] |
-- Work around json encoding treating {"1":{...}} as an [{...}] |
||
if numOnly then |
|||
params['zzz123']='' |
|||
end |
|||
local json = mw.text.jsonEncode({ |
local json = mw.text.jsonEncode({ |
||
params=params, |
params=params, |
||
paramOrder=paramOrder, |
paramOrder=paramOrder, |
||
description=data.description |
description=data.description, |
||
}) |
}) |
||
if numOnly then |
|||
json = string.gsub(json,'"zzz123":"",?', "") |
|||
end |
|||
return json |
return json |
||
| Line 157: | Line 170: | ||
-- Give helpful error to thirdparties who try and copy this module. |
-- Give helpful error to thirdparties who try and copy this module. |
||
if not mw.ext or not mw.ext.data or not mw.ext.data.get then |
if not mw.ext or not mw.ext.data or not mw.ext.data.get then |
||
error('Missing JsonConfig extension |
error(string.format([['''Missing JsonConfig extension, or not properly configured; |
||
Cannot load https://commons.wikimedia.org/wiki/Data:%s. |
|||
See https://www.mediawiki.org/wiki/Extension:JsonConfig#Supporting_Wikimedia_templates''']], dataset)) |
|||
end |
end |
||