Модуль:Sources-year
Для документации этого модуля может быть создана страница Модуль:Sources-year/doc
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;