<?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%2FSisterCities</id>
	<title>Модуль:Wikidata/SisterCities - История изменений</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%2FSisterCities"/>
	<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/SisterCities&amp;action=history"/>
	<updated>2026-04-27T21:12:02Z</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/SisterCities&amp;diff=238389&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/SisterCities&amp;diff=238389&amp;oldid=prev"/>
		<updated>2025-07-27T15:36:21Z</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-238388:rev-238389 --&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/SisterCities&amp;diff=238388&amp;oldid=prev</id>
		<title>Буквица&gt;The Fox Bot: Защитил страницу Модуль:Wikidata/SisterCities: критический шаблон или модуль: согласно Служебная:Постоянная ссылка/143835923#Промежуточный итог ([Редактирование=только автоподтверждённые] (бессрочно) [Переименование=только автоподтверждённые] (бессрочно))</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/SisterCities&amp;diff=238388&amp;oldid=prev"/>
		<updated>2025-03-05T16:20:38Z</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/SisterCities&quot; title=&quot;Модуль:Wikidata/SisterCities&quot;&gt;Модуль:Wikidata/SisterCities&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;a href=&quot;/wiki/%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%9F%D0%BE%D1%81%D1%82%D0%BE%D1%8F%D0%BD%D0%BD%D0%B0%D1%8F_%D1%81%D1%81%D1%8B%D0%BB%D0%BA%D0%B0/143835923#Промежуточный_итог&quot; title=&quot;Служебная:Постоянная ссылка/143835923&quot;&gt;Служебная:Постоянная ссылка/143835923&lt;/a&gt; ([Редактирование=только автоподтверждённые] (бессрочно) [Переименование=только автоподтверждённые] (бессрочно))&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local p = {};&lt;br /&gt;
