<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://docs.osmost.ru/index.php?action=history&amp;feed=atom&amp;title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C%3AAutosorting</id>
	<title>Модуль:Autosorting - История изменений</title>
	<link rel="self" type="application/atom+xml" href="https://docs.osmost.ru/index.php?action=history&amp;feed=atom&amp;title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C%3AAutosorting"/>
	<link rel="alternate" type="text/html" href="https://docs.osmost.ru/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Autosorting&amp;action=history"/>
	<updated>2026-05-02T16:26:55Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.44.0</generator>
	<entry>
		<id>https://docs.osmost.ru/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Autosorting&amp;diff=522&amp;oldid=prev</id>
		<title>Vasilisa: 1 версия импортирована</title>
		<link rel="alternate" type="text/html" href="https://docs.osmost.ru/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Autosorting&amp;diff=522&amp;oldid=prev"/>
		<updated>2025-09-11T14:15:38Z</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;Версия от 17:15, 11 сентября 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>Vasilisa</name></author>
	</entry>
	<entry>
		<id>https://docs.osmost.ru/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Autosorting&amp;diff=521&amp;oldid=prev</id>
		<title>[[en:Infobox software]]&gt;MBH: ВП:ТЗ#Вопрос про категорию, код Medvednikita</title>
		<link rel="alternate" type="text/html" href="https://docs.osmost.ru/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Autosorting&amp;diff=521&amp;oldid=prev"/>
		<updated>2025-05-10T18:54:34Z</updated>

		<summary type="html">&lt;p&gt;&lt;a href=&quot;/index.php?title=%D0%92%D0%9F:%D0%A2%D0%97&amp;amp;action=view&quot; class=&quot;new&quot; title=&quot;ВП:ТЗ (страница не существует)&quot; data-bs-title=&quot;ВП:ТЗ&quot;&gt;ВП:ТЗ#Вопрос про категорию&lt;/a&gt;, код Medvednikita&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;require( &amp;#039;strict&amp;#039; )&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
