Editing Module:TNT

Jump to navigation Jump to search
Warning: You are not logged in. Your IP address will be publicly visible if you make any edits. If you log in or create an account, your edits will be attributed to your username, along with other benefits.

The edit can be undone. Please check the comparison below to verify that this is what you want to do, and then publish the changes below to finish undoing the edit.

Latest revision Your text
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'
-- Forward declaration of the local functions
local sanitizeDataset, loadData, link, formatMessage


function p.msg(frame)
function p.msg(frame)
Line 50: Line 47:
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)
table.insert(params, v)
elseif k == 'lang' and v ~= '_' then
elseif k == 'lang' and v ~= '_' then
lang = mw.text.trim(v)
lang = mw.text.trim(v)
Line 58: Line 55:
end
end


-- Identical to p.msg() above, but used from other lua modules
-- Converts first parameter to a interwiki-ready link. For example, it converts
-- Parameters: name of dataset, message key, optional arguments
-- "Sandbox/Sample.tab" -> 'commons:Data:Sandbox/Sample.tab'
-- Example with 2 params: format('I18n/Module:TNT', 'error_bad_msgkey', 'my-key', 'my-dataset')
function p.link(frame)
function p.format(dataset, key, ...)
return link(frame.args[1])
local checkType = require('libraryUtil').checkType
checkType('format', 1, dataset, 'string')
checkType('format', 2, key, 'string')
return formatMessage(dataset, key, {...})
end
end


 
-- Given a dataset name, convert it to a title with the 'commons:data:' prefix
-- Identical to p.msg() above, but used from other lua modules with the language param
function link(dataset)
-- Parameters: language code, name of dataset, message key, optional arguments
dataset = 'Data:' .. mw.text.trim(dataset or '')
-- Example with 2 params: formatInLanguage('es', I18n/Module:TNT', 'error_bad_msgkey', 'my-key', 'my-dataset')
if mw.site.siteName == 'Wikimedia Commons' then
function p.formatInLanguage(lang, dataset, key, ...)
return dataset
local checkType = require('libraryUtil').checkType
else
checkType('formatInLanguage', 1, lang, 'string')
return 'commons:' .. dataset
checkType('formatInLanguage', 2, dataset, 'string')
end
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)
return link(frame.args[1])
end
end


function p.doc(frame)
function p.doc(frame)
local dataset = 'Templatedata/' .. sanitizeDataset(frame.args[1])
return frame:extensionTag(
return frame:extensionTag('templatedata', p.getTemplateData(dataset)) ..
'templatedata',
  formatMessage(i18nDataset, 'edit_doc', {link(dataset)})
p.getTemplateData(frame.args[1])
) .. tntMessage('edit_doc', {link(dataset)})
end
end


function p.getTemplateData(dataset)
function p.getTemplateData(page)
dataset = 'Templatedata/' .. normalizeDataset(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)
local names = {}
local names = {}
for _, field in ipairs(data.schema.fields) do
for _, field in pairs(data.schema.fields) do
table.insert(names, field.name)
table.insert(names, field.name)
end
end
Line 102: Line 89:
local params = {}
local params = {}
local paramOrder = {}
local paramOrder = {}
for _, row in ipairs(data.data) do
    for _, row in pairs(data.data) do
local newVal = {}
    local newVal = {}
local name = nil
    local name = nil
for pos, columnName in ipairs(names) do
    for pos, val in pairs(row) do
if columnName == 'name' then
    local columnName = names[pos]
name = row[pos]
    if columnName == 'name' then
else
    name = val
newVal[columnName] = row[pos]
    else
end
    newVal[columnName] = val
end
    end
if name then
    end
params[name] = newVal
    if name then
table.insert(paramOrder, name)
    params[name] = newVal
end
    table.insert(paramOrder, name)
end
    end
 
    end
-- Work around json encoding treating {"1":{...}} as an [{...}]
   
params['zzz123']=''
    -- 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 132: Line 120:
end
end


-- Local functions
function formatMessage(dataset, key, params, lang)
 
    for _, row in pairs(loadData(dataset, lang).data) do
sanitizeDataset = function(dataset)
    local id, msg = unpack(row)
if not dataset then
    if id == key then
return nil
    local result = mw.message.newRawMessage(msg, unpack(params))
end
    return result:plain()
dataset = mw.text.trim(dataset)
    end
if dataset == '' then
    end
return nil
if dataset == i18nDataset then
elseif string.sub(dataset,-4) ~= '.tab' then
-- Prevent cyclical calls
return dataset .. '.tab'
error('Invalid message key "' .. key .. '"')
else
else
return dataset
error(tntMessage('error_bad_msgkey', {key, link(dataset)}))
end
end
end
end


loadData = function(dataset, lang)
function tntMessage(key, params)
dataset = sanitizeDataset(dataset)
return formatMessage(i18nDataset, key, params)
if not dataset then
end
error(formatMessage(i18nDataset, 'error_no_dataset', {}))
 
function normalizeDataset(dataset)
if not dataset or dataset == '' then
error(tntMessage('error_no_dataset', {}))
end
end
 
if string.sub(dataset,-4) ~= '.tab' then
-- Give helpful error to thirdparties who try and copy this module.
dataset = dataset .. '.tab'
if not mw.ext or not mw.ext.data or not mw.ext.data.get then
error(string.format([['''Missing JsonConfig extension, or not properly configured;
Cannot load https://commons.wikimedia.org/wiki/Data:%s. Please properly enable the JSONConfig extension at Special:ManageWiki/extensions#mw-prefsection-other
See https://www.mediawiki.org/wiki/Extension:JsonConfig#Supporting_Wikimedia_templates''']], dataset))
end
end
return dataset
end


function loadData(dataset, lang)
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 168: Line 157:
error('Missing Commons dataset ' .. i18nDataset)
error('Missing Commons dataset ' .. i18nDataset)
else
else
error(formatMessage(i18nDataset, 'error_bad_dataset', {link(dataset)}))
error(tntMessage('error_bad_dataset', {link(dataset)}))
end
end
end
end
return data
return data
end
-- Given a dataset name, convert it to a title with the 'commons:data:' prefix
link = function(dataset)
return 'c:Data:' .. mw.text.trim(dataset or '')
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(formatMessage(i18nDataset, 'error_bad_msgkey', {key, link(dataset)}))
end
end
end


return p
return p
Please note that all contributions to Meta Wiki may be edited, altered, or removed by other contributors. If you do not want your writing to be edited mercilessly, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource (see Meta Wiki:Copyrights for details). Do not submit copyrighted work without permission!
Cancel Editing help (opens in new window)

Template used on this page: