Модуль:WikidataProxy
Для документации этого модуля может быть создана страница Модуль:WikidataProxy/doc
local p = {}
local function substparam(frame)
local param = {};
local parentargs = frame:getParent().args
if parentargs ~= nil then
for name, value in pairs(parentargs) do
param[name] = value -- copy template parameters
end
for property, parameter in pairs(frame.args) do
local propertyid = mw.ustring.lower(property)
if mw.ustring.find(propertyid, '^p%d+$', 1, false) ~= nil then
-- parse wikidata property proxies
local names = mw.text.split(parameter, ',');
local existname = nil;
local notexistname = nil;
for i, name in ipairs(names) do
local pname = mw.text.trim(name)
local num = tonumber(pname)
if num ~= nil and param[num] ~= nil and param[num] ~= '' then
existname = num; -- passed unnamed parameter
elseif param[pname] ~= nil and param[pname] ~= '' then
existname = pname; -- passed named parameter
elseif num ~= nil then
notexistname = num -- absent unnamed parameter
else
notexistname = pname -- absent named parameter
end
end
if existname == nil and notexistname ~= nil then
-- get absent parameter from wikidata
param[notexistname] = frame:callParserFunction( '#property', propertyid );
end
else
-- parse alternative parameter names
local names = mw.text.split(parameter, ',');
for i, name in ipairs(names) do
local pname = mw.text.trim(name)
if param[name] ~= nil then
-- found alternative name
if param[property] == nil then
param[property] = param[name]; -- set value to default name parameter
end
param[name] = nil; -- remove alternative name
end
end
end
end
end
param['marshaled'] = '1'
return param;
end
function p.infoboxproxy( frame )
local result ='';
local template = frame.args['template'] or ''
if template ~= '' then
result = frame:expandTemplate{ title = template, args = substparam(frame) }
end
return result;
end
return p