Module:TNT: Difference between revisions
Content added Content deleted
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.) |
(make i18n/ prefix optional, support for usage from modules) |
||
Line 23: | Line 23: | ||
-- | source-table <!-- uses a translation message with id = "source-table" --> |
-- | source-table <!-- uses a translation message with id = "source-table" --> |
||
-- | param1 }} <!-- optional parameter --> |
-- | param1 }} <!-- optional parameter --> |
||
-- |
-- |
||
-- |
-- |
||
-- The "doc" function will generate the <templatedata> parameter documentation for templates. |
-- 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. |
-- This way all template parameters can be stored and localized in a single Commons dataset. |
||
Line 36: | Line 36: | ||
local p = {} |
local p = {} |
||
local i18nDataset = 'I18n/Module:TNT.tab' |
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) |
function p.msg(frame) |
||
Line 47: | Line 51: | ||
id = mw.text.trim(v) |
id = mw.text.trim(v) |
||
elseif type(k) == 'number' then |
elseif type(k) == 'number' then |
||
table.insert(params, v) |
table.insert(params, 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 53: | Line 57: | ||
end |
end |
||
return formatMessage(dataset, id, params, lang) |
return formatMessage(dataset, id, params, lang) |
||
⚫ | |||
-- Identical to p.msg() above, but used from other lua modules |
|||
⚫ | |||
checkType('format', 1, dataset, 'string') |
|||
checkType('format', 2, key, 'string') |
|||
checkType('format', 3, params, 'table', true) |
|||
checkType('format', 4, lang, 'string', true) |
|||
⚫ | |||
end |
end |
||
Line 59: | Line 72: | ||
function p.link(frame) |
function p.link(frame) |
||
return link(frame.args[1]) |
return link(frame.args[1]) |
||
⚫ | |||
⚫ | |||
function link(dataset) |
|||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
end |
end |
||
function p.doc(frame) |
function p.doc(frame) |
||
return frame:extensionTag( |
return frame:extensionTag( |
||
'templatedata', |
'templatedata', |
||
p.getTemplateData(frame.args[1]) |
p.getTemplateData(mw.text.trim(frame.args[1])) |
||
) .. |
) .. formatMessage(i18nDataset, 'edit_doc', {link(dataset)}) |
||
end |
end |
||
function p.getTemplateData(page) |
function p.getTemplateData(page) |
||
dataset = 'Templatedata/' .. |
dataset = 'Templatedata/' .. mw.text.trim(page) |
||
-- TODO: add '_' parameter once lua starts reindexing properly for "all" languages |
-- TODO: add '_' parameter once lua starts reindexing properly for "all" languages |
||
local data = loadData(dataset) |
local data = loadData(dataset) |
||
Line 89: | Line 92: | ||
local params = {} |
local params = {} |
||
local paramOrder = {} |
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({ |
local json = mw.text.jsonEncode({ |
||
params=params, |
params=params, |
||
Line 120: | Line 123: | ||
end |
end |
||
-- Local functions |
|||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
function tntMessage(key, params) |
|||
⚫ | |||
⚫ | |||
loadData = function(dataset, lang) |
|||
if not dataset or dataset == '' then |
if not dataset or dataset == '' then |
||
error( |
error(formatMessage(i18nDataset, 'error_no_dataset', {})) |
||
end |
end |
||
if string.sub(dataset,-4) ~= '.tab' then |
if string.sub(dataset,-4) ~= '.tab' then |
||
dataset = dataset .. '.tab' |
dataset = dataset .. '.tab' |
||
end |
end |
||
return dataset |
|||
⚫ | |||
⚫ | |||
local data = mw.ext.data.get(dataset, lang) |
local data = mw.ext.data.get(dataset, lang) |
||
if data == false then |
if data == false then |
||
if dataset == i18nDataset then |
if dataset == i18nDataset then |
||
Line 157: | Line 140: | ||
error('Missing Commons dataset ' .. i18nDataset) |
error('Missing Commons dataset ' .. i18nDataset) |
||
else |
else |
||
error( |
error(formatMessage(i18nDataset, 'error_bad_dataset', {link(dataset)})) |
||
end |
end |
||
end |
end |
||
return data |
return data |
||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
formatMessage = function(dataset, key, params, lang) |
|||
-- Message tables must always start with I18n/... |
|||
if dataset and string.sub(dataset,1,5) ~= 'I18n/' then |
|||
dataset = 'I18n/' .. dataset |
|||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
end |
end |
||