Module:TNT: Difference between revisions

From the Croc Wiki, the Croc encyclopedia
Jump to navigationJump to search
Updating from mw
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.)
(Updating from mw)
Line 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.
Line 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)
Line 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)
Line 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
 
Line 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)
Line 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,
Line 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
Line 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
 
0

edits

Cookies help us deliver our services. By using our services, you agree to our use of cookies.

Navigation menu