<?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%2FVideoGames</id>
	<title>Модуль:Wikidata/VideoGames - История изменений</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%2FVideoGames"/>
	<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/VideoGames&amp;action=history"/>
	<updated>2026-05-05T07:40:26Z</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/VideoGames&amp;diff=238453&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/VideoGames&amp;diff=238453&amp;oldid=prev"/>
		<updated>2025-07-27T15:36:41Z</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;tr class=&quot;diff-title&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Предыдущая версия&lt;/td&gt;
				&lt;td colspan=&quot;1&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;2&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;/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/VideoGames&amp;diff=238452&amp;oldid=prev</id>
		<title>Буквица&gt;Q-bit array: Защитил страницу Модуль:Wikidata/VideoGames: критический шаблон или модуль ([Редактирование=администраторы и инженеры] (бессрочно) [Переименование=администраторы и инженеры] (бессрочно))</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/VideoGames&amp;diff=238452&amp;oldid=prev"/>
		<updated>2024-06-24T03:10:12Z</updated>

		<summary type="html">&lt;p&gt;Защитил страницу &lt;a href=&quot;/wiki/%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Wikidata/VideoGames&quot; title=&quot;Модуль:Wikidata/VideoGames&quot;&gt;Модуль:Wikidata/VideoGames&lt;/a&gt;: &lt;a href=&quot;/w/index.php?title=%D0%92%D0%9F:%D0%9A%D0%A8&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;ВП:КШ (страница не существует)&quot;&gt;критический шаблон или модуль&lt;/a&gt; ([Редактирование=администраторы и инженеры] (бессрочно) [Переименование=администраторы и инженеры] (бессрочно))&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local mwlang = mw.getLanguage( &amp;#039;ru&amp;#039; )&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
local platform_aliases = {&lt;br /&gt;
	Q1406 = &amp;#039;Windows&amp;#039;,&lt;br /&gt;
	Q172742 = &amp;#039;NES&amp;#039;,&lt;br /&gt;
	Q183259 = &amp;#039;SNES&amp;#039;,&lt;br /&gt;
	Q13522376 = &amp;#039;Mac OS&amp;#039;,&lt;br /&gt;
	Q174666 = &amp;#039;&amp;#039;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-- Форматирует подгруженную с Викиданных дату в зависимости от её точности.&lt;br /&gt;
-- Возвращает строку или Nil.&lt;br /&gt;
local function formatDate( value )&lt;br /&gt;
	-- We can&amp;#039;t just use value.time to format the date because the&lt;br /&gt;
	-- high-precision part would affect the result. E. g.:&lt;br /&gt;
	--     formatDate( &amp;#039;F Y&amp;#039;, &amp;#039;+1997-09-01T00:00:00Z&amp;#039; ) -&amp;gt; &amp;#039;September 1997&amp;#039;&lt;br /&gt;
	--     formatDate( &amp;#039;F Y&amp;#039;, &amp;#039;+1997-09-00T00:00:00Z&amp;#039; ) -&amp;gt; &amp;#039;August 1997&amp;#039;&lt;br /&gt;
	-- Wikidata (with precision == 10) consider both of these to be September&lt;br /&gt;
	-- though, and can store either of these without additional normalization.&lt;br /&gt;
&lt;br /&gt;
	local Y, M, D = mw.ustring.match( value.time, &amp;quot;(%d+)%-(%d+)%-(%d+)T&amp;quot; )&lt;br /&gt;
	local precision = tonumber( value.precision )&lt;br /&gt;
&lt;br /&gt;
	if value.precision &amp;gt;= 11 then&lt;br /&gt;
		return mwlang:formatDate( &amp;#039;j xg Y&amp;#039;, Y .. &amp;#039;-&amp;#039; .. M .. &amp;#039;-&amp;#039; .. D )&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if value.precision == 10 then&lt;br /&gt;
		return mwlang:formatDate( &amp;#039;F Y&amp;#039;, Y .. &amp;#039;-&amp;#039; .. M )&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if value.precision == 9 then&lt;br /&gt;
		return Y&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return nil&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Достаёт из квалификаторов к утверждению на Викиданных список платформ.&lt;br /&gt;
-- Возвращает строку.&lt;br /&gt;
local function getPlatforms( statement )&lt;br /&gt;
	if not statement.qualifiers or not statement.qualifiers.P400 then&lt;br /&gt;
		-- no &amp;#039;platform&amp;#039; qualifiers&lt;br /&gt;
		return &amp;#039;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local platforms = {}&lt;br /&gt;
&lt;br /&gt;
	for _, qualifier in ipairs( statement.qualifiers.P400 ) do&lt;br /&gt;
		if qualifier.datavalue then&lt;br /&gt;
			local label&lt;br /&gt;
			if platform_aliases[qualifier.datavalue.value.id] then&lt;br /&gt;
				label = platform_aliases[qualifier.datavalue.value.id]&lt;br /&gt;
			else&lt;br /&gt;
				label = mw.wikibase.getLabel( qualifier.datavalue.value.id )&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
			if label ~= &amp;#039;&amp;#039; then&lt;br /&gt;
				table.insert( platforms, label )&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	table.sort( platforms )&lt;br /&gt;
&lt;br /&gt;
	return table.concat( platforms, &amp;#039;, &amp;#039; )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Определяет по квалификаторам к утверждению на Викиданных, относится ли&lt;br /&gt;
-- данное утверждение к раннему доступу.&lt;br /&gt;
local function isEarlyAccess( statement )&lt;br /&gt;
	if not statement.qualifiers or not statement.qualifiers.P3831 then&lt;br /&gt;
		-- no &amp;#039;object has role&amp;#039; qualifiers&lt;br /&gt;
		return false&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	for _, qualifier in ipairs( statement.qualifiers.P3831 ) do&lt;br /&gt;
		if qualifier.datavalue and qualifier.datavalue.value.id == &amp;#039;Q17042291&amp;#039; then&lt;br /&gt;
			-- object has role == early access&lt;br /&gt;
			return true&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;
-- Рендерит один блок (заголовок-платформа со списком дат), возвращает строку.&lt;br /&gt;
local function renderBlock( header, rows )&lt;br /&gt;
	local result&lt;br /&gt;
	local listtype&lt;br /&gt;
&lt;br /&gt;
	if header == &amp;#039;&amp;#039; then&lt;br /&gt;
		result = &amp;#039;&amp;#039;&lt;br /&gt;
		listtype = &amp;#039;* &amp;#039;&lt;br /&gt;
	else&lt;br /&gt;
		result = &amp;#039;; &amp;#039; .. header .. &amp;#039;\n&amp;#039;&lt;br /&gt;
		listtype = &amp;#039;: &amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	for _, data in ipairs(rows) do&lt;br /&gt;
		result = result .. listtype .. data[2] .. &amp;#039;\n&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Используется для сортировки массива из массивов, в качестве ключа сортировки&lt;br /&gt;
-- берётся первый элемент.&lt;br /&gt;
local function comparer( a, b )&lt;br /&gt;
	return a[1] &amp;lt; b[1]&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Форматирует дату выпуска (P577) с разбивкой по платформам и указанием раннего&lt;br /&gt;
-- доступа.&lt;br /&gt;
function p.formatReleaseDate( context, options )&lt;br /&gt;
	local entity = context.entity&lt;br /&gt;
&lt;br /&gt;
	if not entity or not entity.claims.P577 then&lt;br /&gt;
		return &amp;#039;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Step 1: gather data as a table:&lt;br /&gt;
	-- &amp;#039;platform&amp;#039; → { { &amp;#039;sortkey1&amp;#039;, &amp;#039;datarow1&amp;#039; }, { &amp;#039;sortkey2&amp;#039;, &amp;#039;datarow2&amp;#039; }, ... }&lt;br /&gt;
&lt;br /&gt;
	local data = {}&lt;br /&gt;
	local data_length = 0&lt;br /&gt;
	local release_year = nil&lt;br /&gt;
&lt;br /&gt;
	for _, statement in ipairs( entity.claims.P577 ) do&lt;br /&gt;
		if statement&lt;br /&gt;
			and statement.mainsnak&lt;br /&gt;
			and statement.mainsnak.datavalue&lt;br /&gt;
			and statement.mainsnak.datavalue.type == &amp;#039;time&amp;#039;&lt;br /&gt;
			and statement.rank ~= &amp;#039;deprecated&amp;#039;&lt;br /&gt;
		then&lt;br /&gt;
			local value = statement.mainsnak.datavalue.value&lt;br /&gt;
			local datarow = formatDate( value )&lt;br /&gt;
&lt;br /&gt;
			if datarow then&lt;br /&gt;
				local sortkey = value.time&lt;br /&gt;
				local platforms = getPlatforms( statement )&lt;br /&gt;
&lt;br /&gt;
				datarow = datarow .. context.formatRefs( options, statement )&lt;br /&gt;
				if isEarlyAccess( statement ) then&lt;br /&gt;
					datarow = datarow .. &amp;#039; &amp;lt;small&amp;gt;(ранний доступ)&amp;lt;/small&amp;gt;&amp;#039;&lt;br /&gt;
				else&lt;br /&gt;
					-- extract release year for further categorization&lt;br /&gt;
					local current_year = mw.ustring.match( value.time, &amp;quot;(%d+)%-%d+%-%d+T&amp;quot; )&lt;br /&gt;
					if not release_year or current_year &amp;lt; release_year then&lt;br /&gt;
						release_year = current_year&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
&lt;br /&gt;
				if data[platforms] then&lt;br /&gt;
					table.insert( data[platforms], { sortkey, datarow } )&lt;br /&gt;
				else&lt;br /&gt;
					data[platforms] = { { sortkey, datarow } }&lt;br /&gt;
					data_length = data_length + 1&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Step 2: sort data&lt;br /&gt;
&lt;br /&gt;
	local data_indices = {}&lt;br /&gt;
&lt;br /&gt;
	for platform, datarows in pairs(data) do&lt;br /&gt;
		table.sort( datarows, comparer )&lt;br /&gt;
&lt;br /&gt;
		local sortkey = datarows[1][1] -- earliest release date&lt;br /&gt;
		if platform == &amp;#039;&amp;#039; then&lt;br /&gt;
			-- dates with no platform specified should be rendered first tho&lt;br /&gt;
			sortkey = &amp;#039;&amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
		table.insert( data_indices, { sortkey, platform } )&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	table.sort( data_indices, comparer )&lt;br /&gt;
&lt;br /&gt;
	-- Step 3: render data&lt;br /&gt;
&lt;br /&gt;
	local result = &amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
	for _, index in pairs(data_indices) do&lt;br /&gt;
		local platform = index[2]&lt;br /&gt;
		if data_length == 1 then&lt;br /&gt;
			-- If there&amp;#039;s only one block, no need to render the header&lt;br /&gt;
			result = result .. renderBlock( &amp;#039;&amp;#039;, data[platform] )&lt;br /&gt;
		else&lt;br /&gt;
			result = result .. renderBlock( platform, data[platform] )&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if release_year&lt;br /&gt;
		and mw.title.getCurrentTitle().namespace == 0&lt;br /&gt;
		and not options.nocat&lt;br /&gt;
	then&lt;br /&gt;
		result = result .. &amp;#039;[[Категория:Компьютерные игры &amp;#039; .. release_year .. &amp;#039; года]]&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Буквица&gt;Q-bit array</name></author>
	</entry>
</feed>