<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://wiki.dzmuh.com/index.php?action=history&amp;feed=atom&amp;title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C%3AAutosorting%2F%D0%BF%D0%B5%D1%81%D0%BE%D1%87%D0%BD%D0%B8%D1%86%D0%B0</id>
	<title>Модуль:Autosorting/песочница - История изменений</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.dzmuh.com/index.php?action=history&amp;feed=atom&amp;title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C%3AAutosorting%2F%D0%BF%D0%B5%D1%81%D0%BE%D1%87%D0%BD%D0%B8%D1%86%D0%B0"/>
	<link rel="alternate" type="text/html" href="https://wiki.dzmuh.com/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Autosorting/%D0%BF%D0%B5%D1%81%D0%BE%D1%87%D0%BD%D0%B8%D1%86%D0%B0&amp;action=history"/>
	<updated>2026-05-05T17:51:20Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.38.4</generator>
	<entry>
		<id>https://wiki.dzmuh.com/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Autosorting/%D0%BF%D0%B5%D1%81%D0%BE%D1%87%D0%BD%D0%B8%D1%86%D0%B0&amp;diff=14335&amp;oldid=prev</id>
		<title>Dzmuh: Новая страница: «require( 'strict' ) local p = {}  local mwLang = mw.getContentLanguage() local getArgs = require( 'Module:Arguments' ).getArgs  local config = mw.loadData( 'Module:Autosorting/config' )  local function isEmpty( val ) 	return val == nil or val == '' end  -- Получить назвние категории local function getCategoryName( str, name, val ) 	val = val or '' 	return string.format( str, mwLang:ucfirst( name ), val ) end  -- Получить ст...»</title>
		<link rel="alternate" type="text/html" href="https://wiki.dzmuh.com/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Autosorting/%D0%BF%D0%B5%D1%81%D0%BE%D1%87%D0%BD%D0%B8%D1%86%D0%B0&amp;diff=14335&amp;oldid=prev"/>
		<updated>2024-11-12T18:52:58Z</updated>

		<summary type="html">&lt;p&gt;Новая страница: «require( &amp;#039;strict&amp;#039; ) local p = {}  local mwLang = mw.getContentLanguage() local getArgs = require( &amp;#039;Module:Arguments&amp;#039; ).getArgs  local config = mw.loadData( &amp;#039;Module:Autosorting/config&amp;#039; )  local function isEmpty( val ) 	return val == nil or val == &amp;#039;&amp;#039; end  -- Получить назвние категории local function getCategoryName( str, name, val ) 	val = val or &amp;#039;&amp;#039; 	return string.format( str, mwLang:ucfirst( name ), val ) end  -- Получить ст...»&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;require( 'strict' )&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
local mwLang = mw.getContentLanguage()&lt;br /&gt;
local getArgs = require( 'Module:Arguments' ).getArgs&lt;br /&gt;
&lt;br /&gt;
local config = mw.loadData( 'Module:Autosorting/config' )&lt;br /&gt;
&lt;br /&gt;
local function isEmpty( val )&lt;br /&gt;
	return val == nil or val == ''&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Получить назвние категории&lt;br /&gt;
local function getCategoryName( str, name, val )&lt;br /&gt;
	val = val or ''&lt;br /&gt;
	return string.format( str, mwLang:ucfirst( name ), val )&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, 'Category:' .. 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, 'pages' )&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;
