Модуль:Sources-year

Поделись знанием:
Перейти к: навигация, поиск
 Документация

Возвращает год источника для включения в виде параметра шаблона {{Source}} в гаджетах вставки источника (см. MediaWiki:Gadget-wefsources.js)

Тесты [ править ]

2 tests failed.

test_Sources:

Text Expected Actual
N {{#invoke:Sources-year | renderSourceYear | Q21725116}} 1996
N {{#invoke:Sources-year | renderSourceYear | Q27056247}} 2009
{{#invoke:Sources-year | renderSourceYear | Q27076977}}



Во избежание поломок страниц, использующих данный модуль, желательно экспериментировать в Песочнице для модулей.

local p = {};
local u = require('Module:Sources-utils')

function p.renderSourceYear( frame )
	p.currentFrame = frame;
	return p.renderSourceYearImpl( mw.text.trim( frame.args[1] ) );
end

function p.renderSourceYearImpl( entityId )
	local snaks = {};
	snaks.P248 = { toWikibaseEntityIdSnak( 'P248', entityId ) };

	local rendered = renderSourceRefYear_1( mw.wikibase.getEntity(), { snaks = snaks } );
	if ( rendered ) then return rendered.text end;
end

function renderSourceRefYear_1( currentEntity, reference )
	if ( not reference.snaks ) then return nil; end

	-- контекст, содержит также кеш элементов
	local context = {
		cache = {},
	}

	-- данные в простом формате, согласованном с модулями формирования библиографического описания
	local data = {};

    -- забрать данные из reference
    populateDataFromClaims( context, nil, reference.snaks, data )
	expandSpecials( context, currentEntity, reference, data );

	local sourceEntity = nil;
	if ( data.sourceId ) then
		sourceEntity = getEntity( context, data.sourceId );
		if ( sourceEntity ) then
			populateSourceDataImpl( context, sourceEntity, data );
		end
	end

	if ( data.publication ) then
		expandPublication( context, sourceEntity, data );
	end

	expandBookSeries( context, data );

	if ( next( data ) == nil ) then
		return nil;
	end

	local rendered = renderSourceRefYear_2( context, data );
	if ( mw.ustring.len( rendered.text ) == 0 ) then
		return nil;
	end

	return rendered;
end

local options_commas = { separator = ', ', conjunction = ', ', format = function( src ) return src end, nolinks = true, preferids = false };

function renderSourceRefYear_2( context, src )
	if ( not src.year and src.dateOfPublication ) then
		local date = getSingle( src.dateOfPublication );
		src.year = mw.ustring.sub( date, 2, 5 );
	end

	if ( not src.year and src.dateOfCreation ) then
		local date = getSingle( src.dateOfCreation );
		src.year = mw.ustring.sub( date, 2, 5 );
	end

	local result = '';
	if ( src.year ) then
		result = toString( context, src.year, options_commas );
	end

	return {text = result, code = src.code};
end

return p;