Interested Article - WikidataProxy
marybeth
- 2021-08-06
- 1
Этот модуль является посредником шаблонов. Он подменяет названия параметров или значения параметров свойствами Викиданных, если параметр не задан.
Функции
infoboxproxy
Функция подстановки параметров шаблона
- Использование
-
{{#invoke:WikidataProxy|infoboxproxy|template= полный путь к шаблону | свойство = параметр }}
Например:
{{#invoke:WikidataProxy|infoboxproxy |template=Шаблон:Персона |p18=изображение }}
-
{{#invoke:WikidataProxy|infoboxproxy|template= полный путь к шаблону | параметр = альтернативное название, другое альтернативное название }}
Например:
{{#invoke:WikidataProxy|infoboxproxy |template=Шаблон:Персона |изображение=image, Изображение }}
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
marybeth
- 2021-08-06
- 1