-- TODO: переделать на получение Q-элементов, чтобы не зависеть от языка&lt;br /&gt;
local function getWikidataProperty( frame, property, entityId, num )&lt;br /&gt;
	frame = frame or mw.getCurrentFrame()&lt;br /&gt;
	&lt;br /&gt;
	local callArgs = {&lt;br /&gt;
		property,&lt;br /&gt;
	}&lt;br /&gt;
	if not isEmpty( entityId ) then&lt;br /&gt;
		callArgs.from = entityId&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local success, result = pcall( frame.callParserFunction, frame, '#property', callArgs )&lt;br /&gt;
	if success and not isEmpty( result ) then&lt;br /&gt;
		if mw.ustring.len( result ) &amp;gt; 255 then&lt;br /&gt;
			return {}&lt;br /&gt;
		end&lt;br /&gt;
		result = mw.text.split( result, ', ' )&lt;br /&gt;
		&lt;br /&gt;
		if isEmpty( num ) then&lt;br /&gt;
			return result&lt;br /&gt;
		else&lt;br /&gt;
			return { unpack( result, 1, num ) }&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return {}&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 ''&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 catName = getCategoryName( name, property )&lt;br /&gt;
	local instanceOf = getWikidataProperty( frame, 'p31', entityId, 3 )&lt;br /&gt;
	instanceOf = #instanceOf &amp;gt; 0 and instanceOf[ 1 ] or ''&lt;br /&gt;
	local pageTitle = mw.title.getCurrentTitle().fullText&lt;br /&gt;
	&lt;br /&gt;
	local result = string.format( '[[Category:%s|%s%s]]', catName, instanceOf, pageTitle )&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 )&lt;br /&gt;
	if isEmpty( name ) then&lt;br /&gt;
		return ''&lt;br /&gt;
	end&lt;br /&gt;
	frame = frame or mw.getCurrentFrame()&lt;br /&gt;
	&lt;br /&gt;
	local property = 'p106'&lt;br /&gt;
	local propValues = getWikidataProperty( frame, property, entityId )&lt;br /&gt;
	&lt;br /&gt;
	local result = ''&lt;br /&gt;
	local catName = ''&lt;br /&gt;
	local occupationExists = false&lt;br /&gt;
	local validCatsCounter = 0&lt;br /&gt;
	for key, val in pairs( propValues ) do&lt;br /&gt;
		local value = mwLang:lcfirst( val )&lt;br /&gt;
		catName = getCategoryName( 'Википедия:%s (тип: человек; род занятий: %s)', name, value )&lt;br /&gt;
		occupationExists = true&lt;br /&gt;
		&lt;br /&gt;
		if isValidCategory( name, catName, property ) then&lt;br /&gt;
			result = result .. string.format( '[[Category:%s]]', catName )&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[ 'default-occupation' ]&lt;br /&gt;
	&lt;br /&gt;
	if result == '' and not isEmpty( defaultOccupation ) then&lt;br /&gt;
		occupationExists = true&lt;br /&gt;
		catName = getCategoryName( 'Википедия:%s (тип: человек; род занятий: %s)', name, defaultOccupation )&lt;br /&gt;
		if isValidCategory( name, catName, property ) then&lt;br /&gt;
			result = result .. string.format( '[[Category:%s]]', catName )&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 == '' and occupationExists then&lt;br /&gt;
		catName = getCategoryName( 'Википедия:%s (тип: человек; род занятий: не распределён)', name )&lt;br /&gt;
		if isValidCategory( name, catName, property ) then&lt;br /&gt;
			result = result .. string.format( '[[Category:%s]]', catName )&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 )&lt;br /&gt;
	if isEmpty( name ) then&lt;br /&gt;
		return ''&lt;br /&gt;
	end&lt;br /&gt;
	frame = frame or mw.getCurrentFrame()&lt;br /&gt;
	&lt;br /&gt;
	local property = 'p31'&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[ 'default-type' ]&lt;br /&gt;
	local defaultOccupation = args[ 'default-occupation' ]&lt;br /&gt;
	&lt;br /&gt;
	local defaultCatKey&lt;br /&gt;
	local result = ''&lt;br /&gt;
	local catName = ''&lt;br /&gt;
	local validCatsCounter = 0&lt;br /&gt;
	for key, val in pairs( propValues ) do&lt;br /&gt;
		catName = getCategoryName( 'Википедия:%s (тип: %s)', name, mwLang:lcfirst( val ) )&lt;br /&gt;
		-- TODO: переделать на получение Q-элементов, чтобы не зависеть от языка&lt;br /&gt;
		if val == 'человек' or val == 'human' then&lt;br /&gt;
			local occupations = p._byOccupation( frame, name, entityId )&lt;br /&gt;
			if isEmpty( occupations ) then&lt;br /&gt;
				result = result .. string.format( '[[Category:%s]]', catName )&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 .. string.format( '[[Category:%s]]', catName )&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 == '' and not isEmpty( defaultType ) then&lt;br /&gt;
		if defaultType == 'человек' and not isEmpty( defaultOccupation ) then -- человек, есть занятие&lt;br /&gt;
			catName = getCategoryName( 'Википедия:%s (тип: человек; род занятий: %s)', name, defaultOccupation )&lt;br /&gt;
			if isValidCategory( name, catName, property ) then&lt;br /&gt;
				result = result .. string.format( '[[Category:%s]]', catName )&lt;br /&gt;
				&lt;br /&gt;
			else -- человек, есть занятие, но категория для занятия не прошла проверки&lt;br /&gt;
				catName = getCategoryName( 'Википедия:%s (тип: человек)', name )&lt;br /&gt;
				result = result .. string.format( '[[Category:%s]]', catName )&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
		elseif defaultType == 'человек' then -- человек, нет занятия&lt;br /&gt;
			catName = getCategoryName( 'Википедия:%s (тип: человек)', name )&lt;br /&gt;
			result = result .. string.format( '[[Category:%s]]', catName )&lt;br /&gt;
				&lt;br /&gt;
		else -- нечеловек&lt;br /&gt;
			catName = getCategoryName( 'Википедия:%s (тип: %s)', name, defaultType )&lt;br /&gt;
			if isValidCategory( name, catName, property ) then&lt;br /&gt;
				result = result .. string.format( '[[Category:%s]]', catName )&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Добавить стандартную категорию только при отсутствии иных&lt;br /&gt;
	local defaultCatName = getCategoryName( 'Википедия:%s (не распределённые по типам)', name )&lt;br /&gt;
	if result == '' and not isEmpty( defaultCatKey ) then&lt;br /&gt;
		local pageTitle = mw.title.getCurrentTitle().fullText&lt;br /&gt;
		result = result .. string.format( '[[Category:%s|%s%s]]', defaultCatName, defaultCatKey, pageTitle )&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if result == '' then&lt;br /&gt;
		return getCategoryName( '[[Category:Википедия:%s (тип: не указан)]]', 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._bySubdivision( frame, name, entityId )&lt;br /&gt;
	if isEmpty( name ) then&lt;br /&gt;
		return ''&lt;br /&gt;
	end&lt;br /&gt;
	frame = frame or mw.getCurrentFrame()&lt;br /&gt;
	&lt;br /&gt;
	local property = 'p131'&lt;br /&gt;
	local propValues = getWikidataProperty( frame, property, entityId, 3 )&lt;br /&gt;
	&lt;br /&gt;
	local result = ''&lt;br /&gt;
	for key, val in pairs( propValues ) do&lt;br /&gt;
		local catName = getCategoryName( 'Википедия:%s (АТЕ: %s)', name, val )&lt;br /&gt;
		&lt;br /&gt;
		if isValidCategory( name, catName, property, false ) then&lt;br /&gt;
			result = result .. string.format( '[[Category:%s]]', catName )&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 )&lt;br /&gt;
	if isEmpty( name ) then&lt;br /&gt;
		return ''&lt;br /&gt;
	end&lt;br /&gt;
	frame = frame or mw.getCurrentFrame()&lt;br /&gt;
	&lt;br /&gt;
	local property = 'p17'&lt;br /&gt;
	local propValues = getWikidataProperty( frame, property, entityId, 3 )&lt;br /&gt;
	&lt;br /&gt;
	local result = ''&lt;br /&gt;
	for key, 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( 'Википедия:%s (страна: %s)', name, val )&lt;br /&gt;
		&lt;br /&gt;
		result = result .. string.format( '[[Category:%s]]', catName )&lt;br /&gt;
		if isValidCategory( name, catName, property, false ) then&lt;br /&gt;
			result = result .. p._bySubdivision( frame, name, entityId )&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._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 ) == '-' 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, 'File:' .. 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 = 'Википедия:Статьи с изображениями: заполнить свойство %s в Викиданных'&lt;br /&gt;
		local result = ''&lt;br /&gt;
		local p18, p18Category = getFileCategory( frame, catName, 'p18', entityId )&lt;br /&gt;
		local p373, p373Category = getFileCategory( frame, catName, 'p373', 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 ''&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Вывести категории при отсутствии игнорируемых свойств&lt;br /&gt;
	local catName = 'Википедия:Статьи без изображений (указано в Викиданных: %s)'&lt;br /&gt;
	local result = p._byCountry( frame, 'статьи без изображений', entityId )&lt;br /&gt;
	&lt;br /&gt;
	local p18, p18Category = getFileCategory( frame, catName, 'p18', entityId )&lt;br /&gt;
	local p242, p242Category = getFileCategory( frame, catName, 'p242', entityId )&lt;br /&gt;
	local p373, p373Category = getFileCategory( frame, catName, 'p373', 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, 'статьи без изображений', entityId )&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 entityId = args[ 'from' ]&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, 'статьи' ) and mw.title.getCurrentTitle().namespace ~= 0 then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return p._byType( frame, name, entityId )&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 entityId = args[ 'from' ]&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, 'статьи' ) 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 )&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[ 'from' ]&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[ 'uses' ]&lt;br /&gt;
	if isEmpty( uses ) then&lt;br /&gt;
		uses = 'p18'&lt;br /&gt;
	end&lt;br /&gt;
	local localFileProps = mw.text.split( uses, ', ' )&lt;br /&gt;
	if uses == '-' 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>Dzmuh</name></author>
	</entry>
</feed>