Modulo:TNT: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
m Copying 5 changes by Yurik: "fix templatedata doc having just the positional parameters, better description, more docs changes, fixed doc link, Trim parameter whitespaces" from mw:Module:TNT. See docs.
m Copying 4 changes by Yurik: "no auto I18n/ prefix, breaks some graphs, fixed doc link, Trim parameter whitespaces, docs link" from mw:Module:TNT. See docs.
Riga 23:
-- | source-table <!-- uses a translation message with id = "source-table" -->
-- | param1 }} <!-- optional parameter -->
--
--
-- The "doc" function will generate the <templatedata> parameter documentation for templates.
-- This way all template parameters can be stored and localized in a single Commons dataset.
Riga 36:
local p = {}
local i18nDataset = 'I18n/Module:TNT.tab'
local checkType = require('libraryUtil').checkType
 
-- Forward declaration of the local functions
local formatMessage, loadData, link
 
function p.msg(frame)
Riga 47 ⟶ 51:
id = mw.text.trim(v)
elseif type(k) == 'number' then
table.insert(params, mw.text.trim(v))
elseif k == 'lang' and v ~= '_' then
lang = mw.text.trim(v)
Riga 53 ⟶ 57:
end
return formatMessage(dataset, id, params, lang)
end
 
-- Identical to p.msg() above, but used from other lua modules
function formatMessagep.format(dataset, key, params, lang)
checkType('format', 1, dataset, 'string')
checkType('format', 2, key, 'string')
checkType('format', 3, params, 'table', true)
checkType('format', 4, lang, 'string', true)
return formatMessage(i18nDatasetdataset, key, params, lang)
end
 
Riga 59 ⟶ 72:
function p.link(frame)
return link(frame.args[1])
end
 
-- Given a dataset name, convert it to a title with the 'commons:data:' prefix
function link(dataset)
dataset = 'Data:' .. mw.text.trim(dataset or '')
if mw.site.siteName == 'Wikimedia Commons' then
return dataset
else
return 'commons:' .. dataset
end
end
 
function p.doc(frame)
return frame:extensionTag(
'templatedata',
p.getTemplateData(mw.text.trim(frame.args[1]))
) .. tntMessageformatMessage(i18nDataset, 'edit_doc', {link(dataset)})
end
 
function p.getTemplateData(page)
dataset = 'Templatedata/' .. normalizeDatasetmw.text.trim(page)
-- TODO: add '_' parameter once lua starts reindexing properly for "all" languages
local data = loadData(dataset)
Riga 89 ⟶ 92:
local params = {}
local paramOrder = {}
for _, row in pairs(data.data) do
local newVal = {}
local name = nil
for pos, val in pairs(row) do
local columnName = names[pos]
if columnName == 'name' then
name = val
else
newVal[columnName] = val
end
end
if name then
params[name] = newVal
table.insert(paramOrder, name)
end
end
 
-- Work around json encoding treating {"1":{...}} as an [{...}]
params['zzz123']=''
 
local json = mw.text.jsonEncode({
params=params,
Riga 120 ⟶ 123:
end
 
-- Local functions
function formatMessage(dataset, key, params, lang)
for _, row in pairs(loadData(dataset, lang).data) do
local id, msg = unpack(row)
if id == key then
local result = mw.message.newRawMessage(msg, unpack(params))
return result:plain()
end
end
if dataset == i18nDataset then
-- Prevent cyclical calls
error('Invalid message key "' .. key .. '"')
else
error(tntMessage('error_bad_msgkey', {key, link(dataset)}))
end
end
 
function tntMessage(key, params)
return formatMessage(i18nDataset, key, params)
end
 
functionloadData normalizeDataset= function(dataset, lang)
if not dataset or dataset == '' then
error(tntMessageformatMessage(i18nDataset, 'error_no_dataset', {}))
end
if string.sub(dataset,-4) ~= '.tab' then
dataset = dataset .. '.tab'
end
return dataset
end
 
function loadData(dataset, lang)
local data = mw.ext.data.get(dataset, lang)
 
if data == false then
if dataset == i18nDataset then
Riga 157 ⟶ 140:
error('Missing Commons dataset ' .. i18nDataset)
else
error(tntMessageformatMessage(i18nDataset, 'error_bad_dataset', {link(dataset)}))
end
end
return data
end
 
-- Given a dataset name, convert it to a title with the 'commons:data:' prefix
functionlink loadData= function(dataset, lang)
dataset = 'Data:' .. mw.text.trim(dataset or '')
if mw.site.siteName == 'Wikimedia Commons' then
return dataset
else
return 'commons:' .. dataset
end
end
 
formatMessage = function(dataset, key, params, lang)
for _, row in pairs(loadData(dataset, lang).data) do
local id, msg = unpack(row)
if id == key then
local result = mw.message.newRawMessage(msg, unpack(params or {}))
return result:plain()
end
end
if dataset == i18nDataset then
-- Prevent cyclical calls
error('Invalid message key "' .. key .. '"')
else
error(tntMessageformatMessage(i18nDataset, 'error_bad_msgkey', {key, link(dataset)}))
end
end