Modul:Wikidata/item
Vində tispir
Documentation for this module may be created at Modul:Wikidata/item/doc
local WDS = require( 'Module:WikidataSelectors' );
local p = {};
local categoryLinksToEntitiesWithMissingLabel = '';
local function getGenderLabelForEntityId( entityId, isFemale )
if not isFemale then
return mw.wikibase.getLabelByLang( entityId, 'tly' )
end
local entity = mw.wikibase.getEntity( entityId );
if not entity.claims or not entity.claims.P2521 then
return entity:getLabel();
end
local femLabels = WDS.filterByLanguage( WDS.filterByRank( entity.claims.P2521, 'deprecated', true ), 'az' );
if femLabels ~= nil and
femLabels[1] and
femLabels[1].mainsnak and
femLabels[1].mainsnak.datavalue and
femLabels[1].mainsnak.datavalue.value and
femLabels[1].mainsnak.datavalue.value.text then
return femLabels[1].mainsnak.datavalue.value.text;
end
return entity:getLabel();
end
local function formatOccupationLinkForEntityId( entityId, isFemale )
local label = getGenderLabelForEntityId( entityId, isFemale );
-- first try to link to occupation article
local link = mw.wikibase.sitelink( entityId )
if link and not label then
label = link
end
-- if we don't have article for occupation, try to link to field of occupation
if not link then
local fooEntity = mw.wikibase.getEntity( entityId );
if fooEntity and fooEntity.claims and fooEntity.claims.P425 then
fooEntity = WDS.filterByRank( fooEntity.claims.P425, 'deprecated', true );
if fooEntity ~= nil and
fooEntity[1] and
fooEntity[1].mainsnak and
fooEntity[1].mainsnak.datavalue and
fooEntity[1].mainsnak.datavalue.value and
fooEntity[1].mainsnak.datavalue.value.id then
link = mw.wikibase.sitelink( fooEntity[1].mainsnak.datavalue.value.id );
end
end
end
-- no article about occupation or field, link to wikidata
if label and not link then
return '<span class="plainlinks">' .. label .. '</span><sup>[[:d:' .. entityId .. '|[d]]]</sup>'
end
if label and link then
return '[[' .. link .. '|' .. label .. ']]'
end
if not link and not label then
return nil
end
end
function p.formatEntityWithGenderClaim( context, options, statement )
if ( not context ) then error( 'context not specified'); end;
if ( not options ) then error( 'options not specified'); end;
if ( not options.entity ) then error( 'options.entity is missing'); end;
if ( not statement ) then error( 'statement not specified'); end;
local isFemale = options.entity.claims.P21 and
options.entity.claims.P21[1] and
options.entity.claims.P21[1].mainsnak and
options.entity.claims.P21[1].mainsnak.datavalue and
options.entity.claims.P21[1].mainsnak.datavalue.value and
options.entity.claims.P21[1].mainsnak.datavalue.value.id == 'Q6581072'
local snak = statement.mainsnak;
if snak and snak.datavalue and snak.datavalue.value and snak.datavalue.value.id then
local entityId = snak.datavalue.value.id;
return formatOccupationLinkForEntityId( entityId, isFemale );
end
return context.formatSnak( options, snak )
end
function p.applyDefaultTemplate( context, options, statement )
local snak = context.formatSnak( options, statement.mainsnak )
if ( statement.qualifiers and statement.qualifiers.P249 and statement.qualifiers.P249[1].snaktype == 'value') then
entityId = statement.mainsnak.datavalue.value.id
wbStatus, entity = pcall( mw.wikibase.getEntity, entityId );
if ( entity.claims and entity.claims.P1424 ) then
wbStatus, template = pcall( mw.wikibase.getEntity,
entity.claims.P1424[1].mainsnak.datavalue.value.id )
snak = g_frame:preprocess( string.gsub( template:getSitelink( ), 'Şablon:', '{{' )
.. '|' .. statement.qualifiers.P249[1].datavalue.value .. '}}' )
else
return nil
end
end
--References
if ( options.references and snak ) then
snak = snak .. context.formatRefs( options, statement );
end
return snak
end
function p.formatCategoryOnly( context, options, value )
return context.extractCategory( options, value )
end
return p