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.label( entityId );
	local entity = mw.wikibase.getEntity( entityId );
	if not['P2521'] then return entity:getLabel(); end
	local femLabels = WDS.filterByLanguage( WDS.filterByRank(, 'deprecated', true ), 'crh' );
	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;

	return entity:getLabel();
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
    -- 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 and then
		    fooEntity = WDS.filterByRank(, '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["numeric-id"] then
				link = mw.wikibase.sitelink( 'Q' .. fooEntity[1].mainsnak.datavalue.value["numeric-id"] );

	-- no article about occupation or field, link to wikidata
    if not link then
	    link = ':d:' .. entityId

    if label then
        return '[[' .. link .. '|' .. label .. ']]'
    -- сообщение об отсутвии локализованного названия
    -- not good, but better than nothing
    return '[[' .. link .. '|' .. entityId .. ']]<span style="border-bottom: 1px dotted; cursor: help; white-space: nowrap" title="В Викиданных нет русской подписи к элементу. Вы можете помочь, указав русский вариант подписи.">?</span>' .. categoryLinksToEntitiesWithMissingLabel;

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 =['P21'] and 
	       ['P21'][1] and
	       ['P21'][1].mainsnak and
	       ['P21'][1].mainsnak.datavalue and
	       ['P21'][1].mainsnak.datavalue.value and
	       ['P21'][1].mainsnak.datavalue.value["numeric-id"] == 6581072

	local snak = statement.mainsnak;
	if snak and snak.datavalue and snak.datavalue.value and snak.datavalue.value['numeric-id'] then
		local entityId = 'Q' .. snak.datavalue.value['numeric-id'];
		return formatOccupationLinkForEntityId( entityId, isFemale );
	return context.formatSnak( options, snak )
return p