« Module:TNT » : différence entre les versions

temp>Johnuniq
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))
 
Template:Warn>ExE Boss
Only use the `zzz123` workaround for integer‑only parameter names
Ligne 50 : Ligne 50 :
id = mw.text.trim(v)
id = mw.text.trim(v)
elseif type(k) == 'number' then
elseif type(k) == 'number' then
table.insert(params, mw.text.trim(v))
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)
Ligne 96 : Ligne 96 :
local data = loadData(dataset)
local data = loadData(dataset)
local names = {}
local names = {}
for _, field in pairs(data.schema.fields) do
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 pairs(data.data) do
for _, row in ipairs(data.data) do
local newVal = {}
local newVal = {}
local name = nil
local name = nil
for pos, val in pairs(row) do
for pos, columnName in ipairs(names) do
local columnName = names[pos]
if columnName == 'name' then
if columnName == 'name' then
name = val
name = row[pos]
else
else
newVal[columnName] = val
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)
Ligne 120 : Ligne 129 :


-- Work around json encoding treating {"1":{...}} as an [{...}]
-- Work around json encoding treating {"1":{...}} as an [{...}]
params['zzz123']=''
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,
})
})


json = string.gsub(json,'"zzz123":"",?', "")
if numOnly then
json = string.gsub(json,'"zzz123":"",?', "")
end


return json
return json
Ligne 157 : Ligne 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; Cannot load https://commons.wikimedia.org/wiki/Data:' .. dataset)
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