local flags = require( &amp;#039;Module:Wikidata/Flags&amp;#039; );&lt;br /&gt;
&lt;br /&gt;
local delink&lt;br /&gt;
&lt;br /&gt;
function p.formatSisterCitiesProperty( 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 = context.selectClaims( options, options.property );&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;
	local cityNames = {};&lt;br /&gt;
    for i, claim in ipairs( claims ) do&lt;br /&gt;
    	if claim.mainsnak and claim.mainsnak.datavalue and claim.mainsnak.datavalue.value then&lt;br /&gt;
    		cityNames[ claim.id ] = mw.wikibase.label( claim.mainsnak.datavalue.value.id );&lt;br /&gt;
    	else&lt;br /&gt;
    		cityNames[ claim.id ] = &amp;#039;(none)&amp;#039;;&lt;br /&gt;
    	end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local comparator = function( c1, c2 )&lt;br /&gt;
		local n1 = cityNames[ c1.id ] or &amp;#039;&amp;#039;;&lt;br /&gt;
		local n2 = cityNames[ c2.id ] or &amp;#039;&amp;#039;;&lt;br /&gt;
		return n1 &amp;lt; n2;&lt;br /&gt;
	end&lt;br /&gt;
	table.sort( claims, comparator );&lt;br /&gt;
&lt;br /&gt;
    -- Обход всех заявлений утверждения и с накоплением оформленых предпочтительных &lt;br /&gt;
    -- заявлений в таблице&lt;br /&gt;
    local formattedClaims = {};&lt;br /&gt;
&lt;br /&gt;
    for i, claim in ipairs( claims ) do&lt;br /&gt;
        local formattedStatement = context.formatStatement( options, claim );&lt;br /&gt;
        -- здесь может вернуться либо оформленный текст заявления&lt;br /&gt;
        -- либо строка ошибки nil похоже никогда не возвращается&lt;br /&gt;
        if formattedStatement then&lt;br /&gt;
            formattedStatement = &amp;#039;&amp;lt;span class=&amp;quot;wikidata-claim&amp;quot; data-wikidata-property-id=&amp;quot;&amp;#039; ..&lt;br /&gt;
            	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; ..&lt;br /&gt;
            	formattedStatement .. &amp;#039;&amp;lt;/span&amp;gt;&amp;#039;;&lt;br /&gt;
            table.insert( formattedClaims, formattedStatement );&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
	-- создание текстовой строки со списком оформленых заявлений из таблицы  &lt;br /&gt;
    local out = mw.text.listToText( formattedClaims, &amp;#039;\n* &amp;#039;, &amp;#039;\n* &amp;#039; );&lt;br /&gt;
    if out ~= &amp;#039;&amp;#039; then&lt;br /&gt;
    	out = &amp;#039;* &amp;#039; .. out;&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 findCountryStatements( placeId )&lt;br /&gt;
	local countryStatements = {};&lt;br /&gt;
&lt;br /&gt;
	for _, countryStatement in pairs( mw.wikibase.getBestStatements( placeId, &amp;#039;P17&amp;#039; ) ) do&lt;br /&gt;
		if countryStatement and&lt;br /&gt;
			countryStatement.mainsnak and&lt;br /&gt;
			countryStatement.mainsnak.datavalue and&lt;br /&gt;
			countryStatement.mainsnak.datavalue.value and&lt;br /&gt;
			not ( countryStatement.qualifiers and countryStatement.qualifiers.P582 )&lt;br /&gt;
		then&lt;br /&gt;
			table.insert( countryStatements, countryStatement );&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return countryStatements;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local flagsWikitextCache = {};&lt;br /&gt;
local countriesWikitextCache = {};&lt;br /&gt;
&lt;br /&gt;
function p.formatSisterCityClaim( context, options, statement )&lt;br /&gt;
	local result = &amp;#039;&amp;#039;;&lt;br /&gt;
	if not statement or statement.mainsnak.snaktype ~= &amp;#039;value&amp;#039; then&lt;br /&gt;
		return result;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local countryStatements = findCountryStatements( statement.mainsnak.datavalue.value.id );&lt;br /&gt;
	local flagImages = {};&lt;br /&gt;
	for _, countryStatement in pairs( countryStatements ) do&lt;br /&gt;
		local countryId = countryStatement.mainsnak.datavalue.value.id;&lt;br /&gt;
		local flagImage = flagsWikitextCache[ countryId ];&lt;br /&gt;
		if flagImage == nil then&lt;br /&gt;
			flagImage = flags.getFlag( context, countryId, os.time() * 1000);&lt;br /&gt;
			flagsWikitextCache[ countryId ] = flagImage;&lt;br /&gt;
		end&lt;br /&gt;
		if flagImage then&lt;br /&gt;
			table.insert( flagImages, flagImage );&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if #flagImages then&lt;br /&gt;
		local flagText = mw.text.listToText( flagImages, &amp;#039;&amp;amp;nbsp;/&amp;amp;nbsp;&amp;#039;, &amp;#039;&amp;amp;nbsp;/&amp;amp;nbsp;&amp;#039; )&lt;br /&gt;
		result = result .. flagText .. ( flagText ~= &amp;#039;&amp;#039; and &amp;#039;&amp;amp;nbsp;&amp;#039; or &amp;#039;&amp;#039; );&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	result = result .. context.formatSnak( options, statement.mainsnak, {} );&lt;br /&gt;
&lt;br /&gt;
	local countryLinks = {};&lt;br /&gt;
	for _, countryStatement in pairs( countryStatements ) do&lt;br /&gt;
		local countryId = countryStatement.mainsnak.datavalue.value.id;&lt;br /&gt;
		local countryText = countriesWikitextCache[ countryId ];&lt;br /&gt;
		if countryText == nil then&lt;br /&gt;
			countryText = context.formatSnak( {}, countryStatement.mainsnak, {} );&lt;br /&gt;
			countriesWikitextCache[ countryId ] = countryText;&lt;br /&gt;
		end&lt;br /&gt;
		if countryText then&lt;br /&gt;
			table.insert( countryLinks, countryText );&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if #countryLinks then&lt;br /&gt;
		result = result .. &amp;#039;, &amp;#039; .. mw.text.listToText( countryLinks, &amp;#039; / &amp;#039;, &amp;#039; / &amp;#039; );&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if statement.qualifiers and statement.qualifiers.P580 then&lt;br /&gt;
		if not delink then&lt;br /&gt;
			-- [[Module:Delink]] contains require( &amp;#039;strict&amp;#039; ), [[Module:Sources]] errors out with it&lt;br /&gt;
			delink = function( text )&lt;br /&gt;
				return mw.getCurrentFrame():expandTemplate{&lt;br /&gt;
					title = &amp;#039;Delink&amp;#039;,&lt;br /&gt;
					args = { text },&lt;br /&gt;
				}&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		local snak = context.formatSnak( options, statement.qualifiers.P580[ 1 ] )&lt;br /&gt;
		result = result .. &amp;#039; (&amp;#039; .. delink( snak ) .. &amp;#039;)&amp;#039;;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if options.references then&lt;br /&gt;
		result = result .. context.formatRefs( options, statement );&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;The Fox Bot</name></author>
	</entry>
</feed>