local mwLang = mw.getContentLanguage()&lt;br /&gt;
local getArgs = require( &amp;#039;Module:Arguments&amp;#039; ).getArgs&lt;br /&gt;
&lt;br /&gt;
local config = mw.loadData( &amp;#039;Module:Autosorting/config&amp;#039; )&lt;br /&gt;
&lt;br /&gt;
local currentTitle = mw.title.getCurrentTitle()&lt;br /&gt;
&lt;br /&gt;
local function isEmpty( val )&lt;br /&gt;
	return val == nil or val == &amp;#039;&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Получить название категории&lt;br /&gt;
local function getCategoryName( str, name, ... )&lt;br /&gt;
	if isEmpty( name ) then&lt;br /&gt;
		return error( &amp;#039;Autosorting: getCategoryName без name&amp;#039; )&lt;br /&gt;
	end&lt;br /&gt;
	return string.format( str, mwLang:ucfirst( name ), unpack( arg ) )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Получить категорию&lt;br /&gt;
local function getCategory( name, key, ... )&lt;br /&gt;
	if isEmpty( name ) then&lt;br /&gt;
		return error( &amp;#039;Autosorting: getCategory без name&amp;#039; )&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local catKey = &amp;#039;&amp;#039;&lt;br /&gt;
	if not isEmpty( key ) then&lt;br /&gt;
		catKey = string.format( &amp;#039;|%s %s&amp;#039;, key, currentTitle.text )&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if #arg &amp;gt; 0 then&lt;br /&gt;
		local title = mwLang:ucfirst( arg[ 1 ] )&lt;br /&gt;
		arg[ 1 ] = nil&lt;br /&gt;
		name = string.format( name, title, unpack( arg ) )&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return string.format( &amp;#039;[[Category:%s%s]]&amp;#039;, name, catKey )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Получить стандартный лимит&lt;br /&gt;
local function getPageLimit( name, property )&lt;br /&gt;
	name = mwLang:lcfirst( name )&lt;br /&gt;
	property = mwLang:uc( property )&lt;br /&gt;
	&lt;br /&gt;
	local propertyLimits = config.limits[ property ]&lt;br /&gt;
	if isEmpty( propertyLimits ) then&lt;br /&gt;
		return -1&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return propertyLimits[ name ] or propertyLimits.default&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Получить соответствие категории критериям&lt;br /&gt;
local function isValidCategory( name, catName, property, doNotCheck )&lt;br /&gt;
	if not doNotCheck then&lt;br /&gt;
		local success, title = pcall( mw.title.new, &amp;#039;Category:&amp;#039; .. catName )&lt;br /&gt;
		if success and not isEmpty( title ) and title.exists then&lt;br /&gt;
			return true&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local success, catCount = pcall( mw.site.stats.pagesInCategory, catName, &amp;#039;pages&amp;#039; )&lt;br /&gt;
	if success then&lt;br /&gt;
		local pageLimit = getPageLimit( name, property )&lt;br /&gt;
	&lt;br /&gt;
		return catCount &amp;gt; pageLimit&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Получить num (по умолчанию все) первых значений из свойства в Викиданных&lt;br /&gt;
local function getWikidataProperty( frame, property, entityId, num )&lt;br /&gt;
	frame = frame or mw.getCurrentFrame()&lt;br /&gt;
	&lt;br /&gt;
	if isEmpty( property ) then&lt;br /&gt;
		return error( &amp;#039;Autosorting: getWikidataProperty без property&amp;#039; )&lt;br /&gt;
	end&lt;br /&gt;
	property = string.upper( property )&lt;br /&gt;
	&lt;br /&gt;
	if isEmpty( entityId ) then&lt;br /&gt;
		entityId = mw.wikibase.getEntityIdForCurrentPage()&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local result = {}&lt;br /&gt;
	local success, statements = pcall( mw.wikibase.getBestStatements, entityId, property )&lt;br /&gt;
	if success then&lt;br /&gt;
		for i, propVal in ipairs( statements ) do&lt;br /&gt;
			if not isEmpty( num ) and #result &amp;gt;= num then&lt;br /&gt;
				break&lt;br /&gt;
			end&lt;br /&gt;
			local val = propVal[ &amp;#039;mainsnak&amp;#039; ]&lt;br /&gt;
			local hasValue = val[ &amp;#039;snaktype&amp;#039; ] == &amp;#039;value&amp;#039;&lt;br /&gt;
			&lt;br /&gt;
			-- Media file values: P18 etc.&lt;br /&gt;
			if hasValue and (val[ &amp;#039;datatype&amp;#039; ] == &amp;#039;commonsMedia&amp;#039; or val[&amp;#039;datatype&amp;#039;] == &amp;#039;string&amp;#039;) then&lt;br /&gt;
				local value = val[ &amp;#039;datavalue&amp;#039; ][ &amp;#039;value&amp;#039; ]&lt;br /&gt;
				if not isEmpty( value ) then&lt;br /&gt;
					table.insert( result, value )&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			-- Link values: P17 etc.&lt;br /&gt;
			if hasValue and val[ &amp;#039;datatype&amp;#039; ] == &amp;#039;wikibase-item&amp;#039; then&lt;br /&gt;
				local valId = val[ &amp;#039;datavalue&amp;#039; ][ &amp;#039;value&amp;#039; ][ &amp;#039;id&amp;#039; ]&lt;br /&gt;
				local success, label = pcall( mw.wikibase.getLabel, valId )&lt;br /&gt;
				if success and not isEmpty( label ) then&lt;br /&gt;
					table.insert( result, label )&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&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;
local function getFileCategory( frame, name, property, entityId )&lt;br /&gt;
	if isEmpty( name ) then&lt;br /&gt;
		return &amp;#039;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	frame = frame or mw.getCurrentFrame()&lt;br /&gt;
	&lt;br /&gt;
	local propValues = getWikidataProperty( frame, property, entityId, 3 )&lt;br /&gt;
	&lt;br /&gt;
	local instanceOf = getWikidataProperty( frame, &amp;#039;p31&amp;#039;, entityId, 3 )&lt;br /&gt;
	instanceOf = #instanceOf &amp;gt; 0 and instanceOf[ 1 ] or &amp;#039;&amp;#039;&lt;br /&gt;
	&lt;br /&gt;
	local result = getCategory( name, instanceOf, property )&lt;br /&gt;
	return #propValues, result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Сортировка по профессиям&lt;br /&gt;
function p._byOccupation( frame, name, entityId, key )&lt;br /&gt;
	if isEmpty( name ) then&lt;br /&gt;
		return &amp;#039;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	frame = frame or mw.getCurrentFrame()&lt;br /&gt;
	&lt;br /&gt;
	local property = &amp;#039;p106&amp;#039;&lt;br /&gt;
	local propValues = getWikidataProperty( frame, property, entityId )&lt;br /&gt;
	&lt;br /&gt;
	local result = &amp;#039;&amp;#039;&lt;br /&gt;
	local catName = &amp;#039;&amp;#039;&lt;br /&gt;
	local occupationExists = false&lt;br /&gt;
	local validCatsCounter = 0&lt;br /&gt;
	for k, val in pairs( propValues ) do&lt;br /&gt;
		local value = mwLang:lcfirst( val )&lt;br /&gt;
		catName = getCategoryName( &amp;#039;Википедия:%s (тип: человек; род занятий: %s)&amp;#039;, name, value )&lt;br /&gt;
		occupationExists = true&lt;br /&gt;
		&lt;br /&gt;
		if isValidCategory( name, catName, property ) then&lt;br /&gt;
			result = result .. getCategory( catName, key )&lt;br /&gt;
			validCatsCounter = validCatsCounter + 1&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		-- Ограничение количества выводимых категорий&lt;br /&gt;
		if validCatsCounter &amp;gt;= 3 then&lt;br /&gt;
			break&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Подходящей категории нет, либо в ВД нет рода занятий, но есть дефолтные значения,&lt;br /&gt;
	-- тогда поставляем категорию на их основе при её наличии&lt;br /&gt;
	local args = getArgs( frame )&lt;br /&gt;
	local defaultOccupation = args[ &amp;#039;default-occupation&amp;#039; ]&lt;br /&gt;
	&lt;br /&gt;
	if result == &amp;#039;&amp;#039; and not isEmpty( defaultOccupation ) then&lt;br /&gt;
		occupationExists = true&lt;br /&gt;
		catName = getCategoryName( &amp;#039;Википедия:%s (тип: человек; род занятий: %s)&amp;#039;, name, defaultOccupation )&lt;br /&gt;
		if isValidCategory( name, catName, property ) then&lt;br /&gt;
			result = result .. getCategory( catName, key )&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Есть род занятий (на ВД или через параметр), но подходящей категории нет,&lt;br /&gt;
	-- тогда подставляем служебную категорию &amp;quot;не распределён&amp;quot; при её наличии&lt;br /&gt;
	if result == &amp;#039;&amp;#039; and occupationExists then&lt;br /&gt;
		catName = getCategoryName( &amp;#039;Википедия:%s (тип: человек; род занятий: не распределён)&amp;#039;, name )&lt;br /&gt;
		if isValidCategory( name, catName, property ) then&lt;br /&gt;
			result = result .. getCategory( catName, key )&lt;br /&gt;
		end&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;
function p._byType( frame, name, entityId, key )&lt;br /&gt;
	if isEmpty( name ) then&lt;br /&gt;
		return &amp;#039;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	frame = frame or mw.getCurrentFrame()&lt;br /&gt;
	&lt;br /&gt;
	local property = &amp;#039;p31&amp;#039;&lt;br /&gt;
	local propValues = getWikidataProperty( frame, property, entityId )&lt;br /&gt;
&lt;br /&gt;
	local args = getArgs( frame )&lt;br /&gt;
	local defaultType = args[ &amp;#039;default-type&amp;#039; ]&lt;br /&gt;
	local defaultOccupation = args[ &amp;#039;default-occupation&amp;#039; ]&lt;br /&gt;
	&lt;br /&gt;
	local defaultCatKey&lt;br /&gt;
	local result = &amp;#039;&amp;#039;&lt;br /&gt;
	local catName = &amp;#039;&amp;#039;&lt;br /&gt;
	local validCatsCounter = 0&lt;br /&gt;
	for k, val in pairs( propValues ) do&lt;br /&gt;
		catName = getCategoryName( &amp;#039;Википедия:%s (тип: %s)&amp;#039;, name, mwLang:lcfirst( val ) )&lt;br /&gt;
		-- TODO: переделать на получение Q-элементов, чтобы не зависеть от языка&lt;br /&gt;
		if val == &amp;#039;человек&amp;#039; or val == &amp;#039;human&amp;#039; then&lt;br /&gt;
			local occupations = p._byOccupation( frame, name, entityId )&lt;br /&gt;
			if isEmpty( occupations ) then&lt;br /&gt;
				result = result .. getCategory( catName, key )&lt;br /&gt;
			else&lt;br /&gt;
				result = result .. occupations&lt;br /&gt;
			end&lt;br /&gt;
			validCatsCounter = validCatsCounter + 1 -- &amp;quot;человек&amp;quot; считается всегда валидной&lt;br /&gt;
		else&lt;br /&gt;
			if isValidCategory( name, catName, property ) then&lt;br /&gt;
				result = result .. getCategory( catName, key )&lt;br /&gt;
				validCatsCounter = validCatsCounter + 1&lt;br /&gt;
			else&lt;br /&gt;
				if isEmpty( defaultCatKey ) then&lt;br /&gt;
					defaultCatKey = val&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		-- Ограничение количества выводимых категорий&lt;br /&gt;
		if validCatsCounter &amp;gt;= 3 then&lt;br /&gt;
			break&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Если ничего не нашлось, попытка добавить категорию на основе переданных дефолтных значений&lt;br /&gt;
	if result == &amp;#039;&amp;#039; and not isEmpty( defaultType ) then&lt;br /&gt;
		if defaultType == &amp;#039;человек&amp;#039; and not isEmpty( defaultOccupation ) then -- человек, есть занятие&lt;br /&gt;
			catName = getCategoryName( &amp;#039;Википедия:%s (тип: человек; род занятий: %s)&amp;#039;, name, defaultOccupation )&lt;br /&gt;
			if isValidCategory( name, catName, property ) then&lt;br /&gt;
				result = result .. getCategory( catName, key )&lt;br /&gt;
			else&lt;br /&gt;
				-- человек, есть занятие, но категория для занятия не прошла проверки&lt;br /&gt;
				result = result .. getCategory( &amp;#039;Википедия:%s (тип: человек)&amp;#039;, key, name )&lt;br /&gt;
			end&lt;br /&gt;
		elseif defaultType == &amp;#039;человек&amp;#039; then&lt;br /&gt;
			-- человек, нет занятия&lt;br /&gt;
			result = result .. getCategory( &amp;#039;Википедия:%s (тип: человек)&amp;#039;, key, name )&lt;br /&gt;
		else&lt;br /&gt;
			-- нечеловек&lt;br /&gt;
			catName = getCategoryName( &amp;#039;Википедия:%s (тип: %s)&amp;#039;, name, defaultType )&lt;br /&gt;
			if isValidCategory( name, catName, property ) then&lt;br /&gt;
				result = result .. getCategory( catName, key )&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Добавить стандартную категорию только при отсутствии иных&lt;br /&gt;
	local defaultCatName = getCategoryName( &amp;#039;Википедия:%s (не распределённые по типам)&amp;#039;, name )&lt;br /&gt;
	if result == &amp;#039;&amp;#039; and not isEmpty( defaultCatKey ) then&lt;br /&gt;
		if not isEmpty( key ) then&lt;br /&gt;
			defaultCatKey = key .. defaultCatKey&lt;br /&gt;
		end&lt;br /&gt;
		result = result .. getCategory( defaultCatName, defaultCatKey )&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if result == &amp;#039;&amp;#039; then&lt;br /&gt;
		return getCategory( &amp;#039;Википедия:%s (тип: не указан)&amp;#039;, key, name )&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;
function p.byType( frame )&lt;br /&gt;
	local args = getArgs( frame )&lt;br /&gt;
	local name = args[ 1 ]&lt;br /&gt;
	local key = args[ &amp;#039;key&amp;#039; ]&lt;br /&gt;
	local entityId = args[ &amp;#039;from&amp;#039; ]&lt;br /&gt;
	if isEmpty( name ) or not isEmpty( args.nocat ) then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if mw.ustring.find( name, &amp;#039;статьи&amp;#039; ) and currentTitle.namespace ~= 0 then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return p._byType( frame, name, entityId, key )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Сортировка по АТЕ&lt;br /&gt;
function p._bySubdivision( frame, name, entityId, key )&lt;br /&gt;
	if isEmpty( name ) then&lt;br /&gt;
		return &amp;#039;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	frame = frame or mw.getCurrentFrame()&lt;br /&gt;
	&lt;br /&gt;
	local property = &amp;#039;p131&amp;#039;&lt;br /&gt;
	local propValues = getWikidataProperty( frame, property, entityId, 3 )&lt;br /&gt;
	&lt;br /&gt;
	local result = &amp;#039;&amp;#039;&lt;br /&gt;
	for k, val in pairs( propValues ) do&lt;br /&gt;
		local catName = getCategoryName( &amp;#039;Википедия:%s (АТЕ: %s)&amp;#039;, name, val )&lt;br /&gt;
		&lt;br /&gt;
		if isValidCategory( name, catName, property, false ) then&lt;br /&gt;
			result = result .. getCategory( catName, key )&lt;br /&gt;
		end&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;
function p._byCountry( frame, name, entityId, key )&lt;br /&gt;
	if isEmpty( name ) then&lt;br /&gt;
		return &amp;#039;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	frame = frame or mw.getCurrentFrame()&lt;br /&gt;
	&lt;br /&gt;
	local property = &amp;#039;p17&amp;#039;&lt;br /&gt;
	local propValues = getWikidataProperty( frame, property, entityId, 3 )&lt;br /&gt;
	&lt;br /&gt;
	local result = &amp;#039;&amp;#039;&lt;br /&gt;
	for k, val in pairs( propValues ) do&lt;br /&gt;
		if isEmpty( val ) then&lt;br /&gt;
			break&lt;br /&gt;
		end&lt;br /&gt;
		local catName = getCategoryName( &amp;#039;Википедия:%s (страна: %s)&amp;#039;, name, val )&lt;br /&gt;
		&lt;br /&gt;
		result = result .. getCategory( catName, key )&lt;br /&gt;
		if isValidCategory( name, catName, property, false ) then&lt;br /&gt;
			result = result .. p._bySubdivision( frame, name, entityId, key )&lt;br /&gt;
		end&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;
function p.byCountry( frame )&lt;br /&gt;
	local args = getArgs( frame )&lt;br /&gt;
	local name = args[ 1 ]&lt;br /&gt;
	local key = args[ &amp;#039;key&amp;#039; ]&lt;br /&gt;
	local entityId = args[ &amp;#039;from&amp;#039; ]&lt;br /&gt;
	if isEmpty( name ) or not isEmpty( args.nocat ) then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if mw.ustring.find( name, &amp;#039;статьи&amp;#039; ) and mw.title.getCurrentTitle().namespace ~= 0 then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return p._byCountry( frame, name, entityId, key )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Сортировка по наличию/отсутствию изображений&lt;br /&gt;
function p._byImage( frame, file, localFileProps, entityId )&lt;br /&gt;
	frame = frame or mw.getCurrentFrame()&lt;br /&gt;
	&lt;br /&gt;
	-- Возможный сброс значения с Викиданных&lt;br /&gt;
	if file ~= nil and mw.text.trim( file ) == &amp;#039;-&amp;#039; then&lt;br /&gt;
		file = nil&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Вывести категории при заполненном несуществующем файле (= файле с Викисклада)&lt;br /&gt;
	if not isEmpty( file ) then&lt;br /&gt;
		local success, title = pcall( mw.title.new, &amp;#039;File:&amp;#039; .. file )&lt;br /&gt;
		&lt;br /&gt;
		-- Игнорировать при заполненном локальном файле&lt;br /&gt;
		if success and not isEmpty( title ) and title.exists then&lt;br /&gt;
			return nil&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		local catName = &amp;#039;Википедия:Статьи с изображениями: заполнить свойство %s в Викиданных&amp;#039;&lt;br /&gt;
		local result = &amp;#039;&amp;#039;&lt;br /&gt;
		local p18, p18Category = getFileCategory( frame, catName, &amp;#039;p18&amp;#039;, entityId )&lt;br /&gt;
		local p373, p373Category = getFileCategory( frame, catName, &amp;#039;p373&amp;#039;, entityId )&lt;br /&gt;
		if p18 == 0 then&lt;br /&gt;
			result = result .. p18Category&lt;br /&gt;
		end&lt;br /&gt;
		if p373 == 0 then&lt;br /&gt;
			result = result .. p373Category&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;
	for _, val in pairs( localFileProps ) do&lt;br /&gt;
		local propValue = getWikidataProperty( frame, val, entityId, 3 )&lt;br /&gt;
		if #propValue &amp;gt; 0 then&lt;br /&gt;
			return &amp;#039;&amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Вывести категории при отсутствии игнорируемых свойств&lt;br /&gt;
	local catName = &amp;#039;Википедия:Статьи без изображений (указано в Викиданных: %s)&amp;#039;&lt;br /&gt;
	local result = p._byCountry( frame, &amp;#039;статьи без изображений&amp;#039;, entityId )&lt;br /&gt;
	&lt;br /&gt;
	local p18, p18Category = getFileCategory( frame, catName, &amp;#039;p18&amp;#039;, entityId )&lt;br /&gt;
	local p242, p242Category = getFileCategory( frame, catName, &amp;#039;p242&amp;#039;, entityId )&lt;br /&gt;
	local p373, p373Category = getFileCategory( frame, catName, &amp;#039;p373&amp;#039;, entityId )&lt;br /&gt;
	if p18 &amp;gt; 0 then&lt;br /&gt;
		result = result .. p18Category&lt;br /&gt;
	end&lt;br /&gt;
	if p242 &amp;gt; 0 then&lt;br /&gt;
		result = result .. p242Category&lt;br /&gt;
	end&lt;br /&gt;
	if p373 &amp;gt; 0 then&lt;br /&gt;
		result = result .. p373Category&lt;br /&gt;
	end&lt;br /&gt;
	result = result .. p._byType( frame, &amp;#039;статьи без изображений&amp;#039;, entityId )&lt;br /&gt;
	&lt;br /&gt;
	return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Шаблон сортировки по изображениям&lt;br /&gt;
function p.byImage( frame )&lt;br /&gt;
	if mw.title.getCurrentTitle().namespace ~= 0 then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	local args = getArgs( frame )&lt;br /&gt;
	local file = args[ 1 ]&lt;br /&gt;
	local entityId = args[ &amp;#039;from&amp;#039; ]&lt;br /&gt;
	if not isEmpty( args.nocat ) then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Игнорирование по умолчанию статей с указанным p18&lt;br /&gt;
	local uses = args[ &amp;#039;uses&amp;#039; ]&lt;br /&gt;
	if isEmpty( uses ) then&lt;br /&gt;
		uses = &amp;#039;p18&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	local localFileProps = mw.text.split( uses, &amp;#039;, &amp;#039; )&lt;br /&gt;
	if uses == &amp;#039;-&amp;#039; then&lt;br /&gt;
		localFileProps = {}&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return p._byImage( frame, file, localFileProps, entityId )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>[[en:Infobox software]]&gt;MBH</name></author>
	</entry>
</feed>