Модуль:Wikibase-Source
Модуль, реализующий функционал {{source-ref-p}}.
local p = {}
local getArgs = require('Module:Arguments').getArgs
local Sources = require('Module:Sources')
local function catch (item,property)
local statements = mw.wikibase.getBestStatements(item,property)
return statements
-- mw.log(os.date("*t", unixtime)) statements[1].mainsnak.datavalue.value.time
end
-- =p.Test(mw.getCurrentFrame():newChild{title="Википедия:Песочница Викиданных",args={"Q4115189"}})
-- =p.Test(mw.getCurrentFrame():newChild{title="Зевгма (город)",args={"Q196987"}})
function p.Test ( frame )
local args = getArgs(frame, { removeBlanks = false, frameOnly = true })
catch(args[1])
end
local function formatCentury( time )
if ( time.year < 0 ) then
local century = math.floor( (math.abs( time.year) - 1) / 100 ) + 1;
local infix = ' в ';
if century == 2 then infix = ' во '; end;
return '[[' .. century .. ' век до н. э.]]'
else
local century = math.floor( (time.year - 1) / 100 ) + 1;
local infix = ' в ';
if (century == 2) then infix = ' во ' end;
return '[[' .. century .. ' век]]'
end
end
-- =p.p({["year"]=-299,["month"]=0,["day"]=0})
function p.p (args)
local time = args
date=os.date("*t", os.time(time)-1)
mw.logObject(date)
return formatCentury(date)
end
-- =p.ask(mw.getCurrentFrame():newChild{title="Пшеничников, Юрий Павлович",args={["P"]="P20";["Q"]="Q867387"}})
-- =p.ask(mw.getCurrentFrame():newChild{title="Пшеничников, Юрий Павлович",args={"P20","Q867387"}})
function p.ask (frame)
local args = getArgs(frame, { removeBlanks = false, frameOnly = true })
local pframe = frame:getParent() -- неясно, нужна ли проверка, вызывается ли из основного пространства
if not (args[1] or args["P"]) then error('Должно быть задано свойство') end
local property = args["P"] or args[1]
-- local item = args[2] or args["Q"] or -- возвращает nil
local item = (args["Q"] and args["Q"] > "") and args["Q"] or
((args[2] and args[2] > "") and args[2] or (mw.wikibase.getEntityIdForCurrentPage() or mw.wikibase.getEntityIdForTitle( pframe:getTitle() )))
-- спорное решение, берёт по умолчанию первое значение свойства
local item_num = (args["I"] and args["I"] > "") and args["I"] or
((args[3] and args[3] > "") and args[3] or 1)
-- спорное решение, берёт по умолчанию первое подтверждение значения
local ref_num = (args["R"] and args["R"] > "") and args["R"] or
((args[4] and args[4] > "") and args[4] or 1)
item_num = tonumber(item_num)
ref_num = tonumber(ref_num)
if not item then error("Не получилось опознать объект") end
local entity = catch(item,property)
if type(entity) ~= "table" then error("Не получилось загрузить данные для " .. item .. ", ".. property) end
if not entity[item_num] then error("Не получилось загрузить данные для " .. item .. ", ".. property .. " номер " .. item_num) end
if not entity[item_num].references then
error("Свойство " .. property .. " номер " .. item_num .. " объекта " .. item .. " не имеет источников") end
if not entity[item_num].references[ref_num] then
error("Свойство " .. property .. " номер " .. item_num .. " объекта " .. item .. " не имеет источника номер " .. ref_num) end
return Sources.renderReference(pframe,item,entity[item_num].references[ref_num])
end
return p