Перейти к содержанию

Модуль: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