330
edits
en>Yurik (no auto I18n/ prefix, breaks some graphs) |
m (31 revisions imported) |
||
(9 intermediate revisions by 4 users not shown) | |||
Line 36: | Line 36: | ||
local p = {} | local p = {} | ||
local i18nDataset = 'I18n/Module:TNT.tab' | local i18nDataset = 'I18n/Module:TNT.tab' | ||
-- Forward declaration of the local functions | -- Forward declaration of the local functions | ||
local | local sanitizeDataset, loadData, link, formatMessage | ||
function p.msg(frame) | function p.msg(frame) | ||
Line 51: | 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 60: | Line 59: | ||
-- Identical to p.msg() above, but used from other lua modules | -- Identical to p.msg() above, but used from other lua modules | ||
function p.format(dataset, key, | -- Parameters: name of dataset, message key, optional arguments | ||
-- Example with 2 params: format('I18n/Module:TNT', 'error_bad_msgkey', 'my-key', 'my-dataset') | |||
function p.format(dataset, key, ...) | |||
local checkType = require('libraryUtil').checkType | |||
checkType('format', 1, dataset, 'string') | checkType('format', 1, dataset, 'string') | ||
checkType('format', 2, key, 'string') | checkType('format', 2, key, 'string') | ||
return formatMessage(dataset, key, {...}) | |||
return formatMessage(dataset, key, | |||
end | end | ||
-- | |||
-- "Sandbox/Sample.tab" -> ' | -- Identical to p.msg() above, but used from other lua modules with the language param | ||
-- Parameters: language code, name of dataset, message key, optional arguments | |||
-- Example with 2 params: formatInLanguage('es', I18n/Module:TNT', 'error_bad_msgkey', 'my-key', 'my-dataset') | |||
function p.formatInLanguage(lang, dataset, key, ...) | |||
local checkType = require('libraryUtil').checkType | |||
checkType('formatInLanguage', 1, lang, 'string') | |||
checkType('formatInLanguage', 2, dataset, 'string') | |||
checkType('formatInLanguage', 3, key, 'string') | |||
return formatMessage(dataset, key, {...}, lang) | |||
end | |||
-- Obsolete function that adds a 'c:' prefix to the first param. | |||
-- "Sandbox/Sample.tab" -> 'c:Data:Sandbox/Sample.tab' | |||
function p.link(frame) | function p.link(frame) | ||
return link(frame.args[1]) | return link(frame.args[1]) | ||
Line 75: | Line 87: | ||
function p.doc(frame) | function p.doc(frame) | ||
return frame:extensionTag( | local dataset = 'Templatedata/' .. sanitizeDataset(frame.args[1]) | ||
return frame:extensionTag('templatedata', p.getTemplateData(dataset)) .. | |||
formatMessage(i18nDataset, 'edit_doc', {link(dataset)}) | |||
end | end | ||
function p.getTemplateData( | function p.getTemplateData(dataset) | ||
-- 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) | ||
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 | ||
Line 92: | Line 102: | ||
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 | ||
if columnName == 'name' then | if columnName == 'name' then | ||
name = | name = row[pos] | ||
else | else | ||
newVal[columnName] = | newVal[columnName] = row[pos] | ||
end | end | ||
end | end | ||
Line 124: | Line 133: | ||
-- Local functions | -- Local functions | ||
sanitizeDataset = function(dataset) | |||
if not dataset then | |||
return nil | |||
end | |||
dataset = mw.text.trim(dataset) | |||
if dataset == '' then | |||
return nil | |||
elseif string.sub(dataset,-4) ~= '.tab' then | |||
return dataset .. '.tab' | |||
else | |||
return dataset | |||
end | |||
end | |||
loadData = function(dataset, lang) | loadData = function(dataset, lang) | ||
if not dataset | dataset = sanitizeDataset(dataset) | ||
if not dataset then | |||
error(formatMessage(i18nDataset, 'error_no_dataset', {})) | error(formatMessage(i18nDataset, 'error_no_dataset', {})) | ||
end | end | ||
if | |||
-- 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 | |||
error('Missing JsonConfig extension; Cannot load https://commons.wikimedia.org/wiki/Data:' .. dataset) | |||
end | end | ||
Line 148: | Line 174: | ||
-- Given a dataset name, convert it to a title with the 'commons:data:' prefix | -- Given a dataset name, convert it to a title with the 'commons:data:' prefix | ||
link = function(dataset) | link = function(dataset) | ||
return 'c:Data:' .. mw.text.trim(dataset or '') | |||
end | end | ||