<?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%2Fnumber</id>
	<title>Модуль:Wikidata/number - История изменений</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%2Fnumber"/>
	<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/number&amp;action=history"/>
	<updated>2026-04-21T15:28:30Z</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/number&amp;diff=238351&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/number&amp;diff=238351&amp;oldid=prev"/>
		<updated>2025-07-27T15:36:10Z</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-238350:rev-238351 --&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/number&amp;diff=238350&amp;oldid=prev</id>
		<title>Буквица&gt;Putnik: для очень старых дат timestamp меньше 0, и это ломало логику</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/number&amp;diff=238350&amp;oldid=prev"/>
		<updated>2022-01-11T01:52:22Z</updated>

		<summary type="html">&lt;p&gt;для очень старых дат timestamp меньше 0, и это ломало логику&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local p = {}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function p.formatVisualMagnitude ( 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;
	&lt;br /&gt;
	min = context.selectClaims( options, &amp;#039;P1215[P1227:Q76596947][rank:normal,rank:preferred]&amp;#039; )&lt;br /&gt;
	max = context.selectClaims( options, &amp;#039;P1215[P1227:Q76596417][rank:normal,rank:preferred]&amp;#039; )&lt;br /&gt;
	if ( not min or not max) then -- показываем как обычно&lt;br /&gt;
		return context.formatPropertyDefault( context, options )&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- показываем Vmin-Vmax для переменной звезды&lt;br /&gt;
	local lang = mw.language.getContentLanguage();&lt;br /&gt;
	for _, claim1 in ipairs(min) do&lt;br /&gt;
		for _, claim2 in ipairs(max) do&lt;br /&gt;
			return	lang:formatNum(tonumber(claim1.mainsnak.datavalue.value.amount))&lt;br /&gt;
					.. &amp;#039; − &amp;#039; .. &lt;br /&gt;
					lang:formatNum(tonumber(claim2.mainsnak.datavalue.value.amount)) &lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.formatColorIndex( 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;
	&lt;br /&gt;
	if ( options.property ) then &lt;br /&gt;
		-- Пролучаем все claims независимо от ранга&lt;br /&gt;
		claims = context.selectClaims( options, options.property .. &amp;#039;[rank:normal,rank:preferred]&amp;#039; );&lt;br /&gt;
	end&lt;br /&gt;
	if ( claims ) then&lt;br /&gt;
		return context.formatPropertyDefault( context, options )&lt;br /&gt;
	end&lt;br /&gt;
	-- Вычисляем B-V либо U-B из P1215&lt;br /&gt;
	b = context.selectClaims( options, &amp;#039;P1215[P1227:Q6746395][rank:normal,rank:preferred]&amp;#039; )&lt;br /&gt;
	if ( not b ) then return end&lt;br /&gt;
	if string.find( options.property, &amp;#039;Q17773035&amp;#039; ) then&lt;br /&gt;
		m1 = context.selectClaims( options, &amp;#039;P1215[P1227:Q15977921][rank:normal,rank:preferred]&amp;#039; )&lt;br /&gt;
		m2 = b&lt;br /&gt;
		if ( not m1 ) then return end&lt;br /&gt;
	else&lt;br /&gt;
		m1 = b&lt;br /&gt;
		m2 = context.selectClaims( options, &amp;#039;P1215[P1227:Q4892529][rank:normal,rank:preferred]&amp;#039; )&lt;br /&gt;
		if ( not m2 ) then return end&lt;br /&gt;
	end&lt;br /&gt;
	for _, claim1 in ipairs(m1) do&lt;br /&gt;
		for _, claim2 in ipairs(m2) do&lt;br /&gt;
			newClaim = { mainsnak = { snaktype = &amp;#039;value&amp;#039;, datavalue = { type = &amp;#039;quantity&amp;#039;, &lt;br /&gt;
				value = { unit = &amp;#039;1&amp;#039;, amount = claim1.mainsnak.datavalue.value.amount - &lt;br /&gt;
				claim2.mainsnak.datavalue.value.amount }}}}&lt;br /&gt;
			return context.formatStatementDefault( context, options, newClaim )&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.formatPropertyWithMostRecentClaimAndIndicator( 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 &lt;br /&gt;
		-- Пролучаем все claims независимо от ранга&lt;br /&gt;
		claims = context.selectClaims( options, options.property .. &amp;#039;[rank:normal,rank:preferred]&amp;#039; );&lt;br /&gt;
	end&lt;br /&gt;
	if claims == nil then&lt;br /&gt;
		return &amp;#039;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Ищем claim с максимальным значением P585 и форматируем его в out&lt;br /&gt;
	local maxTimestamp = nil;&lt;br /&gt;
	local mostRecentClaim;&lt;br /&gt;
	for i, claim in ipairs(claims) do&lt;br /&gt;
		if (claim.qualifiers and claim.qualifiers.P585) then -- обрабатываем только claims с указанным P585&lt;br /&gt;
			local timestamp = context.parseTimeFromSnak( claim.qualifiers.P585[1] );&lt;br /&gt;
			if timestamp ~= nil and ( maxTimestamp == nil or maxTimestamp &amp;lt; timestamp ) then&lt;br /&gt;
				maxTimestamp = timestamp;&lt;br /&gt;
				mostRecentClaim = claim&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if (not mostRecentClaim) then -- нет ни одного claim с указанным P585&lt;br /&gt;
		return context.formatPropertyDefault( context, options )&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local out = context.formatStatement( options, mostRecentClaim )&lt;br /&gt;
	if out ~= &amp;#039;&amp;#039; then&lt;br /&gt;
		-- Ищем claim со значением P585 сразу после максимального и запоминаем его в secondMostRecentValue&lt;br /&gt;
		local secondMostRecentTimestamp = 0;&lt;br /&gt;
		local secondMostRecentValue = 0;&lt;br /&gt;
		for i, claim in ipairs(claims) do&lt;br /&gt;
			if (claim.qualifiers and claim.qualifiers.P585) then -- обрабатываем только claims с указанным P585&lt;br /&gt;
				local timestamp = context.parseTimeFromSnak( claim.qualifiers.P585[1] )&lt;br /&gt;
				if (timestamp ~= nil and secondMostRecentTimestamp &amp;lt; timestamp and maxTimestamp &amp;gt; timestamp) then&lt;br /&gt;
					secondMostRecentTimestamp = timestamp&lt;br /&gt;
					secondMostRecentValue = tonumber( claim.mainsnak.datavalue.value.amount )&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		if (secondMostRecentValue ~= 0) then -- если предыдущее значение нашлось&lt;br /&gt;
			if (secondMostRecentValue &amp;lt; tonumber( mostRecentClaim.mainsnak.datavalue.value.amount )) then&lt;br /&gt;
				out = &amp;#039;&amp;lt;span style=&amp;quot;color: #0c0; font-size: larger;&amp;quot;&amp;gt;▲&amp;lt;/span&amp;gt;&amp;#039; .. out&lt;br /&gt;
			else&lt;br /&gt;
				out = &amp;#039;&amp;lt;span style=&amp;quot;color: red; font-size: larger;&amp;quot;&amp;gt;▼&amp;lt;/span&amp;gt;&amp;#039; .. out&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		if options.before then&lt;br /&gt;
			out = options.before .. out&lt;br /&gt;
		end&lt;br /&gt;
		if options.after then&lt;br /&gt;
			out = out .. options.after&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return out&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.formatQuantityWithDateClaim( context, options, statement )&lt;br /&gt;
	local snak = context.formatSnak( options, statement.mainsnak )&lt;br /&gt;
	if not snak then return &amp;#039;&amp;#039; end&lt;br /&gt;
&lt;br /&gt;
    --Date&lt;br /&gt;
    if ( statement.qualifiers and statement.qualifiers.P585 ) then&lt;br /&gt;
        snak = snak .. &amp;#039; (&amp;#039; .. context.formatSnak( options, statement.qualifiers.P585[1] ) .. &amp;#039;)&amp;#039;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
	--References&lt;br /&gt;
	if ( options.references ) then&lt;br /&gt;
    	snak = snak .. context.formatRefs( options, statement );&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return snak&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.formatDMS( context, options, value )&lt;br /&gt;
	if not value.amount then return value end&lt;br /&gt;
	if options and options.unit == &amp;#039;-&amp;#039; then return value.amount end&lt;br /&gt;
	local prefix = &amp;quot;+&amp;quot;&lt;br /&gt;
	if tonumber( value.amount ) &amp;lt; 0 then&lt;br /&gt;
		prefix = &amp;quot;−&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	return p.formatAngle ( math.abs( tonumber( value.amount ) ), &lt;br /&gt;
		string.len( value.amount ) - string.find( value.amount, &amp;#039;.&amp;#039;, 1, true ) - 5,&lt;br /&gt;
		prefix .. &amp;quot;%s° %02d′ %s″&amp;quot;)&lt;br /&gt;
end &lt;br /&gt;
&lt;br /&gt;
function p.formatRA( context, options, value )&lt;br /&gt;
	if not value.amount then return value end&lt;br /&gt;
	if options and options.unit == &amp;#039;-&amp;#039; then return value.amount end&lt;br /&gt;
	return p.formatAngle (tonumber( value.amount ) / 15, &lt;br /&gt;
		string.len( value.amount ) - string.find( value.amount, &amp;#039;.&amp;#039;, 1, true ) - 4,&lt;br /&gt;
		&amp;quot;%s&amp;lt;sup&amp;gt;ч&amp;lt;/sup&amp;gt; %02d&amp;lt;sup&amp;gt;м&amp;lt;/sup&amp;gt; %s&amp;lt;sup&amp;gt;с&amp;lt;/sup&amp;gt;&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.formatAngle ( angle, sig, format )&lt;br /&gt;
	local d, angle = math.modf( angle )&lt;br /&gt;
	local m, angle = math.modf( angle * 60 )&lt;br /&gt;
	local mult = 10 ^ sig;&lt;br /&gt;
	local s = math.floor( angle * 60 * mult + 0.5 ) / mult;	&lt;br /&gt;
	local lang = mw.language.getContentLanguage();&lt;br /&gt;
	return string.format( format, d, m, lang:formatNum( s ) )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Буквица&gt;Putnik</name></author>
	</entry>
</feed>