<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://bukvica.org/w/index.php?action=history&amp;feed=atom&amp;title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C%3AWikidata%2FSport</id>
	<title>Модуль:Wikidata/Sport - История изменений</title>
	<link rel="self" type="application/atom+xml" href="https://bukvica.org/w/index.php?action=history&amp;feed=atom&amp;title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C%3AWikidata%2FSport"/>
	<link rel="alternate" type="text/html" href="https://bukvica.org/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Wikidata/Sport&amp;action=history"/>
	<updated>2026-04-24T07:29:46Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://bukvica.org/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Wikidata/Sport&amp;diff=238427&amp;oldid=prev</id>
		<title>Karaby: 1 версия импортирована</title>
		<link rel="alternate" type="text/html" href="https://bukvica.org/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Wikidata/Sport&amp;diff=238427&amp;oldid=prev"/>
		<updated>2025-07-27T15:36:33Z</updated>

		<summary type="html">&lt;p&gt;1 версия импортирована&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Предыдущая версия&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Версия от 15:36, 27 июля 2025&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;4&quot; class=&quot;diff-notice&quot; lang=&quot;ru&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(нет различий)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;!-- diff cache key wiki:diff:1.41:old-238426:rev-238427 --&gt;
&lt;/table&gt;</summary>
		<author><name>Karaby</name></author>
	</entry>
	<entry>
		<id>https://bukvica.org/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Wikidata/Sport&amp;diff=238426&amp;oldid=prev</id>
		<title>Буквица&gt;Putnik: различные исправления</title>
		<link rel="alternate" type="text/html" href="https://bukvica.org/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Wikidata/Sport&amp;diff=238426&amp;oldid=prev"/>
		<updated>2020-04-29T17:48:31Z</updated>

		<summary type="html">&lt;p&gt;различные исправления&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local Flags = require( &amp;#039;Module:Wikidata/Flags&amp;#039; )&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
-- Get string with dates from qualifiers table&lt;br /&gt;
local function datesFromQualifier( context, options, qualifierId )&lt;br /&gt;
	local qualifiers = options.qualifiers[ qualifierId ]&lt;br /&gt;
&lt;br /&gt;
	if qualifiers then&lt;br /&gt;
		for _, qualifier in pairs( qualifiers ) do&lt;br /&gt;
			if qualifier.datatype == &amp;#039;time&amp;#039; then&lt;br /&gt;
				if qualifier.snaktype == &amp;#039;value&amp;#039; then&lt;br /&gt;
					local year = tonumber( string.sub( qualifier.datavalue.value.time, 1, 5 ) )&lt;br /&gt;
					if year then&lt;br /&gt;
						return year&lt;br /&gt;
					end&lt;br /&gt;
				elseif qualifier.snaktype == &amp;#039;novalue&amp;#039; then&lt;br /&gt;
					return options.frame:expandTemplate{ title = &amp;#039;Н. в.&amp;#039; }&lt;br /&gt;
				elseif qualifier.snaktype == &amp;#039;somevalue&amp;#039; then&lt;br /&gt;
					return &amp;#039;?&amp;#039;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return &amp;#039;&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Get string with dates from statement&lt;br /&gt;
local function datesFromStatement( context, options )&lt;br /&gt;
	local dates = &amp;#039;&amp;#039;&lt;br /&gt;
	if options.qualifiers then&lt;br /&gt;
		local startDates = {}&lt;br /&gt;
		dates = datesFromQualifier( context, options, &amp;#039;P580&amp;#039; )&lt;br /&gt;
		if dates ~= &amp;#039;&amp;#039; then&lt;br /&gt;
			local endDates = datesFromQualifier( context, options, &amp;#039;P582&amp;#039; )&lt;br /&gt;
			if endDates and endDates ~= &amp;#039;&amp;#039; and endDates ~= dates then&lt;br /&gt;
				dates = dates .. &amp;#039;—&amp;#039; .. endDates&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			dates = datesFromQualifier( context, options, &amp;#039;P585&amp;#039; )&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return dates&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Get string with score from qualifiers table&lt;br /&gt;
local function scoreFromQualifier( context, options, qualifierId )&lt;br /&gt;
	local scores = {}&lt;br /&gt;
	local qualifiers = options.qualifiers[ qualifierId ]&lt;br /&gt;
&lt;br /&gt;
	if qualifiers then&lt;br /&gt;
		for _, qualifier in pairs( qualifiers ) do&lt;br /&gt;
			if qualifier.datavalue then&lt;br /&gt;
				table.insert( scores, tonumber( qualifier.datavalue.value.amount ) )&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return table.concat( scores, &amp;#039;, &amp;#039; )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Get string with score from statement&lt;br /&gt;
local function scoreFromStatement( context, options )&lt;br /&gt;
	local score = &amp;#039;&amp;#039;&lt;br /&gt;
	if options.qualifiers then&lt;br /&gt;
		score = scoreFromQualifier( context, options, &amp;#039;P1350&amp;#039; )&lt;br /&gt;
		local goalScore = scoreFromQualifier( context, options, &amp;#039;P1351&amp;#039; )&lt;br /&gt;
		if goalScore ~= &amp;#039;&amp;#039; then&lt;br /&gt;
			score = score .. &amp;#039; (&amp;#039; .. goalScore .. &amp;#039;)&amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return score&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Get string with score from qualifiers table&lt;br /&gt;
local function isLoan( context, options )&lt;br /&gt;
	if options.qualifiers and options.qualifiers.P1642 then&lt;br /&gt;
		for _, qualifier in pairs( options.qualifiers.P1642 ) do&lt;br /&gt;
			if qualifier.datavalue and qualifier.datavalue.value.id == &amp;#039;Q2914547&amp;#039; then&lt;br /&gt;
				return true&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function calculateEndDateTimestamp( context, options, statement )&lt;br /&gt;
	if not context then error( &amp;#039;context not specified&amp;#039; ) end;&lt;br /&gt;
	if not options then error( &amp;#039;options not specified&amp;#039; ) end;&lt;br /&gt;
	if not options.entity then error( &amp;#039;options.entity missing&amp;#039; ) end;&lt;br /&gt;
	if not statement then error( &amp;#039;statement not specified&amp;#039; ) end;&lt;br /&gt;
&lt;br /&gt;
	if statement.qualifiers and statement.qualifiers.P582 then&lt;br /&gt;
		for i, qualifier in ipairs( statement.qualifiers.P582 ) do&lt;br /&gt;
			local parsedTime = context.parseTimeFromSnak( qualifier );&lt;br /&gt;
			if parsedTime then&lt;br /&gt;
				return parsedTime;&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- check death day... do we have it at all?&lt;br /&gt;
	for h, propertyId in pairs( { &amp;quot;P570&amp;quot;, &amp;quot;P577&amp;quot;, &amp;quot;P576&amp;quot; } ) do&lt;br /&gt;
		local dateClaims = context.selectClaims( options, propertyId );&lt;br /&gt;
		if dateClaims then&lt;br /&gt;
			for i, statement in ipairs( dateClaims ) do&lt;br /&gt;
				local parsedTime = context.parseTimeFromSnak( statement.mainsnak );&lt;br /&gt;
				if parsedTime then&lt;br /&gt;
					return parsedTime;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- TODO: check other &amp;quot;end&amp;quot; properties&lt;br /&gt;
&lt;br /&gt;
	-- no death day&lt;br /&gt;
	return os.time() * 1000;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getClub( context, options, claim )&lt;br /&gt;
	local entityId = claim.mainsnak.datavalue.value.id&lt;br /&gt;
	local club = context.formatStatement( options, claim )&lt;br /&gt;
	&lt;br /&gt;
	local countryClaims = mw.wikibase.getBestStatements( entityId, &amp;#039;P17&amp;#039; )&lt;br /&gt;
	for _, countryClaim in ipairs( countryClaims ) do&lt;br /&gt;
		local countryEntityId = countryClaim.mainsnak.datavalue.value.id&lt;br /&gt;
		local endDateTimestamp = calculateEndDateTimestamp( context, options, claim )&lt;br /&gt;
		local flag = Flags.getFlag( context, countryEntityId, endDateTimestamp )&lt;br /&gt;
		if flag and flag ~= &amp;#039;&amp;#039; then&lt;br /&gt;
			club = flag .. &amp;#039;&amp;amp;nbsp;&amp;#039; .. club&lt;br /&gt;
			break&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if isLoan( context, options ) then&lt;br /&gt;
		club = options.frame:expandTemplate{ title = &amp;#039;Аренда&amp;#039; } .. club&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return &amp;#039;&amp;lt;span class=&amp;quot;wikidata-claim&amp;quot; data-wikidata-property-id=&amp;quot;&amp;#039; .. string.upper( options.property ) .. &amp;#039;&amp;quot; data-wikidata-claim-id=&amp;quot;&amp;#039; .. claim.id .. &amp;#039;&amp;quot;&amp;gt;&amp;#039; .. club .. &amp;#039;&amp;lt;/span&amp;gt;&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--Property function for [[d:Property:P54]]&lt;br /&gt;
function p.formatProperty( context, options )&lt;br /&gt;
	if ( not context ) then error( &amp;#039;context not specified&amp;#039; ); end;&lt;br /&gt;
	if ( not options ) then error( &amp;#039;options not specified&amp;#039; ); end;&lt;br /&gt;
	if ( not options.entity ) then error( &amp;#039;options.entity missing&amp;#039; ); end;&lt;br /&gt;
&lt;br /&gt;
	local claims;&lt;br /&gt;
	if options.property then -- TODO: Почему тут может не быть property?&lt;br /&gt;
		claims = context.selectClaims( options, options.property .. &amp;#039;[rank:preferred, rank:normal]&amp;#039; );&lt;br /&gt;
	end&lt;br /&gt;
	if claims == nil then&lt;br /&gt;
		return &amp;#039;&amp;#039; --TODO error?&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Обход всех заявлений утверждения и с накоплением оформленых&lt;br /&gt;
	-- предпочтительных заявлений в таблице.&lt;br /&gt;
	local rows = {}&lt;br /&gt;
	for i, claim in ipairs( claims ) do&lt;br /&gt;
		if ( claim.mainsnak and&lt;br /&gt;
			claim.mainsnak and&lt;br /&gt;
			claim.mainsnak.datavalue and&lt;br /&gt;
			claim.mainsnak.datavalue.type == &amp;#039;wikibase-entityid&amp;#039;&lt;br /&gt;
		) then&lt;br /&gt;
			local dates = datesFromStatement( context, options )&lt;br /&gt;
			local club = getClub( context, options, claim )&lt;br /&gt;
			local score = scoreFromStatement( context, options )&lt;br /&gt;
			table.insert( rows, {&lt;br /&gt;
				dates = dates,&lt;br /&gt;
				fields = { dates, club, score },&lt;br /&gt;
			} )&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Склейка строк списка в итоговый шаблон спортивной карьеры&lt;br /&gt;
	local fields = {}&lt;br /&gt;
	for i, row in ipairs( rows ) do&lt;br /&gt;
		for i, field in ipairs( row.fields ) do&lt;br /&gt;
			table.insert( fields, field )&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return options.frame:expandTemplate{ title = &amp;#039;Спортивная карьера&amp;#039;, args = fields }&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Буквица&gt;Putnik</name></author>
	</entry>
</feed>