<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://lcw1.spark108.ru/index.php?action=history&amp;feed=atom&amp;title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C%3A%D0%A1%D0%BF%D1%80%D0%B0%D0%B9%D1%82</id>
	<title>Модуль:Спрайт - История изменений</title>
	<link rel="self" type="application/atom+xml" href="https://lcw1.spark108.ru/index.php?action=history&amp;feed=atom&amp;title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C%3A%D0%A1%D0%BF%D1%80%D0%B0%D0%B9%D1%82"/>
	<link rel="alternate" type="text/html" href="https://lcw1.spark108.ru/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:%D0%A1%D0%BF%D1%80%D0%B0%D0%B9%D1%82&amp;action=history"/>
	<updated>2026-05-08T12:50:15Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.43.0</generator>
	<entry>
		<id>https://lcw1.spark108.ru/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:%D0%A1%D0%BF%D1%80%D0%B0%D0%B9%D1%82&amp;diff=3696&amp;oldid=prev</id>
		<title>Spark108: 1 версия импортирована</title>
		<link rel="alternate" type="text/html" href="https://lcw1.spark108.ru/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:%D0%A1%D0%BF%D1%80%D0%B0%D0%B9%D1%82&amp;diff=3696&amp;oldid=prev"/>
		<updated>2025-04-29T20:30:06Z</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;Версия от 20:30, 29 апреля 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>Spark108</name></author>
	</entry>
	<entry>
		<id>https://lcw1.spark108.ru/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:%D0%A1%D0%BF%D1%80%D0%B0%D0%B9%D1%82&amp;diff=3695&amp;oldid=prev</id>
		<title>minecraftwiki&gt;BabylonAS: я совершенный растяпа-пускуля</title>
		<link rel="alternate" type="text/html" href="https://lcw1.spark108.ru/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:%D0%A1%D0%BF%D1%80%D0%B0%D0%B9%D1%82&amp;diff=3695&amp;oldid=prev"/>
		<updated>2025-04-26T07:53:29Z</updated>

		<summary type="html">&lt;p&gt;я совершенный растяпа-пускуля&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;Версия от 07:53, 26 апреля 2025&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l145&quot;&gt;Строка 145:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 145:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		-- Внутренняя ссылка&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		-- Внутренняя ссылка&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		local linkPrefix = setting( &amp;#039;предссылки&amp;#039; ) or &amp;#039;&amp;#039;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		local linkPrefix = setting( &amp;#039;предссылки&amp;#039; ) or &amp;#039;&amp;#039;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;		if mw.ustring.lower(linkPrefix) == &#039;нет&#039; then&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;			linkPrefix = &#039;&#039;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;		end&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		return &amp;#039;[[&amp;#039; .. linkPrefix .. link .. &amp;#039;|&amp;#039; .. tostring( root ) .. &amp;#039;]]&amp;#039;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		return &amp;#039;[[&amp;#039; .. linkPrefix .. link .. &amp;#039;|&amp;#039; .. tostring( root ) .. &amp;#039;]]&amp;#039;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	end&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	end&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>minecraftwiki&gt;BabylonAS</name></author>
	</entry>
	<entry>
		<id>https://lcw1.spark108.ru/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:%D0%A1%D0%BF%D1%80%D0%B0%D0%B9%D1%82&amp;diff=126&amp;oldid=prev</id>
		<title>Spark108: 1 версия импортирована</title>
		<link rel="alternate" type="text/html" href="https://lcw1.spark108.ru/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:%D0%A1%D0%BF%D1%80%D0%B0%D0%B9%D1%82&amp;diff=126&amp;oldid=prev"/>
		<updated>2025-03-26T10:40:27Z</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;Версия от 10:40, 26 марта 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>Spark108</name></author>
	</entry>
	<entry>
		<id>https://lcw1.spark108.ru/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:%D0%A1%D0%BF%D1%80%D0%B0%D0%B9%D1%82&amp;diff=64&amp;oldid=prev</id>
		<title>Spark108: Новая страница: «local p = {} function p.base( f ) 	local args = f 	if f == mw.getCurrentFrame() then 		args = require( &#039;Модуль:ProcessArgs&#039; ).merge( true ) 	else 		f = mw.getCurrentFrame() 	end 	 	local data = args[&#039;данные&#039;] and mw.loadData( &#039;Модуль:&#039; .. args[&#039;данные&#039;] ) or {} 	local settings = data[&#039;настройки&#039;] 	 	-- Настройки по умолчанию 	local default = { 		[&#039;масштаб&#039;] = 1, 		[&#039;формат&#039;] = 256, 		[&#039;раз...»</title>
		<link rel="alternate" type="text/html" href="https://lcw1.spark108.ru/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:%D0%A1%D0%BF%D1%80%D0%B0%D0%B9%D1%82&amp;diff=64&amp;oldid=prev"/>
		<updated>2025-03-20T22:48:04Z</updated>

		<summary type="html">&lt;p&gt;Новая страница: «local p = {} function p.base( f ) 	local args = f 	if f == mw.getCurrentFrame() then 		args = require( &amp;#039;Модуль:ProcessArgs&amp;#039; ).merge( true ) 	else 		f = mw.getCurrentFrame() 	end 	 	local data = args[&amp;#039;данные&amp;#039;] and mw.loadData( &amp;#039;Модуль:&amp;#039; .. args[&amp;#039;данные&amp;#039;] ) or {} 	local settings = data[&amp;#039;настройки&amp;#039;] 	 	-- Настройки по умолчанию 	local default = { 		[&amp;#039;масштаб&amp;#039;] = 1, 		[&amp;#039;формат&amp;#039;] = 256, 		[&amp;#039;раз...»&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;Версия от 22:48, 20 марта 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>Spark108</name></author>
	</entry>
	<entry>
		<id>https://lcw1.spark108.ru/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:%D0%A1%D0%BF%D1%80%D0%B0%D0%B9%D1%82&amp;diff=125&amp;oldid=prev</id>
		<title>minecraftwiki&gt;BabylonAS: кое-кто совсем не умеет адаптировать модули</title>
		<link rel="alternate" type="text/html" href="https://lcw1.spark108.ru/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:%D0%A1%D0%BF%D1%80%D0%B0%D0%B9%D1%82&amp;diff=125&amp;oldid=prev"/>
		<updated>2025-02-09T18:14:42Z</updated>

		<summary type="html">&lt;p&gt;&lt;a href=&quot;/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Gk_0&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;Участник:Gk 0 (страница не существует)&quot;&gt;кое-кто&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;
function p.base( f )&lt;br /&gt;
	local args = f&lt;br /&gt;
	if f == mw.getCurrentFrame() then&lt;br /&gt;
		args = require( &amp;#039;Модуль:ProcessArgs&amp;#039; ).merge( true )&lt;br /&gt;
	else&lt;br /&gt;
		f = mw.getCurrentFrame()&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local data = args[&amp;#039;данные&amp;#039;] and mw.loadData( &amp;#039;Модуль:&amp;#039; .. args[&amp;#039;данные&amp;#039;] ) or {}&lt;br /&gt;
	local settings = data[&amp;#039;настройки&amp;#039;]&lt;br /&gt;
	&lt;br /&gt;
	-- Настройки по умолчанию&lt;br /&gt;
	local default = {&lt;br /&gt;
		[&amp;#039;масштаб&amp;#039;] = 1,&lt;br /&gt;
		[&amp;#039;формат&amp;#039;] = 256,&lt;br /&gt;
		[&amp;#039;разм&amp;#039;] = 16,&lt;br /&gt;
		[&amp;#039;поз&amp;#039;] = 1,&lt;br /&gt;
		[&amp;#039;выравн&amp;#039;] = &amp;#039;text-top&amp;#039;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	local defaultStyle = default&lt;br /&gt;
	if settings then&lt;br /&gt;
		if not settings[&amp;#039;таблстилей&amp;#039;] then&lt;br /&gt;
			-- Создание отдельной копии текущих настроек по умолчанию&lt;br /&gt;
			defaultStyle = mw.clone( default )&lt;br /&gt;
		end&lt;br /&gt;
		for k, v in pairs( settings ) do&lt;br /&gt;
			default[k] = v&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local setting = function( arg )&lt;br /&gt;
		return args[arg] or default[arg]&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local sprite = mw.html.create( &amp;#039;span&amp;#039; ):addClass( &amp;#039;sprite&amp;#039; )&lt;br /&gt;
	&lt;br /&gt;
	-- Метод CSS от mw.html производит очень медленное экранирование входных данных,&lt;br /&gt;
	-- что тормозит работу в два раза. Вместо этого стили будут создаваться вручную&lt;br /&gt;
	-- и передаваться через метод cssText, который экранирует только HTML, что быстрее&lt;br /&gt;
	local styles = {}&lt;br /&gt;
	&lt;br /&gt;
	local page = setting( &amp;#039;страница&amp;#039; ) or setting( &amp;#039;главная_страница&amp;#039; )&lt;br /&gt;
	local classname = setting( &amp;#039;имякласса&amp;#039; ) or mw.ustring.lower( setting( &amp;#039;имя&amp;#039; ):gsub( &amp;#039; &amp;#039;, &amp;#039;-&amp;#039; ) ) .. &amp;#039;-sprite&amp;#039;&lt;br /&gt;
	local css_image = &amp;quot;background&amp;quot;&lt;br /&gt;
	if setting( &amp;#039;длямаски&amp;#039; ) then&lt;br /&gt;
		classname = classname .. &amp;#039;-mask&amp;#039;&lt;br /&gt;
		css_image = &amp;quot;mask&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Настройки страницы многостраничного спрайта&lt;br /&gt;
	local scaleq&lt;br /&gt;
	if setting( page ) then&lt;br /&gt;
		args[&amp;#039;масштаб&amp;#039;] = args[&amp;#039;масштаб&amp;#039;] or 1&lt;br /&gt;
		scaleq = setting( page )[&amp;#039;множитель&amp;#039;] or setting( &amp;#039;множитель&amp;#039; ) or 1&lt;br /&gt;
		args[&amp;#039;ширина&amp;#039;] = setting( page )[&amp;#039;ширина&amp;#039;] or setting( page )[&amp;#039;разм&amp;#039;] or setting( &amp;#039;ширина&amp;#039; ) or setting( &amp;#039;разм&amp;#039; )&lt;br /&gt;
		args[&amp;#039;высота&amp;#039;] = (setting( page )[&amp;#039;высота&amp;#039;] or setting( page )[&amp;#039;верт_разм&amp;#039;] or setting( page )[&amp;#039;разм&amp;#039;] or setting( &amp;#039;ширина&amp;#039; ) or setting( &amp;#039;верт_разм&amp;#039; ) or setting( &amp;#039;разм&amp;#039; ) )&lt;br /&gt;
		args[&amp;#039;формат&amp;#039;] = setting( page )[&amp;#039;формат&amp;#039;] or setting( &amp;#039;формат&amp;#039; )&lt;br /&gt;
		&lt;br /&gt;
		-- класс страницы&lt;br /&gt;
		local suffix = setting( page )[&amp;#039;суффикскласса&amp;#039;]&lt;br /&gt;
		if suffix then&lt;br /&gt;
			classname = classname .. &amp;#039;-&amp;#039; .. mw.ustring.lower( suffix:gsub( &amp;#039; &amp;#039;, &amp;#039;-&amp;#039; ) )&lt;br /&gt;
		elseif setting( page )[&amp;#039;имякласса&amp;#039;] then&lt;br /&gt;
			classname = setting( page )[&amp;#039;имякласса&amp;#039;]&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		scaleq = setting( &amp;#039;множитель&amp;#039; ) or 1&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	sprite:addClass( classname )&lt;br /&gt;
	local class = setting( &amp;#039;класс&amp;#039; )&lt;br /&gt;
	if class then&lt;br /&gt;
		sprite:addClass( class )&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local width = setting(&amp;#039;ширина&amp;#039;) or setting( &amp;#039;разм&amp;#039; ) -- ширина спрайта в пикселях&lt;br /&gt;
	local height = setting(&amp;#039;высота&amp;#039;) or setting( &amp;#039;верт_разм&amp;#039; ) or setting( &amp;#039;разм&amp;#039; ) -- высота спрайта в пикселях&lt;br /&gt;
	local pos = setting( &amp;#039;поз&amp;#039; ) - 1 -- положение спрайта в таблице&lt;br /&gt;
	local sheetWidth = setting( &amp;#039;формат&amp;#039; ) -- ширина таблицы спрайта в пикселях&lt;br /&gt;
	local scale = setting( &amp;#039;масштаб&amp;#039; ) -- масштаб спрайта (во сколько раз увеличить или уменьшить размер)&lt;br /&gt;
	&lt;br /&gt;
	if pos then&lt;br /&gt;
		local tiles = sheetWidth / width -- количество спрайтов в одной строке&lt;br /&gt;
		local left = pos % tiles * width * scale -- горизонтальная координата спрайта&lt;br /&gt;
		local top = math.floor( pos / tiles ) * height * scale -- вертикальная координата спрайта&lt;br /&gt;
		&lt;br /&gt;
		if css_image == &amp;#039;mask&amp;#039; then&lt;br /&gt;
			styles[#styles + 1] = &amp;#039;-webkit-mask-position:-&amp;#039; .. left .. &amp;#039;px -&amp;#039; .. top .. &amp;#039;px&amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
		styles[#styles + 1] = css_image .. &amp;#039;-position:-&amp;#039; .. left .. &amp;#039;px -&amp;#039; .. top .. &amp;#039;px&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local autoScale = setting( &amp;#039;автомасштаб&amp;#039; ) -- автоматическое применение масштабирования&lt;br /&gt;
	if not autoScale and scale ~= defaultStyle[&amp;#039;масштаб&amp;#039;] then&lt;br /&gt;
		if css_image == &amp;#039;mask&amp;#039; then&lt;br /&gt;
			styles[#styles + 1] = &amp;#039;-webkit-mask-size:&amp;#039; .. sheetWidth * scale .. &amp;#039;px auto&amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
		styles[#styles +1] = css_image .. &amp;#039;-size:&amp;#039; .. sheetWidth * scale .. &amp;#039;px auto&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	if height ~= defaultStyle[&amp;#039;разм&amp;#039;] or width ~= defaultStyle[&amp;#039;разм&amp;#039;] or ( not autoScale and scale ~= defaultStyle[&amp;#039;масштаб&amp;#039;] ) then&lt;br /&gt;
		styles[#styles + 1] = &amp;#039;height:&amp;#039; .. height * scale .. &amp;#039;px&amp;#039;&lt;br /&gt;
		styles[#styles + 1] = &amp;#039;width:&amp;#039; .. width * scale .. &amp;#039;px&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local align = setting( &amp;#039;выравн&amp;#039; ) -- выравнивание по вертикали&lt;br /&gt;
	if align ~= defaultStyle[&amp;#039;выравн&amp;#039;] then&lt;br /&gt;
		styles[#styles + 1] = &amp;#039;--sprite-vertical-align:&amp;#039; .. align&lt;br /&gt;
	end&lt;br /&gt;
	styles[#styles + 1] = setting( &amp;#039;css&amp;#039; )&lt;br /&gt;
	&lt;br /&gt;
	sprite:cssText( table.concat( styles, &amp;#039;;&amp;#039; ) )&lt;br /&gt;
	&lt;br /&gt;
	local text = setting( &amp;#039;текст&amp;#039; )&lt;br /&gt;
	local root&lt;br /&gt;
	local spriteText&lt;br /&gt;
	if text and (text ~= &amp;#039;нет&amp;#039;) then&lt;br /&gt;
		if not args[&amp;#039;перенос&amp;#039;] then&lt;br /&gt;
			root = mw.html.create( &amp;#039;span&amp;#039; ):addClass( &amp;#039;nowrap&amp;#039; )&lt;br /&gt;
		end&lt;br /&gt;
		spriteText = mw.html.create( &amp;#039;span&amp;#039; ):addClass( &amp;#039;sprite-text&amp;#039; ):wikitext( text )&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local title = setting( &amp;#039;назв&amp;#039; )&lt;br /&gt;
	if title then&lt;br /&gt;
		( root or sprite ):attr( &amp;#039;title&amp;#039;, title )&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if not root then&lt;br /&gt;
		root = mw.html.create( &amp;#039;&amp;#039; )&lt;br /&gt;
	end&lt;br /&gt;
	root:node( sprite )&lt;br /&gt;
	if spriteText then&lt;br /&gt;
		root:node( spriteText )&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local link = setting( &amp;#039;ссылка&amp;#039; ) or &amp;#039;&amp;#039;&lt;br /&gt;
	if link ~= &amp;#039;&amp;#039; and mw.ustring.lower( link ) ~= &amp;#039;нет&amp;#039; then&lt;br /&gt;
		-- Внешняя ссылка&lt;br /&gt;
		if link:find( &amp;#039;//&amp;#039; ) then&lt;br /&gt;
			return &amp;#039;[&amp;#039; .. link .. &amp;#039; &amp;#039; .. tostring( root ) .. &amp;#039;]&amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		-- Внутренняя ссылка&lt;br /&gt;
		local linkPrefix = setting( &amp;#039;предссылки&amp;#039; ) or &amp;#039;&amp;#039;&lt;br /&gt;
		return &amp;#039;[[&amp;#039; .. linkPrefix .. link .. &amp;#039;|&amp;#039; .. tostring( root ) .. &amp;#039;]]&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return tostring( root )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.sprite( f )&lt;br /&gt;
	local args = f&lt;br /&gt;
	if f == mw.getCurrentFrame() then&lt;br /&gt;
		args = require( &amp;#039;Модуль:ProcessArgs&amp;#039; ).merge( true )&lt;br /&gt;
	else&lt;br /&gt;
		f = mw.getCurrentFrame()&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local data = args[&amp;#039;данные&amp;#039;] and mw.loadData( &amp;#039;Модуль:&amp;#039; .. args[&amp;#039;данные&amp;#039;] ) or {}&lt;br /&gt;
	local categories = {}&lt;br /&gt;
	local idData = args[&amp;#039;данныеID&amp;#039;]&lt;br /&gt;
	if not idData then&lt;br /&gt;
		local name = args[&amp;#039;имя&amp;#039;] or data[&amp;#039;настройки&amp;#039;][&amp;#039;имя&amp;#039;]&lt;br /&gt;
		local id = mw.text.trim( tostring( args[1] or &amp;#039;&amp;#039; ) )&lt;br /&gt;
		idData = data[&amp;#039;IDы&amp;#039;][id] or data[&amp;#039;IDы&amp;#039;][mw.ustring.lower( id ):gsub( &amp;#039;[_%s%+]&amp;#039;, &amp;#039;-&amp;#039; )]&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local title = mw.title.getCurrentTitle()&lt;br /&gt;
	-- Отключение категоризации на страницах обсуждения и в пространстве имён «Участник»&lt;br /&gt;
	local disallowCats = args[&amp;#039;некат&amp;#039;] or title.isTalkPage or title.namespace == 2&lt;br /&gt;
	if idData then&lt;br /&gt;
		if idData[&amp;#039;устарел&amp;#039;] then&lt;br /&gt;
			args[&amp;#039;класс&amp;#039;] = ( args[&amp;#039;класс&amp;#039;] or &amp;#039;&amp;#039; ) .. &amp;#039; sprite-deprecated&amp;#039;&lt;br /&gt;
			if not disallowCats then&lt;br /&gt;
				categories[#categories + 1] = &amp;#039;[[Категория:Страницы с устаревшими названиями спрайтов]]&amp;#039;&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		args[&amp;#039;поз&amp;#039;] = idData[&amp;#039;поз&amp;#039;]&lt;br /&gt;
		args[&amp;#039;страница&amp;#039;] = idData[&amp;#039;страница&amp;#039;]&lt;br /&gt;
	elseif not disallowCats then&lt;br /&gt;
		categories[#categories + 1] = &amp;#039;[[Категория:Страницы с отсутствующими спрайтами]]&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return p.base( args ), table.concat( categories )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.link( f )&lt;br /&gt;
	local args = f&lt;br /&gt;
	if f == mw.getCurrentFrame() then&lt;br /&gt;
		args = require( &amp;#039;Модуль:ProcessArgs&amp;#039; ).merge( true )&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local link = args[1]&lt;br /&gt;
	if args[1] and not args[&amp;#039;ID&amp;#039;] then&lt;br /&gt;
		link = args[1]:match( &amp;#039;^(.-)%+&amp;#039; ) or args[1]&lt;br /&gt;
	end&lt;br /&gt;
	local text&lt;br /&gt;
	if not args[&amp;#039;безтекста&amp;#039;] then&lt;br /&gt;
		text = args[&amp;#039;текст&amp;#039;] or args[2] or link&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	args[1] = args[&amp;#039;ID&amp;#039;] or args[1]&lt;br /&gt;
	args[&amp;#039;ссылка&amp;#039;] = args[&amp;#039;ссылка&amp;#039;] or link&lt;br /&gt;
	args[&amp;#039;текст&amp;#039;] = text&lt;br /&gt;
	&lt;br /&gt;
	return p.sprite( args )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.doc( f )&lt;br /&gt;
	local args = f&lt;br /&gt;
	if f == mw.getCurrentFrame() then&lt;br /&gt;
		args = f.args&lt;br /&gt;
	else&lt;br /&gt;
		f = mw.getCurrentFrame()&lt;br /&gt;
	end&lt;br /&gt;
	local dataPage = mw.text.trim( args[1] )&lt;br /&gt;
	local data = mw.loadData( &amp;#039;Модуль:&amp;#039; .. dataPage )&lt;br /&gt;
	&lt;br /&gt;
	local getProtection = function( title, action, extra )&lt;br /&gt;
		local protections = { &amp;#039;edit&amp;#039; }&lt;br /&gt;
		if extra then&lt;br /&gt;
			protections[#protections + 1] = extra&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		local addProtection = function( protection )&lt;br /&gt;
			if protection == &amp;#039;autoconfirmed&amp;#039; then&lt;br /&gt;
				protection = &amp;#039;editsemiprotected&amp;#039;&lt;br /&gt;
			elseif protection == &amp;#039;sysop&amp;#039; then&lt;br /&gt;
				protection = &amp;#039;editprotected&amp;#039;&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			protections[#protections + 1] = protection&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		local direct = title.protectionLevels[action] or {}&lt;br /&gt;
		for _, protection in ipairs( direct ) do&lt;br /&gt;
			addProtection( protection )&lt;br /&gt;
		end&lt;br /&gt;
		local cascading = title.cascadingProtection.restrictions[action] or {}&lt;br /&gt;
		if #cascading &amp;gt; 0 then&lt;br /&gt;
			protections[#protections + 1] = &amp;#039;protect&amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
		for _, protection in ipairs( cascading ) do&lt;br /&gt;
			addProtection( protection )&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		return table.concat( protections, &amp;#039;,&amp;#039; )&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local spriteStyle = &amp;#039;&amp;#039;&lt;br /&gt;
	if data[&amp;#039;настройки&amp;#039;].url and data[&amp;#039;настройки&amp;#039;].url.style then&lt;br /&gt;
		spriteStyle = data[&amp;#039;настройки&amp;#039;].url.style&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local dataTitle = mw.title.new( &amp;#039;Модуль:&amp;#039; .. dataPage )&lt;br /&gt;
	-- Временно, пока не будет обновлено&lt;br /&gt;
	local spritesheet = data[&amp;#039;настройки&amp;#039;][&amp;#039;изобр&amp;#039;] or data[&amp;#039;настройки&amp;#039;][&amp;#039;имя&amp;#039;] .. &amp;#039;CSS.png&amp;#039;&lt;br /&gt;
	local spriteTitle = mw.title.new( &amp;#039;Файл:&amp;#039; .. spritesheet )&lt;br /&gt;
	local dataProtection = getProtection( dataTitle, &amp;#039;edit&amp;#039; )&lt;br /&gt;
	local spriteProtection = getProtection( spriteTitle, &amp;#039;upload&amp;#039;, &amp;#039;upload,reupload&amp;#039; )&lt;br /&gt;
	local body = mw.html.create( &amp;#039;div&amp;#039; ):attr( {&lt;br /&gt;
		id = &amp;#039;spritedoc&amp;#039;,&lt;br /&gt;
		[&amp;#039;data-dataprotection&amp;#039;] = dataProtection,&lt;br /&gt;
		[&amp;#039;data-datatimestamp&amp;#039;] = f:callParserFunction( &amp;#039;REVISIONTIMESTAMP&amp;#039;, &amp;#039;Модуль:&amp;#039; .. dataPage ),&lt;br /&gt;
		[&amp;#039;data-datapage&amp;#039;] = &amp;#039;Модуль:&amp;#039; .. dataPage,&lt;br /&gt;
		[&amp;#039;data-spritesheet&amp;#039;] = spritesheet,&lt;br /&gt;
		[&amp;#039;data-spriteprotection&amp;#039;] = spriteProtection,&lt;br /&gt;
		[&amp;#039;data-refreshtext&amp;#039;] = mw.text.nowiki( &amp;#039;{{#invoke:Спрайт|doc|&amp;#039; .. dataPage .. &amp;#039;|refresh=1}}&amp;#039; ),&lt;br /&gt;
		[&amp;#039;data-settings&amp;#039;] = mw.text.jsonEncode( data[&amp;#039;настройки&amp;#039;] ),&lt;br /&gt;
	} )&lt;br /&gt;
	&lt;br /&gt;
	local sections = {}&lt;br /&gt;
	for _, sectionData in ipairs( data[&amp;#039;разделы&amp;#039;] or { [&amp;#039;назв&amp;#039;] = &amp;#039;Некатегоризованные&amp;#039; } ) do&lt;br /&gt;
		local sectionTag = body:tag( &amp;#039;div&amp;#039; ):addClass( &amp;#039;spritedoc-section&amp;#039; ):attr( &amp;#039;data-section-id&amp;#039;, sectionData.ID )&lt;br /&gt;
		sectionTag:tag( &amp;#039;h3&amp;#039; ):wikitext( sectionData[&amp;#039;назв&amp;#039;] )&lt;br /&gt;
		sections[sectionData.ID] = { boxes = sectionTag:tag( &amp;#039;ul&amp;#039; ):addClass( &amp;#039;spritedoc-boxes&amp;#039; ) }&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local keyedData = {}&lt;br /&gt;
	local i = 1&lt;br /&gt;
	for name, idData in pairs( data[&amp;#039;IDы&amp;#039;] ) do&lt;br /&gt;
		keyedData[i] = {&lt;br /&gt;
			sortKey = mw.ustring.lower( name ),&lt;br /&gt;
			name = name,&lt;br /&gt;
			data = idData&lt;br /&gt;
		}&lt;br /&gt;
		i = i + 1&lt;br /&gt;
	end&lt;br /&gt;
	table.sort( keyedData, function( a, b )&lt;br /&gt;
		return a.sortKey &amp;lt; b.sortKey&lt;br /&gt;
	end )&lt;br /&gt;
	&lt;br /&gt;
	for _, data in ipairs( keyedData ) do&lt;br /&gt;
		local idData = data.data&lt;br /&gt;
		local pos = idData[&amp;#039;поз&amp;#039;]&lt;br /&gt;
		local section = sections[idData[&amp;#039;раздел&amp;#039;]]&lt;br /&gt;
		local names = section[pos]&lt;br /&gt;
		if not names then&lt;br /&gt;
			local box = section.boxes:tag( &amp;#039;li&amp;#039; ):addClass( &amp;#039;spritedoc-box&amp;#039; ):attr( &amp;#039;data-pos&amp;#039;, pos )&lt;br /&gt;
			box:tag( &amp;#039;div&amp;#039; ):addClass( &amp;#039;spritedoc-image&amp;#039; )&lt;br /&gt;
				:wikitext( p.base{ [&amp;#039;поз&amp;#039;] = pos, [&amp;#039;данные&amp;#039;] = dataPage, nourl = spriteStyle ~= &amp;#039;&amp;#039; } )&lt;br /&gt;
			&lt;br /&gt;
			names = box:tag( &amp;#039;ul&amp;#039; ):addClass( &amp;#039;spritedoc-names&amp;#039; )&lt;br /&gt;
			section[pos] = names&lt;br /&gt;
		end&lt;br /&gt;
		local nameElem = mw.html.create( &amp;#039;li&amp;#039; ):addClass( &amp;#039;spritedoc-name&amp;#039; )&lt;br /&gt;
		local codeElem = nameElem:tag( &amp;#039;code&amp;#039; ):wikitext( data.name )&lt;br /&gt;
		&lt;br /&gt;
		if idData[&amp;#039;устарел&amp;#039;] then&lt;br /&gt;
			codeElem:addClass( &amp;#039;spritedoc-deprecated&amp;#039; )&lt;br /&gt;
		end&lt;br /&gt;
		names:wikitext( tostring( nameElem ) )&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if args[&amp;#039;обновить&amp;#039;] then&lt;br /&gt;
		return &amp;#039;&amp;#039;, &amp;#039;&amp;#039;, tostring( body )&lt;br /&gt;
	end&lt;br /&gt;
	local styles = f:extensionTag( &amp;#039;templatestyles&amp;#039;, &amp;#039;&amp;#039;, { src = &amp;#039;Спрайт/doc.css&amp;#039; } )&lt;br /&gt;
	return styles, spriteStyle, tostring( body )&lt;br /&gt;
end&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>minecraftwiki&gt;BabylonAS</name></author>
	</entry>
</feed>