<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://wiki.antidotez.ru/mediawiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Antidote</id>
	<title>Antidote&#039;z wiki - Вклад [ru]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.antidotez.ru/mediawiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Antidote"/>
	<link rel="alternate" type="text/html" href="https://wiki.antidotez.ru/wiki/%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/Antidote"/>
	<updated>2026-06-16T09:01:59Z</updated>
	<subtitle>Вклад</subtitle>
	<generator>MediaWiki 1.45.1</generator>
	<entry>
		<id>https://wiki.antidotez.ru/mediawiki/index.php?title=V2rayNG&amp;diff=466</id>
		<title>V2rayNG</title>
		<link rel="alternate" type="text/html" href="https://wiki.antidotez.ru/mediawiki/index.php?title=V2rayNG&amp;diff=466"/>
		<updated>2026-05-31T05:44:31Z</updated>

		<summary type="html">&lt;p&gt;Antidote: /* Выбор приложений для использования VPN */ Изменение положения плашки&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Описание ==&lt;br /&gt;
[[Файл:V2rayng icon.png|справа|безрамки|133x133пкс]]&lt;br /&gt;
&#039;&#039;&#039;v2rayNG&#039;&#039;&#039; - это приложение для Android, которое служит клиентом для работы с V2Ray, инструментом для обхода интернет-цензуры и обеспечения конфиденциальности в сети.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Github проекта:&#039;&#039;&#039; [https://github.com/2dust/v2rayNG/]&lt;br /&gt;
&lt;br /&gt;
== Скачивание ==&lt;br /&gt;
:➡️ [https://nextcloud.antidotez.ru/s/BPjMYiFij7aSGtP/download Версия 2.1.7]&lt;br /&gt;
&lt;br /&gt;
== Конфигурация ==&lt;br /&gt;
&lt;br /&gt;
=== Добавление профиля подключения ===&lt;br /&gt;
На данном этапе мы добавим профиль подключения к серверу.&lt;br /&gt;
{{Note|text=Для добавления подключения у вас должна быть скопированная в буфер обмена ссылка на подключение}}&lt;br /&gt;
* Запускаем приложение, в главном окне программы открываем боковое меню &#039;&#039;(Скриншот №1)&#039;&#039;, выбираем пункт &#039;&#039;&#039;&amp;quot;Группы&amp;quot;&#039;&#039;&#039;, попадаем в окно списка групп &#039;&#039;(Скриншот №2)&#039;&#039; и дальше нажимаем &#039;&#039;&#039;&amp;quot;+&amp;quot;&#039;&#039;&#039; для добавления новой группы&lt;br /&gt;
&lt;br /&gt;
* В открывшемся окне задаем любое название группы (например &#039;&#039;&amp;quot;Группа1&amp;quot;&#039;&#039;), в поле &#039;&#039;&#039;&amp;quot;URL&amp;quot;&#039;&#039;&#039; вставляем ссылку на подключение, ставим галочку &#039;&#039;&#039;&amp;quot;Использовать автообновление&amp;quot;&#039;&#039;&#039;, сохраняем изменения нажатием на галочку сверху справа &#039;&#039;(Скриншот №3)&#039;&#039;&lt;br /&gt;
* Нажимаем кнопку ↺ для обновления параметров подключения (внизу должно показаться уведомление &#039;&#039;&amp;quot;Успешно&amp;quot;&#039;&#039;, если так, то все нормально) &#039;&#039;(Скриншот №2)&#039;&#039;&lt;br /&gt;
&amp;lt;gallery mode=&amp;quot;nolines&amp;quot; heights=&amp;quot;180&amp;quot;&amp;gt;&lt;br /&gt;
Файл:Screenshot 2025-07-27-20-20-19-416.jpg|&#039;&#039;Скриншот №1&#039;&#039; Боковое меню приложения&lt;br /&gt;
Файл:Screenshot 2025-07-31-18-43-30-119 com.v2ray.ang.jpg|&#039;&#039;Скриншот №2&#039;&#039; Окно списка групп&lt;br /&gt;
Файл:Screenshot 2025-07-31-18-43-25-167 com.v2ray.ang.jpg|&#039;&#039;Скриншот №3&#039;&#039; Окно настроек группы&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Выбор приложений для использования VPN ===&lt;br /&gt;
{{Note|type=warning|text=Крайне рекомендуется включать только те приложения, которым действительно нужно VPN подключение!}}Настроим приложение так, чтобы только определенные приложения использовали VPN подключение. Переходим через боковое меню &#039;&#039;(Скриншот №1)&#039;&#039; в &#039;&#039;&#039;&amp;quot;Выбор приложений&amp;quot;,&#039;&#039;&#039; включаем переключатель &#039;&#039;&#039;&amp;quot;Использовать выбор приложений&amp;quot;&#039;&#039;&#039; и выбираем приложения которые будут использовать VPN подключение &#039;&#039;(Скриншот №4)&#039;&#039;.&amp;lt;gallery mode=&amp;quot;nolines&amp;quot; heights=&amp;quot;180&amp;quot;&amp;gt;&lt;br /&gt;
Файл:Screenshot 2025-07-27-20-20-38-860.jpg|&#039;&#039;Скриншот №4&#039;&#039; Выбор приложений для использования VPN&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Маршрутизация ===&lt;br /&gt;
&lt;br /&gt;
На данном этапе мы настроим правила подключения к сайтам (так называемая &#039;&#039;маршрутизация&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
* Заходим в &#039;&#039;&#039;&amp;quot;Файлы ресурсов&amp;quot;&#039;&#039;&#039; через боковую панель, нажимаем на &#039;&#039;&#039;&amp;quot;Источник геофайлов&amp;quot;&#039;&#039;&#039; и выбираем &#039;&#039;&amp;quot;runetfreedom/russia-v2ray-rules-dat&amp;quot;&#039;&#039;. После этого нажимаем иконку для скачивания геофайлов (облачко со стрелкой вниз).&lt;br /&gt;
&lt;br /&gt;
* Копируем данный код в буфер обмена:&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot; start=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
[{&amp;quot;enabled&amp;quot;:true,&amp;quot;ip&amp;quot;:[&amp;quot;geoip:private&amp;quot;],&amp;quot;locked&amp;quot;:false,&amp;quot;outboundTag&amp;quot;:&amp;quot;direct&amp;quot;,&amp;quot;remarks&amp;quot;:&amp;quot;Частные IP&amp;quot;},{&amp;quot;domain&amp;quot;:[&amp;quot;geosite:private&amp;quot;],&amp;quot;enabled&amp;quot;:true,&amp;quot;locked&amp;quot;:false,&amp;quot;outboundTag&amp;quot;:&amp;quot;direct&amp;quot;,&amp;quot;remarks&amp;quot;:&amp;quot;Частные домены&amp;quot;},{&amp;quot;domain&amp;quot;:[&amp;quot;geosite:category-ads-all&amp;quot;],&amp;quot;enabled&amp;quot;:true,&amp;quot;locked&amp;quot;:false,&amp;quot;outboundTag&amp;quot;:&amp;quot;block&amp;quot;,&amp;quot;remarks&amp;quot;:&amp;quot;🚫 Блокировка рекламы&amp;quot;},{&amp;quot;domain&amp;quot;:[&amp;quot;geosite:ru-blocked&amp;quot;],&amp;quot;enabled&amp;quot;:true,&amp;quot;locked&amp;quot;:false,&amp;quot;outboundTag&amp;quot;:&amp;quot;proxy&amp;quot;,&amp;quot;remarks&amp;quot;:&amp;quot;➡️ Заблокированные ресурсы&amp;quot;},{&amp;quot;enabled&amp;quot;:true,&amp;quot;ip&amp;quot;:[&amp;quot;geoip:ru-blocked&amp;quot;],&amp;quot;locked&amp;quot;:false,&amp;quot;outboundTag&amp;quot;:&amp;quot;proxy&amp;quot;,&amp;quot;remarks&amp;quot;:&amp;quot;➡️ Заблокированные IP&amp;quot;},{&amp;quot;enabled&amp;quot;:true,&amp;quot;ip&amp;quot;:[&amp;quot;geoip:telegram&amp;quot;],&amp;quot;locked&amp;quot;:false,&amp;quot;outboundTag&amp;quot;:&amp;quot;proxy&amp;quot;,&amp;quot;remarks&amp;quot;:&amp;quot;✉️ Telegram&amp;quot;},{&amp;quot;enabled&amp;quot;:true,&amp;quot;locked&amp;quot;:false,&amp;quot;outboundTag&amp;quot;:&amp;quot;direct&amp;quot;,&amp;quot;port&amp;quot;:&amp;quot;0-65535&amp;quot;,&amp;quot;remarks&amp;quot;:&amp;quot;✅ Остальное напрямую&amp;quot;}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* В боковом меню &#039;&#039;(Скриншот №1)&#039;&#039; выбираем пункт &#039;&#039;&#039;&amp;quot;Маршрутизация&amp;quot;&#039;&#039;&#039;, откроется окно настроек маршрутизации &#039;&#039;(Скриншот №5)&#039;&#039;. Нажимаем справа сверху три точки и выбираем &#039;&#039;&#039;&amp;quot;Импорт правил из буфера обмена&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;gallery mode=&amp;quot;nolines&amp;quot; heights=&amp;quot;180&amp;quot;&amp;gt;&lt;br /&gt;
Файл:Screenshot 2025-07-27-23-30-39-356.jpg|&#039;&#039;Скриншот №5&#039;&#039; Окно настроек маршрутизации&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Note|type=error|text=Настоятельно рекомендуется не пропускать данный шаг, иначе велика вероятность неработоспособности большинства сайтов! }}&lt;br /&gt;
&lt;br /&gt;
=== Дополнительные настройки ===&lt;br /&gt;
Перейдите через боковое меню в &#039;&#039;&#039;&amp;quot;Настройки&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Включите &#039;&#039;&#039;&amp;quot;Динамически менять порт локального прокси&amp;quot;&#039;&#039;&#039;. Ниже, в &#039;&#039;&#039;&amp;quot;Пользователь локального прокси&amp;quot;&#039;&#039;&#039; впишите любое имя пользователя (на латинице). В &#039;&#039;&#039;&amp;quot;Пароль локального прокси&amp;quot;&#039;&#039;&#039; создайте любой стойкий пароль. Эти данные нужны для самой программы, поэтому можно задавать любые значения, нам они не понадобятся.&lt;br /&gt;
&lt;br /&gt;
=== Запуск подключения ===&lt;br /&gt;
После всех этих манипуляций у вас появится подключение (одно или несколько) в главном окне программы. Если у вас их несколько, выбирать активное подключение можно тапом по нему (&#039;&#039;активное подключение выделено полосой слева&#039;&#039;). Для запуска подключения нажмите кнопку ▶ справа снизу.&lt;br /&gt;
&lt;br /&gt;
[[Категория:VPN_клиенты]]&lt;/div&gt;</summary>
		<author><name>Antidote</name></author>
	</entry>
	<entry>
		<id>https://wiki.antidotez.ru/mediawiki/index.php?title=V2rayNG&amp;diff=465</id>
		<title>V2rayNG</title>
		<link rel="alternate" type="text/html" href="https://wiki.antidotez.ru/mediawiki/index.php?title=V2rayNG&amp;diff=465"/>
		<updated>2026-05-31T05:43:04Z</updated>

		<summary type="html">&lt;p&gt;Antidote: /* Маршрутизация */ Обновление правил, замена геофайлов на runetfreedom, добавление доп настроек приложения&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Описание ==&lt;br /&gt;
[[Файл:V2rayng icon.png|справа|безрамки|133x133пкс]]&lt;br /&gt;
&#039;&#039;&#039;v2rayNG&#039;&#039;&#039; - это приложение для Android, которое служит клиентом для работы с V2Ray, инструментом для обхода интернет-цензуры и обеспечения конфиденциальности в сети.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Github проекта:&#039;&#039;&#039; [https://github.com/2dust/v2rayNG/]&lt;br /&gt;
&lt;br /&gt;
== Скачивание ==&lt;br /&gt;
:➡️ [https://nextcloud.antidotez.ru/s/BPjMYiFij7aSGtP/download Версия 2.1.7]&lt;br /&gt;
&lt;br /&gt;
== Конфигурация ==&lt;br /&gt;
&lt;br /&gt;
=== Добавление профиля подключения ===&lt;br /&gt;
На данном этапе мы добавим профиль подключения к серверу.&lt;br /&gt;
{{Note|text=Для добавления подключения у вас должна быть скопированная в буфер обмена ссылка на подключение}}&lt;br /&gt;
* Запускаем приложение, в главном окне программы открываем боковое меню &#039;&#039;(Скриншот №1)&#039;&#039;, выбираем пункт &#039;&#039;&#039;&amp;quot;Группы&amp;quot;&#039;&#039;&#039;, попадаем в окно списка групп &#039;&#039;(Скриншот №2)&#039;&#039; и дальше нажимаем &#039;&#039;&#039;&amp;quot;+&amp;quot;&#039;&#039;&#039; для добавления новой группы&lt;br /&gt;
&lt;br /&gt;
* В открывшемся окне задаем любое название группы (например &#039;&#039;&amp;quot;Группа1&amp;quot;&#039;&#039;), в поле &#039;&#039;&#039;&amp;quot;URL&amp;quot;&#039;&#039;&#039; вставляем ссылку на подключение, ставим галочку &#039;&#039;&#039;&amp;quot;Использовать автообновление&amp;quot;&#039;&#039;&#039;, сохраняем изменения нажатием на галочку сверху справа &#039;&#039;(Скриншот №3)&#039;&#039;&lt;br /&gt;
* Нажимаем кнопку ↺ для обновления параметров подключения (внизу должно показаться уведомление &#039;&#039;&amp;quot;Успешно&amp;quot;&#039;&#039;, если так, то все нормально) &#039;&#039;(Скриншот №2)&#039;&#039;&lt;br /&gt;
&amp;lt;gallery mode=&amp;quot;nolines&amp;quot; heights=&amp;quot;180&amp;quot;&amp;gt;&lt;br /&gt;
Файл:Screenshot 2025-07-27-20-20-19-416.jpg|&#039;&#039;Скриншот №1&#039;&#039; Боковое меню приложения&lt;br /&gt;
Файл:Screenshot 2025-07-31-18-43-30-119 com.v2ray.ang.jpg|&#039;&#039;Скриншот №2&#039;&#039; Окно списка групп&lt;br /&gt;
Файл:Screenshot 2025-07-31-18-43-25-167 com.v2ray.ang.jpg|&#039;&#039;Скриншот №3&#039;&#039; Окно настроек группы&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Выбор приложений для использования VPN ===&lt;br /&gt;
{{Note|type=warning|text=Крайне рекомендуется включать только те приложения, которым действительно нужно VPN подключение!}}Настроим приложение так, чтобы только определенные приложения использовали VPN подключение. Переходим через боковое меню &#039;&#039;(Скриншот №1)&#039;&#039; в &#039;&#039;&#039;&amp;quot;Выбор приложений&amp;quot;,&#039;&#039;&#039; включаем переключатель &#039;&#039;&#039;&amp;quot;Использовать выбор приложений&amp;quot;&#039;&#039;&#039; и выбираем приложения которые будут использовать VPN подключение &#039;&#039;(Скриншот №4)&#039;&#039;.&amp;lt;gallery mode=&amp;quot;nolines&amp;quot; heights=&amp;quot;180&amp;quot;&amp;gt;&lt;br /&gt;
Файл:Screenshot 2025-07-27-20-20-38-860.jpg|&#039;&#039;Скриншот №4&#039;&#039; Выбор приложений для использования VPN&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Маршрутизация ===&lt;br /&gt;
&lt;br /&gt;
На данном этапе мы настроим правила подключения к сайтам (так называемая &#039;&#039;маршрутизация&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
* Заходим в &#039;&#039;&#039;&amp;quot;Файлы ресурсов&amp;quot;&#039;&#039;&#039; через боковую панель, нажимаем на &#039;&#039;&#039;&amp;quot;Источник геофайлов&amp;quot;&#039;&#039;&#039; и выбираем &#039;&#039;&amp;quot;runetfreedom/russia-v2ray-rules-dat&amp;quot;&#039;&#039;. После этого нажимаем иконку для скачивания геофайлов (облачко со стрелкой вниз).&lt;br /&gt;
&lt;br /&gt;
* Копируем данный код в буфер обмена:&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot; start=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
[{&amp;quot;enabled&amp;quot;:true,&amp;quot;ip&amp;quot;:[&amp;quot;geoip:private&amp;quot;],&amp;quot;locked&amp;quot;:false,&amp;quot;outboundTag&amp;quot;:&amp;quot;direct&amp;quot;,&amp;quot;remarks&amp;quot;:&amp;quot;Частные IP&amp;quot;},{&amp;quot;domain&amp;quot;:[&amp;quot;geosite:private&amp;quot;],&amp;quot;enabled&amp;quot;:true,&amp;quot;locked&amp;quot;:false,&amp;quot;outboundTag&amp;quot;:&amp;quot;direct&amp;quot;,&amp;quot;remarks&amp;quot;:&amp;quot;Частные домены&amp;quot;},{&amp;quot;domain&amp;quot;:[&amp;quot;geosite:category-ads-all&amp;quot;],&amp;quot;enabled&amp;quot;:true,&amp;quot;locked&amp;quot;:false,&amp;quot;outboundTag&amp;quot;:&amp;quot;block&amp;quot;,&amp;quot;remarks&amp;quot;:&amp;quot;🚫 Блокировка рекламы&amp;quot;},{&amp;quot;domain&amp;quot;:[&amp;quot;geosite:ru-blocked&amp;quot;],&amp;quot;enabled&amp;quot;:true,&amp;quot;locked&amp;quot;:false,&amp;quot;outboundTag&amp;quot;:&amp;quot;proxy&amp;quot;,&amp;quot;remarks&amp;quot;:&amp;quot;➡️ Заблокированные ресурсы&amp;quot;},{&amp;quot;enabled&amp;quot;:true,&amp;quot;ip&amp;quot;:[&amp;quot;geoip:ru-blocked&amp;quot;],&amp;quot;locked&amp;quot;:false,&amp;quot;outboundTag&amp;quot;:&amp;quot;proxy&amp;quot;,&amp;quot;remarks&amp;quot;:&amp;quot;➡️ Заблокированные IP&amp;quot;},{&amp;quot;enabled&amp;quot;:true,&amp;quot;ip&amp;quot;:[&amp;quot;geoip:telegram&amp;quot;],&amp;quot;locked&amp;quot;:false,&amp;quot;outboundTag&amp;quot;:&amp;quot;proxy&amp;quot;,&amp;quot;remarks&amp;quot;:&amp;quot;✉️ Telegram&amp;quot;},{&amp;quot;enabled&amp;quot;:true,&amp;quot;locked&amp;quot;:false,&amp;quot;outboundTag&amp;quot;:&amp;quot;direct&amp;quot;,&amp;quot;port&amp;quot;:&amp;quot;0-65535&amp;quot;,&amp;quot;remarks&amp;quot;:&amp;quot;✅ Остальное напрямую&amp;quot;}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* В боковом меню &#039;&#039;(Скриншот №1)&#039;&#039; выбираем пункт &#039;&#039;&#039;&amp;quot;Маршрутизация&amp;quot;&#039;&#039;&#039;, откроется окно настроек маршрутизации &#039;&#039;(Скриншот №5)&#039;&#039;. Нажимаем справа сверху три точки и выбираем &#039;&#039;&#039;&amp;quot;Импорт правил из буфера обмена&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;gallery mode=&amp;quot;nolines&amp;quot; heights=&amp;quot;180&amp;quot;&amp;gt;&lt;br /&gt;
Файл:Screenshot 2025-07-27-23-30-39-356.jpg|&#039;&#039;Скриншот №5&#039;&#039; Окно настроек маршрутизации&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Дополнительные настройки ===&lt;br /&gt;
Перейдите через боковое меню в &#039;&#039;&#039;&amp;quot;Настройки&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Включите &#039;&#039;&#039;&amp;quot;Динамически менять порт локального прокси&amp;quot;&#039;&#039;&#039;. Ниже, в &#039;&#039;&#039;&amp;quot;Пользователь локального прокси&amp;quot;&#039;&#039;&#039; впишите любое имя пользователя (на латинице). В &#039;&#039;&#039;&amp;quot;Пароль локального прокси&amp;quot;&#039;&#039;&#039; создайте любой стойкий пароль. Эти данные нужны для самой программы, поэтому можно задавать любые значения, нам они не понадобятся.&lt;br /&gt;
&lt;br /&gt;
{{Note|type=error|text=Настоятельно рекомендуется не пропускать данный шаг, иначе велика вероятность неработоспособности большинства сайтов! }}&lt;br /&gt;
&lt;br /&gt;
=== Запуск подключения ===&lt;br /&gt;
После всех этих манипуляций у вас появится подключение (одно или несколько) в главном окне программы. Если у вас их несколько, выбирать активное подключение можно тапом по нему (&#039;&#039;активное подключение выделено полосой слева&#039;&#039;). Для запуска подключения нажмите кнопку ▶ справа снизу.&lt;br /&gt;
&lt;br /&gt;
[[Категория:VPN_клиенты]]&lt;/div&gt;</summary>
		<author><name>Antidote</name></author>
	</entry>
	<entry>
		<id>https://wiki.antidotez.ru/mediawiki/index.php?title=V2rayNG&amp;diff=464</id>
		<title>V2rayNG</title>
		<link rel="alternate" type="text/html" href="https://wiki.antidotez.ru/mediawiki/index.php?title=V2rayNG&amp;diff=464"/>
		<updated>2026-05-25T15:11:01Z</updated>

		<summary type="html">&lt;p&gt;Antidote: /* Скачивание */ Обновление версии до 2.1.7&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Описание ==&lt;br /&gt;
[[Файл:V2rayng icon.png|справа|безрамки|133x133пкс]]&lt;br /&gt;
&#039;&#039;&#039;v2rayNG&#039;&#039;&#039; - это приложение для Android, которое служит клиентом для работы с V2Ray, инструментом для обхода интернет-цензуры и обеспечения конфиденциальности в сети.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Github проекта:&#039;&#039;&#039; [https://github.com/2dust/v2rayNG/]&lt;br /&gt;
&lt;br /&gt;
== Скачивание ==&lt;br /&gt;
:➡️ [https://nextcloud.antidotez.ru/s/BPjMYiFij7aSGtP/download Версия 2.1.7]&lt;br /&gt;
&lt;br /&gt;
== Конфигурация ==&lt;br /&gt;
&lt;br /&gt;
=== Добавление профиля подключения ===&lt;br /&gt;
На данном этапе мы добавим профиль подключения к серверу.&lt;br /&gt;
{{Note|text=Для добавления подключения у вас должна быть скопированная в буфер обмена ссылка на подключение}}&lt;br /&gt;
* Запускаем приложение, в главном окне программы открываем боковое меню &#039;&#039;(Скриншот №1)&#039;&#039;, выбираем пункт &#039;&#039;&#039;&amp;quot;Группы&amp;quot;&#039;&#039;&#039;, попадаем в окно списка групп &#039;&#039;(Скриншот №2)&#039;&#039; и дальше нажимаем &#039;&#039;&#039;&amp;quot;+&amp;quot;&#039;&#039;&#039; для добавления новой группы&lt;br /&gt;
&lt;br /&gt;
* В открывшемся окне задаем любое название группы (например &#039;&#039;&amp;quot;Группа1&amp;quot;&#039;&#039;), в поле &#039;&#039;&#039;&amp;quot;URL&amp;quot;&#039;&#039;&#039; вставляем ссылку на подключение, ставим галочку &#039;&#039;&#039;&amp;quot;Использовать автообновление&amp;quot;&#039;&#039;&#039;, сохраняем изменения нажатием на галочку сверху справа &#039;&#039;(Скриншот №3)&#039;&#039;&lt;br /&gt;
* Нажимаем кнопку ↺ для обновления параметров подключения (внизу должно показаться уведомление &#039;&#039;&amp;quot;Успешно&amp;quot;&#039;&#039;, если так, то все нормально) &#039;&#039;(Скриншот №2)&#039;&#039;&lt;br /&gt;
&amp;lt;gallery mode=&amp;quot;nolines&amp;quot; heights=&amp;quot;180&amp;quot;&amp;gt;&lt;br /&gt;
Файл:Screenshot 2025-07-27-20-20-19-416.jpg|&#039;&#039;Скриншот №1&#039;&#039; Боковое меню приложения&lt;br /&gt;
Файл:Screenshot 2025-07-31-18-43-30-119 com.v2ray.ang.jpg|&#039;&#039;Скриншот №2&#039;&#039; Окно списка групп&lt;br /&gt;
Файл:Screenshot 2025-07-31-18-43-25-167 com.v2ray.ang.jpg|&#039;&#039;Скриншот №3&#039;&#039; Окно настроек группы&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Выбор приложений для использования VPN ===&lt;br /&gt;
{{Note|type=warning|text=Крайне рекомендуется включать только те приложения, которым действительно нужно VPN подключение!}}Настроим приложение так, чтобы только определенные приложения использовали VPN подключение. Переходим через боковое меню &#039;&#039;(Скриншот №1)&#039;&#039; в &#039;&#039;&#039;&amp;quot;Выбор приложений&amp;quot;&#039;&#039;&#039; и выбираем приложения которые будут использовать VPN подключение &#039;&#039;(Скриншот №4)&#039;&#039;.&amp;lt;gallery mode=&amp;quot;nolines&amp;quot; heights=&amp;quot;180&amp;quot;&amp;gt;&lt;br /&gt;
Файл:Screenshot 2025-07-27-20-20-38-860.jpg|&#039;&#039;Скриншот №4&#039;&#039; Выбор приложений для использования VPN&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Маршрутизация ===&lt;br /&gt;
&lt;br /&gt;
На данном этапе мы настроим правила подключения к сайтам (так называемая &#039;&#039;маршрутизация&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
* Копируем данный код в буфер обмена:&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot; start=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
[{&amp;quot;domain&amp;quot;:[&amp;quot;geosite:google-gemini&amp;quot;],&amp;quot;enabled&amp;quot;:true,&amp;quot;locked&amp;quot;:false,&amp;quot;outboundTag&amp;quot;:&amp;quot;proxy&amp;quot;,&amp;quot;remarks&amp;quot;:&amp;quot;Google gemini&amp;quot;},{&amp;quot;domain&amp;quot;:[&amp;quot;geosite:youtube&amp;quot;],&amp;quot;enabled&amp;quot;:true,&amp;quot;locked&amp;quot;:false,&amp;quot;outboundTag&amp;quot;:&amp;quot;proxy&amp;quot;,&amp;quot;remarks&amp;quot;:&amp;quot;Youtube&amp;quot;},{&amp;quot;domain&amp;quot;:[&amp;quot;geosite:google&amp;quot;],&amp;quot;enabled&amp;quot;:true,&amp;quot;locked&amp;quot;:false,&amp;quot;outboundTag&amp;quot;:&amp;quot;direct&amp;quot;,&amp;quot;remarks&amp;quot;:&amp;quot;Google&amp;quot;},{&amp;quot;domain&amp;quot;:[&amp;quot;geosite:category-ads-all&amp;quot;],&amp;quot;enabled&amp;quot;:true,&amp;quot;locked&amp;quot;:false,&amp;quot;outboundTag&amp;quot;:&amp;quot;block&amp;quot;,&amp;quot;remarks&amp;quot;:&amp;quot;Блокировка рекламы&amp;quot;},{&amp;quot;enabled&amp;quot;:true,&amp;quot;ip&amp;quot;:[&amp;quot;geoip:private&amp;quot;],&amp;quot;locked&amp;quot;:false,&amp;quot;outboundTag&amp;quot;:&amp;quot;direct&amp;quot;,&amp;quot;remarks&amp;quot;:&amp;quot;Частные IP&amp;quot;},{&amp;quot;domain&amp;quot;:[&amp;quot;geosite:private&amp;quot;],&amp;quot;enabled&amp;quot;:true,&amp;quot;locked&amp;quot;:false,&amp;quot;outboundTag&amp;quot;:&amp;quot;direct&amp;quot;,&amp;quot;remarks&amp;quot;:&amp;quot;Частные домены&amp;quot;},{&amp;quot;domain&amp;quot;:[&amp;quot;geosite:category-ru&amp;quot;],&amp;quot;enabled&amp;quot;:true,&amp;quot;locked&amp;quot;:false,&amp;quot;outboundTag&amp;quot;:&amp;quot;direct&amp;quot;,&amp;quot;remarks&amp;quot;:&amp;quot;Домены России&amp;quot;},{&amp;quot;enabled&amp;quot;:true,&amp;quot;ip&amp;quot;:[&amp;quot;geoip:ru&amp;quot;],&amp;quot;locked&amp;quot;:false,&amp;quot;outboundTag&amp;quot;:&amp;quot;direct&amp;quot;,&amp;quot;remarks&amp;quot;:&amp;quot;IP России&amp;quot;}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* В боковом меню &#039;&#039;(Скриншот №1)&#039;&#039; выбираем пункт &#039;&#039;&#039;&amp;quot;Маршрутизация&amp;quot;&#039;&#039;&#039;, откроется окно настроек маршрутизации &#039;&#039;(Скриншот №5)&#039;&#039;. Нажимаем справа сверху три точки и выбираем &#039;&#039;&#039;&amp;quot;Импорт правил из буфера обмена&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;gallery mode=&amp;quot;nolines&amp;quot; heights=&amp;quot;180&amp;quot;&amp;gt;&lt;br /&gt;
Файл:Screenshot 2025-07-27-23-30-39-356.jpg|&#039;&#039;Скриншот №5&#039;&#039; Окно настроек маршрутизации&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
{{Note|type=error|text=Настоятельно рекомендуется не пропускать данный шаг, иначе велика вероятность неработоспособности большинства сайтов! }}&lt;br /&gt;
&lt;br /&gt;
=== Запуск подключения ===&lt;br /&gt;
После всех этих манипуляций у вас появится подключение (одно или несколько) в главном окне программы. Если у вас их несколько, выбирать активное подключение можно тапом по нему (&#039;&#039;активное подключение выделено полосой слева&#039;&#039;). Для запуска подключения нажмите кнопку ▶ справа снизу.&lt;br /&gt;
&lt;br /&gt;
[[Категория:VPN_клиенты]]&lt;/div&gt;</summary>
		<author><name>Antidote</name></author>
	</entry>
	<entry>
		<id>https://wiki.antidotez.ru/mediawiki/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Note/styles.css&amp;diff=463</id>
		<title>Шаблон:Note/styles.css</title>
		<link rel="alternate" type="text/html" href="https://wiki.antidotez.ru/mediawiki/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Note/styles.css&amp;diff=463"/>
		<updated>2026-04-22T20:44:08Z</updated>

		<summary type="html">&lt;p&gt;Antidote: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;.note {&lt;br /&gt;
	background-position: left 7px top 50%;&lt;br /&gt;
	padding: 0.5em 0.5em 0.5em 40px;&lt;br /&gt;
	margin: 0.5em 0;&lt;br /&gt;
	overflow: hidden;&lt;br /&gt;
	background-color: #f8f9fa;&lt;br /&gt;
	color: #333;&lt;br /&gt;
	background-repeat: no-repeat;&lt;br /&gt;
	border: 1px solid #ddd;&lt;br /&gt;
	border-radius: 4px;&lt;br /&gt;
}&lt;br /&gt;
.note-inline {&lt;br /&gt;
	display: inline-block;&lt;br /&gt;
	vertical-align: middle;&lt;br /&gt;
}&lt;br /&gt;
.note-info {&lt;br /&gt;
	background-color: #eaf3ff;&lt;br /&gt;
	color: #333;&lt;br /&gt;
	/* [[File:OOjs_UI_icon_information-progressive.svg]] */&lt;br /&gt;
	background-image: url(https://upload.wikimedia.org/wikipedia/commons/e/ec/OOjs_UI_icon_information-progressive.svg);&lt;br /&gt;
	background-size: 25px;&lt;br /&gt;
	border-color: #a3caff;&lt;br /&gt;
	padding-left: 40px;&lt;br /&gt;
	min-height: 25px;&lt;br /&gt;
}&lt;br /&gt;
.note-reminder {&lt;br /&gt;
	background-color: #fff9ea;&lt;br /&gt;
	color: #333;&lt;br /&gt;
	/* [[File:OOjs_UI_icon_lightbulb-yellow.svg]] */&lt;br /&gt;
	background-image: url(https://upload.wikimedia.org/wikipedia/commons/a/a8/OOjs_UI_icon_lightbulb-yellow.svg);&lt;br /&gt;
	background-size: 25px;&lt;br /&gt;
	border-color: #fc3;&lt;br /&gt;
	min-height: 25px;&lt;br /&gt;
}&lt;br /&gt;
.note-warn {&lt;br /&gt;
	background-color: #fff9ea;&lt;br /&gt;
	color: #333;&lt;br /&gt;
	/* [[File:OOjs_UI_icon_alert-warning.svg]] */&lt;br /&gt;
	background-image: url(https://upload.wikimedia.org/wikipedia/commons/3/3b/OOjs_UI_icon_alert-warning.svg);&lt;br /&gt;
	background-size: 25px;&lt;br /&gt;
	border-color: #fc3;&lt;br /&gt;
	min-height: 25px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.note-error {&lt;br /&gt;
	background-color: #fee7e6;&lt;br /&gt;
	color: #333;&lt;br /&gt;
	/* [[File:OOjs_UI_icon_notice-destructive.svg]] */&lt;br /&gt;
	background-image: url(https://upload.wikimedia.org/wikipedia/commons/b/bf/OOjs_UI_icon_notice-destructive.svg);&lt;br /&gt;
	background-size: 25px;&lt;br /&gt;
	border-color: #c33;&lt;br /&gt;
	min-height: 25px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media screen {&lt;br /&gt;
	html.skin-theme-clientpref-night .note {&lt;br /&gt;
		background-color: transparent;&lt;br /&gt;
	    color: inherit;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	html.skin-theme-clientpref-night .note-info {&lt;br /&gt;
		border-color: #384a64;&lt;br /&gt;
	    background-color: #1c2532;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	html.skin-theme-clientpref-night .note-warn {&lt;br /&gt;
		border-color: #64643c;&lt;br /&gt;
	    background-color: #32321e;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	html.skin-theme-clientpref-night .note-error {&lt;br /&gt;
		border-color: #642626;&lt;br /&gt;
	    background-color: #321313;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media screen and (prefers-color-scheme: dark) {&lt;br /&gt;
    /* automatic mode */&lt;br /&gt;
	html.skin-theme-clientpref-os .note {&lt;br /&gt;
		background-color: transparent;&lt;br /&gt;
    	color: inherit;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	html.skin-theme-clientpref-os .note-info {&lt;br /&gt;
		border-color: #384a64;&lt;br /&gt;
	    background-color: #1c2532;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	html.skin-theme-clientpref-os .note-warn {&lt;br /&gt;
		border-color: #64643c;&lt;br /&gt;
	    background-color: #32321e;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	html.skin-theme-clientpref-os .note-error {&lt;br /&gt;
		border-color: #642626;&lt;br /&gt;
	    background-color: #321313;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Antidote</name></author>
	</entry>
	<entry>
		<id>https://wiki.antidotez.ru/mediawiki/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Note/styles.css&amp;diff=462</id>
		<title>Шаблон:Note/styles.css</title>
		<link rel="alternate" type="text/html" href="https://wiki.antidotez.ru/mediawiki/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Note/styles.css&amp;diff=462"/>
		<updated>2026-04-22T20:32:41Z</updated>

		<summary type="html">&lt;p&gt;Antidote: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;.note {&lt;br /&gt;
	background-position: left 7px top 50%;&lt;br /&gt;
	padding: 0.5em 0.5em 0.5em 40px;&lt;br /&gt;
	margin: 0.5em 0;&lt;br /&gt;
	overflow: hidden;&lt;br /&gt;
	background-color: #f8f9fa;&lt;br /&gt;
	color: #333;&lt;br /&gt;
	background-repeat: no-repeat;&lt;br /&gt;
	border: 1px solid #ddd;&lt;br /&gt;
	border-radius: 4px;&lt;br /&gt;
}&lt;br /&gt;
.note-inline {&lt;br /&gt;
	display: inline-block;&lt;br /&gt;
	vertical-align: middle;&lt;br /&gt;
}&lt;br /&gt;
.note-info {&lt;br /&gt;
	background-color: #eaf3ff;&lt;br /&gt;
	color: #333;&lt;br /&gt;
	/* [[File:OOjs_UI_icon_information-progressive.svg]] */&lt;br /&gt;
	background-image: url(https://upload.wikimedia.org/wikipedia/commons/e/ec/OOjs_UI_icon_information-progressive.svg);&lt;br /&gt;
	background-size: 25px;&lt;br /&gt;
	border-color: #a3caff;&lt;br /&gt;
	padding-left: 40px;&lt;br /&gt;
	min-height: 25px;&lt;br /&gt;
}&lt;br /&gt;
.note-reminder {&lt;br /&gt;
	background-color: #fff9ea;&lt;br /&gt;
	color: #333;&lt;br /&gt;
	/* [[File:OOjs_UI_icon_lightbulb-yellow.svg]] */&lt;br /&gt;
	background-image: url(https://upload.wikimedia.org/wikipedia/commons/a/a8/OOjs_UI_icon_lightbulb-yellow.svg);&lt;br /&gt;
	background-size: 25px;&lt;br /&gt;
	border-color: #fc3;&lt;br /&gt;
	min-height: 25px;&lt;br /&gt;
}&lt;br /&gt;
.note-warn {&lt;br /&gt;
	background-color: #fff9ea;&lt;br /&gt;
	color: #333;&lt;br /&gt;
	/* [[File:OOjs_UI_icon_alert-warning.svg]] */&lt;br /&gt;
	background-image: url(https://upload.wikimedia.org/wikipedia/commons/3/3b/OOjs_UI_icon_alert-warning.svg);&lt;br /&gt;
	background-size: 25px;&lt;br /&gt;
	border-color: #fc3;&lt;br /&gt;
	min-height: 25px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.note-error {&lt;br /&gt;
	background-color: #fee7e6;&lt;br /&gt;
	color: #333;&lt;br /&gt;
	/* [[File:OOjs_UI_icon_notice-destructive.svg]] */&lt;br /&gt;
	background-image: url(https://upload.wikimedia.org/wikipedia/commons/b/bf/OOjs_UI_icon_notice-destructive.svg);&lt;br /&gt;
	background-size: 25px;&lt;br /&gt;
	border-color: #c33;&lt;br /&gt;
	min-height: 25px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media screen {&lt;br /&gt;
	html.skin-theme-clientpref-night .note {&lt;br /&gt;
		background-color: transparent;&lt;br /&gt;
	    color: inherit;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	html.skin-theme-clientpref-night .note-info {&lt;br /&gt;
		border-color: #45566c;&lt;br /&gt;
	    background-color: #1c2532;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	html.skin-theme-clientpref-night .note-warn {&lt;br /&gt;
		border-color: #8c8054;&lt;br /&gt;
	    background-color: #26210a;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	html.skin-theme-clientpref-night .note-error {&lt;br /&gt;
		border-color: #883e3b;&lt;br /&gt;
	    background-color: #371615;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media screen and (prefers-color-scheme: dark) {&lt;br /&gt;
    /* automatic mode */&lt;br /&gt;
	html.skin-theme-clientpref-os .note {&lt;br /&gt;
		background-color: transparent;&lt;br /&gt;
    	color: inherit;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	html.skin-theme-clientpref-os .note-info {&lt;br /&gt;
		border-color: #45566c;&lt;br /&gt;
	    background-color: #1c2532;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	html.skin-theme-clientpref-os .note-warn {&lt;br /&gt;
		border-color: #8c8054;&lt;br /&gt;
	    background-color: #26210a;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	html.skin-theme-clientpref-os .note-error {&lt;br /&gt;
		border-color: #883e3b;&lt;br /&gt;
	    background-color: #371615;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Antidote</name></author>
	</entry>
	<entry>
		<id>https://wiki.antidotez.ru/mediawiki/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Note/styles.css&amp;diff=461</id>
		<title>Шаблон:Note/styles.css</title>
		<link rel="alternate" type="text/html" href="https://wiki.antidotez.ru/mediawiki/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Note/styles.css&amp;diff=461"/>
		<updated>2026-04-20T11:08:22Z</updated>

		<summary type="html">&lt;p&gt;Antidote: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;.note {&lt;br /&gt;
	background-position: left 7px top 50%;&lt;br /&gt;
	padding: 0.5em 0.5em 0.5em 40px;&lt;br /&gt;
	margin: 0.5em 0;&lt;br /&gt;
	overflow: hidden;&lt;br /&gt;
	background-color: #f8f9fa;&lt;br /&gt;
	color: #333;&lt;br /&gt;
	background-repeat: no-repeat;&lt;br /&gt;
	border: 1px solid #ddd;&lt;br /&gt;
	border-radius: 4px;&lt;br /&gt;
}&lt;br /&gt;
.note-inline {&lt;br /&gt;
	display: inline-block;&lt;br /&gt;
	vertical-align: middle;&lt;br /&gt;
}&lt;br /&gt;
.note-info {&lt;br /&gt;
	background-color: #eaf3ff;&lt;br /&gt;
	color: #333;&lt;br /&gt;
	/* [[File:OOjs_UI_icon_information-progressive.svg]] */&lt;br /&gt;
	background-image: url(https://upload.wikimedia.org/wikipedia/commons/e/ec/OOjs_UI_icon_information-progressive.svg);&lt;br /&gt;
	background-size: 25px;&lt;br /&gt;
	border-color: #a3caff;&lt;br /&gt;
	padding-left: 40px;&lt;br /&gt;
	min-height: 25px;&lt;br /&gt;
}&lt;br /&gt;
.note-reminder {&lt;br /&gt;
	background-color: #fff9ea;&lt;br /&gt;
	color: #333;&lt;br /&gt;
	/* [[File:OOjs_UI_icon_lightbulb-yellow.svg]] */&lt;br /&gt;
	background-image: url(https://upload.wikimedia.org/wikipedia/commons/a/a8/OOjs_UI_icon_lightbulb-yellow.svg);&lt;br /&gt;
	background-size: 25px;&lt;br /&gt;
	border-color: #fc3;&lt;br /&gt;
	min-height: 25px;&lt;br /&gt;
}&lt;br /&gt;
.note-warn {&lt;br /&gt;
	background-color: #fff9ea;&lt;br /&gt;
	color: #333;&lt;br /&gt;
	/* [[File:OOjs_UI_icon_alert-warning.svg]] */&lt;br /&gt;
	background-image: url(https://upload.wikimedia.org/wikipedia/commons/3/3b/OOjs_UI_icon_alert-warning.svg);&lt;br /&gt;
	background-size: 25px;&lt;br /&gt;
	border-color: #fc3;&lt;br /&gt;
	min-height: 25px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.note-error {&lt;br /&gt;
	background-color: #fee7e6;&lt;br /&gt;
	color: #333;&lt;br /&gt;
	/* [[File:OOjs_UI_icon_notice-destructive.svg]] */&lt;br /&gt;
	background-image: url(https://upload.wikimedia.org/wikipedia/commons/b/bf/OOjs_UI_icon_notice-destructive.svg);&lt;br /&gt;
	background-size: 25px;&lt;br /&gt;
	border-color: #c33;&lt;br /&gt;
	min-height: 25px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media screen {&lt;br /&gt;
	html.skin-theme-clientpref-night .note {&lt;br /&gt;
		background-color: transparent;&lt;br /&gt;
	    color: inherit;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	html.skin-theme-clientpref-night .note-info {&lt;br /&gt;
		border-color: #45566c;&lt;br /&gt;
	    background-color: #1c2532;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	html.skin-theme-clientpref-night .note-warn {&lt;br /&gt;
		border-color: #8c8054;&lt;br /&gt;
	    background-color: #26210a;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	html.skin-theme-clientpref-night .note-error {&lt;br /&gt;
		border-color: #883e3b;&lt;br /&gt;
	    background-color: #371615;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media screen and (prefers-color-scheme: dark) {&lt;br /&gt;
    /* automatic mode */&lt;br /&gt;
	html.skin-theme-clientpref-os .note {&lt;br /&gt;
		background-color: transparent;&lt;br /&gt;
    	color: inherit;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	html.skin-theme-clientpref-night .note-info {&lt;br /&gt;
		border-color: #45566c;&lt;br /&gt;
	    background-color: #1c2532;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	html.skin-theme-clientpref-night .note-warn {&lt;br /&gt;
		border-color: #8c8054;&lt;br /&gt;
	    background-color: #26210a;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	html.skin-theme-clientpref-night .note-error {&lt;br /&gt;
		border-color: #883e3b;&lt;br /&gt;
	    background-color: #371615;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Antidote</name></author>
	</entry>
	<entry>
		<id>https://wiki.antidotez.ru/mediawiki/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Note/styles.css&amp;diff=460</id>
		<title>Шаблон:Note/styles.css</title>
		<link rel="alternate" type="text/html" href="https://wiki.antidotez.ru/mediawiki/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Note/styles.css&amp;diff=460"/>
		<updated>2026-04-20T11:06:21Z</updated>

		<summary type="html">&lt;p&gt;Antidote: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;.note {&lt;br /&gt;
	background-position: left 7px top 50%;&lt;br /&gt;
	padding: 0.5em 0.5em 0.5em 40px;&lt;br /&gt;
	margin: 0.5em 0;&lt;br /&gt;
	overflow: hidden;&lt;br /&gt;
	background-color: #f8f9fa;&lt;br /&gt;
	color: #333;&lt;br /&gt;
	background-repeat: no-repeat;&lt;br /&gt;
	border: 1px solid #ddd;&lt;br /&gt;
	border-radius: 4px;&lt;br /&gt;
}&lt;br /&gt;
.note-inline {&lt;br /&gt;
	display: inline-block;&lt;br /&gt;
	vertical-align: middle;&lt;br /&gt;
}&lt;br /&gt;
.note-info {&lt;br /&gt;
	background-color: #eaf3ff;&lt;br /&gt;
	color: #333;&lt;br /&gt;
	/* [[File:OOjs_UI_icon_information-progressive.svg]] */&lt;br /&gt;
	background-image: url(https://upload.wikimedia.org/wikipedia/commons/e/ec/OOjs_UI_icon_information-progressive.svg);&lt;br /&gt;
	background-size: 25px;&lt;br /&gt;
	border-color: #a3caff;&lt;br /&gt;
	padding-left: 40px;&lt;br /&gt;
	min-height: 25px;&lt;br /&gt;
}&lt;br /&gt;
.note-reminder {&lt;br /&gt;
	background-color: #fff9ea;&lt;br /&gt;
	color: #333;&lt;br /&gt;
	/* [[File:OOjs_UI_icon_lightbulb-yellow.svg]] */&lt;br /&gt;
	background-image: url(https://upload.wikimedia.org/wikipedia/commons/a/a8/OOjs_UI_icon_lightbulb-yellow.svg);&lt;br /&gt;
	background-size: 25px;&lt;br /&gt;
	border-color: #fc3;&lt;br /&gt;
	min-height: 25px;&lt;br /&gt;
}&lt;br /&gt;
.note-warn {&lt;br /&gt;
	background-color: #fff9ea;&lt;br /&gt;
	color: #333;&lt;br /&gt;
	/* [[File:OOjs_UI_icon_alert-warning.svg]] */&lt;br /&gt;
	background-image: url(https://upload.wikimedia.org/wikipedia/commons/3/3b/OOjs_UI_icon_alert-warning.svg);&lt;br /&gt;
	background-size: 25px;&lt;br /&gt;
	border-color: #fc3;&lt;br /&gt;
	min-height: 25px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.note-error {&lt;br /&gt;
	background-color: #fee7e6;&lt;br /&gt;
	color: #333;&lt;br /&gt;
	/* [[File:OOjs_UI_icon_notice-destructive.svg]] */&lt;br /&gt;
	background-image: url(https://upload.wikimedia.org/wikipedia/commons/b/bf/OOjs_UI_icon_notice-destructive.svg);&lt;br /&gt;
	background-size: 25px;&lt;br /&gt;
	border-color: #c33;&lt;br /&gt;
	min-height: 25px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media screen {&lt;br /&gt;
	html.skin-theme-clientpref-night .note {&lt;br /&gt;
		background-color: transparent;&lt;br /&gt;
	    color: inherit;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	html.skin-theme-clientpref-night .note-info {&lt;br /&gt;
		border-color: #45566c;&lt;br /&gt;
	    background-color: #1c2532;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	html.skin-theme-clientpref-night .note-warn {&lt;br /&gt;
		border-color: #8c8054;&lt;br /&gt;
	    background-color: #292517;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	html.skin-theme-clientpref-night .note-error {&lt;br /&gt;
		border-color: #883e3b;&lt;br /&gt;
	    background-color: #371615;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media screen and (prefers-color-scheme: dark) {&lt;br /&gt;
    /* automatic mode */&lt;br /&gt;
	html.skin-theme-clientpref-os .note {&lt;br /&gt;
		background-color: transparent;&lt;br /&gt;
    	color: inherit;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	html.skin-theme-clientpref-night .note-info {&lt;br /&gt;
		border-color: #45566c;&lt;br /&gt;
	    background-color: #1c2532;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	html.skin-theme-clientpref-night .note-warn {&lt;br /&gt;
		border-color: #8c8054;&lt;br /&gt;
	    background-color: #292517;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	html.skin-theme-clientpref-night .note-error {&lt;br /&gt;
		border-color: #883e3b;&lt;br /&gt;
	    background-color: #371615;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Antidote</name></author>
	</entry>
	<entry>
		<id>https://wiki.antidotez.ru/mediawiki/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Note/styles.css&amp;diff=459</id>
		<title>Шаблон:Note/styles.css</title>
		<link rel="alternate" type="text/html" href="https://wiki.antidotez.ru/mediawiki/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Note/styles.css&amp;diff=459"/>
		<updated>2026-04-20T11:03:47Z</updated>

		<summary type="html">&lt;p&gt;Antidote: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;.note {&lt;br /&gt;
	background-position: left 7px top 50%;&lt;br /&gt;
	padding: 0.5em 0.5em 0.5em 40px;&lt;br /&gt;
	margin: 0.5em 0;&lt;br /&gt;
	overflow: hidden;&lt;br /&gt;
	background-color: #f8f9fa;&lt;br /&gt;
	color: #333;&lt;br /&gt;
	background-repeat: no-repeat;&lt;br /&gt;
	border: 1px solid #ddd;&lt;br /&gt;
	border-radius: 4px;&lt;br /&gt;
}&lt;br /&gt;
.note-inline {&lt;br /&gt;
	display: inline-block;&lt;br /&gt;
	vertical-align: middle;&lt;br /&gt;
}&lt;br /&gt;
.note-info {&lt;br /&gt;
	background-color: #eaf3ff;&lt;br /&gt;
	color: #333;&lt;br /&gt;
	/* [[File:OOjs_UI_icon_information-progressive.svg]] */&lt;br /&gt;
	background-image: url(https://upload.wikimedia.org/wikipedia/commons/e/ec/OOjs_UI_icon_information-progressive.svg);&lt;br /&gt;
	background-size: 25px;&lt;br /&gt;
	border-color: #a3caff;&lt;br /&gt;
	padding-left: 40px;&lt;br /&gt;
	min-height: 25px;&lt;br /&gt;
}&lt;br /&gt;
.note-reminder {&lt;br /&gt;
	background-color: #fff9ea;&lt;br /&gt;
	color: #333;&lt;br /&gt;
	/* [[File:OOjs_UI_icon_lightbulb-yellow.svg]] */&lt;br /&gt;
	background-image: url(https://upload.wikimedia.org/wikipedia/commons/a/a8/OOjs_UI_icon_lightbulb-yellow.svg);&lt;br /&gt;
	background-size: 25px;&lt;br /&gt;
	border-color: #fc3;&lt;br /&gt;
	min-height: 25px;&lt;br /&gt;
}&lt;br /&gt;
.note-warn {&lt;br /&gt;
	background-color: #fff9ea;&lt;br /&gt;
	color: #333;&lt;br /&gt;
	/* [[File:OOjs_UI_icon_alert-warning.svg]] */&lt;br /&gt;
	background-image: url(https://upload.wikimedia.org/wikipedia/commons/3/3b/OOjs_UI_icon_alert-warning.svg);&lt;br /&gt;
	background-size: 25px;&lt;br /&gt;
	border-color: #fc3;&lt;br /&gt;
	min-height: 25px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.note-error {&lt;br /&gt;
	background-color: #fee7e6;&lt;br /&gt;
	color: #333;&lt;br /&gt;
	/* [[File:OOjs_UI_icon_notice-destructive.svg]] */&lt;br /&gt;
	background-image: url(https://upload.wikimedia.org/wikipedia/commons/b/bf/OOjs_UI_icon_notice-destructive.svg);&lt;br /&gt;
	background-size: 25px;&lt;br /&gt;
	border-color: #c33;&lt;br /&gt;
	min-height: 25px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media screen {&lt;br /&gt;
	html.skin-theme-clientpref-night .note {&lt;br /&gt;
		background-color: transparent;&lt;br /&gt;
	    color: inherit;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	html.skin-theme-clientpref-night .note-info {&lt;br /&gt;
		border-color: #45566c;&lt;br /&gt;
	    background-color: #1c2532;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	html.skin-theme-clientpref-night .note-warn {&lt;br /&gt;
		border-color: #8c8054;&lt;br /&gt;
	    background-color: #292517;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	html.skin-theme-clientpref-night .note-error {&lt;br /&gt;
		border-color: #322d2d;&lt;br /&gt;
	    background-color: #232020;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media screen and (prefers-color-scheme: dark) {&lt;br /&gt;
    /* automatic mode */&lt;br /&gt;
	html.skin-theme-clientpref-os .note {&lt;br /&gt;
		background-color: transparent;&lt;br /&gt;
    	color: inherit;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	html.skin-theme-clientpref-night .note-info {&lt;br /&gt;
		border-color: #45566c;&lt;br /&gt;
	    background-color: #1c2532;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	html.skin-theme-clientpref-night .note-warn {&lt;br /&gt;
		border-color: #8c8054;&lt;br /&gt;
	    background-color: #292517;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	html.skin-theme-clientpref-night .note-error {&lt;br /&gt;
		border-color: #322d2d;&lt;br /&gt;
	    background-color: #232020;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Antidote</name></author>
	</entry>
	<entry>
		<id>https://wiki.antidotez.ru/mediawiki/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Note/styles.css&amp;diff=458</id>
		<title>Шаблон:Note/styles.css</title>
		<link rel="alternate" type="text/html" href="https://wiki.antidotez.ru/mediawiki/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Note/styles.css&amp;diff=458"/>
		<updated>2026-04-20T11:01:04Z</updated>

		<summary type="html">&lt;p&gt;Antidote: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;.note {&lt;br /&gt;
	background-position: left 7px top 50%;&lt;br /&gt;
	padding: 0.5em 0.5em 0.5em 40px;&lt;br /&gt;
	margin: 0.5em 0;&lt;br /&gt;
	overflow: hidden;&lt;br /&gt;
	background-color: #f8f9fa;&lt;br /&gt;
	color: #333;&lt;br /&gt;
	background-repeat: no-repeat;&lt;br /&gt;
	border: 1px solid #ddd;&lt;br /&gt;
	border-radius: 4px;&lt;br /&gt;
}&lt;br /&gt;
.note-inline {&lt;br /&gt;
	display: inline-block;&lt;br /&gt;
	vertical-align: middle;&lt;br /&gt;
}&lt;br /&gt;
.note-info {&lt;br /&gt;
	background-color: #eaf3ff;&lt;br /&gt;
	color: #333;&lt;br /&gt;
	/* [[File:OOjs_UI_icon_information-progressive.svg]] */&lt;br /&gt;
	background-image: url(https://upload.wikimedia.org/wikipedia/commons/e/ec/OOjs_UI_icon_information-progressive.svg);&lt;br /&gt;
	background-size: 25px;&lt;br /&gt;
	border-color: #a3caff;&lt;br /&gt;
	padding-left: 40px;&lt;br /&gt;
	min-height: 25px;&lt;br /&gt;
}&lt;br /&gt;
.note-reminder {&lt;br /&gt;
	background-color: #fff9ea;&lt;br /&gt;
	color: #333;&lt;br /&gt;
	/* [[File:OOjs_UI_icon_lightbulb-yellow.svg]] */&lt;br /&gt;
	background-image: url(https://upload.wikimedia.org/wikipedia/commons/a/a8/OOjs_UI_icon_lightbulb-yellow.svg);&lt;br /&gt;
	background-size: 25px;&lt;br /&gt;
	border-color: #fc3;&lt;br /&gt;
	min-height: 25px;&lt;br /&gt;
}&lt;br /&gt;
.note-warn {&lt;br /&gt;
	background-color: #fff9ea;&lt;br /&gt;
	color: #333;&lt;br /&gt;
	/* [[File:OOjs_UI_icon_alert-warning.svg]] */&lt;br /&gt;
	background-image: url(https://upload.wikimedia.org/wikipedia/commons/3/3b/OOjs_UI_icon_alert-warning.svg);&lt;br /&gt;
	background-size: 25px;&lt;br /&gt;
	border-color: #fc3;&lt;br /&gt;
	min-height: 25px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.note-error {&lt;br /&gt;
	background-color: #fee7e6;&lt;br /&gt;
	color: #333;&lt;br /&gt;
	/* [[File:OOjs_UI_icon_notice-destructive.svg]] */&lt;br /&gt;
	background-image: url(https://upload.wikimedia.org/wikipedia/commons/b/bf/OOjs_UI_icon_notice-destructive.svg);&lt;br /&gt;
	background-size: 25px;&lt;br /&gt;
	border-color: #c33;&lt;br /&gt;
	min-height: 25px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media screen {&lt;br /&gt;
	html.skin-theme-clientpref-night .note {&lt;br /&gt;
		background-color: transparent;&lt;br /&gt;
	    color: inherit;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	html.skin-theme-clientpref-night .note-info {&lt;br /&gt;
		border-color: #45566c;&lt;br /&gt;
	    background-color: #1c2532;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	html.skin-theme-clientpref-night .note-warn {&lt;br /&gt;
		border-color: #fbe39c;&lt;br /&gt;
	    background-color: #3b341d;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	html.skin-theme-clientpref-night .note-error {&lt;br /&gt;
		border-color: #322d2d;&lt;br /&gt;
	    background-color: #232020;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media screen and (prefers-color-scheme: dark) {&lt;br /&gt;
    /* automatic mode */&lt;br /&gt;
	html.skin-theme-clientpref-os .note {&lt;br /&gt;
		background-color: transparent;&lt;br /&gt;
    	color: inherit;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	html.skin-theme-clientpref-night .note-info {&lt;br /&gt;
		border-color: #45566c;&lt;br /&gt;
	    background-color: #1c2532;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	html.skin-theme-clientpref-night .note-warn {&lt;br /&gt;
		border-color: #fbe39c;&lt;br /&gt;
	    background-color: #3b341d;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	html.skin-theme-clientpref-night .note-error {&lt;br /&gt;
		border-color: #322d2d;&lt;br /&gt;
	    background-color: #232020;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Antidote</name></author>
	</entry>
	<entry>
		<id>https://wiki.antidotez.ru/mediawiki/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Note/styles.css&amp;diff=457</id>
		<title>Шаблон:Note/styles.css</title>
		<link rel="alternate" type="text/html" href="https://wiki.antidotez.ru/mediawiki/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Note/styles.css&amp;diff=457"/>
		<updated>2026-04-20T10:59:20Z</updated>

		<summary type="html">&lt;p&gt;Antidote: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;.note {&lt;br /&gt;
	background-position: left 7px top 50%;&lt;br /&gt;
	padding: 0.5em 0.5em 0.5em 40px;&lt;br /&gt;
	margin: 0.5em 0;&lt;br /&gt;
	overflow: hidden;&lt;br /&gt;
	background-color: #f8f9fa;&lt;br /&gt;
	color: #333;&lt;br /&gt;
	background-repeat: no-repeat;&lt;br /&gt;
	border: 1px solid #ddd;&lt;br /&gt;
	border-radius: 4px;&lt;br /&gt;
}&lt;br /&gt;
.note-inline {&lt;br /&gt;
	display: inline-block;&lt;br /&gt;
	vertical-align: middle;&lt;br /&gt;
}&lt;br /&gt;
.note-info {&lt;br /&gt;
	background-color: #eaf3ff;&lt;br /&gt;
	color: #333;&lt;br /&gt;
	/* [[File:OOjs_UI_icon_information-progressive.svg]] */&lt;br /&gt;
	background-image: url(https://upload.wikimedia.org/wikipedia/commons/e/ec/OOjs_UI_icon_information-progressive.svg);&lt;br /&gt;
	background-size: 25px;&lt;br /&gt;
	border-color: #a3caff;&lt;br /&gt;
	padding-left: 40px;&lt;br /&gt;
	min-height: 25px;&lt;br /&gt;
}&lt;br /&gt;
.note-reminder {&lt;br /&gt;
	background-color: #fff9ea;&lt;br /&gt;
	color: #333;&lt;br /&gt;
	/* [[File:OOjs_UI_icon_lightbulb-yellow.svg]] */&lt;br /&gt;
	background-image: url(https://upload.wikimedia.org/wikipedia/commons/a/a8/OOjs_UI_icon_lightbulb-yellow.svg);&lt;br /&gt;
	background-size: 25px;&lt;br /&gt;
	border-color: #fc3;&lt;br /&gt;
	min-height: 25px;&lt;br /&gt;
}&lt;br /&gt;
.note-warn {&lt;br /&gt;
	background-color: #fff9ea;&lt;br /&gt;
	color: #333;&lt;br /&gt;
	/* [[File:OOjs_UI_icon_alert-warning.svg]] */&lt;br /&gt;
	background-image: url(https://upload.wikimedia.org/wikipedia/commons/3/3b/OOjs_UI_icon_alert-warning.svg);&lt;br /&gt;
	background-size: 25px;&lt;br /&gt;
	border-color: #fc3;&lt;br /&gt;
	min-height: 25px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.note-error {&lt;br /&gt;
	background-color: #fee7e6;&lt;br /&gt;
	color: #333;&lt;br /&gt;
	/* [[File:OOjs_UI_icon_notice-destructive.svg]] */&lt;br /&gt;
	background-image: url(https://upload.wikimedia.org/wikipedia/commons/b/bf/OOjs_UI_icon_notice-destructive.svg);&lt;br /&gt;
	background-size: 25px;&lt;br /&gt;
	border-color: #c33;&lt;br /&gt;
	min-height: 25px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media screen {&lt;br /&gt;
	html.skin-theme-clientpref-night .note {&lt;br /&gt;
		background-color: transparent;&lt;br /&gt;
	    color: inherit;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	html.skin-theme-clientpref-night .note-info {&lt;br /&gt;
		border-color: #45566c;&lt;br /&gt;
	    background-color: #1c2532;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	html.skin-theme-clientpref-night .note-warn {&lt;br /&gt;
		border-color: #fbe39c;&lt;br /&gt;
	    background-color: #3b341d;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	html.skin-theme-clientpref-night .note-error {&lt;br /&gt;
		border-color: #322d2d;&lt;br /&gt;
	    background-color: #232020;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media screen and (prefers-color-scheme: dark) {&lt;br /&gt;
    /* automatic mode */&lt;br /&gt;
	html.skin-theme-clientpref-os .note {&lt;br /&gt;
		background-color: transparent;&lt;br /&gt;
    	color: inherit;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	html.skin-theme-clientpref-night .note-info {&lt;br /&gt;
		border-color: #45566c;&lt;br /&gt;
	    background-color: #1c2532;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	html.skin-theme-clientpref-night .note-warn {&lt;br /&gt;
		border-color: #353431;&lt;br /&gt;
	    background-color: #262523;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	html.skin-theme-clientpref-night .note-error {&lt;br /&gt;
		border-color: #322d2d;&lt;br /&gt;
	    background-color: #232020;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Antidote</name></author>
	</entry>
	<entry>
		<id>https://wiki.antidotez.ru/mediawiki/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Note/styles.css&amp;diff=456</id>
		<title>Шаблон:Note/styles.css</title>
		<link rel="alternate" type="text/html" href="https://wiki.antidotez.ru/mediawiki/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Note/styles.css&amp;diff=456"/>
		<updated>2026-04-19T20:58:37Z</updated>

		<summary type="html">&lt;p&gt;Antidote: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;.note {&lt;br /&gt;
	background-position: left 7px top 50%;&lt;br /&gt;
	padding: 0.5em 0.5em 0.5em 40px;&lt;br /&gt;
	margin: 0.5em 0;&lt;br /&gt;
	overflow: hidden;&lt;br /&gt;
	background-color: #f8f9fa;&lt;br /&gt;
	color: #333;&lt;br /&gt;
	background-repeat: no-repeat;&lt;br /&gt;
	border: 1px solid #ddd;&lt;br /&gt;
	border-radius: 4px;&lt;br /&gt;
}&lt;br /&gt;
.note-inline {&lt;br /&gt;
	display: inline-block;&lt;br /&gt;
	vertical-align: middle;&lt;br /&gt;
}&lt;br /&gt;
.note-info {&lt;br /&gt;
	background-color: #eaf3ff;&lt;br /&gt;
	color: #333;&lt;br /&gt;
	/* [[File:OOjs_UI_icon_information-progressive.svg]] */&lt;br /&gt;
	background-image: url(https://upload.wikimedia.org/wikipedia/commons/e/ec/OOjs_UI_icon_information-progressive.svg);&lt;br /&gt;
	background-size: 25px;&lt;br /&gt;
	border-color: #a3caff;&lt;br /&gt;
	padding-left: 40px;&lt;br /&gt;
	min-height: 25px;&lt;br /&gt;
}&lt;br /&gt;
.note-reminder {&lt;br /&gt;
	background-color: #fff9ea;&lt;br /&gt;
	color: #333;&lt;br /&gt;
	/* [[File:OOjs_UI_icon_lightbulb-yellow.svg]] */&lt;br /&gt;
	background-image: url(https://upload.wikimedia.org/wikipedia/commons/a/a8/OOjs_UI_icon_lightbulb-yellow.svg);&lt;br /&gt;
	background-size: 25px;&lt;br /&gt;
	border-color: #fc3;&lt;br /&gt;
	min-height: 25px;&lt;br /&gt;
}&lt;br /&gt;
.note-warn {&lt;br /&gt;
	background-color: #fff9ea;&lt;br /&gt;
	color: #333;&lt;br /&gt;
	/* [[File:OOjs_UI_icon_alert-warning.svg]] */&lt;br /&gt;
	background-image: url(https://upload.wikimedia.org/wikipedia/commons/3/3b/OOjs_UI_icon_alert-warning.svg);&lt;br /&gt;
	background-size: 25px;&lt;br /&gt;
	border-color: #fc3;&lt;br /&gt;
	min-height: 25px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.note-error {&lt;br /&gt;
	background-color: #fee7e6;&lt;br /&gt;
	color: #333;&lt;br /&gt;
	/* [[File:OOjs_UI_icon_notice-destructive.svg]] */&lt;br /&gt;
	background-image: url(https://upload.wikimedia.org/wikipedia/commons/b/bf/OOjs_UI_icon_notice-destructive.svg);&lt;br /&gt;
	background-size: 25px;&lt;br /&gt;
	border-color: #c33;&lt;br /&gt;
	min-height: 25px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media screen {&lt;br /&gt;
	html.skin-theme-clientpref-night .note {&lt;br /&gt;
		background-color: transparent;&lt;br /&gt;
	    color: inherit;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	html.skin-theme-clientpref-night .note-info {&lt;br /&gt;
		border-color: #45566c;&lt;br /&gt;
	    background-color: #1c2532;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	html.skin-theme-clientpref-night .note-warn {&lt;br /&gt;
		border-color: #353431;&lt;br /&gt;
	    background-color: #262523;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	html.skin-theme-clientpref-night .note-error {&lt;br /&gt;
		border-color: #322d2d;&lt;br /&gt;
	    background-color: #232020;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media screen and (prefers-color-scheme: dark) {&lt;br /&gt;
    /* automatic mode */&lt;br /&gt;
	html.skin-theme-clientpref-os .note {&lt;br /&gt;
		background-color: transparent;&lt;br /&gt;
    	color: inherit;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	html.skin-theme-clientpref-night .note-info {&lt;br /&gt;
		border-color: #45566c;&lt;br /&gt;
	    background-color: #1c2532;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	html.skin-theme-clientpref-night .note-warn {&lt;br /&gt;
		border-color: #353431;&lt;br /&gt;
	    background-color: #262523;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	html.skin-theme-clientpref-night .note-error {&lt;br /&gt;
		border-color: #322d2d;&lt;br /&gt;
	    background-color: #232020;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Antidote</name></author>
	</entry>
	<entry>
		<id>https://wiki.antidotez.ru/mediawiki/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Note/styles.css&amp;diff=455</id>
		<title>Шаблон:Note/styles.css</title>
		<link rel="alternate" type="text/html" href="https://wiki.antidotez.ru/mediawiki/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Note/styles.css&amp;diff=455"/>
		<updated>2026-04-19T20:55:18Z</updated>

		<summary type="html">&lt;p&gt;Antidote: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;.note {&lt;br /&gt;
	background-position: left 7px top 50%;&lt;br /&gt;
	padding: 0.5em 0.5em 0.5em 40px;&lt;br /&gt;
	margin: 0.5em 0;&lt;br /&gt;
	overflow: hidden;&lt;br /&gt;
	background-color: #f8f9fa;&lt;br /&gt;
	color: #333;&lt;br /&gt;
	background-repeat: no-repeat;&lt;br /&gt;
	border: 1px solid #ddd;&lt;br /&gt;
	border-radius: 4px;&lt;br /&gt;
}&lt;br /&gt;
.note-inline {&lt;br /&gt;
	display: inline-block;&lt;br /&gt;
	vertical-align: middle;&lt;br /&gt;
}&lt;br /&gt;
.note-info {&lt;br /&gt;
	background-color: #eaf3ff;&lt;br /&gt;
	color: #333;&lt;br /&gt;
	/* [[File:OOjs_UI_icon_information-progressive.svg]] */&lt;br /&gt;
	background-image: url(https://upload.wikimedia.org/wikipedia/commons/e/ec/OOjs_UI_icon_information-progressive.svg);&lt;br /&gt;
	background-size: 25px;&lt;br /&gt;
	border-color: #a3caff;&lt;br /&gt;
	padding-left: 40px;&lt;br /&gt;
	min-height: 25px;&lt;br /&gt;
}&lt;br /&gt;
.note-reminder {&lt;br /&gt;
	background-color: #fff9ea;&lt;br /&gt;
	color: #333;&lt;br /&gt;
	/* [[File:OOjs_UI_icon_lightbulb-yellow.svg]] */&lt;br /&gt;
	background-image: url(https://upload.wikimedia.org/wikipedia/commons/a/a8/OOjs_UI_icon_lightbulb-yellow.svg);&lt;br /&gt;
	background-size: 25px;&lt;br /&gt;
	border-color: #fc3;&lt;br /&gt;
	min-height: 25px;&lt;br /&gt;
}&lt;br /&gt;
.note-warn {&lt;br /&gt;
	background-color: #fff9ea;&lt;br /&gt;
	color: #333;&lt;br /&gt;
	/* [[File:OOjs_UI_icon_alert-warning.svg]] */&lt;br /&gt;
	background-image: url(https://upload.wikimedia.org/wikipedia/commons/3/3b/OOjs_UI_icon_alert-warning.svg);&lt;br /&gt;
	background-size: 25px;&lt;br /&gt;
	border-color: #fc3;&lt;br /&gt;
	min-height: 25px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.note-error {&lt;br /&gt;
	background-color: #fee7e6;&lt;br /&gt;
	color: #333;&lt;br /&gt;
	/* [[File:OOjs_UI_icon_notice-destructive.svg]] */&lt;br /&gt;
	background-image: url(https://upload.wikimedia.org/wikipedia/commons/b/bf/OOjs_UI_icon_notice-destructive.svg);&lt;br /&gt;
	background-size: 25px;&lt;br /&gt;
	border-color: #c33;&lt;br /&gt;
	min-height: 25px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media screen {&lt;br /&gt;
	html.skin-theme-clientpref-night .note {&lt;br /&gt;
		background-color: transparent;&lt;br /&gt;
	    color: inherit;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	html.skin-theme-clientpref-night .note-info {&lt;br /&gt;
		border-color: #45566c;&lt;br /&gt;
	    background-color: #1c2532;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media screen and (prefers-color-scheme: dark) {&lt;br /&gt;
    /* automatic mode */&lt;br /&gt;
	html.skin-theme-clientpref-os .note {&lt;br /&gt;
		background-color: transparent;&lt;br /&gt;
    	color: inherit;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Antidote</name></author>
	</entry>
	<entry>
		<id>https://wiki.antidotez.ru/mediawiki/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Note/styles.css&amp;diff=454</id>
		<title>Шаблон:Note/styles.css</title>
		<link rel="alternate" type="text/html" href="https://wiki.antidotez.ru/mediawiki/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Note/styles.css&amp;diff=454"/>
		<updated>2026-04-19T20:50:05Z</updated>

		<summary type="html">&lt;p&gt;Antidote: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;.note {&lt;br /&gt;
	background-position: left 7px top 50%;&lt;br /&gt;
	padding: 0.5em 0.5em 0.5em 40px;&lt;br /&gt;
	margin: 0.5em 0;&lt;br /&gt;
	overflow: hidden;&lt;br /&gt;
	background-color: #f8f9fa;&lt;br /&gt;
	color: #333;&lt;br /&gt;
	background-repeat: no-repeat;&lt;br /&gt;
	border: 1px solid #ddd;&lt;br /&gt;
	border-radius: 4px;&lt;br /&gt;
}&lt;br /&gt;
.note-inline {&lt;br /&gt;
	display: inline-block;&lt;br /&gt;
	vertical-align: middle;&lt;br /&gt;
}&lt;br /&gt;
.note-info {&lt;br /&gt;
	background-color: #eaf3ff;&lt;br /&gt;
	color: #333;&lt;br /&gt;
	/* [[File:OOjs_UI_icon_information-progressive.svg]] */&lt;br /&gt;
	background-image: url(https://upload.wikimedia.org/wikipedia/commons/e/ec/OOjs_UI_icon_information-progressive.svg);&lt;br /&gt;
	background-size: 25px;&lt;br /&gt;
	border-color: #a3caff;&lt;br /&gt;
	padding-left: 40px;&lt;br /&gt;
	min-height: 25px;&lt;br /&gt;
}&lt;br /&gt;
.note-reminder {&lt;br /&gt;
	background-color: #fff9ea;&lt;br /&gt;
	color: #333;&lt;br /&gt;
	/* [[File:OOjs_UI_icon_lightbulb-yellow.svg]] */&lt;br /&gt;
	background-image: url(https://upload.wikimedia.org/wikipedia/commons/a/a8/OOjs_UI_icon_lightbulb-yellow.svg);&lt;br /&gt;
	background-size: 25px;&lt;br /&gt;
	border-color: #fc3;&lt;br /&gt;
	min-height: 25px;&lt;br /&gt;
}&lt;br /&gt;
.note-warn {&lt;br /&gt;
	background-color: #fff9ea;&lt;br /&gt;
	color: #333;&lt;br /&gt;
	/* [[File:OOjs_UI_icon_alert-warning.svg]] */&lt;br /&gt;
	background-image: url(https://upload.wikimedia.org/wikipedia/commons/3/3b/OOjs_UI_icon_alert-warning.svg);&lt;br /&gt;
	background-size: 25px;&lt;br /&gt;
	border-color: #fc3;&lt;br /&gt;
	min-height: 25px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.note-error {&lt;br /&gt;
	background-color: #fee7e6;&lt;br /&gt;
	color: #333;&lt;br /&gt;
	/* [[File:OOjs_UI_icon_notice-destructive.svg]] */&lt;br /&gt;
	background-image: url(https://upload.wikimedia.org/wikipedia/commons/b/bf/OOjs_UI_icon_notice-destructive.svg);&lt;br /&gt;
	background-size: 25px;&lt;br /&gt;
	border-color: #c33;&lt;br /&gt;
	min-height: 25px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media screen {&lt;br /&gt;
	html.skin-theme-clientpref-night .note {&lt;br /&gt;
		background-color: transparent;&lt;br /&gt;
	    color: inherit;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media screen and (prefers-color-scheme: dark) {&lt;br /&gt;
    /* automatic mode */&lt;br /&gt;
	html.skin-theme-clientpref-os .note {&lt;br /&gt;
		background-color: transparent;&lt;br /&gt;
    	color: inherit;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Antidote</name></author>
	</entry>
	<entry>
		<id>https://wiki.antidotez.ru/mediawiki/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Note/styles.css&amp;diff=453</id>
		<title>Шаблон:Note/styles.css</title>
		<link rel="alternate" type="text/html" href="https://wiki.antidotez.ru/mediawiki/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Note/styles.css&amp;diff=453"/>
		<updated>2026-04-19T20:36:50Z</updated>

		<summary type="html">&lt;p&gt;Antidote: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;.note {&lt;br /&gt;
	background-position: left 7px top 50%;&lt;br /&gt;
	padding: 0.5em 0.5em 0.5em 40px;&lt;br /&gt;
	margin: 0.5em 0;&lt;br /&gt;
	overflow: hidden;&lt;br /&gt;
	background-color: #f8f9fa;&lt;br /&gt;
	color: #333;&lt;br /&gt;
	background-repeat: no-repeat;&lt;br /&gt;
	border: 1px solid #ddd;&lt;br /&gt;
	border-radius: 6px;&lt;br /&gt;
}&lt;br /&gt;
.note-inline {&lt;br /&gt;
	display: inline-block;&lt;br /&gt;
	vertical-align: middle;&lt;br /&gt;
}&lt;br /&gt;
.note-info {&lt;br /&gt;
	background-color: #eaf3ff;&lt;br /&gt;
	color: #333;&lt;br /&gt;
	/* [[File:OOjs_UI_icon_information-progressive.svg]] */&lt;br /&gt;
	background-image: url(https://upload.wikimedia.org/wikipedia/commons/e/ec/OOjs_UI_icon_information-progressive.svg);&lt;br /&gt;
	background-size: 25px;&lt;br /&gt;
	border-color: #a3caff;&lt;br /&gt;
	padding-left: 40px;&lt;br /&gt;
	min-height: 25px;&lt;br /&gt;
}&lt;br /&gt;
.note-reminder {&lt;br /&gt;
	background-color: #fff9ea;&lt;br /&gt;
	color: #333;&lt;br /&gt;
	/* [[File:OOjs_UI_icon_lightbulb-yellow.svg]] */&lt;br /&gt;
	background-image: url(https://upload.wikimedia.org/wikipedia/commons/a/a8/OOjs_UI_icon_lightbulb-yellow.svg);&lt;br /&gt;
	background-size: 25px;&lt;br /&gt;
	border-color: #fc3;&lt;br /&gt;
	min-height: 25px;&lt;br /&gt;
}&lt;br /&gt;
.note-warn {&lt;br /&gt;
	background-color: #fff9ea;&lt;br /&gt;
	color: #333;&lt;br /&gt;
	/* [[File:OOjs_UI_icon_alert-warning.svg]] */&lt;br /&gt;
	background-image: url(https://upload.wikimedia.org/wikipedia/commons/3/3b/OOjs_UI_icon_alert-warning.svg);&lt;br /&gt;
	background-size: 25px;&lt;br /&gt;
	border-color: #fc3;&lt;br /&gt;
	min-height: 25px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.note-error {&lt;br /&gt;
	background-color: #fee7e6;&lt;br /&gt;
	color: #333;&lt;br /&gt;
	/* [[File:OOjs_UI_icon_notice-destructive.svg]] */&lt;br /&gt;
	background-image: url(https://upload.wikimedia.org/wikipedia/commons/b/bf/OOjs_UI_icon_notice-destructive.svg);&lt;br /&gt;
	background-size: 25px;&lt;br /&gt;
	border-color: #c33;&lt;br /&gt;
	min-height: 25px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media screen {&lt;br /&gt;
	html.skin-theme-clientpref-night .note {&lt;br /&gt;
		background-color: transparent;&lt;br /&gt;
	    color: inherit;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media screen and (prefers-color-scheme: dark) {&lt;br /&gt;
    /* automatic mode */&lt;br /&gt;
	html.skin-theme-clientpref-os .note {&lt;br /&gt;
		background-color: transparent;&lt;br /&gt;
    	color: inherit;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Antidote</name></author>
	</entry>
	<entry>
		<id>https://wiki.antidotez.ru/mediawiki/index.php?title=Throne&amp;diff=452</id>
		<title>Throne</title>
		<link rel="alternate" type="text/html" href="https://wiki.antidotez.ru/mediawiki/index.php?title=Throne&amp;diff=452"/>
		<updated>2026-04-19T19:05:43Z</updated>

		<summary type="html">&lt;p&gt;Antidote: Замена шаблонов&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Описание ==&lt;br /&gt;
[[Файл:Throne icon.png|справа|безрамки|100x100пкс]]&lt;br /&gt;
&#039;&#039;&#039;Throne&#039;&#039;&#039; — это кроссплатформенное графическое приложение &#039;&#039;(GUI)&#039;&#039; для прокси-утилит, основанное на движке &#039;&#039;sing‑box&#039;&#039;. Поддерживает работу на &#039;&#039;Windows&#039;&#039;, &#039;&#039;Linux&#039;&#039; и &#039;&#039;macOS&#039;&#039;. Преемник [[nekoray]], так как разработка последнего была заброшена с начала 2025 года.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Возможности приложения:&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Работа со множеством протоколов (например: &#039;&#039;SOCKS&#039;&#039;, &#039;&#039;HTTP(S)&#039;&#039;, &#039;&#039;Shadowsocks&#039;&#039;, &#039;&#039;Trojan&#039;&#039;, &#039;&#039;VMess&#039;&#039;, &#039;&#039;VLESS&#039;&#039;, &#039;&#039;TUIC&#039;&#039;, &#039;&#039;WireGuard&#039;&#039;) через встроенный движок.&lt;br /&gt;
* Интерфейс с поддержкой графики (Qt) для удобной настройки.&lt;br /&gt;
* Поддержка подписок/форматов конфигураций: JSON, v2rayN-форматы и др.&lt;br /&gt;
* Возможность управления системным прокси и DNS-настройками (на некоторых ОС).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Github проекта:&#039;&#039;&#039; https://github.com/throneproj/Throne&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Сайт проекта:&#039;&#039;&#039; https://throneproj.github.io&lt;br /&gt;
&lt;br /&gt;
== Скачивание ==&lt;br /&gt;
&#039;&#039;&#039;➡️&#039;&#039;&#039; [https://nextcloud.antidotez.ru/s/qJe8pPp3BPWecng/download Версия 1.0.12]&lt;br /&gt;
&lt;br /&gt;
== Конфигурация ==&lt;br /&gt;
&lt;br /&gt;
=== Главное окно программы ===&lt;br /&gt;
[[Файл:Throne Главное окно.png|альт=Главное окно программы|мини|181x181пкс|&#039;&#039;Скриншот №1&#039;&#039; Главное окно программы]]&lt;br /&gt;
На главном окне программы расположены:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;Сверху:&#039;&#039; панель инструментов&lt;br /&gt;
# &#039;&#039;По середине:&#039;&#039; вкладки с названиями групп и список профилей подключения&lt;br /&gt;
# &#039;&#039;Снизу:&#039;&#039; журнал сообщений и ошибок, список активных подключений и график использования сети&lt;br /&gt;
&lt;br /&gt;
=== Добавление профиля подключения ===&lt;br /&gt;
{{Note|text=Для добавления профиля у вас уже должна быть скопированная в буфер обмена ссылка на подключение.}}&lt;br /&gt;
Чтобы добавить профиль нажимаем на панели инструментов кнопку &#039;&#039;&#039;&amp;quot;Настройки&amp;quot;&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;&amp;quot;Группы&amp;quot;&#039;&#039;&#039; -&amp;gt; &#039;&#039;&#039;&amp;quot;Новая группа&amp;quot;&#039;&#039;&#039; &#039;&#039;(Скриншоты №2-4)&#039;&#039;. В открывшемся окне меняем тип на &#039;&#039;&amp;quot;Подписка&amp;quot;&#039;&#039;, задаем выше какое-нибудь имя (например &#039;&#039;&amp;quot;Группа1&amp;quot;&#039;&#039;) и вставляем внизу в поле &#039;&#039;&#039;&amp;quot;URL&amp;quot;&#039;&#039;&#039; скопированную ссылку. Нажимаем &#039;&#039;&#039;&amp;quot;OK&amp;quot;&#039;&#039;&#039;, окно закроется и дальше нажимаем кнопку &#039;&#039;&#039;&amp;quot;Обновить все подписки&amp;quot;&#039;&#039;&#039; &#039;&#039;(Скриншоты №5,6).&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
После добавления профиля у вас в списке профилей появится список подключений. Имя группы, указанное ранее при создании, будет названием вкладки.&amp;lt;gallery mode=&amp;quot;nolines&amp;quot; widths=&amp;quot;160&amp;quot;&amp;gt;&lt;br /&gt;
Файл:Throne Меню настроек.png|&#039;&#039;Скриншот №2&#039;&#039; Меню настроек&lt;br /&gt;
Файл:Throne Окно списка групп.png|&#039;&#039;Скриншот №3&#039;&#039; Список групп&lt;br /&gt;
Файл:Throne Окно настроек группы.png|&#039;&#039;Скриншот №4&#039;&#039; Настройки группы&lt;br /&gt;
Файл:Throne Добавление группы.png|&#039;&#039;Скриншот №5&#039;&#039; Добавление группы&lt;br /&gt;
Файл:Throne Обновление подписки.png|&#039;&#039;Скриншот №6&#039;&#039; Обновление подписки&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Настройка маршрутизации ===&lt;br /&gt;
Для настройки маршрутизации нажимаем кнопку &#039;&#039;&#039;&amp;quot;Маршрутизация&amp;quot;&#039;&#039;&#039; на панели инструментов, дальше ставим галочку на &#039;&#039;&#039;&amp;quot;Enable AdBlock&amp;quot;&#039;&#039;&#039;, в подменю &#039;&#039;&#039;&amp;quot;Загрузка профилей&amp;quot;&#039;&#039;&#039; выбираем &#039;&#039;&#039;&amp;quot;Proxy Russia Blocked&amp;quot;&#039;&#039;&#039; &#039;&#039;(если программа выдает ошибку, то перезапустите ее)&#039;&#039;. Далее опять нажимаем кнопку &#039;&#039;&#039;&amp;quot;Маршрутизация&amp;quot;&#039;&#039;&#039; и ставим галку на &#039;&#039;&#039;&amp;quot;Proxy Russia Blocked&amp;quot;&#039;&#039;&#039;. &#039;&#039;(Скриншоты №7,8)&#039;&#039;&amp;lt;gallery mode=&amp;quot;nolines&amp;quot; widths=&amp;quot;160&amp;quot;&amp;gt;&lt;br /&gt;
Файл:Throne Меню маршрутизации.png|&#039;&#039;Скриншот №7&#039;&#039; Меню маршрутизации&lt;br /&gt;
Файл:Throne Список обходов.png|&#039;&#039;Скриншот №8&#039;&#039; Профили маршрутизации&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Дополнительные настройки (рекомендуются) ===&lt;br /&gt;
&lt;br /&gt;
==== Автоматическое обновление подписки ====&lt;br /&gt;
Для включения функции автоматического обновления подписки нажимаем на панели инструментов кнопку &#039;&#039;&#039;&amp;quot;Настройки&amp;quot;&#039;&#039;&#039;, выбираем &#039;&#039;&#039;&amp;quot;Основные настройки&amp;quot;&#039;&#039;&#039;, далее в окне выбираем вкладку &#039;&#039;&#039;&amp;quot;Подписка&amp;quot;&#039;&#039;&#039;, ставим галочку на &#039;&#039;&#039;&amp;quot;Автоматическое обновление&amp;quot;&#039;&#039;&#039; &#039;&#039;(Скриншот №9)&#039;&#039;.&amp;lt;gallery mode=&amp;quot;nolines&amp;quot; widths=&amp;quot;160&amp;quot;&amp;gt;&lt;br /&gt;
Файл:Throne Автообновление подписки.png|&#039;&#039;Скриншот №9&#039;&#039; Настройки автообновления подписки&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Настройка автоматического подключения при запуске компьютера ====&lt;br /&gt;
Чтобы при запуске компьютера программа запускалась и подключалась к последнему профилю автоматически зайдите в меню &#039;&#039;&#039;&amp;quot;Приложение&amp;quot;&#039;&#039;&#039;, и поставьте галочки на &#039;&#039;&#039;&amp;quot;Запускать вместе с системой&amp;quot;&#039;&#039;&#039; и &#039;&#039;&#039;&amp;quot;Запомнить последний профиль&amp;quot;&#039;&#039;&#039; &#039;&#039;(Скриншот №10)&#039;&#039;.&amp;lt;gallery mode=&amp;quot;nolines&amp;quot; widths=&amp;quot;160&amp;quot;&amp;gt;&lt;br /&gt;
Файл:Throne Меню приложения.png|&#039;&#039;Скриншот №10&#039;&#039; Меню приложения&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Запуск подключения ===&lt;br /&gt;
{{Note|type=warning|В данном случае будем использовать режим прокси для подключения, это подойдет для большинства браузеров}}&lt;br /&gt;
При первом запуске подключения выберите режим подключения &#039;&#039;&amp;quot;Системный прокси&amp;quot;&#039;&#039;. Для запуска подключения переключаемся на вкладку новой созданной группы, выбираем из списка профилей нужный профиль, кликаем правой кнопкой мыши на нем и выбираем &#039;&#039;&amp;quot;Запустить&amp;quot;&#039;&#039;. Запущенный профиль указывается галочкой слева от профиля подключения и в левом нижнем углу программы.&amp;lt;gallery mode=&amp;quot;nolines&amp;quot; widths=&amp;quot;160&amp;quot;&amp;gt;&lt;br /&gt;
Файл:Throne Добавлена новая группа.png|&#039;&#039;Скриншот №11&#039;&#039; Список групп в главном меню&lt;br /&gt;
Файл:Throne Профиль подключения группе.png|&#039;&#039;Скриншот №12&#039;&#039; Новый профиль подключения в группе&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Тонкая настройка приложения ==&lt;br /&gt;
{{Note|text=Данные настройки большинству пользователей не требуются}}&lt;br /&gt;
&lt;br /&gt;
=== Режим подключения ===&lt;br /&gt;
У программы есть два режима работы: &#039;&#039;&amp;quot;Системный прокси&amp;quot;&#039;&#039; и &#039;&#039;&amp;quot;Режим TUN&amp;quot;&#039;&#039;. Режим системного прокси, это режим системного прокси (как ни странно), а &#039;&#039;&amp;quot;Режим TUN&amp;quot;&#039;&#039; это режим туннелирования трафика, в котором можно более тонко настраивать приложения, использующие VPN подключение.&lt;br /&gt;
&lt;br /&gt;
==== Режим системного прокси ====&lt;br /&gt;
В данном режиме программа запускает системный прокси-сервер и приложения, поддерживающие работу с прокси сервером, автоматически настраиваются на подключение к данному прокси.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Плюсы:&#039;&#039; включается одним кликом, возможно меньше нагрузка на систему&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Минусы:&#039;&#039; далеко не все приложения поддерживают подключение к прокси-серверу (обычно браузеры это поддерживают)&lt;br /&gt;
&lt;br /&gt;
==== Режим TUN ====&lt;br /&gt;
В данном режиме можно самим настраивать приложения для использования/запрета VPN подключения. Например, &#039;&#039;Discord&#039;&#039; можно настроить в данном режиме для использования VPN подключения.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Плюсы:&#039;&#039; можно любое приложение настроить на использование VPN&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Минусы:&#039;&#039; сложнее настройка (нужно вручную добавлять приложения в список), больше нагрузка на систему&lt;br /&gt;
&lt;br /&gt;
Для настройки данного режима заходим в &#039;&#039;&#039;&amp;quot;Настройки маршрутизации&amp;quot;&#039;&#039;&#039;, переходим во вкладку &#039;&#039;&#039;&amp;quot;Маршрут&amp;quot;&#039;&#039;&#039;, два раза кликаем на своем активном профиле и открывается окно настроек. В окне 3 поля для ввода: &#039;&#039;&amp;quot;Напрямую&amp;quot;&#039;&#039;, &#039;&#039;&amp;quot;Прокси&amp;quot;&#039;&#039; и &#039;&#039;&amp;quot;Блокировать&amp;quot;&#039;&#039;. Если кликнуть мышкой на любом поле, то появится список возможных вариантов правил. Все, что указано в поле &#039;&#039;&amp;quot;Напрямую&amp;quot;&#039;&#039;, будет работать в обход VPN подключения; все, что указано в поле &#039;&#039;&amp;quot;Прокси&amp;quot;&#039;&#039;, будет использовать VPN подключение; указанные в &#039;&#039;&amp;quot;Блокировать&amp;quot;&#039;&#039; правила, будут блокироваться. Для управления приложениями у вас есть возможность указания имени процесса (&#039;&#039;ProcessName&#039;&#039;) и пути приложения (&#039;&#039;ProcessPath&#039;&#039;). Имя процесса (так же как и путь к приложению) можно узнать из диспетчера задач.&lt;br /&gt;
&lt;br /&gt;
Например, чтобы заблокировать доступ браузера Microsoft Edge, добавьте строку:&amp;lt;syntaxhighlight lang=&amp;quot;abl&amp;quot;&amp;gt;&lt;br /&gt;
processName:msedge.exe&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;в поле &#039;&#039;&amp;quot;Блокировать&amp;quot;&#039;&#039; и доступ в сеть для браузера будет закрыт.&lt;br /&gt;
[[Категория:VPN_клиенты]]&lt;/div&gt;</summary>
		<author><name>Antidote</name></author>
	</entry>
	<entry>
		<id>https://wiki.antidotez.ru/mediawiki/index.php?title=%D0%97%D0%B0%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0&amp;diff=451</id>
		<title>Заглавная страница</title>
		<link rel="alternate" type="text/html" href="https://wiki.antidotez.ru/mediawiki/index.php?title=%D0%97%D0%B0%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0&amp;diff=451"/>
		<updated>2026-04-19T19:03:47Z</updated>

		<summary type="html">&lt;p&gt;Antidote: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Добро пожаловать =&lt;br /&gt;
&lt;br /&gt;
{{Note|text=Это личная Wiki, открытая для публичного просмотра. Здесь собраны мои заметки, справочные материалы и документация по темам, с которыми я работаю или которые изучаю.}}&lt;br /&gt;
&lt;br /&gt;
== О проекте ==&lt;br /&gt;
Эта Wiki создана как пространство для хранения и структурирования личных знаний. Материалы здесь не претендуют на полноту, объективность или универсальность — это, прежде всего, &#039;&#039;рабочие заметки&#039;&#039;, которые могут быть полезны как мне самому, так и другим.&lt;br /&gt;
&lt;br /&gt;
Некоторые страницы оформлены подробно, другие — в виде черновиков, списков или тезисов. Структура развивается по мере необходимости.&lt;br /&gt;
&lt;br /&gt;
== Основные разделы ==&lt;br /&gt;
* &#039;&#039;&#039;Технические заметки&#039;&#039;&#039; — системное администрирование, конфигурации, практические команды&lt;br /&gt;
* &#039;&#039;&#039;Программирование&#039;&#039;&#039; — шаблоны, приёмы, фрагменты кода&lt;br /&gt;
* &#039;&#039;&#039;Проекты и эксперименты&#039;&#039;&#039; — текущие и завершённые идеи, схемы, примеры&lt;br /&gt;
* &#039;&#039;&#039;Домашняя автоматизация&#039;&#039;&#039; — Home Assistant, ESPHome, DIY-устройства&lt;br /&gt;
* &#039;&#039;&#039;[[:Категория:Справочные материалы|Справочные материалы]]&#039;&#039;&#039; — шпаргалки, таблицы, ссылки&lt;br /&gt;
* &#039;&#039;&#039;Личное&#039;&#039;&#039; — организационные записи, идеи, списки&lt;br /&gt;
&lt;br /&gt;
== Обращение к читателям ==&lt;br /&gt;
Вы можете использовать материалы этой Wiki на свой страх и риск. Я не гарантирую их точность, актуальность или применимость в вашем контексте. Тем не менее, если что-то окажется полезным — буду рад.&lt;br /&gt;
&lt;br /&gt;
== Обновления ==&lt;br /&gt;
Wiki обновляется нерегулярно, по мере накопления нового опыта или необходимости сохранить важную информацию.&lt;/div&gt;</summary>
		<author><name>Antidote</name></author>
	</entry>
	<entry>
		<id>https://wiki.antidotez.ru/mediawiki/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Note&amp;diff=450</id>
		<title>Шаблон:Note</title>
		<link rel="alternate" type="text/html" href="https://wiki.antidotez.ru/mediawiki/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Note&amp;diff=450"/>
		<updated>2026-04-19T19:02:54Z</updated>

		<summary type="html">&lt;p&gt;Antidote: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;onlyinclude&amp;gt;{{#if: {{{1|{{{content|{{{text|{{{demo|&amp;lt;noinclude&amp;gt;demo&amp;lt;/noinclude&amp;gt;}}}}}}}}}}}} | &amp;lt;templatestyles src=&amp;quot;Note/styles.css&amp;quot; /&amp;gt;&amp;lt;div role=&amp;quot;note&amp;quot; class=&amp;quot;note note-{{#switch: {{{2|{{{type|}}}}}}&lt;br /&gt;
    |gotcha=error&lt;br /&gt;
    |warning=warn&lt;br /&gt;
    |notice=info&lt;br /&gt;
    |=info&lt;br /&gt;
    |#default={{{2|{{{type|}}}}}}&lt;br /&gt;
    }} {{#ifeq:{{{inline|}}}|1|note-inline}}&amp;quot;&amp;gt;{{#ifeq:{{{inline|}}}|1|{{{1|{{{content|{{{text}}}}}}}}}|&lt;br /&gt;
{{{1|{{{content|{{{text}}}}}}}}}}}&amp;lt;/div&amp;gt;&lt;br /&gt;
  | [[File:OOjs UI icon lightbulb-yellow.svg|18px|alt=&amp;lt;translate&amp;gt;&amp;lt;!--T:1--&amp;gt; Note&amp;lt;/translate&amp;gt;|link=]]&amp;amp;nbsp;&#039;&#039;&#039;&amp;lt;translate&amp;gt;&amp;lt;!--T:2--&amp;gt; Note:&amp;lt;/translate&amp;gt;&#039;&#039;&#039; }}&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;lt;/onlyinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;templatedata&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Note&amp;quot;,&lt;br /&gt;
  &amp;quot;params&amp;quot;: {&lt;br /&gt;
    &amp;quot;1&amp;quot;: {&lt;br /&gt;
      &amp;quot;label&amp;quot;: &amp;quot;Текст&amp;quot;,&lt;br /&gt;
      &amp;quot;description&amp;quot;: &amp;quot;Содержимое заметки&amp;quot;,&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
      &amp;quot;required&amp;quot;: true&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/templatedata&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Использование:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{Note|text=Foo}}&lt;br /&gt;
{{Note|type=info|text=Foo}}&lt;br /&gt;
{{Note|type=reminder|text=Foo}}&lt;br /&gt;
{{Note|type=warn|text=Foo}}&lt;br /&gt;
{{Note|type=error|text=Foo}}&lt;br /&gt;
&lt;br /&gt;
* Text {{Note|inline=1|text=Foo}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{Note|text=Foo}}&lt;br /&gt;
{{Note|type=info|text=Foo}}&lt;br /&gt;
{{Note|type=reminder|text=Foo}}&lt;br /&gt;
{{Note|type=reminder|text=Multiple&amp;lt;br&amp;gt;lines&amp;lt;br&amp;gt;of&amp;lt;br&amp;gt;text}}&lt;br /&gt;
{{Note|type=reminder|text=&lt;br /&gt;
* Multiple paragraphs.&lt;br /&gt;
&lt;br /&gt;
Of text.}}&lt;br /&gt;
{{Note|type=warn|text=Foo}}&lt;br /&gt;
{{Note|type=error|text=Foo}}&lt;br /&gt;
&lt;br /&gt;
* Text {{Note|inline=1|text=Foo}}&lt;/div&gt;</summary>
		<author><name>Antidote</name></author>
	</entry>
	<entry>
		<id>https://wiki.antidotez.ru/mediawiki/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Note&amp;diff=449</id>
		<title>Шаблон:Note</title>
		<link rel="alternate" type="text/html" href="https://wiki.antidotez.ru/mediawiki/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Note&amp;diff=449"/>
		<updated>2026-04-19T19:01:34Z</updated>

		<summary type="html">&lt;p&gt;Antidote: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;onlyinclude&amp;gt;{{#if: {{{1|{{{content|{{{text|{{{demo|&amp;lt;noinclude&amp;gt;demo&amp;lt;/noinclude&amp;gt;}}}}}}}}}}}} | &amp;lt;templatestyles src=&amp;quot;Note/styles.css&amp;quot; /&amp;gt;&amp;lt;div role=&amp;quot;note&amp;quot; class=&amp;quot;note note-{{#switch: {{{2|{{{type|}}}}}}&lt;br /&gt;
    |gotcha=error&lt;br /&gt;
    |warning=warn&lt;br /&gt;
    |notice=info&lt;br /&gt;
    |=info&lt;br /&gt;
    |#default={{{2|{{{type|}}}}}}&lt;br /&gt;
    }} {{#ifeq:{{{inline|}}}|1|note-inline}}&amp;quot;&amp;gt;{{#ifeq:{{{inline|}}}|1|{{{1|{{{content|{{{text}}}}}}}}}|&lt;br /&gt;
{{{1|{{{content|{{{text}}}}}}}}}}}&amp;lt;/div&amp;gt;&lt;br /&gt;
  | [[File:OOjs UI icon lightbulb-yellow.svg|18px|alt=&amp;lt;translate&amp;gt;&amp;lt;!--T:1--&amp;gt; Note&amp;lt;/translate&amp;gt;|link=]]&amp;amp;nbsp;&#039;&#039;&#039;&amp;lt;translate&amp;gt;&amp;lt;!--T:2--&amp;gt; Note:&amp;lt;/translate&amp;gt;&#039;&#039;&#039; }}&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;lt;/onlyinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Использование:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{Note|text=Foo}}&lt;br /&gt;
{{Note|type=info|text=Foo}}&lt;br /&gt;
{{Note|type=reminder|text=Foo}}&lt;br /&gt;
{{Note|type=warn|text=Foo}}&lt;br /&gt;
{{Note|type=error|text=Foo}}&lt;br /&gt;
&lt;br /&gt;
* Text {{Note|inline=1|text=Foo}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{Note|text=Foo}}&lt;br /&gt;
{{Note|type=info|text=Foo}}&lt;br /&gt;
{{Note|type=reminder|text=Foo}}&lt;br /&gt;
{{Note|type=reminder|text=Multiple&amp;lt;br&amp;gt;lines&amp;lt;br&amp;gt;of&amp;lt;br&amp;gt;text}}&lt;br /&gt;
{{Note|type=reminder|text=&lt;br /&gt;
* Multiple paragraphs.&lt;br /&gt;
&lt;br /&gt;
Of text.}}&lt;br /&gt;
{{Note|type=warn|text=Foo}}&lt;br /&gt;
{{Note|type=error|text=Foo}}&lt;br /&gt;
&lt;br /&gt;
* Text {{Note|inline=1|text=Foo}}&lt;/div&gt;</summary>
		<author><name>Antidote</name></author>
	</entry>
	<entry>
		<id>https://wiki.antidotez.ru/mediawiki/index.php?title=V2rayNG&amp;diff=448</id>
		<title>V2rayNG</title>
		<link rel="alternate" type="text/html" href="https://wiki.antidotez.ru/mediawiki/index.php?title=V2rayNG&amp;diff=448"/>
		<updated>2026-04-19T18:57:33Z</updated>

		<summary type="html">&lt;p&gt;Antidote: Замена шаблонов&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Описание ==&lt;br /&gt;
[[Файл:V2rayng icon.png|справа|безрамки|133x133пкс]]&lt;br /&gt;
&#039;&#039;&#039;v2rayNG&#039;&#039;&#039; - это приложение для Android, которое служит клиентом для работы с V2Ray, инструментом для обхода интернет-цензуры и обеспечения конфиденциальности в сети.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Github проекта:&#039;&#039;&#039; [https://github.com/2dust/v2rayNG/]&lt;br /&gt;
&lt;br /&gt;
== Скачивание ==&lt;br /&gt;
:➡️ [https://nextcloud.antidotez.ru/s/biJWZkaNWpRDzpE/download Версия 2.0.13]&lt;br /&gt;
&lt;br /&gt;
== Конфигурация ==&lt;br /&gt;
&lt;br /&gt;
=== Добавление профиля подключения ===&lt;br /&gt;
На данном этапе мы добавим профиль подключения к серверу.&lt;br /&gt;
{{Note|text=Для добавления подключения у вас должна быть скопированная в буфер обмена ссылка на подключение}}&lt;br /&gt;
* Запускаем приложение, в главном окне программы открываем боковое меню &#039;&#039;(Скриншот №1)&#039;&#039;, выбираем пункт &#039;&#039;&#039;&amp;quot;Группы&amp;quot;&#039;&#039;&#039;, попадаем в окно списка групп &#039;&#039;(Скриншот №2)&#039;&#039; и дальше нажимаем &#039;&#039;&#039;&amp;quot;+&amp;quot;&#039;&#039;&#039; для добавления новой группы&lt;br /&gt;
&lt;br /&gt;
* В открывшемся окне задаем любое название группы (например &#039;&#039;&amp;quot;Группа1&amp;quot;&#039;&#039;), в поле &#039;&#039;&#039;&amp;quot;URL&amp;quot;&#039;&#039;&#039; вставляем ссылку на подключение, ставим галочку &#039;&#039;&#039;&amp;quot;Использовать автообновление&amp;quot;&#039;&#039;&#039;, сохраняем изменения нажатием на галочку сверху справа &#039;&#039;(Скриншот №3)&#039;&#039;&lt;br /&gt;
* Нажимаем кнопку ↺ для обновления параметров подключения (внизу должно показаться уведомление &#039;&#039;&amp;quot;Успешно&amp;quot;&#039;&#039;, если так, то все нормально) &#039;&#039;(Скриншот №2)&#039;&#039;&lt;br /&gt;
&amp;lt;gallery mode=&amp;quot;nolines&amp;quot; heights=&amp;quot;180&amp;quot;&amp;gt;&lt;br /&gt;
Файл:Screenshot 2025-07-27-20-20-19-416.jpg|&#039;&#039;Скриншот №1&#039;&#039; Боковое меню приложения&lt;br /&gt;
Файл:Screenshot 2025-07-31-18-43-30-119 com.v2ray.ang.jpg|&#039;&#039;Скриншот №2&#039;&#039; Окно списка групп&lt;br /&gt;
Файл:Screenshot 2025-07-31-18-43-25-167 com.v2ray.ang.jpg|&#039;&#039;Скриншот №3&#039;&#039; Окно настроек группы&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Выбор приложений для использования VPN ===&lt;br /&gt;
{{Note|type=warning|text=Крайне рекомендуется включать только те приложения, которым действительно нужно VPN подключение!}}Настроим приложение так, чтобы только определенные приложения использовали VPN подключение. Переходим через боковое меню &#039;&#039;(Скриншот №1)&#039;&#039; в &#039;&#039;&#039;&amp;quot;Выбор приложений&amp;quot;&#039;&#039;&#039; и выбираем приложения которые будут использовать VPN подключение &#039;&#039;(Скриншот №4)&#039;&#039;.&amp;lt;gallery mode=&amp;quot;nolines&amp;quot; heights=&amp;quot;180&amp;quot;&amp;gt;&lt;br /&gt;
Файл:Screenshot 2025-07-27-20-20-38-860.jpg|&#039;&#039;Скриншот №4&#039;&#039; Выбор приложений для использования VPN&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Маршрутизация ===&lt;br /&gt;
&lt;br /&gt;
На данном этапе мы настроим правила подключения к сайтам (так называемая &#039;&#039;маршрутизация&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
* Копируем данный код в буфер обмена:&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot; start=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
[{&amp;quot;domain&amp;quot;:[&amp;quot;geosite:google-gemini&amp;quot;],&amp;quot;enabled&amp;quot;:true,&amp;quot;locked&amp;quot;:false,&amp;quot;outboundTag&amp;quot;:&amp;quot;proxy&amp;quot;,&amp;quot;remarks&amp;quot;:&amp;quot;Google gemini&amp;quot;},{&amp;quot;domain&amp;quot;:[&amp;quot;geosite:youtube&amp;quot;],&amp;quot;enabled&amp;quot;:true,&amp;quot;locked&amp;quot;:false,&amp;quot;outboundTag&amp;quot;:&amp;quot;proxy&amp;quot;,&amp;quot;remarks&amp;quot;:&amp;quot;Youtube&amp;quot;},{&amp;quot;domain&amp;quot;:[&amp;quot;geosite:google&amp;quot;],&amp;quot;enabled&amp;quot;:true,&amp;quot;locked&amp;quot;:false,&amp;quot;outboundTag&amp;quot;:&amp;quot;direct&amp;quot;,&amp;quot;remarks&amp;quot;:&amp;quot;Google&amp;quot;},{&amp;quot;domain&amp;quot;:[&amp;quot;geosite:category-ads-all&amp;quot;],&amp;quot;enabled&amp;quot;:true,&amp;quot;locked&amp;quot;:false,&amp;quot;outboundTag&amp;quot;:&amp;quot;block&amp;quot;,&amp;quot;remarks&amp;quot;:&amp;quot;Блокировка рекламы&amp;quot;},{&amp;quot;enabled&amp;quot;:true,&amp;quot;ip&amp;quot;:[&amp;quot;geoip:private&amp;quot;],&amp;quot;locked&amp;quot;:false,&amp;quot;outboundTag&amp;quot;:&amp;quot;direct&amp;quot;,&amp;quot;remarks&amp;quot;:&amp;quot;Частные IP&amp;quot;},{&amp;quot;domain&amp;quot;:[&amp;quot;geosite:private&amp;quot;],&amp;quot;enabled&amp;quot;:true,&amp;quot;locked&amp;quot;:false,&amp;quot;outboundTag&amp;quot;:&amp;quot;direct&amp;quot;,&amp;quot;remarks&amp;quot;:&amp;quot;Частные домены&amp;quot;},{&amp;quot;domain&amp;quot;:[&amp;quot;geosite:category-ru&amp;quot;],&amp;quot;enabled&amp;quot;:true,&amp;quot;locked&amp;quot;:false,&amp;quot;outboundTag&amp;quot;:&amp;quot;direct&amp;quot;,&amp;quot;remarks&amp;quot;:&amp;quot;Домены России&amp;quot;},{&amp;quot;enabled&amp;quot;:true,&amp;quot;ip&amp;quot;:[&amp;quot;geoip:ru&amp;quot;],&amp;quot;locked&amp;quot;:false,&amp;quot;outboundTag&amp;quot;:&amp;quot;direct&amp;quot;,&amp;quot;remarks&amp;quot;:&amp;quot;IP России&amp;quot;}]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* В боковом меню &#039;&#039;(Скриншот №1)&#039;&#039; выбираем пункт &#039;&#039;&#039;&amp;quot;Маршрутизация&amp;quot;&#039;&#039;&#039;, откроется окно настроек маршрутизации &#039;&#039;(Скриншот №5)&#039;&#039;. Нажимаем справа сверху три точки и выбираем &#039;&#039;&#039;&amp;quot;Импорт правил из буфера обмена&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;gallery mode=&amp;quot;nolines&amp;quot; heights=&amp;quot;180&amp;quot;&amp;gt;&lt;br /&gt;
Файл:Screenshot 2025-07-27-23-30-39-356.jpg|&#039;&#039;Скриншот №5&#039;&#039; Окно настроек маршрутизации&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
{{Note|type=error|text=Настоятельно рекомендуется не пропускать данный шаг, иначе велика вероятность неработоспособности большинства сайтов! }}&lt;br /&gt;
&lt;br /&gt;
=== Запуск подключения ===&lt;br /&gt;
После всех этих манипуляций у вас появится подключение (одно или несколько) в главном окне программы. Если у вас их несколько, выбирать активное подключение можно тапом по нему (&#039;&#039;активное подключение выделено полосой слева&#039;&#039;). Для запуска подключения нажмите кнопку ▶ справа снизу.&lt;br /&gt;
&lt;br /&gt;
[[Категория:VPN_клиенты]]&lt;/div&gt;</summary>
		<author><name>Antidote</name></author>
	</entry>
	<entry>
		<id>https://wiki.antidotez.ru/mediawiki/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Note&amp;diff=447</id>
		<title>Шаблон:Note</title>
		<link rel="alternate" type="text/html" href="https://wiki.antidotez.ru/mediawiki/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Note&amp;diff=447"/>
		<updated>2026-04-19T18:50:44Z</updated>

		<summary type="html">&lt;p&gt;Antidote: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;onlyinclude&amp;gt;{{#if: {{{1|{{{content|{{{text|{{{demo|&amp;lt;noinclude&amp;gt;demo&amp;lt;/noinclude&amp;gt;}}}}}}}}}}}} | &amp;lt;templatestyles src=&amp;quot;Note/styles.css&amp;quot; /&amp;gt;&amp;lt;div role=&amp;quot;note&amp;quot; class=&amp;quot;note note-{{#switch: {{{2|{{{type|}}}}}}&lt;br /&gt;
    |gotcha=error&lt;br /&gt;
    |warning=warn&lt;br /&gt;
    |notice=info&lt;br /&gt;
    |=info&lt;br /&gt;
    |#default={{{2|{{{type|}}}}}}&lt;br /&gt;
    }} {{#ifeq:{{{inline|}}}|1|note-inline}}&amp;quot;&amp;gt;{{#ifeq:{{{inline|}}}|1|{{{1|{{{content|{{{text}}}}}}}}}|&lt;br /&gt;
{{{1|{{{content|{{{text}}}}}}}}}}}&amp;lt;/div&amp;gt;&lt;br /&gt;
  | [[File:OOjs UI icon lightbulb-yellow.svg|18px|alt=&amp;lt;translate&amp;gt;&amp;lt;!--T:1--&amp;gt; Note&amp;lt;/translate&amp;gt;|link=]]&amp;amp;nbsp;&#039;&#039;&#039;&amp;lt;translate&amp;gt;&amp;lt;!--T:2--&amp;gt; Note:&amp;lt;/translate&amp;gt;&#039;&#039;&#039; }}&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;lt;/onlyinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{Note|text=Foo}}&lt;br /&gt;
{{Note|type=info|text=Foo}}&lt;br /&gt;
{{Note|type=reminder|text=Foo}}&lt;br /&gt;
{{Note|type=warn|text=Foo}}&lt;br /&gt;
{{Note|type=error|text=Foo}}&lt;br /&gt;
&lt;br /&gt;
* Text {{Note|inline=1|text=Foo}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{Note|text=Foo}}&lt;br /&gt;
{{Note|type=info|text=Foo}}&lt;br /&gt;
{{Note|type=reminder|text=Foo}}&lt;br /&gt;
{{Note|type=reminder|text=Multiple&amp;lt;br&amp;gt;lines&amp;lt;br&amp;gt;of&amp;lt;br&amp;gt;text}}&lt;br /&gt;
{{Note|type=reminder|text=&lt;br /&gt;
* Multiple paragraphs.&lt;br /&gt;
&lt;br /&gt;
Of text.}}&lt;br /&gt;
{{Note|type=warn|text=Foo}}&lt;br /&gt;
{{Note|type=error|text=Foo}}&lt;br /&gt;
&lt;br /&gt;
* Text {{Note|inline=1|text=Foo}}&lt;/div&gt;</summary>
		<author><name>Antidote</name></author>
	</entry>
	<entry>
		<id>https://wiki.antidotez.ru/mediawiki/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Navbar/styles.css&amp;diff=445</id>
		<title>Шаблон:Navbar/styles.css</title>
		<link rel="alternate" type="text/html" href="https://wiki.antidotez.ru/mediawiki/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Navbar/styles.css&amp;diff=445"/>
		<updated>2026-04-19T18:45:52Z</updated>

		<summary type="html">&lt;p&gt;Antidote: 1 версия импортирована&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/**&lt;br /&gt;
 * This TemplateStyles page is separately used for [[Template:Navbar]]&lt;br /&gt;
 * because of course there are two versions of the same template.&lt;br /&gt;
 * Be careful when adjusting styles accordingly.&lt;br /&gt;
 */&lt;br /&gt;
.navbar {&lt;br /&gt;
	display: inline;&lt;br /&gt;
	font-size: 88%;&lt;br /&gt;
	font-weight: normal;&lt;br /&gt;
	color: var(--color-base, #202122) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbar ul {&lt;br /&gt;
	display: inline;&lt;br /&gt;
	white-space: nowrap;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbar li {&lt;br /&gt;
	word-spacing: -0.125em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Navbar styling when nested in navbox */&lt;br /&gt;
.navbox .navbar {&lt;br /&gt;
	display: block;&lt;br /&gt;
	font-size: 100%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbox-title .navbar {&lt;br /&gt;
	/* @noflip */&lt;br /&gt;
	float: left;&lt;br /&gt;
	/* @noflip */&lt;br /&gt;
	text-align: left;&lt;br /&gt;
	/* @noflip */&lt;br /&gt;
	margin-right: 0.5em;&lt;br /&gt;
	width: 6em;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Antidote</name></author>
	</entry>
	<entry>
		<id>https://wiki.antidotez.ru/mediawiki/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Message_box/ombox.css&amp;diff=443</id>
		<title>Шаблон:Message box/ombox.css</title>
		<link rel="alternate" type="text/html" href="https://wiki.antidotez.ru/mediawiki/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Message_box/ombox.css&amp;diff=443"/>
		<updated>2026-04-19T18:45:52Z</updated>

		<summary type="html">&lt;p&gt;Antidote: 1 версия импортирована&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/**&lt;br /&gt;
 * {{ombox}} (other pages message box) styles&lt;br /&gt;
 *&lt;br /&gt;
 * @source https://www.mediawiki.org/wiki/MediaWiki:Gadget-enwp-boxes.css&lt;br /&gt;
 * @revision 2021-07-15&lt;br /&gt;
 */&lt;br /&gt;
table.ombox {&lt;br /&gt;
	margin: 4px 10%;&lt;br /&gt;
	border-collapse: collapse;&lt;br /&gt;
	/* Default &amp;quot;notice&amp;quot; gray */&lt;br /&gt;
	border: 1px solid #a2a9b1;&lt;br /&gt;
	background-color: #f8f9fa;&lt;br /&gt;
	color: #333;&lt;br /&gt;
	box-sizing: border-box;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* An empty narrow cell */&lt;br /&gt;
.ombox td.mbox-empty-cell {&lt;br /&gt;
	border: none;&lt;br /&gt;
	padding: 0;&lt;br /&gt;
	width: 1px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* The message body cell(s) */&lt;br /&gt;
.ombox th.mbox-text,&lt;br /&gt;
.ombox td.mbox-text {&lt;br /&gt;
	border: none;&lt;br /&gt;
	/* 0.9em left/right */&lt;br /&gt;
	padding: 0.25em 0.9em;&lt;br /&gt;
	/* Make all mboxes the same width regardless of text length */&lt;br /&gt;
	width: 100%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* The left image cell */&lt;br /&gt;
.ombox td.mbox-image {&lt;br /&gt;
	border: none;&lt;br /&gt;
	text-align: center;&lt;br /&gt;
	padding: 2px 0 2px 0.9em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* The right image cell */&lt;br /&gt;
.ombox td.mbox-imageright {&lt;br /&gt;
	border: none;&lt;br /&gt;
	text-align: center;&lt;br /&gt;
	padding: 2px 0.9em 2px 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
table.ombox-notice {&lt;br /&gt;
	/* Gray */&lt;br /&gt;
	border-color: #a2a9b1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
table.ombox-speedy {&lt;br /&gt;
	/* Pink */&lt;br /&gt;
	background-color: #fee7e6;&lt;br /&gt;
	color: #333;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
table.ombox-speedy,&lt;br /&gt;
table.ombox-delete {&lt;br /&gt;
	/* Red */&lt;br /&gt;
	border-color: #b32424;&lt;br /&gt;
	border-width: 2px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
table.ombox-content {&lt;br /&gt;
	/* Orange */&lt;br /&gt;
	border-color: #f28500;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
table.ombox-style {&lt;br /&gt;
	/* Yellow */&lt;br /&gt;
	border-color: #fc3;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
table.ombox-move {&lt;br /&gt;
	/* Purple */&lt;br /&gt;
	border-color: #9932cc;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
table.ombox-protection {&lt;br /&gt;
	/* Gray-gold */&lt;br /&gt;
	border-color: #a2a9b1;&lt;br /&gt;
	border-width: 2px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * {{ombox|small=1}} styles&lt;br /&gt;
 *&lt;br /&gt;
 * These &amp;quot;.mbox-small&amp;quot; classes must be placed after all other&lt;br /&gt;
 * &amp;quot;.ombox&amp;quot; classes. &amp;quot;html body.mediawiki .ombox&amp;quot;&lt;br /&gt;
 * is so they apply only to other page message boxes.&lt;br /&gt;
 *&lt;br /&gt;
 * @source https://www.mediawiki.org/wiki/MediaWiki:Gadget-enwp-boxes.css&lt;br /&gt;
 * @revision 2021-07-15&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
/* For the &amp;quot;small=yes&amp;quot; option. */&lt;br /&gt;
html body.mediawiki .ombox.mbox-small {&lt;br /&gt;
	clear: right;&lt;br /&gt;
	float: right;&lt;br /&gt;
	margin: 4px 0 4px 1em;&lt;br /&gt;
	box-sizing: border-box;&lt;br /&gt;
	width: 238px;&lt;br /&gt;
	font-size: 88%;&lt;br /&gt;
	line-height: 1.25em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media screen {&lt;br /&gt;
	html.skin-theme-clientpref-night table.ombox {&lt;br /&gt;
	    background-color: transparent;&lt;br /&gt;
	    color: inherit;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media screen and (prefers-color-scheme: dark) {&lt;br /&gt;
    /* automatic mode */&lt;br /&gt;
    html.skin-theme-clientpref-os table.ombox {&lt;br /&gt;
    	background-color: transparent;&lt;br /&gt;
    	color: inherit;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media screen and (max-width: 720px) {&lt;br /&gt;
  table.ombox {&lt;br /&gt;
	margin: 4px auto;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Antidote</name></author>
	</entry>
	<entry>
		<id>https://wiki.antidotez.ru/mediawiki/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Note&amp;diff=441</id>
		<title>Шаблон:Note</title>
		<link rel="alternate" type="text/html" href="https://wiki.antidotez.ru/mediawiki/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Note&amp;diff=441"/>
		<updated>2026-04-19T18:45:52Z</updated>

		<summary type="html">&lt;p&gt;Antidote: 1 версия импортирована&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;languages/&amp;gt;&lt;br /&gt;
&amp;lt;onlyinclude&amp;gt;{{#if: {{{1|{{{content|{{{text|{{{demo|&amp;lt;noinclude&amp;gt;demo&amp;lt;/noinclude&amp;gt;}}}}}}}}}}}} | &amp;lt;templatestyles src=&amp;quot;Note/styles.css&amp;quot; /&amp;gt;&amp;lt;div role=&amp;quot;note&amp;quot; class=&amp;quot;note note-{{#switch: {{{2|{{{type|}}}}}}&lt;br /&gt;
    |gotcha=error&lt;br /&gt;
    |warning=warn&lt;br /&gt;
    |notice=info&lt;br /&gt;
    |=info&lt;br /&gt;
    |#default={{{2|{{{type|}}}}}}&lt;br /&gt;
    }} {{#ifeq:{{{inline|}}}|1|note-inline}}&amp;quot;&amp;gt;{{#ifeq:{{{inline|}}}|1|{{{1|{{{content|{{{text}}}}}}}}}|&lt;br /&gt;
{{{1|{{{content|{{{text}}}}}}}}}}}&amp;lt;/div&amp;gt;&lt;br /&gt;
  | [[File:OOjs UI icon lightbulb-yellow.svg|18px|alt=&amp;lt;translate&amp;gt;&amp;lt;!--T:1--&amp;gt; Note&amp;lt;/translate&amp;gt;|link=]]&amp;amp;nbsp;&#039;&#039;&#039;&amp;lt;translate&amp;gt;&amp;lt;!--T:2--&amp;gt; Note:&amp;lt;/translate&amp;gt;&#039;&#039;&#039; }}&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;lt;/onlyinclude&amp;gt;&lt;br /&gt;
{{documentation|content=&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
== Usage == &amp;lt;!--T:3--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{Note|text=Foo}}&lt;br /&gt;
{{Note|type=info|text=Foo}}&lt;br /&gt;
{{Note|type=reminder|text=Foo}}&lt;br /&gt;
{{Note|type=warn|text=Foo}}&lt;br /&gt;
{{Note|type=error|text=Foo}}&lt;br /&gt;
{{Note}} &amp;lt;translate nowrap&amp;gt;&amp;lt;!--T:6--&amp;gt; Loose test&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Text {{Note|inline=1|text=Foo}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{Note|text=Foo}}&lt;br /&gt;
{{Note|type=info|text=Foo}}&lt;br /&gt;
{{Note|type=reminder|text=Foo}}&lt;br /&gt;
{{Note|type=reminder|text=Multiple&amp;lt;br&amp;gt;lines&amp;lt;br&amp;gt;of&amp;lt;br&amp;gt;text}}&lt;br /&gt;
{{Note|type=reminder|text=&lt;br /&gt;
* Multiple paragraphs.&lt;br /&gt;
&lt;br /&gt;
Of text.}}&lt;br /&gt;
{{Note|type=warn|text=Foo}}&lt;br /&gt;
{{Note|type=error|text=Foo}}&lt;br /&gt;
{{Note}} &amp;lt;translate&amp;gt;&amp;lt;!--T:4--&amp;gt; Loose test&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Text {{Note|inline=1|text=Foo}}&lt;br /&gt;
&lt;br /&gt;
== Parameters ==&lt;br /&gt;
&lt;br /&gt;
{{Note/doc}}&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* {{tl|warn}}, shortcut for this template with &amp;lt;code&amp;gt;type=warning&amp;lt;/code&amp;gt;.&lt;br /&gt;
* {{tl|mbox}}, and in particular the namespace-agnostic {{tl|ombox}}, which by default resembles a typical &amp;quot;info&amp;quot; template.&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
[[Category:Templates{{#translation:}}|{{PAGENAME}}]]&lt;/div&gt;</summary>
		<author><name>Antidote</name></author>
	</entry>
	<entry>
		<id>https://wiki.antidotez.ru/mediawiki/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Navbar/styles.css&amp;diff=438</id>
		<title>Модуль:Navbar/styles.css</title>
		<link rel="alternate" type="text/html" href="https://wiki.antidotez.ru/mediawiki/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Navbar/styles.css&amp;diff=438"/>
		<updated>2026-04-19T18:43:52Z</updated>

		<summary type="html">&lt;p&gt;Antidote: 1 версия импортирована&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/**&lt;br /&gt;
 * This TemplateStyles page is separately used for [[Template:Navbar]]&lt;br /&gt;
 * because of course there are two versions of the same template.&lt;br /&gt;
 * Be careful when adjusting styles accordingly.&lt;br /&gt;
 */&lt;br /&gt;
.navbar {&lt;br /&gt;
	display: inline;&lt;br /&gt;
	font-size: 88%;&lt;br /&gt;
	font-weight: normal;&lt;br /&gt;
	color: var(--color-base, #202122) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbar ul {&lt;br /&gt;
	display: inline;&lt;br /&gt;
	white-space: nowrap;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbar li {&lt;br /&gt;
	word-spacing: -0.125em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Navbar styling when nested in navbox */&lt;br /&gt;
.navbox .navbar {&lt;br /&gt;
	display: block;&lt;br /&gt;
	font-size: 100%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbox-title .navbar {&lt;br /&gt;
	/* @noflip */&lt;br /&gt;
	float: left;&lt;br /&gt;
	/* @noflip */&lt;br /&gt;
	text-align: left;&lt;br /&gt;
	/* @noflip */&lt;br /&gt;
	margin-right: 0.5em;&lt;br /&gt;
	width: 6em;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Antidote</name></author>
	</entry>
	<entry>
		<id>https://wiki.antidotez.ru/mediawiki/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Message_box/ombox.css&amp;diff=436</id>
		<title>Модуль:Message box/ombox.css</title>
		<link rel="alternate" type="text/html" href="https://wiki.antidotez.ru/mediawiki/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Message_box/ombox.css&amp;diff=436"/>
		<updated>2026-04-19T18:43:51Z</updated>

		<summary type="html">&lt;p&gt;Antidote: 1 версия импортирована&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/**&lt;br /&gt;
 * {{ombox}} (other pages message box) styles&lt;br /&gt;
 *&lt;br /&gt;
 * @source https://www.mediawiki.org/wiki/MediaWiki:Gadget-enwp-boxes.css&lt;br /&gt;
 * @revision 2021-07-15&lt;br /&gt;
 */&lt;br /&gt;
table.ombox {&lt;br /&gt;
	margin: 4px 10%;&lt;br /&gt;
	border-collapse: collapse;&lt;br /&gt;
	/* Default &amp;quot;notice&amp;quot; gray */&lt;br /&gt;
	border: 1px solid #a2a9b1;&lt;br /&gt;
	background-color: #f8f9fa;&lt;br /&gt;
	color: #333;&lt;br /&gt;
	box-sizing: border-box;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* An empty narrow cell */&lt;br /&gt;
.ombox td.mbox-empty-cell {&lt;br /&gt;
	border: none;&lt;br /&gt;
	padding: 0;&lt;br /&gt;
	width: 1px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* The message body cell(s) */&lt;br /&gt;
.ombox th.mbox-text,&lt;br /&gt;
.ombox td.mbox-text {&lt;br /&gt;
	border: none;&lt;br /&gt;
	/* 0.9em left/right */&lt;br /&gt;
	padding: 0.25em 0.9em;&lt;br /&gt;
	/* Make all mboxes the same width regardless of text length */&lt;br /&gt;
	width: 100%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* The left image cell */&lt;br /&gt;
.ombox td.mbox-image {&lt;br /&gt;
	border: none;&lt;br /&gt;
	text-align: center;&lt;br /&gt;
	padding: 2px 0 2px 0.9em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* The right image cell */&lt;br /&gt;
.ombox td.mbox-imageright {&lt;br /&gt;
	border: none;&lt;br /&gt;
	text-align: center;&lt;br /&gt;
	padding: 2px 0.9em 2px 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
table.ombox-notice {&lt;br /&gt;
	/* Gray */&lt;br /&gt;
	border-color: #a2a9b1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
table.ombox-speedy {&lt;br /&gt;
	/* Pink */&lt;br /&gt;
	background-color: #fee7e6;&lt;br /&gt;
	color: #333;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
table.ombox-speedy,&lt;br /&gt;
table.ombox-delete {&lt;br /&gt;
	/* Red */&lt;br /&gt;
	border-color: #b32424;&lt;br /&gt;
	border-width: 2px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
table.ombox-content {&lt;br /&gt;
	/* Orange */&lt;br /&gt;
	border-color: #f28500;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
table.ombox-style {&lt;br /&gt;
	/* Yellow */&lt;br /&gt;
	border-color: #fc3;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
table.ombox-move {&lt;br /&gt;
	/* Purple */&lt;br /&gt;
	border-color: #9932cc;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
table.ombox-protection {&lt;br /&gt;
	/* Gray-gold */&lt;br /&gt;
	border-color: #a2a9b1;&lt;br /&gt;
	border-width: 2px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * {{ombox|small=1}} styles&lt;br /&gt;
 *&lt;br /&gt;
 * These &amp;quot;.mbox-small&amp;quot; classes must be placed after all other&lt;br /&gt;
 * &amp;quot;.ombox&amp;quot; classes. &amp;quot;html body.mediawiki .ombox&amp;quot;&lt;br /&gt;
 * is so they apply only to other page message boxes.&lt;br /&gt;
 *&lt;br /&gt;
 * @source https://www.mediawiki.org/wiki/MediaWiki:Gadget-enwp-boxes.css&lt;br /&gt;
 * @revision 2021-07-15&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
/* For the &amp;quot;small=yes&amp;quot; option. */&lt;br /&gt;
html body.mediawiki .ombox.mbox-small {&lt;br /&gt;
	clear: right;&lt;br /&gt;
	float: right;&lt;br /&gt;
	margin: 4px 0 4px 1em;&lt;br /&gt;
	box-sizing: border-box;&lt;br /&gt;
	width: 238px;&lt;br /&gt;
	font-size: 88%;&lt;br /&gt;
	line-height: 1.25em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media screen {&lt;br /&gt;
	html.skin-theme-clientpref-night table.ombox {&lt;br /&gt;
	    background-color: transparent;&lt;br /&gt;
	    color: inherit;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media screen and (prefers-color-scheme: dark) {&lt;br /&gt;
    /* automatic mode */&lt;br /&gt;
    html.skin-theme-clientpref-os table.ombox {&lt;br /&gt;
    	background-color: transparent;&lt;br /&gt;
    	color: inherit;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media screen and (max-width: 720px) {&lt;br /&gt;
  table.ombox {&lt;br /&gt;
	margin: 4px auto;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Antidote</name></author>
	</entry>
	<entry>
		<id>https://wiki.antidotez.ru/mediawiki/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Uses_TemplateStyles/config&amp;diff=434</id>
		<title>Модуль:Uses TemplateStyles/config</title>
		<link rel="alternate" type="text/html" href="https://wiki.antidotez.ru/mediawiki/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Uses_TemplateStyles/config&amp;diff=434"/>
		<updated>2026-04-19T18:43:51Z</updated>

		<summary type="html">&lt;p&gt;Antidote: 1 версия импортирована&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local cfg = {} -- Don’t touch this line.&lt;br /&gt;
&lt;br /&gt;
-- Subpage blacklist: these subpages will not be categorized (except for the&lt;br /&gt;
-- error category, which is always added if there is an error).&lt;br /&gt;
-- For example “Template:Foo/doc” matches the `doc = true` rule, so it will have&lt;br /&gt;
-- no categories. “Template:Foo” and “Template:Foo/documentation” match no rules,&lt;br /&gt;
-- so they *will* have categories. All rules should be in the&lt;br /&gt;
--   [&#039;&amp;lt;subpage name&amp;gt;&#039;] = true,&lt;br /&gt;
-- format.&lt;br /&gt;
cfg[&#039;subpage_blacklist&#039;] = {&lt;br /&gt;
	[&#039;doc&#039;] = true,&lt;br /&gt;
	[&#039;sandbox&#039;] = true,&lt;br /&gt;
	[&#039;sandbox2&#039;] = true,&lt;br /&gt;
	[&#039;testcases&#039;] = true,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-- Sandbox title: if the stylesheet’s title is &amp;lt;template&amp;gt;/&amp;lt;stylesheet&amp;gt;.css, the&lt;br /&gt;
-- stylesheet’s sandbox is expected to be at &amp;lt;template&amp;gt;/&amp;lt;sandbox_title&amp;gt;/&amp;lt;stylesheet&amp;gt;.css&lt;br /&gt;
-- Set to nil to disable sandbox links.&lt;br /&gt;
cfg[&#039;sandbox_title&#039;] = &#039;sandbox&#039;&lt;br /&gt;
&lt;br /&gt;
-- Error category: this category is added if the module call contains errors&lt;br /&gt;
-- (e.g. no stylesheet listed). A category name without namespace, or nil&lt;br /&gt;
-- to disable categorization (not recommended).&lt;br /&gt;
cfg[&#039;error_category&#039;] = nil&lt;br /&gt;
&lt;br /&gt;
-- Default category: this category is added if no custom category is specified&lt;br /&gt;
-- in module/template call. A category name without namespace, or nil&lt;br /&gt;
-- to disable categorization.&lt;br /&gt;
cfg[&#039;default_category&#039;] = &#039;Templates using TemplateStyles&#039;&lt;br /&gt;
	.. mw.getCurrentFrame():callParserFunction(&amp;quot;#translation:&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
-- Protection conflict category: this category is added if the protection level&lt;br /&gt;
-- of any stylesheet differs from the one of the template. A category name&lt;br /&gt;
-- without namespace, or nil to disable categorization (not recommended).&lt;br /&gt;
cfg[&#039;protection_conflict_category&#039;] = nil&lt;br /&gt;
&lt;br /&gt;
-- Padlock pattern: Lua pattern to search on protected stylesheets for, or nil&lt;br /&gt;
-- to disable padlock check.&lt;br /&gt;
cfg[&#039;padlock_pattern&#039;] = nil&lt;br /&gt;
&lt;br /&gt;
-- Missing padlock category: this category is added if a protected stylesheet&lt;br /&gt;
-- doesn’t contain any padlock template (specified by the above Lua pattern).&lt;br /&gt;
-- A category name without namespace (no nil allowed) if the pattern is not nil,&lt;br /&gt;
-- unused (and thus may be nil) otherwise.&lt;br /&gt;
cfg[&#039;missing_padlock_category&#039;] = nil&lt;br /&gt;
&lt;br /&gt;
return cfg -- Don’t touch this line.&lt;/div&gt;</summary>
		<author><name>Antidote</name></author>
	</entry>
	<entry>
		<id>https://wiki.antidotez.ru/mediawiki/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:TableTools&amp;diff=432</id>
		<title>Модуль:TableTools</title>
		<link rel="alternate" type="text/html" href="https://wiki.antidotez.ru/mediawiki/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:TableTools&amp;diff=432"/>
		<updated>2026-04-19T18:43:51Z</updated>

		<summary type="html">&lt;p&gt;Antidote: 1 версия импортирована&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;--[[&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
--                               TableTools                                       --&lt;br /&gt;
--                                                                                --&lt;br /&gt;
-- This module includes a number of functions for dealing with Lua tables.        --&lt;br /&gt;
-- It is a meta-module, meant to be called from other Lua modules, and should     --&lt;br /&gt;
-- not be called directly from #invoke.                                           --&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
--]]&lt;br /&gt;
&lt;br /&gt;
local libraryUtil = require(&#039;libraryUtil&#039;)&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
-- Define often-used variables and functions.&lt;br /&gt;
local floor = math.floor&lt;br /&gt;
local infinity = math.huge&lt;br /&gt;
local checkType = libraryUtil.checkType&lt;br /&gt;
local checkTypeMulti = libraryUtil.checkTypeMulti&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
-- isPositiveInteger&lt;br /&gt;
--&lt;br /&gt;
-- This function returns true if the given value is a positive integer, and false&lt;br /&gt;
-- if not. Although it doesn&#039;t operate on tables, it is included here as it is&lt;br /&gt;
-- useful for determining whether a given table key is in the array part or the&lt;br /&gt;
-- hash part of a table.&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
--]]&lt;br /&gt;
function p.isPositiveInteger(v)&lt;br /&gt;
	if type(v) == &#039;number&#039; and v &amp;gt;= 1 and floor(v) == v and v &amp;lt; infinity then&lt;br /&gt;
		return true&lt;br /&gt;
	else&lt;br /&gt;
		return false&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
-- isNan&lt;br /&gt;
--&lt;br /&gt;
-- This function returns true if the given number is a NaN value, and false&lt;br /&gt;
-- if not. Although it doesn&#039;t operate on tables, it is included here as it is&lt;br /&gt;
-- useful for determining whether a value can be a valid table key. Lua will&lt;br /&gt;
-- generate an error if a NaN is used as a table key.&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
--]]&lt;br /&gt;
function p.isNan(v)&lt;br /&gt;
	if type(v) == &#039;number&#039; and tostring(v) == &#039;-nan&#039; then&lt;br /&gt;
		return true&lt;br /&gt;
	else&lt;br /&gt;
		return false&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
-- shallowClone&lt;br /&gt;
--&lt;br /&gt;
-- This returns a clone of a table. The value returned is a new table, but all&lt;br /&gt;
-- subtables and functions are shared. Metamethods are respected, but the returned&lt;br /&gt;
-- table will have no metatable of its own.&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
--]]&lt;br /&gt;
function p.shallowClone(t)&lt;br /&gt;
	local ret = {}&lt;br /&gt;
	for k, v in pairs(t) do&lt;br /&gt;
		ret[k] = v&lt;br /&gt;
	end&lt;br /&gt;
	return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
-- removeDuplicates&lt;br /&gt;
--&lt;br /&gt;
-- This removes duplicate values from an array. Non-positive-integer keys are&lt;br /&gt;
-- ignored. The earliest value is kept, and all subsequent duplicate values are&lt;br /&gt;
-- removed, but otherwise the array order is unchanged.&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
--]]&lt;br /&gt;
function p.removeDuplicates(t)&lt;br /&gt;
	checkType(&#039;removeDuplicates&#039;, 1, t, &#039;table&#039;)&lt;br /&gt;
	local isNan = p.isNan&lt;br /&gt;
	local ret, exists = {}, {}&lt;br /&gt;
	for i, v in ipairs(t) do&lt;br /&gt;
		if isNan(v) then&lt;br /&gt;
			-- NaNs can&#039;t be table keys, and they are also unique, so we don&#039;t need to check existence.&lt;br /&gt;
			ret[#ret + 1] = v&lt;br /&gt;
		else&lt;br /&gt;
			if not exists[v] then&lt;br /&gt;
				ret[#ret + 1] = v&lt;br /&gt;
				exists[v] = true&lt;br /&gt;
			end&lt;br /&gt;
		end	&lt;br /&gt;
	end&lt;br /&gt;
	return ret&lt;br /&gt;
end			&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
-- numKeys&lt;br /&gt;
--&lt;br /&gt;
-- This takes a table and returns an array containing the numbers of any numerical&lt;br /&gt;
-- keys that have non-nil values, sorted in numerical order.&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
--]]&lt;br /&gt;
function p.numKeys(t)&lt;br /&gt;
	checkType(&#039;numKeys&#039;, 1, t, &#039;table&#039;)&lt;br /&gt;
	local isPositiveInteger = p.isPositiveInteger&lt;br /&gt;
	local nums = {}&lt;br /&gt;
	for k, v in pairs(t) do&lt;br /&gt;
		if isPositiveInteger(k) then&lt;br /&gt;
			nums[#nums + 1] = k&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	table.sort(nums)&lt;br /&gt;
	return nums&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
-- affixNums&lt;br /&gt;
--&lt;br /&gt;
-- This takes a table and returns an array containing the numbers of keys with the&lt;br /&gt;
-- specified prefix and suffix. For example, for the table&lt;br /&gt;
-- {a1 = &#039;foo&#039;, a3 = &#039;bar&#039;, a6 = &#039;baz&#039;} and the prefix &amp;quot;a&amp;quot;, affixNums will&lt;br /&gt;
-- return {1, 3, 6}.&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
--]]&lt;br /&gt;
function p.affixNums(t, prefix, suffix)&lt;br /&gt;
	checkType(&#039;affixNums&#039;, 1, t, &#039;table&#039;)&lt;br /&gt;
	checkType(&#039;affixNums&#039;, 2, prefix, &#039;string&#039;, true)&lt;br /&gt;
	checkType(&#039;affixNums&#039;, 3, suffix, &#039;string&#039;, true)&lt;br /&gt;
&lt;br /&gt;
	local function cleanPattern(s)&lt;br /&gt;
		-- Cleans a pattern so that the magic characters ()%.[]*+-?^$ are interpreted literally.&lt;br /&gt;
		s = s:gsub(&#039;([%(%)%%%.%[%]%*%+%-%?%^%$])&#039;, &#039;%%%1&#039;)&lt;br /&gt;
		return s&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	prefix = prefix or &#039;&#039;&lt;br /&gt;
	suffix = suffix or &#039;&#039;&lt;br /&gt;
	prefix = cleanPattern(prefix)&lt;br /&gt;
	suffix = cleanPattern(suffix)&lt;br /&gt;
	local pattern = &#039;^&#039; .. prefix .. &#039;([1-9]%d*)&#039; .. suffix .. &#039;$&#039;&lt;br /&gt;
&lt;br /&gt;
	local nums = {}&lt;br /&gt;
	for k, v in pairs(t) do&lt;br /&gt;
		if type(k) == &#039;string&#039; then			&lt;br /&gt;
			local num = mw.ustring.match(k, pattern)&lt;br /&gt;
			if num then&lt;br /&gt;
				nums[#nums + 1] = tonumber(num)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	table.sort(nums)&lt;br /&gt;
	return nums&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
-- numData&lt;br /&gt;
--&lt;br /&gt;
-- Given a table with keys like (&amp;quot;foo1&amp;quot;, &amp;quot;bar1&amp;quot;, &amp;quot;foo2&amp;quot;, &amp;quot;baz2&amp;quot;), returns a table&lt;br /&gt;
-- of subtables in the format &lt;br /&gt;
-- { [1] = {foo = &#039;text&#039;, bar = &#039;text&#039;}, [2] = {foo = &#039;text&#039;, baz = &#039;text&#039;} }&lt;br /&gt;
-- Keys that don&#039;t end with an integer are stored in a subtable named &amp;quot;other&amp;quot;.&lt;br /&gt;
-- The compress option compresses the table so that it can be iterated over with&lt;br /&gt;
-- ipairs.&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
--]]&lt;br /&gt;
function p.numData(t, compress)&lt;br /&gt;
	checkType(&#039;numData&#039;, 1, t, &#039;table&#039;)&lt;br /&gt;
	checkType(&#039;numData&#039;, 2, compress, &#039;boolean&#039;, true)&lt;br /&gt;
	local ret = {}&lt;br /&gt;
	for k, v in pairs(t) do&lt;br /&gt;
		local prefix, num = mw.ustring.match(tostring(k), &#039;^([^0-9]*)([1-9][0-9]*)$&#039;)&lt;br /&gt;
		if num then&lt;br /&gt;
			num = tonumber(num)&lt;br /&gt;
			local subtable = ret[num] or {}&lt;br /&gt;
			if prefix == &#039;&#039; then&lt;br /&gt;
				-- Positional parameters match the blank string; put them at the start of the subtable instead.&lt;br /&gt;
				prefix = 1&lt;br /&gt;
			end&lt;br /&gt;
			subtable[prefix] = v&lt;br /&gt;
			ret[num] = subtable&lt;br /&gt;
		else&lt;br /&gt;
			local subtable = ret.other or {}&lt;br /&gt;
			subtable[k] = v&lt;br /&gt;
			ret.other = subtable&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if compress then&lt;br /&gt;
		local other = ret.other&lt;br /&gt;
		ret = p.compressSparseArray(ret)&lt;br /&gt;
		ret.other = other&lt;br /&gt;
	end&lt;br /&gt;
	return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
-- compressSparseArray&lt;br /&gt;
--&lt;br /&gt;
-- This takes an array with one or more nil values, and removes the nil values&lt;br /&gt;
-- while preserving the order, so that the array can be safely traversed with&lt;br /&gt;
-- ipairs.&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
--]]&lt;br /&gt;
function p.compressSparseArray(t)&lt;br /&gt;
	checkType(&#039;compressSparseArray&#039;, 1, t, &#039;table&#039;)&lt;br /&gt;
	local ret = {}&lt;br /&gt;
	local nums = p.numKeys(t)&lt;br /&gt;
	for _, num in ipairs(nums) do&lt;br /&gt;
		ret[#ret + 1] = t[num]&lt;br /&gt;
	end&lt;br /&gt;
	return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
-- sparseIpairs&lt;br /&gt;
--&lt;br /&gt;
-- This is an iterator for sparse arrays. It can be used like ipairs, but can&lt;br /&gt;
-- handle nil values.&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
--]]&lt;br /&gt;
function p.sparseIpairs(t)&lt;br /&gt;
	checkType(&#039;sparseIpairs&#039;, 1, t, &#039;table&#039;)&lt;br /&gt;
	local nums = p.numKeys(t)&lt;br /&gt;
	local i = 0&lt;br /&gt;
	local lim = #nums&lt;br /&gt;
	return function ()&lt;br /&gt;
		i = i + 1&lt;br /&gt;
		if i &amp;lt;= lim then&lt;br /&gt;
			local key = nums[i]&lt;br /&gt;
			return key, t[key]&lt;br /&gt;
		else&lt;br /&gt;
			return nil, nil&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
-- size&lt;br /&gt;
--&lt;br /&gt;
-- This returns the size of a key/value pair table. It will also work on arrays,&lt;br /&gt;
-- but for arrays it is more efficient to use the # operator.&lt;br /&gt;
------------------------------------------------------------------------------------&lt;br /&gt;
--]]&lt;br /&gt;
&lt;br /&gt;
function p.size(t)&lt;br /&gt;
	checkType(&#039;size&#039;, 1, t, &#039;table&#039;)&lt;br /&gt;
	local i = 0&lt;br /&gt;
	for k in pairs(t) do&lt;br /&gt;
		i = i + 1&lt;br /&gt;
	end&lt;br /&gt;
	return i&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function defaultKeySort(item1, item2)&lt;br /&gt;
	-- &amp;quot;number&amp;quot; &amp;lt; &amp;quot;string&amp;quot;, so numbers will be sorted before strings.&lt;br /&gt;
	local type1, type2 = type(item1), type(item2)&lt;br /&gt;
	if type1 ~= type2 then&lt;br /&gt;
		return type1 &amp;lt; type2&lt;br /&gt;
	else -- This will fail with table, boolean, function.&lt;br /&gt;
		return item1 &amp;lt; item2&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
	Returns a list of the keys in a table, sorted using either a default&lt;br /&gt;
	comparison function or a custom keySort function.&lt;br /&gt;
]]&lt;br /&gt;
function p.keysToList(t, keySort, checked)&lt;br /&gt;
	if not checked then&lt;br /&gt;
		checkType(&#039;keysToList&#039;, 1, t, &#039;table&#039;)&lt;br /&gt;
		checkTypeMulti(&#039;keysToList&#039;, 2, keySort, { &#039;function&#039;, &#039;boolean&#039;, &#039;nil&#039; })&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local list = {}&lt;br /&gt;
	local index = 1&lt;br /&gt;
	for key, value in pairs(t) do&lt;br /&gt;
		list[index] = key&lt;br /&gt;
		index = index + 1&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if keySort ~= false then&lt;br /&gt;
		keySort = type(keySort) == &#039;function&#039; and keySort or defaultKeySort&lt;br /&gt;
		&lt;br /&gt;
		table.sort(list, keySort)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return list&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
	Iterates through a table, with the keys sorted using the keysToList function.&lt;br /&gt;
	If there are only numerical keys, sparseIpairs is probably more efficient.&lt;br /&gt;
]]&lt;br /&gt;
function p.sortedPairs(t, keySort)&lt;br /&gt;
	checkType(&#039;sortedPairs&#039;, 1, t, &#039;table&#039;)&lt;br /&gt;
	checkType(&#039;sortedPairs&#039;, 2, keySort, &#039;function&#039;, true)&lt;br /&gt;
	&lt;br /&gt;
	local list = p.keysToList(t, keySort, true)&lt;br /&gt;
	&lt;br /&gt;
	local i = 0&lt;br /&gt;
	return function()&lt;br /&gt;
		i = i + 1&lt;br /&gt;
		local key = list[i]&lt;br /&gt;
		if key ~= nil then&lt;br /&gt;
			return key, t[key]&lt;br /&gt;
		else&lt;br /&gt;
			return nil, nil&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
	Returns true if all keys in the table are consecutive integers starting at 1.&lt;br /&gt;
--]]&lt;br /&gt;
function p.isArray(t)&lt;br /&gt;
	checkType(&amp;quot;isArray&amp;quot;, 1, t, &amp;quot;table&amp;quot;)&lt;br /&gt;
	&lt;br /&gt;
	local i = 0&lt;br /&gt;
	for k, v in pairs(t) do&lt;br /&gt;
		i = i + 1&lt;br /&gt;
		if t[i] == nil then&lt;br /&gt;
			return false&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return true&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- { &amp;quot;a&amp;quot;, &amp;quot;b&amp;quot;, &amp;quot;c&amp;quot; } -&amp;gt; { a = 1, b = 2, c = 3 }&lt;br /&gt;
function p.invert(array)&lt;br /&gt;
	checkType(&amp;quot;invert&amp;quot;, 1, array, &amp;quot;table&amp;quot;)&lt;br /&gt;
	&lt;br /&gt;
	local map = {}&lt;br /&gt;
	for i, v in ipairs(array) do&lt;br /&gt;
		map[v] = i&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return map&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
	{ &amp;quot;a&amp;quot;, &amp;quot;b&amp;quot;, &amp;quot;c&amp;quot; } -&amp;gt; { [&amp;quot;a&amp;quot;] = true, [&amp;quot;b&amp;quot;] = true, [&amp;quot;c&amp;quot;] = true }&lt;br /&gt;
--]]&lt;br /&gt;
function p.listToSet(t)&lt;br /&gt;
	checkType(&amp;quot;listToSet&amp;quot;, 1, t, &amp;quot;table&amp;quot;)&lt;br /&gt;
	&lt;br /&gt;
	local set = {}&lt;br /&gt;
	for _, item in ipairs(t) do&lt;br /&gt;
		set[item] = true&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return set&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
	Recursive deep copy function.&lt;br /&gt;
	Preserves identities of subtables.&lt;br /&gt;
	&lt;br /&gt;
]]&lt;br /&gt;
local function _deepCopy(orig, includeMetatable, already_seen)&lt;br /&gt;
	-- Stores copies of tables indexed by the original table.&lt;br /&gt;
	already_seen = already_seen or {}&lt;br /&gt;
	&lt;br /&gt;
	local copy = already_seen[orig]&lt;br /&gt;
	if copy ~= nil then&lt;br /&gt;
		return copy&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if type(orig) == &#039;table&#039; then&lt;br /&gt;
		copy = {}&lt;br /&gt;
		for orig_key, orig_value in pairs(orig) do&lt;br /&gt;
			copy[deepcopy(orig_key, includeMetatable, already_seen)] = deepcopy(orig_value, includeMetatable, already_seen)&lt;br /&gt;
		end&lt;br /&gt;
		already_seen[orig] = copy&lt;br /&gt;
		&lt;br /&gt;
		if includeMetatable then&lt;br /&gt;
			local mt = getmetatable(orig)&lt;br /&gt;
			if mt ~= nil then&lt;br /&gt;
				local mt_copy = deepcopy(mt, includeMetatable, already_seen)&lt;br /&gt;
				setmetatable(copy, mt_copy)&lt;br /&gt;
				already_seen[mt] = mt_copy&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	else -- number, string, boolean, etc&lt;br /&gt;
		copy = orig&lt;br /&gt;
	end&lt;br /&gt;
	return copy&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.deepCopy(orig, noMetatable, already_seen)&lt;br /&gt;
	checkType(&amp;quot;deepCopy&amp;quot;, 3, already_seen, &amp;quot;table&amp;quot;, true)&lt;br /&gt;
	&lt;br /&gt;
	return _deepCopy(orig, not noMetatable, already_seen)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
	Concatenates all values in the table that are indexed by a number, in order.&lt;br /&gt;
	sparseConcat{ a, nil, c, d }  =&amp;gt;  &amp;quot;acd&amp;quot;&lt;br /&gt;
	sparseConcat{ nil, b, c, d }  =&amp;gt;  &amp;quot;bcd&amp;quot;&lt;br /&gt;
]]&lt;br /&gt;
function p.sparseConcat(t, sep, i, j)&lt;br /&gt;
	local list = {}&lt;br /&gt;
	&lt;br /&gt;
	local list_i = 0&lt;br /&gt;
	for _, v in p.sparseIpairs(t) do&lt;br /&gt;
		list_i = list_i + 1&lt;br /&gt;
		list[list_i] = v&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return table.concat(list, sep, i, j)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
-- This returns the length of a table, or the first integer key n counting from&lt;br /&gt;
-- 1 such that t[n + 1] is nil. It is similar to the operator #, but may return&lt;br /&gt;
-- a different value when there are gaps in the array portion of the table.&lt;br /&gt;
-- Intended to be used on data loaded with mw.loadData. For other tables, use #.&lt;br /&gt;
-- Note: #frame.args in frame object always be set to 0, regardless of &lt;br /&gt;
-- the number of unnamed template parameters, so use this function for&lt;br /&gt;
-- frame.args.&lt;br /&gt;
--]]&lt;br /&gt;
function p.length(t)&lt;br /&gt;
	local i = 1&lt;br /&gt;
	while t[i] ~= nil do&lt;br /&gt;
		i = i + 1&lt;br /&gt;
	end&lt;br /&gt;
	return i - 1&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.inArray(arr, valueToFind)&lt;br /&gt;
	checkType(&amp;quot;inArray&amp;quot;, 1, arr, &amp;quot;table&amp;quot;)&lt;br /&gt;
	&lt;br /&gt;
	-- if valueToFind is nil, error?&lt;br /&gt;
	&lt;br /&gt;
	for _, v in ipairs(arr) do&lt;br /&gt;
		if v == valueToFind then&lt;br /&gt;
			return true&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Antidote</name></author>
	</entry>
	<entry>
		<id>https://wiki.antidotez.ru/mediawiki/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:List&amp;diff=430</id>
		<title>Модуль:List</title>
		<link rel="alternate" type="text/html" href="https://wiki.antidotez.ru/mediawiki/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:List&amp;diff=430"/>
		<updated>2026-04-19T18:43:51Z</updated>

		<summary type="html">&lt;p&gt;Antidote: 1 версия импортирована&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- This module outputs different kinds of lists. At the moment, bulleted,&lt;br /&gt;
-- unbulleted, horizontal, ordered, and horizontal ordered lists are supported.&lt;br /&gt;
&lt;br /&gt;
local libUtil = require(&#039;libraryUtil&#039;)&lt;br /&gt;
local checkType = libUtil.checkType&lt;br /&gt;
local mTableTools = require(&#039;Module:TableTools&#039;)&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
local listTypes = {&lt;br /&gt;
	[&#039;bulleted&#039;] = true,&lt;br /&gt;
	[&#039;unbulleted&#039;] = true,&lt;br /&gt;
	[&#039;horizontal&#039;] = true,&lt;br /&gt;
	[&#039;ordered&#039;] = true,&lt;br /&gt;
	[&#039;horizontal_ordered&#039;] = true&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function p.makeListData(listType, args)&lt;br /&gt;
	-- Constructs a data table to be passed to p.renderList.&lt;br /&gt;
	local data = {}&lt;br /&gt;
&lt;br /&gt;
	-- Classes&lt;br /&gt;
	data.classes = {}&lt;br /&gt;
	data.templatestyles = &#039;&#039;&lt;br /&gt;
	if listType == &#039;horizontal&#039; or listType == &#039;horizontal_ordered&#039; then&lt;br /&gt;
		table.insert(data.classes, &#039;hlist&#039;)&lt;br /&gt;
		data.templatestyles = mw.getCurrentFrame():extensionTag{&lt;br /&gt;
			name = &#039;templatestyles&#039;, args = { src = &#039;Flatlist/styles.css&#039; }&lt;br /&gt;
		}&lt;br /&gt;
	elseif listType == &#039;unbulleted&#039; then&lt;br /&gt;
		table.insert(data.classes, &#039;plainlist&#039;)&lt;br /&gt;
		data.templatestyles = mw.getCurrentFrame():extensionTag{&lt;br /&gt;
			name = &#039;templatestyles&#039;, args = { src = &#039;Plainlist/styles.css&#039; }&lt;br /&gt;
		}&lt;br /&gt;
	end&lt;br /&gt;
	table.insert(data.classes, args.class)&lt;br /&gt;
&lt;br /&gt;
	-- Main div style&lt;br /&gt;
	data.style = args.style&lt;br /&gt;
&lt;br /&gt;
	-- Indent for horizontal lists&lt;br /&gt;
	if listType == &#039;horizontal&#039; or listType == &#039;horizontal_ordered&#039; then&lt;br /&gt;
		local indent = tonumber(args.indent)&lt;br /&gt;
		indent = indent and indent * 1.6 or 0&lt;br /&gt;
		if indent &amp;gt; 0 then&lt;br /&gt;
			data.marginLeft = indent .. &#039;em&#039;&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- List style types for ordered lists&lt;br /&gt;
	-- This could be &amp;quot;1, 2, 3&amp;quot;, &amp;quot;a, b, c&amp;quot;, or a number of others. The list style&lt;br /&gt;
	-- type is either set by the &amp;quot;type&amp;quot; attribute or the &amp;quot;list-style-type&amp;quot; CSS&lt;br /&gt;
	-- property.&lt;br /&gt;
	if listType == &#039;ordered&#039; or listType == &#039;horizontal_ordered&#039; then &lt;br /&gt;
		data.listStyleType = args.list_style_type or args[&#039;list-style-type&#039;]&lt;br /&gt;
		data.type = args[&#039;type&#039;]&lt;br /&gt;
&lt;br /&gt;
		-- Detect invalid type attributes and attempt to convert them to&lt;br /&gt;
		-- list-style-type CSS properties.&lt;br /&gt;
		if data.type &lt;br /&gt;
			and not data.listStyleType&lt;br /&gt;
			and not tostring(data.type):find(&#039;^%s*[1AaIi]%s*$&#039;)&lt;br /&gt;
		then&lt;br /&gt;
			data.listStyleType = data.type&lt;br /&gt;
			data.type = nil&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- List tag type&lt;br /&gt;
	if listType == &#039;ordered&#039; or listType == &#039;horizontal_ordered&#039; then&lt;br /&gt;
		data.listTag = &#039;ol&#039;&lt;br /&gt;
	else&lt;br /&gt;
		data.listTag = &#039;ul&#039;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Start number for ordered lists&lt;br /&gt;
	data.start = args.start&lt;br /&gt;
	if listType == &#039;horizontal_ordered&#039; then&lt;br /&gt;
		-- Apply fix to get start numbers working with horizontal ordered lists.&lt;br /&gt;
		local startNum = tonumber(data.start)&lt;br /&gt;
		if startNum then&lt;br /&gt;
			data.counterReset = &#039;listitem &#039; .. tostring(startNum - 1)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- List style&lt;br /&gt;
	 -- ul_style and ol_style are included for backwards compatibility. No&lt;br /&gt;
	 -- distinction is made for ordered or unordered lists.&lt;br /&gt;
	data.listStyle = args.list_style&lt;br /&gt;
&lt;br /&gt;
	-- List items&lt;br /&gt;
	-- li_style is included for backwards compatibility. item_style was included&lt;br /&gt;
	-- to be easier to understand for non-coders.&lt;br /&gt;
	data.itemStyle = args.item_style or args.li_style&lt;br /&gt;
	data.items = {}&lt;br /&gt;
	for i, num in ipairs(mTableTools.numKeys(args)) do&lt;br /&gt;
		local item = {}&lt;br /&gt;
		item.content = args[num]&lt;br /&gt;
		item.style = args[&#039;item&#039; .. tostring(num) .. &#039;_style&#039;]&lt;br /&gt;
			or args[&#039;item_style&#039; .. tostring(num)]&lt;br /&gt;
		item.value = args[&#039;item&#039; .. tostring(num) .. &#039;_value&#039;]&lt;br /&gt;
			or args[&#039;item_value&#039; .. tostring(num)]&lt;br /&gt;
		table.insert(data.items, item)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return data&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.renderList(data)&lt;br /&gt;
	-- Renders the list HTML.&lt;br /&gt;
	&lt;br /&gt;
	-- Return the blank string if there are no list items.&lt;br /&gt;
	if type(data.items) ~= &#039;table&#039; or #data.items &amp;lt; 1 then&lt;br /&gt;
		return &#039;&#039;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Render the main div tag.&lt;br /&gt;
	local root = mw.html.create((&lt;br /&gt;
			#data.classes &amp;gt; 0&lt;br /&gt;
			or data.marginLeft&lt;br /&gt;
			or data.style&lt;br /&gt;
		) and &#039;div&#039; or nil)&lt;br /&gt;
&lt;br /&gt;
	for i, class in ipairs(data.classes or {}) do&lt;br /&gt;
		root:addClass(class)&lt;br /&gt;
	end&lt;br /&gt;
	root:css{[&#039;margin-left&#039;] = data.marginLeft}&lt;br /&gt;
	if data.style then&lt;br /&gt;
		root:cssText(data.style)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Render the list tag.&lt;br /&gt;
	local list = root:tag(data.listTag or &#039;ul&#039;)&lt;br /&gt;
	list&lt;br /&gt;
		:attr{start = data.start, type = data.type}&lt;br /&gt;
		:css{&lt;br /&gt;
			[&#039;counter-reset&#039;] = data.counterReset,&lt;br /&gt;
			[&#039;list-style-type&#039;] = data.listStyleType&lt;br /&gt;
		}&lt;br /&gt;
	if data.listStyle then&lt;br /&gt;
		list:cssText(data.listStyle)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Render the list items&lt;br /&gt;
	for i, t in ipairs(data.items or {}) do&lt;br /&gt;
		local item = list:tag(&#039;li&#039;)&lt;br /&gt;
		if data.itemStyle then&lt;br /&gt;
			item:cssText(data.itemStyle)&lt;br /&gt;
		end&lt;br /&gt;
		if t.style then&lt;br /&gt;
			item:cssText(t.style)&lt;br /&gt;
		end&lt;br /&gt;
		item&lt;br /&gt;
			:attr{value = t.value}&lt;br /&gt;
			:wikitext(t.content)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return data.templatestyles .. tostring(root)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.makeList(listType, args)&lt;br /&gt;
	if not listType or not listTypes[listType] then&lt;br /&gt;
		error(string.format(&lt;br /&gt;
			&amp;quot;bad argument #1 to &#039;makeList&#039; (&#039;%s&#039; is not a valid list type)&amp;quot;,&lt;br /&gt;
			tostring(listType)&lt;br /&gt;
		), 2)&lt;br /&gt;
	end&lt;br /&gt;
	checkType(&#039;makeList&#039;, 2, args, &#039;table&#039;)&lt;br /&gt;
	local data = p.makeListData(listType, args)&lt;br /&gt;
	return p.renderList(data)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
for listType in pairs(listTypes) do&lt;br /&gt;
	p[listType] = function (frame)&lt;br /&gt;
		local mArguments = require(&#039;Module:Arguments&#039;)&lt;br /&gt;
		local origArgs = mArguments.getArgs(frame)&lt;br /&gt;
		-- Copy all the arguments to a new table, for faster indexing.&lt;br /&gt;
		local args = {}&lt;br /&gt;
		for k, v in pairs(origArgs) do&lt;br /&gt;
			args[k] = v&lt;br /&gt;
		end&lt;br /&gt;
		return p.makeList(listType, args)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Antidote</name></author>
	</entry>
	<entry>
		<id>https://wiki.antidotez.ru/mediawiki/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Uses_TemplateStyles&amp;diff=428</id>
		<title>Модуль:Uses TemplateStyles</title>
		<link rel="alternate" type="text/html" href="https://wiki.antidotez.ru/mediawiki/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Uses_TemplateStyles&amp;diff=428"/>
		<updated>2026-04-19T18:43:50Z</updated>

		<summary type="html">&lt;p&gt;Antidote: 1 версия импортирована&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;require(&amp;quot;strict&amp;quot;);&lt;br /&gt;
-- This module implements the {{Uses TemplateStyles}} template.&lt;br /&gt;
local yesno = require(&#039;Module:Yesno&#039;)&lt;br /&gt;
local mList = require(&#039;Module:List&#039;)&lt;br /&gt;
local mTableTools = require(&#039;Module:TableTools&#039;)&lt;br /&gt;
local mMessageBox = require(&#039;Module:Message box&#039;)&lt;br /&gt;
local TNT = require(&#039;Module:TNT&#039;)&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
local function format(msg, ...)&lt;br /&gt;
	-- Content sourced from [[commons:Data:I18n/Uses TemplateStyles.tab]]&lt;br /&gt;
	return TNT.format(&#039;I18n/Uses TemplateStyles&#039;, msg, ...)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getConfig()&lt;br /&gt;
	return mw.loadData(&#039;Module:Uses TemplateStyles/config&#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.main(frame)&lt;br /&gt;
	local origArgs = frame:getParent().args&lt;br /&gt;
	local args = {}&lt;br /&gt;
	for k, v in pairs(origArgs) do&lt;br /&gt;
		v = v:match(&#039;^%s*(.-)%s*$&#039;)&lt;br /&gt;
		if v ~= &#039;&#039; then&lt;br /&gt;
			args[k] = v&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return p._main(args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._main(args, cfg)&lt;br /&gt;
	local tStyles = mTableTools.compressSparseArray(args)&lt;br /&gt;
	local box = p.renderBox(tStyles)&lt;br /&gt;
	local trackingCategories = p.renderTrackingCategories(args, tStyles)&lt;br /&gt;
	return box .. trackingCategories&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.renderBox(tStyles)&lt;br /&gt;
	local boxArgs = {}&lt;br /&gt;
	if #tStyles &amp;lt; 1 then&lt;br /&gt;
		boxArgs.text = string.format(&#039;&amp;lt;strong class=&amp;quot;error&amp;quot;&amp;gt;%s&amp;lt;/strong&amp;gt;&#039;, format(&#039;error-emptylist&#039;))&lt;br /&gt;
	else&lt;br /&gt;
		local cfg = getConfig()&lt;br /&gt;
		local tStylesLinks = {}&lt;br /&gt;
		for i, ts in ipairs(tStyles) do&lt;br /&gt;
			local link = string.format(&#039;[[:%s]]&#039;, ts)&lt;br /&gt;
			local sandboxLink = nil&lt;br /&gt;
			local tsTitle = mw.title.new(ts)&lt;br /&gt;
			if tsTitle and cfg[&#039;sandbox_title&#039;] then&lt;br /&gt;
				local tsSandboxTitle = mw.title.new(string.format(&lt;br /&gt;
					&#039;%s:%s/%s/%s&#039;, tsTitle.nsText, tsTitle.baseText, cfg[&#039;sandbox_title&#039;], tsTitle.subpageText))&lt;br /&gt;
				if tsSandboxTitle and tsSandboxTitle.exists then&lt;br /&gt;
					sandboxLink = format(&#039;sandboxlink&#039;, link, &#039;:&#039; .. tsSandboxTitle.prefixedText)&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			tStylesLinks[i] = sandboxLink or link&lt;br /&gt;
		end&lt;br /&gt;
		local tStylesList = mList.makeList(&#039;bulleted&#039;, tStylesLinks)&lt;br /&gt;
		boxArgs.text = format(&lt;br /&gt;
			mw.title.getCurrentTitle():inNamespaces(828,829) and &#039;header-module&#039; or &#039;header-template&#039;) ..&lt;br /&gt;
			&#039;\n&#039; .. tStylesList&lt;br /&gt;
	end&lt;br /&gt;
	boxArgs.type = &#039;notice&#039;&lt;br /&gt;
	boxArgs.small = true&lt;br /&gt;
	boxArgs.image = string.format(&#039;[[File:Farm-Fresh css add.svg|32px|alt=%s]]&#039;, format(&#039;logo-alt&#039;))&lt;br /&gt;
	return mMessageBox.main(&#039;mbox&#039;, boxArgs)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.renderTrackingCategories(args, tStyles, titleObj)&lt;br /&gt;
	if yesno(args.nocat) then&lt;br /&gt;
		return &#039;&#039;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local cfg = getConfig()&lt;br /&gt;
	&lt;br /&gt;
	local cats = {}&lt;br /&gt;
	&lt;br /&gt;
	-- Error category&lt;br /&gt;
	if #tStyles &amp;lt; 1 and cfg[&#039;error_category&#039;] then&lt;br /&gt;
		cats[#cats + 1] = cfg[&#039;error_category&#039;]&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- TemplateStyles category&lt;br /&gt;
	titleObj = titleObj or mw.title.getCurrentTitle()&lt;br /&gt;
	if (titleObj.namespace == 10 or titleObj.namespace == 828)&lt;br /&gt;
		and not cfg[&#039;subpage_blacklist&#039;][titleObj.subpageText]&lt;br /&gt;
	then&lt;br /&gt;
		local category = args.category or cfg[&#039;default_category&#039;]&lt;br /&gt;
		if category then&lt;br /&gt;
			cats[#cats + 1] = category&lt;br /&gt;
		end&lt;br /&gt;
		if not yesno(args.noprotcat) and (cfg[&#039;protection_conflict_category&#039;] or cfg[&#039;padlock_pattern&#039;]) then&lt;br /&gt;
			local currentProt = titleObj.protectionLevels[&amp;quot;edit&amp;quot;] and titleObj.protectionLevels[&amp;quot;edit&amp;quot;][1] or nil&lt;br /&gt;
			local addedLevelCat = false&lt;br /&gt;
			local addedPadlockCat = false&lt;br /&gt;
			for i, ts in ipairs(tStyles) do&lt;br /&gt;
				local tsTitleObj = mw.title.new(ts)&lt;br /&gt;
				local tsProt = tsTitleObj.protectionLevels[&amp;quot;edit&amp;quot;] and tsTitleObj.protectionLevels[&amp;quot;edit&amp;quot;][1] or nil&lt;br /&gt;
				if cfg[&#039;protection_conflict_category&#039;] and tsProt ~= currentProt and not addedLevelCat then&lt;br /&gt;
					addedLevelCat = true&lt;br /&gt;
					cats[#cats + 1] = cfg[&#039;protection_conflict_category&#039;]&lt;br /&gt;
				end&lt;br /&gt;
				if cfg[&#039;padlock_pattern&#039;] and tsProt and not addedPadlockCat then&lt;br /&gt;
					local content = tsTitleObj:getContent()&lt;br /&gt;
					if not content:find(cfg[&#039;padlock_pattern&#039;]) then&lt;br /&gt;
						cats[#cats + 1] = cfg[&#039;missing_padlock_category&#039;]&lt;br /&gt;
						addedPadlockCat = true&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	for i, cat in ipairs(cats) do&lt;br /&gt;
		cats[i] = string.format(&#039;[[Category:%s]]&#039;, cat)&lt;br /&gt;
	end&lt;br /&gt;
	return table.concat(cats)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Antidote</name></author>
	</entry>
	<entry>
		<id>https://wiki.antidotez.ru/mediawiki/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Documentation/i18n&amp;diff=426</id>
		<title>Модуль:Documentation/i18n</title>
		<link rel="alternate" type="text/html" href="https://wiki.antidotez.ru/mediawiki/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Documentation/i18n&amp;diff=426"/>
		<updated>2026-04-19T18:43:50Z</updated>

		<summary type="html">&lt;p&gt;Antidote: 1 версия импортирована&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local format = require(&#039;Module:TNT&#039;).format&lt;br /&gt;
local i18n = {}&lt;br /&gt;
&lt;br /&gt;
i18n[&#039;cfg-error-msg-type&#039;] = format(&#039;I18n/Documentation&#039;, &#039;cfg-error-msg-type&#039;)&lt;br /&gt;
i18n[&#039;cfg-error-msg-empty&#039;] = format(&#039;I18n/Documentation&#039;, &#039;cfg-error-msg-empty&#039;)&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;template-namespace-heading&#039;]&lt;br /&gt;
-- The heading shown in the template namespace.&lt;br /&gt;
i18n[&#039;template-namespace-heading&#039;] = format(&#039;I18n/Documentation&#039;, &#039;template-namespace-heading&#039;)&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;module-namespace-heading&#039;]&lt;br /&gt;
-- The heading shown in the module namespace.&lt;br /&gt;
i18n[&#039;module-namespace-heading&#039;] = format(&#039;I18n/Documentation&#039;, &#039;module-namespace-heading&#039;)&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;file-namespace-heading&#039;]&lt;br /&gt;
-- The heading shown in the file namespace.&lt;br /&gt;
i18n[&#039;file-namespace-heading&#039;] = format(&#039;I18n/Documentation&#039;, &#039;file-namespace-heading&#039;)&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;other-namespaces-heading&#039;]&lt;br /&gt;
-- The heading shown in other namespaces.&lt;br /&gt;
i18n[&#039;other-namespaces-heading&#039;] = format(&#039;I18n/Documentation&#039;, &#039;other-namespaces-heading&#039;)&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;view-link-display&#039;]&lt;br /&gt;
-- The text to display for &amp;quot;view&amp;quot; links.&lt;br /&gt;
i18n[&#039;view-link-display&#039;] = format(&#039;I18n/Documentation&#039;, &#039;view-link-display&#039;)&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;edit-link-display&#039;]&lt;br /&gt;
-- The text to display for &amp;quot;edit&amp;quot; links.&lt;br /&gt;
i18n[&#039;edit-link-display&#039;] = format(&#039;I18n/Documentation&#039;, &#039;edit-link-display&#039;)&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;history-link-display&#039;]&lt;br /&gt;
-- The text to display for &amp;quot;history&amp;quot; links.&lt;br /&gt;
i18n[&#039;history-link-display&#039;] = format(&#039;I18n/Documentation&#039;, &#039;history-link-display&#039;)&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;purge-link-display&#039;]&lt;br /&gt;
-- The text to display for &amp;quot;purge&amp;quot; links.&lt;br /&gt;
i18n[&#039;purge-link-display&#039;] = format(&#039;I18n/Documentation&#039;, &#039;purge-link-display&#039;)&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;create-link-display&#039;]&lt;br /&gt;
-- The text to display for &amp;quot;create&amp;quot; links.&lt;br /&gt;
i18n[&#039;create-link-display&#039;] = format(&#039;I18n/Documentation&#039;, &#039;create-link-display&#039;)&lt;br /&gt;
&lt;br /&gt;
return i18n&lt;/div&gt;</summary>
		<author><name>Antidote</name></author>
	</entry>
	<entry>
		<id>https://wiki.antidotez.ru/mediawiki/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:TNT&amp;diff=424</id>
		<title>Модуль:TNT</title>
		<link rel="alternate" type="text/html" href="https://wiki.antidotez.ru/mediawiki/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:TNT&amp;diff=424"/>
		<updated>2026-04-19T18:43:50Z</updated>

		<summary type="html">&lt;p&gt;Antidote: 1 версия импортирована&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;--&lt;br /&gt;
-- INTRO:   (!!! DO NOT RENAME THIS PAGE !!!)&lt;br /&gt;
--    This module allows any template or module to be copy/pasted between&lt;br /&gt;
--    wikis without any translation changes. All translation text is stored&lt;br /&gt;
--    in the global  Data:*.tab  pages on Commons, and used everywhere.&lt;br /&gt;
--&lt;br /&gt;
-- SEE:   https://www.mediawiki.org/wiki/Multilingual_Templates_and_Modules&lt;br /&gt;
--&lt;br /&gt;
-- ATTENTION:&lt;br /&gt;
--    Please do NOT rename this module - it has to be identical on all wikis.&lt;br /&gt;
--    This code is maintained at https://www.mediawiki.org/wiki/Module:TNT&lt;br /&gt;
--    Please do not modify it anywhere else, as it may get copied and override your changes.&lt;br /&gt;
--    Suggestions can be made at https://www.mediawiki.org/wiki/Module_talk:TNT&lt;br /&gt;
--&lt;br /&gt;
-- DESCRIPTION:&lt;br /&gt;
--    The &amp;quot;msg&amp;quot; function uses a Commons dataset to translate a message&lt;br /&gt;
--    with a given key (e.g. source-table), plus optional arguments&lt;br /&gt;
--    to the wiki markup in the current content language.&lt;br /&gt;
--    Use lang=xx to set language.  Example:&lt;br /&gt;
--&lt;br /&gt;
--    {{#invoke:TNT | msg&lt;br /&gt;
--     | I18n/Template:Graphs.tab  &amp;lt;!-- https://commons.wikimedia.org/wiki/Data:I18n/Template:Graphs.tab --&amp;gt;&lt;br /&gt;
--     | source-table              &amp;lt;!-- uses a translation message with id = &amp;quot;source-table&amp;quot; --&amp;gt;&lt;br /&gt;
--     | param1 }}                 &amp;lt;!-- optional parameter --&amp;gt;&lt;br /&gt;
--&lt;br /&gt;
--&lt;br /&gt;
--    The &amp;quot;doc&amp;quot; function will generate the &amp;lt;templatedata&amp;gt; parameter documentation for templates.&lt;br /&gt;
--    This way all template parameters can be stored and localized in a single Commons dataset.&lt;br /&gt;
--    NOTE: &amp;quot;doc&amp;quot; assumes that all documentation is located in Data:Templatedata/* on Commons.&lt;br /&gt;
--&lt;br /&gt;
--    {{#invoke:TNT | doc | Graph:Lines }}&lt;br /&gt;
--        uses https://commons.wikimedia.org/wiki/Data:Templatedata/Graph:Lines.tab&lt;br /&gt;
--        if the current page is Template:Graph:Lines/doc&lt;br /&gt;
--&lt;br /&gt;
&lt;br /&gt;
local config = (function()&lt;br /&gt;
	local ok, res = pcall(mw.loadData, &amp;quot;Module:TNT/config&amp;quot;);&lt;br /&gt;
	return ok and res or {};&lt;br /&gt;
end)();&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
local i18nDataset = &#039;I18n/Module:TNT.tab&#039;&lt;br /&gt;
&lt;br /&gt;
-- Forward declaration of the local functions&lt;br /&gt;
local sanitizeDataset, loadData, link, formatMessage&lt;br /&gt;
&lt;br /&gt;
function p.msg(frame)&lt;br /&gt;
	local dataset, id&lt;br /&gt;
	local params = {}&lt;br /&gt;
	local lang = nil&lt;br /&gt;
	for k, v in pairs(frame.args) do&lt;br /&gt;
		if k == 1 then&lt;br /&gt;
			dataset = mw.text.trim(v)&lt;br /&gt;
		elseif k == 2 then&lt;br /&gt;
			id = mw.text.trim(v)&lt;br /&gt;
		elseif type(k) == &#039;number&#039; then&lt;br /&gt;
			params[k - 2] = mw.text.trim(v)&lt;br /&gt;
		elseif k == &#039;lang&#039; and v ~= &#039;_&#039; then&lt;br /&gt;
			lang = mw.text.trim(v)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return formatMessage(dataset, id, params, lang)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Identical to p.msg() above, but used from other lua modules&lt;br /&gt;
-- Parameters:  name of dataset, message key, optional arguments&lt;br /&gt;
-- Example with 2 params:  format(&#039;I18n/Module:TNT&#039;, &#039;error_bad_msgkey&#039;, &#039;my-key&#039;, &#039;my-dataset&#039;)&lt;br /&gt;
function p.format(dataset, key, ...)&lt;br /&gt;
	local checkType = require(&#039;libraryUtil&#039;).checkType&lt;br /&gt;
	checkType(&#039;format&#039;, 1, dataset, &#039;string&#039;)&lt;br /&gt;
	checkType(&#039;format&#039;, 2, key, &#039;string&#039;)&lt;br /&gt;
	return formatMessage(dataset, key, {...})&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Identical to p.msg() above, but used from other lua modules with the language param&lt;br /&gt;
-- Parameters:  language code, name of dataset, message key, optional arguments&lt;br /&gt;
-- Example with 2 params:  formatInLanguage(&#039;es&#039;, I18n/Module:TNT&#039;, &#039;error_bad_msgkey&#039;, &#039;my-key&#039;, &#039;my-dataset&#039;)&lt;br /&gt;
function p.formatInLanguage(lang, dataset, key, ...)&lt;br /&gt;
	local checkType = require(&#039;libraryUtil&#039;).checkType&lt;br /&gt;
	checkType(&#039;formatInLanguage&#039;, 1, lang, &#039;string&#039;)&lt;br /&gt;
	checkType(&#039;formatInLanguage&#039;, 2, dataset, &#039;string&#039;)&lt;br /&gt;
	checkType(&#039;formatInLanguage&#039;, 3, key, &#039;string&#039;)&lt;br /&gt;
	return formatMessage(dataset, key, {...}, lang)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Obsolete function that adds a &#039;c:&#039; prefix to the first param.&lt;br /&gt;
-- &amp;quot;Sandbox/Sample.tab&amp;quot; -&amp;gt; &#039;c:Data:Sandbox/Sample.tab&#039;&lt;br /&gt;
function p.link(frame)&lt;br /&gt;
	return link(frame.args[1])&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local implGetTemplateData;&lt;br /&gt;
function p.doc(frame)&lt;br /&gt;
	local dataset = sanitizeDataset(frame.args[1])&lt;br /&gt;
	local json, dataPage, categories = implGetTemplateData(nil, dataset, frame.args)&lt;br /&gt;
	return frame:extensionTag(&#039;templatedata&#039;, json) ..&lt;br /&gt;
		formatMessage(i18nDataset, &#039;edit_doc&#039;, {link(dataPage)}) ..&lt;br /&gt;
		(categories or &amp;quot;&amp;quot;);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.getTemplateData(dataset)&lt;br /&gt;
	local data = implGetTemplateData(true, dataset);&lt;br /&gt;
	return data;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.getTemplateDataNew(...)&lt;br /&gt;
	return implGetTemplateData(nil, ...);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function implGetTemplateData(legacy, dataset, args)&lt;br /&gt;
	-- TODO: add &#039;_&#039; parameter once lua starts reindexing properly for &amp;quot;all&amp;quot; languages&lt;br /&gt;
	local data, dataPage, categories = loadData(&lt;br /&gt;
		dataset, nil, not legacy and &#039;TemplateData&#039; or nil);&lt;br /&gt;
	local names = {}&lt;br /&gt;
	for _, field in ipairs(data.schema.fields) do&lt;br /&gt;
		table.insert(names, field.name)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local numOnly = true&lt;br /&gt;
	local params = {}&lt;br /&gt;
	local paramOrder = {}&lt;br /&gt;
	for _, row in ipairs(data.data) do&lt;br /&gt;
		local newVal = {}&lt;br /&gt;
		local name = nil&lt;br /&gt;
		for pos, columnName in ipairs(names) do&lt;br /&gt;
			if columnName == &#039;name&#039; then&lt;br /&gt;
				name = row[pos]&lt;br /&gt;
			else&lt;br /&gt;
				newVal[columnName] = row[pos]&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		if name then&lt;br /&gt;
			if (&lt;br /&gt;
				(type(name) ~= &amp;quot;number&amp;quot;)&lt;br /&gt;
				and (&lt;br /&gt;
					(type(name) ~= &amp;quot;string&amp;quot;)&lt;br /&gt;
					or not string.match(name, &amp;quot;^%d+$&amp;quot;)&lt;br /&gt;
				)&lt;br /&gt;
			) then&lt;br /&gt;
				numOnly = false&lt;br /&gt;
			end&lt;br /&gt;
			params[name] = newVal&lt;br /&gt;
			table.insert(paramOrder, name)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Work around json encoding treating {&amp;quot;1&amp;quot;:{...}} as an [{...}]&lt;br /&gt;
	if numOnly then&lt;br /&gt;
		params[&#039;zzz123&#039;]=&#039;&#039;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local json = mw.text.jsonEncode({&lt;br /&gt;
		params=params,&lt;br /&gt;
		paramOrder=paramOrder,&lt;br /&gt;
		description=data.description,&lt;br /&gt;
		-- TODO: Store this in a dataset:&lt;br /&gt;
		format = (args and args.format or nil),&lt;br /&gt;
	})&lt;br /&gt;
&lt;br /&gt;
	if numOnly then&lt;br /&gt;
		json = string.gsub(json,&#039;&amp;quot;zzz123&amp;quot;:&amp;quot;&amp;quot;,?&#039;, &amp;quot;&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return json, dataPage, categories;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Local functions&lt;br /&gt;
&lt;br /&gt;
sanitizeDataset = function(dataset)&lt;br /&gt;
	if not dataset then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	dataset = mw.text.trim(dataset)&lt;br /&gt;
	if dataset == &#039;&#039; then&lt;br /&gt;
		return nil&lt;br /&gt;
	elseif string.sub(dataset,-4) ~= &#039;.tab&#039; then&lt;br /&gt;
		return dataset .. &#039;.tab&#039;&lt;br /&gt;
	else&lt;br /&gt;
		return dataset&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
loadData = function(dataset, lang, dataType)&lt;br /&gt;
	dataset = sanitizeDataset(dataset)&lt;br /&gt;
	if not dataset then&lt;br /&gt;
		error(formatMessage(i18nDataset, &#039;error_no_dataset&#039;, {}))&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Give helpful error to thirdparties who try and copy this module.&lt;br /&gt;
	if not mw.ext or not mw.ext.data or not mw.ext.data.get then&lt;br /&gt;
		error(string.format([[&#039;&#039;&#039;Missing JsonConfig extension, or not properly configured;&lt;br /&gt;
Cannot load https://commons.wikimedia.org/wiki/Data:%s.&lt;br /&gt;
See https://www.mediawiki.org/wiki/Extension:JsonConfig#Supporting_Wikimedia_templates&#039;&#039;&#039;]], dataset))&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local dataPage = dataset;&lt;br /&gt;
	local data, categories;&lt;br /&gt;
	if dataType == &#039;TemplateData&#039; then&lt;br /&gt;
		dataPage = &#039;TemplateData/&#039; .. dataset;&lt;br /&gt;
		data = mw.ext.data.get(dataPage, lang);&lt;br /&gt;
		if data == false then&lt;br /&gt;
			data = mw.ext.data.get(&#039;Templatedata/&#039; .. dataset, lang);&lt;br /&gt;
			if data ~= false then&lt;br /&gt;
				local legacyTemplateDataCategoryName = config.legacyTemplateDataCategoryName;&lt;br /&gt;
				if legacyTemplateDataCategoryName ~= false then&lt;br /&gt;
					categories = string.format(&lt;br /&gt;
						&#039;[[Category:%s%s]]&#039;,&lt;br /&gt;
						legacyTemplateDataCategoryName or &amp;quot;Templates using legacy global TemplateData table name&amp;quot;,&lt;br /&gt;
						config.translatableCategoryLink and mw.getCurrentFrame():callParserFunction(&amp;quot;#translation:&amp;quot;) or &amp;quot;&amp;quot;&lt;br /&gt;
					);&lt;br /&gt;
				end&lt;br /&gt;
				dataPage = &#039;Templatedata/&#039; .. dataset;&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		data = mw.ext.data.get(dataset, lang)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if data == false then&lt;br /&gt;
		if dataset == i18nDataset then&lt;br /&gt;
			-- Prevent cyclical calls&lt;br /&gt;
			error(&#039;Missing Commons dataset &#039; .. i18nDataset)&lt;br /&gt;
		else&lt;br /&gt;
			error(formatMessage(i18nDataset, &#039;error_bad_dataset&#039;, {link(dataPage)}))&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return data, dataPage, categories;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Given a dataset name, convert it to a title with the &#039;commons:data:&#039; prefix&lt;br /&gt;
link = function(dataset)&lt;br /&gt;
	return &#039;c:Data:&#039; .. mw.text.trim(dataset or &#039;&#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
formatMessage = function(dataset, key, params, lang)&lt;br /&gt;
	for _, row in pairs(loadData(dataset, lang).data) do&lt;br /&gt;
		local id, msg = unpack(row)&lt;br /&gt;
		if id == key then&lt;br /&gt;
			local result = mw.message.newRawMessage(msg, unpack(params or {}))&lt;br /&gt;
			return result:plain()&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if dataset == i18nDataset then&lt;br /&gt;
		-- Prevent cyclical calls&lt;br /&gt;
		error(&#039;Invalid message key &amp;quot;&#039; .. key .. &#039;&amp;quot;&#039;)&lt;br /&gt;
	else&lt;br /&gt;
		error(formatMessage(i18nDataset, &#039;error_bad_msgkey&#039;, {key, link(dataset)}))&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Antidote</name></author>
	</entry>
	<entry>
		<id>https://wiki.antidotez.ru/mediawiki/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Documentation/config&amp;diff=422</id>
		<title>Модуль:Documentation/config</title>
		<link rel="alternate" type="text/html" href="https://wiki.antidotez.ru/mediawiki/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Documentation/config&amp;diff=422"/>
		<updated>2026-04-19T18:43:49Z</updated>

		<summary type="html">&lt;p&gt;Antidote: 1 версия импортирована&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;----------------------------------------------------------------------------------------------------&lt;br /&gt;
--&lt;br /&gt;
--                               Configuration for Module:Documentation&lt;br /&gt;
--&lt;br /&gt;
-- Here you can set the values of the parameters and messages used in Module:Documentation to&lt;br /&gt;
-- localise it to your wiki and your language. Unless specified otherwise, values given here&lt;br /&gt;
-- should be string values.&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
local _format = require(&#039;Module:TNT&#039;).format&lt;br /&gt;
local function format(id)&lt;br /&gt;
	return _format(&#039;I18n/Documentation&#039;, id)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local cfg = {} -- Do not edit this line.&lt;br /&gt;
&lt;br /&gt;
cfg[&#039;templatestyles-scr&#039;] = &#039;Module:Documentation/styles.css&#039;&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
-- Protection template configuration&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;protection-template&#039;]&lt;br /&gt;
-- The name of the template that displays the protection icon (a padlock on enwiki).&lt;br /&gt;
cfg[&#039;protection-template&#039;] = &#039;pp-template&#039;&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;protection-reason-edit&#039;]&lt;br /&gt;
-- The protection reason for edit-protected templates to pass to&lt;br /&gt;
-- [[Module:Protection banner]].&lt;br /&gt;
cfg[&#039;protection-reason-edit&#039;] = &#039;template&#039;&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
-- cfg[&#039;protection-template-args&#039;]&lt;br /&gt;
-- Any arguments to send to the protection template. This should be a Lua table.&lt;br /&gt;
-- For example, if the protection template is &amp;quot;pp-template&amp;quot;, and the wikitext template invocation&lt;br /&gt;
-- looks like &amp;quot;{{pp-template|docusage=yes}}&amp;quot;, then this table should look like &amp;quot;{docusage = &#039;yes&#039;}&amp;quot;.&lt;br /&gt;
 --]]&lt;br /&gt;
 cfg[&#039;protection-template-args&#039;] = {docusage = &#039;yes&#039;}&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
-- Sandbox notice configuration&lt;br /&gt;
--&lt;br /&gt;
-- On sandbox pages the module can display a template notifying users that the current page is a&lt;br /&gt;
-- sandbox, and the location of test cases pages, etc. The module decides whether the page is a&lt;br /&gt;
-- sandbox or not based on the value of cfg[&#039;sandbox-subpage&#039;]. The following settings configure the&lt;br /&gt;
-- messages that the notices contains.&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
--]]&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;sandbox-notice-image&#039;]&lt;br /&gt;
-- The image displayed in the sandbox notice.&lt;br /&gt;
cfg[&#039;sandbox-notice-image&#039;] = &#039;[[File:Edit In Sandbox Icon - Color.svg|40px|alt=|link=]]&#039;&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
-- cfg[&#039;sandbox-notice-pagetype-template&#039;]&lt;br /&gt;
-- cfg[&#039;sandbox-notice-pagetype-module&#039;]&lt;br /&gt;
-- cfg[&#039;sandbox-notice-pagetype-other&#039;]&lt;br /&gt;
-- The page type of the sandbox page. The message that is displayed depends on the current subject&lt;br /&gt;
-- namespace. This message is used in either cfg[&#039;sandbox-notice-blurb&#039;] or&lt;br /&gt;
-- cfg[&#039;sandbox-notice-diff-blurb&#039;].&lt;br /&gt;
--]]&lt;br /&gt;
cfg[&#039;sandbox-notice-pagetype-template&#039;] = format(&#039;sandbox-notice-pagetype-template&#039;)&lt;br /&gt;
cfg[&#039;sandbox-notice-pagetype-module&#039;] = format(&#039;sandbox-notice-pagetype-module&#039;)&lt;br /&gt;
cfg[&#039;sandbox-notice-pagetype-other&#039;] = format(&#039;sandbox-notice-pagetype-other&#039;)&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
-- cfg[&#039;sandbox-notice-blurb&#039;]&lt;br /&gt;
-- cfg[&#039;sandbox-notice-diff-blurb&#039;]&lt;br /&gt;
-- cfg[&#039;sandbox-notice-diff-display&#039;]&lt;br /&gt;
-- Either cfg[&#039;sandbox-notice-blurb&#039;] or cfg[&#039;sandbox-notice-diff-blurb&#039;] is the opening sentence&lt;br /&gt;
-- of the sandbox notice. The latter has a diff link, but the former does not. $1 is the page&lt;br /&gt;
-- type, which is either cfg[&#039;sandbox-notice-pagetype-template&#039;],&lt;br /&gt;
-- cfg[&#039;sandbox-notice-pagetype-module&#039;] or cfg[&#039;sandbox-notice-pagetype-other&#039;] depending what&lt;br /&gt;
-- namespace we are in. $2 is a link to the main template page, and $3 is a diff link between&lt;br /&gt;
-- the sandbox and the main template. The display value of the diff link is set by &lt;br /&gt;
-- cfg[&#039;sandbox-notice-compare-link-display&#039;].&lt;br /&gt;
--]]&lt;br /&gt;
cfg[&#039;sandbox-notice-blurb&#039;] = format(&#039;sandbox-notice-blurb&#039;)&lt;br /&gt;
cfg[&#039;sandbox-notice-diff-blurb&#039;] = format(&#039;sandbox-notice-diff-blurb&#039;)&lt;br /&gt;
cfg[&#039;sandbox-notice-compare-link-display&#039;] = format(&#039;sandbox-notice-compare-link-display&#039;)&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
-- cfg[&#039;sandbox-notice-testcases-blurb&#039;]&lt;br /&gt;
-- cfg[&#039;sandbox-notice-testcases-link-display&#039;]&lt;br /&gt;
-- cfg[&#039;sandbox-notice-testcases-run-blurb&#039;]&lt;br /&gt;
-- cfg[&#039;sandbox-notice-testcases-run-link-display&#039;]&lt;br /&gt;
-- cfg[&#039;sandbox-notice-testcases-blurb&#039;] is a sentence notifying the user that there is a test cases page&lt;br /&gt;
-- corresponding to this sandbox that they can edit. $1 is a link to the test cases page.&lt;br /&gt;
-- cfg[&#039;sandbox-notice-testcases-link-display&#039;] is the display value for that link.&lt;br /&gt;
-- cfg[&#039;sandbox-notice-testcases-run-blurb&#039;] is a sentence notifying the user that there is a test cases page&lt;br /&gt;
-- corresponding to this sandbox that they can edit, along with a link to run it. $1 is a link to the test&lt;br /&gt;
-- cases page, and $2 is a link to the page to run it.&lt;br /&gt;
-- cfg[&#039;sandbox-notice-testcases-run-link-display&#039;] is the display value for the link to run the test&lt;br /&gt;
-- cases.&lt;br /&gt;
--]]&lt;br /&gt;
cfg[&#039;sandbox-notice-testcases-blurb&#039;] = format(&#039;sandbox-notice-testcases-blurb&#039;)&lt;br /&gt;
cfg[&#039;sandbox-notice-testcases-link-display&#039;] = format(&#039;sandbox-notice-testcases-link-display&#039;)&lt;br /&gt;
cfg[&#039;sandbox-notice-testcases-run-blurb&#039;] = format(&#039;sandbox-notice-testcases-run-blurb&#039;)&lt;br /&gt;
cfg[&#039;sandbox-notice-testcases-run-link-display&#039;] = format(&#039;sandbox-notice-testcases-run-link-display&#039;)&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;sandbox-category&#039;]&lt;br /&gt;
-- A category to add to all template sandboxes.&lt;br /&gt;
cfg[&#039;sandbox-category&#039;] = &#039;Template sandboxes&#039;&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
-- Start box configuration&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;documentation-icon-wikitext&#039;]&lt;br /&gt;
-- The wikitext for the icon shown at the top of the template.&lt;br /&gt;
cfg[&#039;documentation-icon-wikitext&#039;] = &#039;[[File:Test Template Info-Icon - Version (2).svg|50px|link=|alt=Documentation icon]]&#039;&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
-- Link box (end box) configuration&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;transcluded-from-blurb&#039;]&lt;br /&gt;
-- Notice displayed when the docs are transcluded from another page. $1 is a wikilink to that page.&lt;br /&gt;
cfg[&#039;transcluded-from-blurb&#039;] = format(&#039;transcluded-from-blurb&#039;)&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
-- cfg[&#039;create-module-doc-blurb&#039;]&lt;br /&gt;
-- Notice displayed in the module namespace when the documentation subpage does not exist.&lt;br /&gt;
-- $1 is a link to create the documentation page with the preload cfg[&#039;module-preload&#039;] and the&lt;br /&gt;
-- display cfg[&#039;create-link-display&#039;].&lt;br /&gt;
--]]&lt;br /&gt;
cfg[&#039;create-module-doc-blurb&#039;] = format(&#039;create-module-doc-blurb&#039;)&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
-- Experiment blurb configuration&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
-- cfg[&#039;experiment-blurb-template&#039;]&lt;br /&gt;
-- cfg[&#039;experiment-blurb-module&#039;]&lt;br /&gt;
-- The experiment blurb is the text inviting editors to experiment in sandbox and test cases pages.&lt;br /&gt;
-- It is only shown in the template and module namespaces. With the default English settings, it&lt;br /&gt;
-- might look like this:&lt;br /&gt;
--&lt;br /&gt;
-- Editors can experiment in this template&#039;s sandbox (edit | diff) and testcases (edit) pages.&lt;br /&gt;
--&lt;br /&gt;
-- In this example, &amp;quot;sandbox&amp;quot;, &amp;quot;edit&amp;quot;, &amp;quot;diff&amp;quot;, &amp;quot;testcases&amp;quot;, and &amp;quot;edit&amp;quot; would all be links.&lt;br /&gt;
--&lt;br /&gt;
-- There are two versions, cfg[&#039;experiment-blurb-template&#039;] and cfg[&#039;experiment-blurb-module&#039;], depending&lt;br /&gt;
-- on what namespace we are in.&lt;br /&gt;
-- &lt;br /&gt;
-- Parameters:&lt;br /&gt;
--&lt;br /&gt;
-- $1 is a link to the sandbox page. If the sandbox exists, it is in the following format:&lt;br /&gt;
--&lt;br /&gt;
--     cfg[&#039;sandbox-link-display&#039;] (cfg[&#039;sandbox-edit-link-display&#039;] | cfg[&#039;compare-link-display&#039;])&lt;br /&gt;
-- &lt;br /&gt;
-- If the sandbox doesn&#039;t exist, it is in the format:&lt;br /&gt;
--&lt;br /&gt;
--     cfg[&#039;sandbox-link-display&#039;] (cfg[&#039;sandbox-create-link-display&#039;] | cfg[&#039;mirror-link-display&#039;])&lt;br /&gt;
-- &lt;br /&gt;
-- The link for cfg[&#039;sandbox-create-link-display&#039;] link preloads the page with cfg[&#039;template-sandbox-preload&#039;]&lt;br /&gt;
-- or cfg[&#039;module-sandbox-preload&#039;], depending on the current namespace. The link for cfg[&#039;mirror-link-display&#039;]&lt;br /&gt;
-- loads a default edit summary of cfg[&#039;mirror-edit-summary&#039;].&lt;br /&gt;
--&lt;br /&gt;
-- $2 is a link to the test cases page. If the test cases page exists, it is in the following format:&lt;br /&gt;
--&lt;br /&gt;
--     cfg[&#039;testcases-link-display&#039;] (cfg[&#039;testcases-edit-link-display&#039;])&lt;br /&gt;
--&lt;br /&gt;
-- If the test cases page doesn&#039;t exist, it is in the format:&lt;br /&gt;
-- &lt;br /&gt;
--     cfg[&#039;testcases-link-display&#039;] (cfg[&#039;testcases-create-link-display&#039;])&lt;br /&gt;
--&lt;br /&gt;
-- If the test cases page doesn&#039;t exist, the link for cfg[&#039;testcases-create-link-display&#039;] preloads the&lt;br /&gt;
-- page with cfg[&#039;template-testcases-preload&#039;] or cfg[&#039;module-testcases-preload&#039;], depending on the current&lt;br /&gt;
-- namespace.&lt;br /&gt;
--]]&lt;br /&gt;
cfg[&#039;experiment-blurb-template&#039;] = format(&#039;experiment-blurb-template&#039;)&lt;br /&gt;
cfg[&#039;experiment-blurb-module&#039;] = format(&#039;experiment-blurb-module&#039;)&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
-- Sandbox link configuration&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;sandbox-subpage&#039;]&lt;br /&gt;
-- The name of the template subpage typically used for sandboxes.&lt;br /&gt;
cfg[&#039;sandbox-subpage&#039;] = &#039;sandbox&#039;&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;template-sandbox-preload&#039;]&lt;br /&gt;
-- Preload file for template sandbox pages.&lt;br /&gt;
cfg[&#039;template-sandbox-preload&#039;] = &#039;Template:Documentation/preload-sandbox&#039;&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;module-sandbox-preload&#039;]&lt;br /&gt;
-- Preload file for Lua module sandbox pages.&lt;br /&gt;
cfg[&#039;module-sandbox-preload&#039;] = &#039;Template:Documentation/preload-module-sandbox&#039;&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;sandbox-link-display&#039;]&lt;br /&gt;
-- The text to display for &amp;quot;sandbox&amp;quot; links.&lt;br /&gt;
cfg[&#039;sandbox-link-display&#039;] = format(&#039;sandbox-link-display&#039;)&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;sandbox-edit-link-display&#039;]&lt;br /&gt;
-- The text to display for sandbox &amp;quot;edit&amp;quot; links.&lt;br /&gt;
cfg[&#039;sandbox-edit-link-display&#039;] = format(&#039;sandbox-edit-link-display&#039;)&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;sandbox-create-link-display&#039;]&lt;br /&gt;
-- The text to display for sandbox &amp;quot;create&amp;quot; links.&lt;br /&gt;
cfg[&#039;sandbox-create-link-display&#039;] = format(&#039;sandbox-create-link-display&#039;)&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;compare-link-display&#039;]&lt;br /&gt;
-- The text to display for &amp;quot;compare&amp;quot; links.&lt;br /&gt;
cfg[&#039;compare-link-display&#039;] = format(&#039;compare-link-display&#039;)&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;mirror-edit-summary&#039;]&lt;br /&gt;
-- The default edit summary to use when a user clicks the &amp;quot;mirror&amp;quot; link. $1 is a wikilink to the&lt;br /&gt;
-- template page.&lt;br /&gt;
cfg[&#039;mirror-edit-summary&#039;] = &#039;Create sandbox version of $1&#039;&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;mirror-link-display&#039;]&lt;br /&gt;
-- The text to display for &amp;quot;mirror&amp;quot; links.&lt;br /&gt;
cfg[&#039;mirror-link-display&#039;] = format(&#039;mirror-link-display&#039;)&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;mirror-link-preload&#039;]&lt;br /&gt;
-- The page to preload when a user clicks the &amp;quot;mirror&amp;quot; link.&lt;br /&gt;
cfg[&#039;mirror-link-preload&#039;] = &#039;Template:Documentation/mirror&#039;&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
-- Test cases link configuration&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;testcases-subpage&#039;]&lt;br /&gt;
-- The name of the template subpage typically used for test cases.&lt;br /&gt;
cfg[&#039;testcases-subpage&#039;] = &#039;testcases&#039;&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;template-testcases-preload&#039;]&lt;br /&gt;
-- Preload file for template test cases pages.&lt;br /&gt;
cfg[&#039;template-testcases-preload&#039;] = &#039;Template:Documentation/preload-testcases&#039;&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;module-testcases-preload&#039;]&lt;br /&gt;
-- Preload file for Lua module test cases pages.&lt;br /&gt;
cfg[&#039;module-testcases-preload&#039;] = &#039;Template:Documentation/preload-module-testcases&#039;&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;testcases-link-display&#039;]&lt;br /&gt;
-- The text to display for &amp;quot;testcases&amp;quot; links.&lt;br /&gt;
cfg[&#039;testcases-link-display&#039;] = format(&#039;testcases-link-display&#039;)&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;testcases-edit-link-display&#039;]&lt;br /&gt;
-- The text to display for test cases &amp;quot;edit&amp;quot; links.&lt;br /&gt;
cfg[&#039;testcases-edit-link-display&#039;] = format(&#039;testcases-edit-link-display&#039;)&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;testcases-create-link-display&#039;]&lt;br /&gt;
-- The text to display for test cases &amp;quot;create&amp;quot; links.&lt;br /&gt;
cfg[&#039;testcases-create-link-display&#039;] = format(&#039;testcases-create-link-display&#039;)&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
-- Add categories blurb configuration&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
-- cfg[&#039;add-categories-blurb&#039;]&lt;br /&gt;
-- Text to direct users to add categories to the /doc subpage. Not used if the &amp;quot;content&amp;quot; or&lt;br /&gt;
-- &amp;quot;docname fed&amp;quot; arguments are set, as then it is not clear where to add the categories. $1 is a&lt;br /&gt;
-- link to the /doc subpage with a display value of cfg[&#039;doc-link-display&#039;].&lt;br /&gt;
--]]&lt;br /&gt;
cfg[&#039;add-categories-blurb&#039;] = format(&#039;add-categories-blurb&#039;)&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;doc-link-display&#039;]&lt;br /&gt;
-- The text to display when linking to the /doc subpage.&lt;br /&gt;
cfg[&#039;doc-link-display&#039;] = &#039;/doc&#039;&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
-- Subpages link configuration&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
-- cfg[&#039;subpages-blurb&#039;]&lt;br /&gt;
-- The &amp;quot;Subpages of this template&amp;quot; blurb. $1 is a link to the main template&#039;s subpages with a&lt;br /&gt;
-- display value of cfg[&#039;subpages-link-display&#039;]. In the English version this blurb is simply&lt;br /&gt;
-- the link followed by a period, and the link display provides the actual text.&lt;br /&gt;
--]]&lt;br /&gt;
cfg[&#039;subpages-blurb&#039;] = format(&#039;subpages-blurb&#039;)&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
-- cfg[&#039;subpages-link-display&#039;]&lt;br /&gt;
-- The text to display for the &amp;quot;subpages of this page&amp;quot; link. $1 is cfg[&#039;template-pagetype&#039;],&lt;br /&gt;
-- cfg[&#039;module-pagetype&#039;] or cfg[&#039;default-pagetype&#039;], depending on whether the current page is in&lt;br /&gt;
-- the template namespace, the module namespace, or another namespace.&lt;br /&gt;
--]]&lt;br /&gt;
cfg[&#039;subpages-link-display&#039;] = format(&#039;subpages-link-display&#039;)&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;template-pagetype&#039;]&lt;br /&gt;
-- The pagetype to display for template pages.&lt;br /&gt;
cfg[&#039;template-pagetype&#039;] = format(&#039;template-pagetype&#039;)&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;module-pagetype&#039;]&lt;br /&gt;
-- The pagetype to display for Lua module pages.&lt;br /&gt;
cfg[&#039;module-pagetype&#039;] = format(&#039;module-pagetype&#039;)&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;default-pagetype&#039;]&lt;br /&gt;
-- The pagetype to display for pages other than templates or Lua modules.&lt;br /&gt;
cfg[&#039;default-pagetype&#039;] = format(&#039;default-pagetype&#039;)&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
-- Doc link configuration&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;doc-subpage&#039;]&lt;br /&gt;
-- The name of the subpage typically used for documentation pages.&lt;br /&gt;
cfg[&#039;doc-subpage&#039;] = &#039;doc&#039;&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;file-docpage-preload&#039;]&lt;br /&gt;
-- Preload file for documentation page in the file namespace.&lt;br /&gt;
cfg[&#039;file-docpage-preload&#039;] = &#039;Template:Documentation/preload-filespace&#039;&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;docpage-preload&#039;]&lt;br /&gt;
-- Preload file for template documentation pages in all namespaces.&lt;br /&gt;
cfg[&#039;docpage-preload&#039;] = &#039;Template:Documentation/preload&#039;&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;module-preload&#039;]&lt;br /&gt;
-- Preload file for Lua module documentation pages.&lt;br /&gt;
cfg[&#039;module-preload&#039;] = &#039;Template:Documentation/preload-module-doc&#039;&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
-- Print version configuration&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;print-subpage&#039;]&lt;br /&gt;
-- The name of the template subpage used for print versions.&lt;br /&gt;
cfg[&#039;print-subpage&#039;] = &#039;Print&#039;&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;print-link-display&#039;]&lt;br /&gt;
-- The text to display when linking to the /Print subpage.&lt;br /&gt;
cfg[&#039;print-link-display&#039;] = &#039;/Print&#039;&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;print-blurb&#039;]&lt;br /&gt;
-- Text to display if a /Print subpage exists. $1 is a link to the subpage with a display value of cfg[&#039;print-link-display&#039;].&lt;br /&gt;
cfg[&#039;print-blurb&#039;] = format(&#039;print-blurb&#039;)&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;display-print-category&#039;]&lt;br /&gt;
-- Set to true to enable output of cfg[&#039;print-category&#039;] if a /Print subpage exists.&lt;br /&gt;
-- This should be a boolean value (either true or false).&lt;br /&gt;
cfg[&#039;display-print-category&#039;] = true&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;print-category&#039;]&lt;br /&gt;
-- Category to output if cfg[&#039;display-print-category&#039;] is set to true, and a /Print subpage exists.&lt;br /&gt;
cfg[&#039;print-category&#039;] = &#039;Templates with print versions&#039;&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
-- HTML and CSS configuration&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;main-div-id&#039;]&lt;br /&gt;
-- The &amp;quot;id&amp;quot; attribute of the main HTML &amp;quot;div&amp;quot; tag.&lt;br /&gt;
cfg[&#039;main-div-id&#039;] = &#039;template-documentation&#039;&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;main-div-classes&#039;]&lt;br /&gt;
-- The CSS classes added to the main HTML &amp;quot;div&amp;quot; tag.&lt;br /&gt;
cfg[&#039;main-div-class&#039;] = &#039;ts-doc-doc&#039;&lt;br /&gt;
cfg[&#039;header-div-class&#039;] = &#039;ts-doc-header&#039;&lt;br /&gt;
cfg[&#039;heading-div-class&#039;] = &#039;ts-doc-heading&#039;&lt;br /&gt;
cfg[&#039;content-div-class&#039;] = &#039;ts-doc-content&#039;&lt;br /&gt;
cfg[&#039;footer-div-class&#039;] = &#039;ts-doc-footer plainlinks&#039;&lt;br /&gt;
&lt;br /&gt;
cfg[&#039;sandbox-class&#039;] = &#039;ts-doc-sandbox&#039;&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;start-box-linkclasses&#039;]&lt;br /&gt;
-- The CSS classes used for the [view][edit][history] or [create] links in the start box.&lt;br /&gt;
cfg[&#039;start-box-linkclasses&#039;] = &#039;ts-tlinks-tlinks mw-editsection-like plainlinks&#039;&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;start-box-link-id&#039;]&lt;br /&gt;
-- The HTML &amp;quot;id&amp;quot; attribute for the links in the start box.&lt;br /&gt;
cfg[&#039;start-box-link-id&#039;] = &#039;doc_editlinks&#039;&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
-- Tracking category configuration&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;display-strange-usage-category&#039;]&lt;br /&gt;
-- Set to true to enable output of cfg[&#039;strange-usage-category&#039;] if the module is used on a /doc subpage&lt;br /&gt;
-- or a /testcases subpage. This should be a boolean value (either true or false).&lt;br /&gt;
cfg[&#039;display-strange-usage-category&#039;] = false&lt;br /&gt;
&lt;br /&gt;
-- cfg[&#039;strange-usage-category&#039;]&lt;br /&gt;
-- Category to output if cfg[&#039;display-strange-usage-category&#039;] is set to true and the module is used on a&lt;br /&gt;
-- /doc subpage or a /testcases subpage.&lt;br /&gt;
cfg[&#039;strange-usage-category&#039;] = &#039;Pages with strange ((documentation)) usage&#039;&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
-- End configuration&lt;br /&gt;
--&lt;br /&gt;
-- Don&#039;t edit anything below this line.&lt;br /&gt;
----------------------------------------------------------------------------------------------------&lt;br /&gt;
--]]&lt;br /&gt;
&lt;br /&gt;
return cfg&lt;/div&gt;</summary>
		<author><name>Antidote</name></author>
	</entry>
	<entry>
		<id>https://wiki.antidotez.ru/mediawiki/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Documentation&amp;diff=420</id>
		<title>Модуль:Documentation</title>
		<link rel="alternate" type="text/html" href="https://wiki.antidotez.ru/mediawiki/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Documentation&amp;diff=420"/>
		<updated>2026-04-19T18:43:49Z</updated>

		<summary type="html">&lt;p&gt;Antidote: 1 версия импортирована&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- This module implements {{documentation}}.&lt;br /&gt;
&lt;br /&gt;
-- Get required modules.&lt;br /&gt;
local getArgs = require(&#039;Module:Arguments&#039;).getArgs&lt;br /&gt;
local messageBox = require(&#039;Module:Message box&#039;)&lt;br /&gt;
&lt;br /&gt;
-- Get the config table.&lt;br /&gt;
local cfg = mw.loadData(&#039;Module:Documentation/config&#039;)&lt;br /&gt;
local i18n = mw.loadData(&#039;Module:Documentation/i18n&#039;)&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
-- Often-used functions.&lt;br /&gt;
local ugsub = mw.ustring.gsub&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------&lt;br /&gt;
-- Helper functions&lt;br /&gt;
--&lt;br /&gt;
-- These are defined as local functions, but are made available in the p&lt;br /&gt;
-- table for testing purposes.&lt;br /&gt;
----------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
local function message(cfgKey, valArray, expectType)&lt;br /&gt;
	--[[&lt;br /&gt;
	-- Gets a message from the cfg table and formats it if appropriate.&lt;br /&gt;
	-- The function raises an error if the value from the cfg table is not&lt;br /&gt;
	-- of the type expectType. The default type for expectType is &#039;string&#039;.&lt;br /&gt;
	-- If the table valArray is present, strings such as $1, $2 etc. in the&lt;br /&gt;
	-- message are substituted with values from the table keys [1], [2] etc.&lt;br /&gt;
	-- For example, if the message &amp;quot;foo-message&amp;quot; had the value &#039;Foo $2 bar $1.&#039;,&lt;br /&gt;
	-- message(&#039;foo-message&#039;, {&#039;baz&#039;, &#039;qux&#039;}) would return &amp;quot;Foo qux bar baz.&amp;quot;&lt;br /&gt;
	--]]&lt;br /&gt;
	local msg = cfg[cfgKey]&lt;br /&gt;
	expectType = expectType or &#039;string&#039;&lt;br /&gt;
	if type(msg) ~= expectType then&lt;br /&gt;
		error(require(&#039;Module:TNT&#039;).format(&#039;I18n/Documentation&#039;, &#039;cfg-error-msg-type&#039;, cfgKey, expectType, type(msg)), 2)&lt;br /&gt;
	end&lt;br /&gt;
	if not valArray then&lt;br /&gt;
		return msg&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local function getMessageVal(match)&lt;br /&gt;
		match = tonumber(match)&lt;br /&gt;
		return valArray[match] or error(require(&#039;Module:TNT&#039;).format(&#039;I18n/Documentation&#039;, &#039;cfg-error-msg-empty&#039;, &#039;$&#039; .. match, cfgKey), 4)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local ret = ugsub(msg, &#039;$([1-9][0-9]*)&#039;, getMessageVal)&lt;br /&gt;
	return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
p.message = message&lt;br /&gt;
&lt;br /&gt;
local function makeWikilink(page, display)&lt;br /&gt;
	if display then&lt;br /&gt;
		return mw.ustring.format(&#039;[[%s|%s]]&#039;, page, display)&lt;br /&gt;
	else&lt;br /&gt;
		return mw.ustring.format(&#039;[[%s]]&#039;, page)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
p.makeWikilink = makeWikilink&lt;br /&gt;
&lt;br /&gt;
local function makeCategoryLink(cat, sort)&lt;br /&gt;
	local catns = mw.site.namespaces[14].name&lt;br /&gt;
	return makeWikilink(catns .. &#039;:&#039; .. cat, sort)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
p.makeCategoryLink = makeCategoryLink&lt;br /&gt;
&lt;br /&gt;
local function makeUrlLink(url, display)&lt;br /&gt;
	return mw.ustring.format(&#039;[%s %s]&#039;, url, display)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
p.makeUrlLink = makeUrlLink&lt;br /&gt;
&lt;br /&gt;
local function makeToolbar(...)&lt;br /&gt;
	local ret = {}&lt;br /&gt;
	local lim = select(&#039;#&#039;, ...)&lt;br /&gt;
	if lim &amp;lt; 1 then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	for i = 1, lim do&lt;br /&gt;
		ret[#ret + 1] = select(i, ...)&lt;br /&gt;
	end&lt;br /&gt;
	return &#039;&amp;lt;small style=&amp;quot;font-style: normal;&amp;quot;&amp;gt;(&#039; .. table.concat(ret, &#039; &amp;amp;#124; &#039;) .. &#039;)&amp;lt;/small&amp;gt;&#039;&lt;br /&gt;
end	&lt;br /&gt;
&lt;br /&gt;
p.makeToolbar = makeToolbar&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------&lt;br /&gt;
-- Argument processing&lt;br /&gt;
----------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
local function makeInvokeFunc(funcName)&lt;br /&gt;
	return function (frame)&lt;br /&gt;
		local args = getArgs(frame, {&lt;br /&gt;
			valueFunc = function (key, value)&lt;br /&gt;
				if type(value) == &#039;string&#039; then&lt;br /&gt;
					value = value:match(&#039;^%s*(.-)%s*$&#039;) -- Remove whitespace.&lt;br /&gt;
					if key == &#039;heading&#039; or value ~= &#039;&#039; then&lt;br /&gt;
						return value&lt;br /&gt;
					else&lt;br /&gt;
						return nil&lt;br /&gt;
					end&lt;br /&gt;
				else&lt;br /&gt;
					return value&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		})&lt;br /&gt;
		return p[funcName](args)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------&lt;br /&gt;
-- Load TemplateStyles&lt;br /&gt;
----------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
p.main = function(frame)&lt;br /&gt;
	local parent = frame.getParent(frame)&lt;br /&gt;
	local output = p._main(parent.args)&lt;br /&gt;
	return frame:extensionTag{ name=&#039;templatestyles&#039;, args = { src= message(&#039;templatestyles-scr&#039;) } } .. output&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------&lt;br /&gt;
-- Main function&lt;br /&gt;
----------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function p._main(args)&lt;br /&gt;
	--[[&lt;br /&gt;
	-- This function defines logic flow for the module.&lt;br /&gt;
	-- @args - table of arguments passed by the user&lt;br /&gt;
	-- &lt;br /&gt;
	-- Messages:&lt;br /&gt;
	-- &#039;main-div-id&#039; --&amp;gt; &#039;template-documentation&#039;&lt;br /&gt;
	-- &#039;main-div-classes&#039; --&amp;gt; &#039;template-documentation iezoomfix&#039;&lt;br /&gt;
	--]]&lt;br /&gt;
	local env = p.getEnvironment(args)&lt;br /&gt;
	local root = mw.html.create()&lt;br /&gt;
	root&lt;br /&gt;
		:wikitext(p._getModuleWikitext(args, env))&lt;br /&gt;
		:wikitext(p.protectionTemplate(env))&lt;br /&gt;
		:wikitext(p.sandboxNotice(args, env))&lt;br /&gt;
		 -- This div tag is from {{documentation/start box}}, but moving it here&lt;br /&gt;
		 -- so that we don&#039;t have to worry about unclosed tags.&lt;br /&gt;
		:tag(&#039;div&#039;)&lt;br /&gt;
			:attr(&#039;id&#039;, message(&#039;main-div-id&#039;))&lt;br /&gt;
			:addClass(message(&#039;main-div-class&#039;))&lt;br /&gt;
			:wikitext(p._startBox(args, env))&lt;br /&gt;
			:wikitext(p._content(args, env))&lt;br /&gt;
			:done()&lt;br /&gt;
		:wikitext(p._endBox(args, env))&lt;br /&gt;
		:wikitext(p.addTrackingCategories(env))&lt;br /&gt;
	return tostring(root)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------&lt;br /&gt;
-- Environment settings&lt;br /&gt;
----------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function p.getEnvironment(args)&lt;br /&gt;
	--[[&lt;br /&gt;
	-- Returns a table with information about the environment, including title objects and other namespace- or&lt;br /&gt;
	-- path-related data.&lt;br /&gt;
	-- @args - table of arguments passed by the user&lt;br /&gt;
	--&lt;br /&gt;
	-- Title objects include:&lt;br /&gt;
	-- env.title - the page we are making documentation for (usually the current title)&lt;br /&gt;
	-- env.templateTitle - the template (or module, file, etc.)&lt;br /&gt;
	-- env.docTitle - the /doc subpage.&lt;br /&gt;
	-- env.sandboxTitle - the /sandbox subpage.&lt;br /&gt;
	-- env.testcasesTitle - the /testcases subpage.&lt;br /&gt;
	-- env.printTitle - the print version of the template, located at the /Print subpage.&lt;br /&gt;
	--&lt;br /&gt;
	-- Data includes:&lt;br /&gt;
	-- env.protectionLevels - the protection levels table of the title object.&lt;br /&gt;
	-- env.subjectSpace - the number of the title&#039;s subject namespace.&lt;br /&gt;
	-- env.docSpace - the number of the namespace the title puts its documentation in.&lt;br /&gt;
	-- env.docpageBase - the text of the base page of the /doc, /sandbox and /testcases pages, with namespace.&lt;br /&gt;
	-- env.compareUrl - URL of the Special:ComparePages page comparing the sandbox with the template.&lt;br /&gt;
	-- &lt;br /&gt;
	-- All table lookups are passed through pcall so that errors are caught. If an error occurs, the value&lt;br /&gt;
	-- returned will be nil.&lt;br /&gt;
	--]]&lt;br /&gt;
	&lt;br /&gt;
	local env, envFuncs = {}, {}&lt;br /&gt;
&lt;br /&gt;
	-- Set up the metatable. If triggered we call the corresponding function in the envFuncs table. The value&lt;br /&gt;
	-- returned by that function is memoized in the env table so that we don&#039;t call any of the functions&lt;br /&gt;
	-- more than once. (Nils won&#039;t be memoized.)&lt;br /&gt;
	setmetatable(env, {&lt;br /&gt;
		__index = function (t, key)&lt;br /&gt;
			local envFunc = envFuncs[key]&lt;br /&gt;
			if envFunc then&lt;br /&gt;
				local success, val = pcall(envFunc)&lt;br /&gt;
				if success then&lt;br /&gt;
					env[key] = val -- Memoise the value.&lt;br /&gt;
					return val&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			return nil&lt;br /&gt;
		end&lt;br /&gt;
	})	&lt;br /&gt;
&lt;br /&gt;
	function envFuncs.title()&lt;br /&gt;
		-- The title object for the current page, or a test page passed with args.page.&lt;br /&gt;
		local title&lt;br /&gt;
		local titleArg = args.page&lt;br /&gt;
		if titleArg then&lt;br /&gt;
			title = mw.title.new(titleArg)&lt;br /&gt;
		else&lt;br /&gt;
			title = mw.title.getCurrentTitle()&lt;br /&gt;
		end&lt;br /&gt;
		return title&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	function envFuncs.templateTitle()&lt;br /&gt;
		--[[&lt;br /&gt;
		-- The template (or module, etc.) title object.&lt;br /&gt;
		-- Messages:&lt;br /&gt;
		-- &#039;sandbox-subpage&#039; --&amp;gt; &#039;sandbox&#039;&lt;br /&gt;
		-- &#039;testcases-subpage&#039; --&amp;gt; &#039;testcases&#039;&lt;br /&gt;
		--]]&lt;br /&gt;
		local subjectSpace = env.subjectSpace&lt;br /&gt;
		local title = env.title&lt;br /&gt;
		local subpage = title.subpageText&lt;br /&gt;
		if subpage == message(&#039;sandbox-subpage&#039;) or subpage == message(&#039;testcases-subpage&#039;) then&lt;br /&gt;
			return mw.title.makeTitle(subjectSpace, title.baseText)&lt;br /&gt;
		else&lt;br /&gt;
			return mw.title.makeTitle(subjectSpace, title.text)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	function envFuncs.docTitle()&lt;br /&gt;
		--[[&lt;br /&gt;
		-- Title object of the /doc subpage.&lt;br /&gt;
		-- Messages:&lt;br /&gt;
		-- &#039;doc-subpage&#039; --&amp;gt; &#039;doc&#039;&lt;br /&gt;
		--]]&lt;br /&gt;
		local title = env.title&lt;br /&gt;
		local docname = args[1] -- User-specified doc page.&lt;br /&gt;
		local docpage&lt;br /&gt;
		if docname then&lt;br /&gt;
			docpage = docname&lt;br /&gt;
		else&lt;br /&gt;
			docpage = env.docpageBase .. &#039;/&#039; .. message(&#039;doc-subpage&#039;)&lt;br /&gt;
		end&lt;br /&gt;
		return mw.title.new(docpage)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	function envFuncs.sandboxTitle()&lt;br /&gt;
		--[[&lt;br /&gt;
		-- Title object for the /sandbox subpage.&lt;br /&gt;
		-- Messages:&lt;br /&gt;
		-- &#039;sandbox-subpage&#039; --&amp;gt; &#039;sandbox&#039;&lt;br /&gt;
		--]]&lt;br /&gt;
		return mw.title.new(env.docpageBase .. &#039;/&#039; .. message(&#039;sandbox-subpage&#039;))&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	function envFuncs.testcasesTitle()&lt;br /&gt;
		--[[&lt;br /&gt;
		-- Title object for the /testcases subpage.&lt;br /&gt;
		-- Messages:&lt;br /&gt;
		-- &#039;testcases-subpage&#039; --&amp;gt; &#039;testcases&#039;&lt;br /&gt;
		--]]&lt;br /&gt;
		return mw.title.new(env.docpageBase .. &#039;/&#039; .. message(&#039;testcases-subpage&#039;))&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	function envFuncs.printTitle()&lt;br /&gt;
		--[[&lt;br /&gt;
		-- Title object for the /Print subpage.&lt;br /&gt;
		-- Messages:&lt;br /&gt;
		-- &#039;print-subpage&#039; --&amp;gt; &#039;Print&#039;&lt;br /&gt;
		--]]&lt;br /&gt;
		return env.templateTitle:subPageTitle(message(&#039;print-subpage&#039;))&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	function envFuncs.protectionLevels()&lt;br /&gt;
		-- The protection levels table of the title object.&lt;br /&gt;
		return env.title.protectionLevels&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	function envFuncs.subjectSpace()&lt;br /&gt;
		-- The subject namespace number.&lt;br /&gt;
		return mw.site.namespaces[env.title.namespace].subject.id&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	function envFuncs.docSpace()&lt;br /&gt;
		-- The documentation namespace number. For most namespaces this is the same as the&lt;br /&gt;
		-- subject namespace. However, pages in the Article, File, MediaWiki or Category&lt;br /&gt;
		-- namespaces must have their /doc, /sandbox and /testcases pages in talk space.&lt;br /&gt;
		local subjectSpace = env.subjectSpace&lt;br /&gt;
		if subjectSpace == 0 or subjectSpace == 6 or subjectSpace == 8 or subjectSpace == 14 then&lt;br /&gt;
			return subjectSpace + 1&lt;br /&gt;
		else&lt;br /&gt;
			return subjectSpace&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	function envFuncs.docpageBase()&lt;br /&gt;
		-- The base page of the /doc, /sandbox, and /testcases subpages.&lt;br /&gt;
		-- For some namespaces this is the talk page, rather than the template page.&lt;br /&gt;
		local templateTitle = env.templateTitle&lt;br /&gt;
		local docSpace = env.docSpace&lt;br /&gt;
		local docSpaceText = mw.site.namespaces[docSpace].name&lt;br /&gt;
		-- Assemble the link. docSpace is never the main namespace, so we can hardcode the colon.&lt;br /&gt;
		return docSpaceText .. &#039;:&#039; .. templateTitle.text&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	function envFuncs.compareUrl()&lt;br /&gt;
		-- Diff link between the sandbox and the main template using [[Special:ComparePages]].&lt;br /&gt;
		local templateTitle = env.templateTitle&lt;br /&gt;
		local sandboxTitle = env.sandboxTitle&lt;br /&gt;
		if templateTitle.exists and sandboxTitle.exists then&lt;br /&gt;
			local compareUrl = mw.uri.fullUrl(&lt;br /&gt;
				&#039;Special:ComparePages&#039;,&lt;br /&gt;
				{page1 = templateTitle.prefixedText, page2 = sandboxTitle.prefixedText}&lt;br /&gt;
			)&lt;br /&gt;
			return tostring(compareUrl)&lt;br /&gt;
		else&lt;br /&gt;
			return nil&lt;br /&gt;
		end&lt;br /&gt;
	end		&lt;br /&gt;
&lt;br /&gt;
	return env&lt;br /&gt;
end	&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------&lt;br /&gt;
-- Auxiliary templates&lt;br /&gt;
----------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
p.getModuleWikitext = makeInvokeFunc(&#039;_getModuleWikitext&#039;)&lt;br /&gt;
&lt;br /&gt;
function p._getModuleWikitext(args, env)&lt;br /&gt;
	local currentTitle = mw.title.getCurrentTitle()&lt;br /&gt;
	if currentTitle.contentModel ~= &#039;Scribunto&#039; then return end&lt;br /&gt;
	pcall(require, currentTitle.prefixedText) -- if it fails, we don&#039;t care&lt;br /&gt;
	local moduleWikitext =  package.loaded[&amp;quot;Module:Module wikitext&amp;quot;]&lt;br /&gt;
	if moduleWikitext then&lt;br /&gt;
		return moduleWikitext.main()&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.sandboxNotice(args, env)&lt;br /&gt;
	--[=[&lt;br /&gt;
	-- Generates a sandbox notice for display above sandbox pages.&lt;br /&gt;
	-- @args - a table of arguments passed by the user&lt;br /&gt;
	-- @env - environment table containing title objects, etc., generated with p.getEnvironment&lt;br /&gt;
	-- &lt;br /&gt;
	-- Messages:&lt;br /&gt;
	-- &#039;sandbox-notice-image&#039; --&amp;gt; &#039;[[Image:Sandbox.svg|50px|alt=|link=]]&#039;&lt;br /&gt;
	-- &#039;sandbox-notice-blurb&#039; --&amp;gt; &#039;This is the $1 for $2.&#039;&lt;br /&gt;
	-- &#039;sandbox-notice-diff-blurb&#039; --&amp;gt; &#039;This is the $1 for $2 ($3).&#039;&lt;br /&gt;
	-- &#039;sandbox-notice-pagetype-template&#039; --&amp;gt; &#039;[[w:Wikipedia:Template test cases|template sandbox]] page&#039;&lt;br /&gt;
	-- &#039;sandbox-notice-pagetype-module&#039; --&amp;gt; &#039;[[w:Wikipedia:Template test cases|module sandbox]] page&#039;&lt;br /&gt;
	-- &#039;sandbox-notice-pagetype-other&#039; --&amp;gt; &#039;sandbox page&#039;&lt;br /&gt;
	-- &#039;sandbox-notice-compare-link-display&#039; --&amp;gt; &#039;diff&#039;&lt;br /&gt;
	-- &#039;sandbox-notice-testcases-blurb&#039; --&amp;gt; &#039;See also the companion subpage for $1.&#039;&lt;br /&gt;
	-- &#039;sandbox-notice-testcases-link-display&#039; --&amp;gt; &#039;test cases&#039;&lt;br /&gt;
	-- &#039;sandbox-category&#039; --&amp;gt; &#039;Template sandboxes&#039;&lt;br /&gt;
	--]=]&lt;br /&gt;
	local title = env.title&lt;br /&gt;
	local sandboxTitle = env.sandboxTitle&lt;br /&gt;
	local templateTitle = env.templateTitle&lt;br /&gt;
	local subjectSpace = env.subjectSpace&lt;br /&gt;
	if not (subjectSpace and title and sandboxTitle and templateTitle and mw.title.equals(title, sandboxTitle)) then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	-- Build the table of arguments to pass to {{ombox}}. We need just two fields, &amp;quot;image&amp;quot; and &amp;quot;text&amp;quot;.&lt;br /&gt;
	local omargs = {}&lt;br /&gt;
	omargs.image = message(&#039;sandbox-notice-image&#039;)&lt;br /&gt;
	-- Get the text. We start with the opening blurb, which is something like&lt;br /&gt;
	-- &amp;quot;This is the template sandbox for [[Template:Foo]] (diff).&amp;quot;&lt;br /&gt;
	local text = &#039;&#039;&lt;br /&gt;
	local frame = mw.getCurrentFrame()&lt;br /&gt;
	local isPreviewing = frame:preprocess(&#039;{{REVISIONID}}&#039;) == &#039;&#039; -- True if the page is being previewed.&lt;br /&gt;
	local pagetype&lt;br /&gt;
	if subjectSpace == 10 then&lt;br /&gt;
		pagetype = message(&#039;sandbox-notice-pagetype-template&#039;)&lt;br /&gt;
	elseif subjectSpace == 828 then&lt;br /&gt;
		pagetype = message(&#039;sandbox-notice-pagetype-module&#039;)&lt;br /&gt;
	else&lt;br /&gt;
		pagetype = message(&#039;sandbox-notice-pagetype-other&#039;)&lt;br /&gt;
	end&lt;br /&gt;
	local templateLink = makeWikilink(templateTitle.prefixedText)&lt;br /&gt;
	local compareUrl = env.compareUrl&lt;br /&gt;
	if isPreviewing or not compareUrl then&lt;br /&gt;
		text = text .. message(&#039;sandbox-notice-blurb&#039;, {pagetype, templateLink})&lt;br /&gt;
	else&lt;br /&gt;
		local compareDisplay = message(&#039;sandbox-notice-compare-link-display&#039;)&lt;br /&gt;
		local compareLink = makeUrlLink(compareUrl, compareDisplay)&lt;br /&gt;
		text = text .. message(&#039;sandbox-notice-diff-blurb&#039;, {pagetype, templateLink, compareLink})&lt;br /&gt;
	end&lt;br /&gt;
	-- Get the test cases page blurb if the page exists. This is something like&lt;br /&gt;
	-- &amp;quot;See also the companion subpage for [[Template:Foo/testcases|test cases]].&amp;quot;&lt;br /&gt;
	local testcasesTitle = env.testcasesTitle&lt;br /&gt;
	if testcasesTitle and testcasesTitle.exists then&lt;br /&gt;
		if testcasesTitle.contentModel == &amp;quot;Scribunto&amp;quot; then&lt;br /&gt;
			local testcasesLinkDisplay = message(&#039;sandbox-notice-testcases-link-display&#039;)&lt;br /&gt;
			local testcasesRunLinkDisplay = message(&#039;sandbox-notice-testcases-run-link-display&#039;)&lt;br /&gt;
			local testcasesLink = makeWikilink(testcasesTitle.prefixedText, testcasesLinkDisplay)&lt;br /&gt;
			local testcasesRunLink = makeWikilink(testcasesTitle.talkPageTitle.prefixedText, testcasesRunLinkDisplay)&lt;br /&gt;
			text = text .. &#039;&amp;lt;br /&amp;gt;&#039; .. message(&#039;sandbox-notice-testcases-run-blurb&#039;, {testcasesLink, testcasesRunLink})&lt;br /&gt;
		else&lt;br /&gt;
			local testcasesLinkDisplay = message(&#039;sandbox-notice-testcases-link-display&#039;)&lt;br /&gt;
			local testcasesLink = makeWikilink(testcasesTitle.prefixedText, testcasesLinkDisplay)&lt;br /&gt;
			text = text .. &#039;&amp;lt;br /&amp;gt;&#039; .. message(&#039;sandbox-notice-testcases-blurb&#039;, {testcasesLink})&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	-- Add the sandbox to the sandbox category.&lt;br /&gt;
	text = text .. makeCategoryLink(message(&#039;sandbox-category&#039;))&lt;br /&gt;
	omargs.text = text&lt;br /&gt;
	omargs.class = message(&#039;sandbox-class&#039;)&lt;br /&gt;
	local ret = &#039;&amp;lt;div style=&amp;quot;clear: both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039;&lt;br /&gt;
	ret = ret .. messageBox.main(&#039;ombox&#039;, omargs)&lt;br /&gt;
	return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.protectionTemplate(env)&lt;br /&gt;
	-- Generates the padlock icon in the top right.&lt;br /&gt;
	-- @env - environment table containing title objects, etc., generated with p.getEnvironment&lt;br /&gt;
	-- Messages:&lt;br /&gt;
	-- &#039;protection-template&#039; --&amp;gt; &#039;pp-template&#039;&lt;br /&gt;
	-- &#039;protection-template-args&#039; --&amp;gt; {docusage = &#039;yes&#039;}&lt;br /&gt;
	local title = env.title&lt;br /&gt;
	local protectionLevels&lt;br /&gt;
	local protectionTemplate = message(&#039;protection-template&#039;)&lt;br /&gt;
	local namespace = title.namespace&lt;br /&gt;
	if not (protectionTemplate and (namespace == 10 or namespace == 828)) then&lt;br /&gt;
		-- Don&#039;t display the protection template if we are not in the template or module namespaces.&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	protectionLevels = env.protectionLevels&lt;br /&gt;
	if not protectionLevels then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	local editLevels = protectionLevels.edit&lt;br /&gt;
	local moveLevels = protectionLevels.move&lt;br /&gt;
	if moveLevels and moveLevels[1] == &#039;sysop&#039; or editLevels and editLevels[1] then&lt;br /&gt;
		-- The page is full-move protected, or full, template, or semi-protected.&lt;br /&gt;
		local frame = mw.getCurrentFrame()&lt;br /&gt;
		return frame:expandTemplate{title = protectionTemplate, args = message(&#039;protection-template-args&#039;, nil, &#039;table&#039;)}&lt;br /&gt;
	else&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------&lt;br /&gt;
-- Start box&lt;br /&gt;
----------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
p.startBox = makeInvokeFunc(&#039;_startBox&#039;)&lt;br /&gt;
&lt;br /&gt;
function p._startBox(args, env)&lt;br /&gt;
	--[[&lt;br /&gt;
	-- This function generates the start box.&lt;br /&gt;
	-- @args - a table of arguments passed by the user&lt;br /&gt;
	-- @env - environment table containing title objects, etc., generated with p.getEnvironment&lt;br /&gt;
	-- &lt;br /&gt;
	-- The actual work is done by p.makeStartBoxLinksData and p.renderStartBoxLinks which make&lt;br /&gt;
	-- the [view] [edit] [history] [purge] links, and by p.makeStartBoxData and p.renderStartBox&lt;br /&gt;
	-- which generate the box HTML.&lt;br /&gt;
	--]]&lt;br /&gt;
	env = env or p.getEnvironment(args)&lt;br /&gt;
	local links&lt;br /&gt;
	local content = args.content&lt;br /&gt;
	if not content then&lt;br /&gt;
		-- No need to include the links if the documentation is on the template page itself.&lt;br /&gt;
		local linksData = p.makeStartBoxLinksData(args, env)&lt;br /&gt;
		if linksData then&lt;br /&gt;
			links = p.renderStartBoxLinks(linksData)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	-- Generate the start box html.&lt;br /&gt;
	local data = p.makeStartBoxData(args, env, links)&lt;br /&gt;
	if data then&lt;br /&gt;
		return p.renderStartBox(data)&lt;br /&gt;
	else&lt;br /&gt;
		-- User specified no heading.&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.makeStartBoxLinksData(args, env)&lt;br /&gt;
	--[[&lt;br /&gt;
	-- Does initial processing of data to make the [view] [edit] [history] [purge] links.&lt;br /&gt;
	-- @args - a table of arguments passed by the user&lt;br /&gt;
	-- @env - environment table containing title objects, etc., generated with p.getEnvironment&lt;br /&gt;
	-- &lt;br /&gt;
	-- Messages:&lt;br /&gt;
	-- &#039;view-link-display&#039; --&amp;gt; &#039;view&#039;&lt;br /&gt;
	-- &#039;edit-link-display&#039; --&amp;gt; &#039;edit&#039;&lt;br /&gt;
	-- &#039;history-link-display&#039; --&amp;gt; &#039;history&#039;&lt;br /&gt;
	-- &#039;purge-link-display&#039; --&amp;gt; &#039;purge&#039;&lt;br /&gt;
	-- &#039;file-docpage-preload&#039; --&amp;gt; &#039;Template:Documentation/preload-filespace&#039;&lt;br /&gt;
	-- &#039;module-preload&#039; --&amp;gt; &#039;Template:Documentation/preload-module-doc&#039;&lt;br /&gt;
	-- &#039;docpage-preload&#039; --&amp;gt; &#039;Template:Documentation/preload&#039;&lt;br /&gt;
	-- &#039;create-link-display&#039; --&amp;gt; &#039;create&#039;&lt;br /&gt;
	--]]&lt;br /&gt;
	local subjectSpace = env.subjectSpace&lt;br /&gt;
	local title = env.title&lt;br /&gt;
	local docTitle = env.docTitle&lt;br /&gt;
	if not title or not docTitle then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	if docTitle.isRedirect then &lt;br /&gt;
		docTitle = docTitle.redirectTarget&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local data = {}&lt;br /&gt;
	data.title = title&lt;br /&gt;
	data.docTitle = docTitle&lt;br /&gt;
	-- View, display, edit, and purge links if /doc exists.&lt;br /&gt;
	data.viewLinkDisplay = i18n[&#039;view-link-display&#039;]&lt;br /&gt;
	data.editLinkDisplay = i18n[&#039;edit-link-display&#039;]&lt;br /&gt;
	data.historyLinkDisplay = i18n[&#039;history-link-display&#039;]&lt;br /&gt;
	data.purgeLinkDisplay = i18n[&#039;purge-link-display&#039;]&lt;br /&gt;
	-- Create link if /doc doesn&#039;t exist.&lt;br /&gt;
	local preload = args.preload&lt;br /&gt;
	if not preload then&lt;br /&gt;
		if subjectSpace == 6 then -- File namespace&lt;br /&gt;
			preload = message(&#039;file-docpage-preload&#039;)&lt;br /&gt;
		elseif subjectSpace == 828 then -- Module namespace&lt;br /&gt;
			preload = message(&#039;module-preload&#039;)&lt;br /&gt;
		else&lt;br /&gt;
			preload = message(&#039;docpage-preload&#039;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	data.preload = preload&lt;br /&gt;
	data.createLinkDisplay = i18n[&#039;create-link-display&#039;]&lt;br /&gt;
	return data&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.renderStartBoxLinks(data)&lt;br /&gt;
	--[[&lt;br /&gt;
	-- Generates the [view][edit][history][purge] or [create] links from the data table.&lt;br /&gt;
	-- @data - a table of data generated by p.makeStartBoxLinksData&lt;br /&gt;
	--]]&lt;br /&gt;
	&lt;br /&gt;
	local function escapeBrackets(s)&lt;br /&gt;
		-- Escapes square brackets with HTML entities.&lt;br /&gt;
		s = s:gsub(&#039;%[&#039;, &#039;&amp;amp;#91;&#039;) -- Replace square brackets with HTML entities.&lt;br /&gt;
		s = s:gsub(&#039;%]&#039;, &#039;&amp;amp;#93;&#039;)&lt;br /&gt;
		return s&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local ret&lt;br /&gt;
	local docTitle = data.docTitle&lt;br /&gt;
	local title = data.title&lt;br /&gt;
	if docTitle.exists then&lt;br /&gt;
		local viewLink = makeWikilink(docTitle.prefixedText, data.viewLinkDisplay)&lt;br /&gt;
		local editLink = makeUrlLink(docTitle:fullUrl{action = &#039;edit&#039;}, data.editLinkDisplay)&lt;br /&gt;
		local historyLink = makeUrlLink(docTitle:fullUrl{action = &#039;history&#039;}, data.historyLinkDisplay)&lt;br /&gt;
		local purgeLink = makeUrlLink(title:fullUrl{action = &#039;purge&#039;}, data.purgeLinkDisplay)&lt;br /&gt;
		ret = &#039;[%s] [%s] [%s] [%s]&#039;&lt;br /&gt;
		ret = escapeBrackets(ret)&lt;br /&gt;
		ret = mw.ustring.format(ret, viewLink, editLink, historyLink, purgeLink)&lt;br /&gt;
	else&lt;br /&gt;
		local createLink = makeUrlLink(docTitle:fullUrl{action = &#039;edit&#039;, preload = data.preload}, data.createLinkDisplay)&lt;br /&gt;
		ret = &#039;[%s]&#039;&lt;br /&gt;
		ret = escapeBrackets(ret)&lt;br /&gt;
		ret = mw.ustring.format(ret, createLink)&lt;br /&gt;
	end&lt;br /&gt;
	return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.makeStartBoxData(args, env, links)&lt;br /&gt;
	--[=[&lt;br /&gt;
	-- Does initial processing of data to pass to the start-box render function, p.renderStartBox.&lt;br /&gt;
	-- @args - a table of arguments passed by the user&lt;br /&gt;
	-- @env - environment table containing title objects, etc., generated with p.getEnvironment&lt;br /&gt;
	-- @links - a string containing the [view][edit][history][purge] links - could be nil if there&#039;s an error.&lt;br /&gt;
	--&lt;br /&gt;
	-- Messages:&lt;br /&gt;
	-- &#039;documentation-icon-wikitext&#039; --&amp;gt; &#039;[[File:Test Template Info-Icon - Version (2).svg|50px|link=|alt=Documentation icon]]&#039;&lt;br /&gt;
	-- &#039;template-namespace-heading&#039; --&amp;gt; &#039;Template documentation&#039;&lt;br /&gt;
	-- &#039;module-namespace-heading&#039; --&amp;gt; &#039;Module documentation&#039;&lt;br /&gt;
	-- &#039;file-namespace-heading&#039; --&amp;gt; &#039;Summary&#039;&lt;br /&gt;
	-- &#039;other-namespaces-heading&#039; --&amp;gt; &#039;Documentation&#039;&lt;br /&gt;
	-- &#039;start-box-linkclasses&#039; --&amp;gt; &#039;mw-editsection-like plainlinks&#039;&lt;br /&gt;
	-- &#039;start-box-link-id&#039; --&amp;gt; &#039;doc_editlinks&#039;&lt;br /&gt;
	-- &#039;testcases-create-link-display&#039; --&amp;gt; &#039;create&#039;&lt;br /&gt;
	--]=]&lt;br /&gt;
	local subjectSpace = env.subjectSpace&lt;br /&gt;
	if not subjectSpace then&lt;br /&gt;
		-- Default to an &amp;quot;other namespaces&amp;quot; namespace, so that we get at least some output&lt;br /&gt;
		-- if an error occurs.&lt;br /&gt;
		subjectSpace = 2&lt;br /&gt;
	end&lt;br /&gt;
	local data = {}&lt;br /&gt;
	&lt;br /&gt;
	-- Heading&lt;br /&gt;
	local heading = args.heading -- Blank values are not removed.&lt;br /&gt;
	if heading == &#039;&#039; then&lt;br /&gt;
		-- Don&#039;t display the start box if the heading arg is defined but blank.&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	if heading then&lt;br /&gt;
		data.heading = heading&lt;br /&gt;
	elseif subjectSpace == 10 then -- Template namespace&lt;br /&gt;
		data.heading = i18n[&#039;template-namespace-heading&#039;]&lt;br /&gt;
	elseif subjectSpace == 828 then -- Module namespace&lt;br /&gt;
		data.heading = i18n[&#039;module-namespace-heading&#039;]&lt;br /&gt;
	elseif subjectSpace == 6 then -- File namespace&lt;br /&gt;
		data.heading = i18n[&#039;file-namespace-heading&#039;]&lt;br /&gt;
	else&lt;br /&gt;
		data.heading = i18n[&#039;other-namespaces-heading&#039;]&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Data for the [view][edit][history][purge] or [create] links.&lt;br /&gt;
	if links then&lt;br /&gt;
		data.linksClass = message(&#039;start-box-linkclasses&#039;)&lt;br /&gt;
		data.linksId = message(&#039;start-box-link-id&#039;)&lt;br /&gt;
		data.links = links&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return data&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.renderStartBox(data)&lt;br /&gt;
	-- Renders the start box html.&lt;br /&gt;
	-- @data - a table of data generated by p.makeStartBoxData.&lt;br /&gt;
	local sbox = mw.html.create(&#039;div&#039;)&lt;br /&gt;
	sbox&lt;br /&gt;
		:addClass(message(&#039;header-div-class&#039;))&lt;br /&gt;
		:tag(&#039;div&#039;)&lt;br /&gt;
			:addClass(message(&#039;heading-div-class&#039;))&lt;br /&gt;
			:wikitext(data.heading)&lt;br /&gt;
	local links = data.links&lt;br /&gt;
	if links then&lt;br /&gt;
		sbox&lt;br /&gt;
			:tag(&#039;div&#039;)&lt;br /&gt;
				:addClass(data.linksClass)&lt;br /&gt;
				:attr(&#039;id&#039;, data.linksId)&lt;br /&gt;
				:wikitext(links)&lt;br /&gt;
	end&lt;br /&gt;
	return tostring(sbox)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------&lt;br /&gt;
-- Documentation content&lt;br /&gt;
----------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
p.content = makeInvokeFunc(&#039;_content&#039;)&lt;br /&gt;
&lt;br /&gt;
function p._content(args, env)&lt;br /&gt;
	-- Displays the documentation contents&lt;br /&gt;
	-- @args - a table of arguments passed by the user&lt;br /&gt;
	-- @env - environment table containing title objects, etc., generated with p.getEnvironment&lt;br /&gt;
	env = env or p.getEnvironment(args)&lt;br /&gt;
	local docTitle = env.docTitle&lt;br /&gt;
	local content = args.content&lt;br /&gt;
	if not content and docTitle and docTitle.exists then&lt;br /&gt;
		content = args._content or mw.getCurrentFrame():expandTemplate{title = docTitle}&lt;br /&gt;
	end&lt;br /&gt;
	-- The line breaks below are necessary so that &amp;quot;=== Headings ===&amp;quot; at the start and end&lt;br /&gt;
	-- of docs are interpreted correctly.&lt;br /&gt;
	local cbox = mw.html.create(&#039;div&#039;)&lt;br /&gt;
	cbox&lt;br /&gt;
		:addClass(message(&#039;content-div-class&#039;))&lt;br /&gt;
		:wikitext(&#039;\n&#039; .. (content or &#039;&#039;) .. &#039;\n&#039;)&lt;br /&gt;
	return tostring(cbox)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
p.contentTitle = makeInvokeFunc(&#039;_contentTitle&#039;)&lt;br /&gt;
&lt;br /&gt;
function p._contentTitle(args, env)&lt;br /&gt;
	env = env or p.getEnvironment(args)&lt;br /&gt;
	local docTitle = env.docTitle&lt;br /&gt;
	if not args.content and docTitle and docTitle.exists then&lt;br /&gt;
		return docTitle.prefixedText&lt;br /&gt;
	else&lt;br /&gt;
		return &#039;&#039;&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------&lt;br /&gt;
-- End box&lt;br /&gt;
----------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
p.endBox = makeInvokeFunc(&#039;_endBox&#039;)&lt;br /&gt;
&lt;br /&gt;
function p._endBox(args, env)&lt;br /&gt;
	--[=[&lt;br /&gt;
	-- This function generates the end box (also known as the link box).&lt;br /&gt;
	-- @args - a table of arguments passed by the user&lt;br /&gt;
	-- @env - environment table containing title objects, etc., generated with p.getEnvironment&lt;br /&gt;
	--]=]&lt;br /&gt;
	&lt;br /&gt;
	-- Get environment data.&lt;br /&gt;
	env = env or p.getEnvironment(args)&lt;br /&gt;
	local subjectSpace = env.subjectSpace&lt;br /&gt;
	local docTitle = env.docTitle&lt;br /&gt;
	if not subjectSpace or not docTitle then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
		&lt;br /&gt;
	-- Check whether we should output the end box at all. Add the end&lt;br /&gt;
	-- box by default if the documentation exists or if we are in the&lt;br /&gt;
	-- user, module or template namespaces.&lt;br /&gt;
	local linkBox = args[&#039;link box&#039;]&lt;br /&gt;
	if linkBox == &#039;off&#039;&lt;br /&gt;
		or not (&lt;br /&gt;
			docTitle.exists&lt;br /&gt;
			or subjectSpace == 2&lt;br /&gt;
			or subjectSpace == 828&lt;br /&gt;
			or subjectSpace == 10&lt;br /&gt;
		)&lt;br /&gt;
	then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Assemble the footer text field.&lt;br /&gt;
	local text = &#039;&#039;&lt;br /&gt;
	if linkBox then&lt;br /&gt;
		text = text .. linkBox&lt;br /&gt;
	else&lt;br /&gt;
		text = text .. (p.makeDocPageBlurb(args, env) or &#039;&#039;) -- &amp;quot;This documentation is transcluded from [[Foo]].&amp;quot; &lt;br /&gt;
		if subjectSpace == 2 or subjectSpace == 10 or subjectSpace == 828 then&lt;br /&gt;
			-- We are in the user, template or module namespaces.&lt;br /&gt;
			-- Add sandbox and testcases links.&lt;br /&gt;
			-- &amp;quot;Editors can experiment in this template&#039;s sandbox and testcases pages.&amp;quot;&lt;br /&gt;
			text = text .. (p.makeExperimentBlurb(args, env) or &#039;&#039;)&lt;br /&gt;
			text = text .. &#039;&amp;lt;br /&amp;gt;&#039;&lt;br /&gt;
			if not args.content and not args[1] then&lt;br /&gt;
				-- &amp;quot;Please add categories to the /doc subpage.&amp;quot;&lt;br /&gt;
				-- Don&#039;t show this message with inline docs or with an explicitly specified doc page,&lt;br /&gt;
				-- as then it is unclear where to add the categories.&lt;br /&gt;
				text = text .. (p.makeCategoriesBlurb(args, env) or &#039;&#039;)&lt;br /&gt;
			end&lt;br /&gt;
			text = text .. &#039; &#039; .. (p.makeSubpagesBlurb(args, env) or &#039;&#039;) --&amp;quot;Subpages of this template&amp;quot;&lt;br /&gt;
			local printBlurb = p.makePrintBlurb(args, env) -- Two-line blurb about print versions of templates.&lt;br /&gt;
			if printBlurb then&lt;br /&gt;
				text = text .. &#039;&amp;lt;br /&amp;gt;&#039; .. printBlurb&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local ebox = mw.html.create(&#039;div&#039;)&lt;br /&gt;
	ebox&lt;br /&gt;
		:addClass(message(&#039;footer-div-class&#039;))&lt;br /&gt;
		:wikitext(text)&lt;br /&gt;
	return tostring(ebox)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.makeDocPageBlurb(args, env)&lt;br /&gt;
	--[=[&lt;br /&gt;
	-- Makes the blurb &amp;quot;This documentation is transcluded from [[Template:Foo]] (edit, history)&amp;quot;.&lt;br /&gt;
	-- @args - a table of arguments passed by the user&lt;br /&gt;
	-- @env - environment table containing title objects, etc., generated with p.getEnvironment&lt;br /&gt;
	-- &lt;br /&gt;
	-- Messages:&lt;br /&gt;
	-- &#039;edit-link-display&#039; --&amp;gt; &#039;edit&#039;&lt;br /&gt;
	-- &#039;history-link-display&#039; --&amp;gt; &#039;history&#039;&lt;br /&gt;
	-- &#039;transcluded-from-blurb&#039; --&amp;gt; &lt;br /&gt;
	-- &#039;The above [[w:Wikipedia:Template documentation|documentation]] &lt;br /&gt;
	-- is [[w:Wikipedia:Transclusion|transcluded]] from $1.&#039;&lt;br /&gt;
	-- &#039;module-preload&#039; --&amp;gt; &#039;Template:Documentation/preload-module-doc&#039;&lt;br /&gt;
	-- &#039;create-link-display&#039; --&amp;gt; &#039;create&#039;&lt;br /&gt;
	-- &#039;create-module-doc-blurb&#039; --&amp;gt;&lt;br /&gt;
	-- &#039;You might want to $1 a documentation page for this [[w:Wikipedia:Lua|Scribunto module]].&#039;&lt;br /&gt;
	--]=]&lt;br /&gt;
	local docTitle = env.docTitle&lt;br /&gt;
	if not docTitle or args.content then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	local ret&lt;br /&gt;
	if docTitle.exists then&lt;br /&gt;
		-- /doc exists; link to it.&lt;br /&gt;
		local docLink = makeWikilink(docTitle.prefixedText)&lt;br /&gt;
		local editUrl = docTitle:fullUrl{action = &#039;edit&#039;}&lt;br /&gt;
		local editDisplay = i18n[&#039;edit-link-display&#039;]&lt;br /&gt;
		local editLink = makeUrlLink(editUrl, editDisplay)&lt;br /&gt;
		local historyUrl = docTitle:fullUrl{action = &#039;history&#039;}&lt;br /&gt;
		local historyDisplay = i18n[&#039;history-link-display&#039;]&lt;br /&gt;
		local historyLink = makeUrlLink(historyUrl, historyDisplay)&lt;br /&gt;
		ret = message(&#039;transcluded-from-blurb&#039;, {docLink})&lt;br /&gt;
			.. &#039; &#039;&lt;br /&gt;
			.. makeToolbar(editLink, historyLink)&lt;br /&gt;
			.. &#039;&amp;lt;br /&amp;gt;&#039;&lt;br /&gt;
	elseif env.subjectSpace == 828 then&lt;br /&gt;
		-- /doc does not exist; ask to create it.&lt;br /&gt;
		local createUrl = docTitle:fullUrl{action = &#039;edit&#039;, preload = message(&#039;module-preload&#039;)}&lt;br /&gt;
		local createDisplay = i18n[&#039;create-link-display&#039;]&lt;br /&gt;
		local createLink = makeUrlLink(createUrl, createDisplay)&lt;br /&gt;
		ret = message(&#039;create-module-doc-blurb&#039;, {createLink})&lt;br /&gt;
			.. &#039;&amp;lt;br /&amp;gt;&#039;&lt;br /&gt;
	end&lt;br /&gt;
	return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.makeExperimentBlurb(args, env)&lt;br /&gt;
	--[[&lt;br /&gt;
	-- Renders the text &amp;quot;Editors can experiment in this template&#039;s sandbox (edit | diff) and testcases (edit) pages.&amp;quot;&lt;br /&gt;
	-- @args - a table of arguments passed by the user&lt;br /&gt;
	-- @env - environment table containing title objects, etc., generated with p.getEnvironment&lt;br /&gt;
	-- &lt;br /&gt;
	-- Messages:&lt;br /&gt;
	-- &#039;sandbox-link-display&#039; --&amp;gt; &#039;sandbox&#039;&lt;br /&gt;
	-- &#039;sandbox-edit-link-display&#039; --&amp;gt; &#039;edit&#039;&lt;br /&gt;
	-- &#039;compare-link-display&#039; --&amp;gt; &#039;diff&#039;&lt;br /&gt;
	-- &#039;module-sandbox-preload&#039; --&amp;gt; &#039;Template:Documentation/preload-module-sandbox&#039;&lt;br /&gt;
	-- &#039;template-sandbox-preload&#039; --&amp;gt; &#039;Template:Documentation/preload-sandbox&#039;&lt;br /&gt;
	-- &#039;sandbox-create-link-display&#039; --&amp;gt; &#039;create&#039;&lt;br /&gt;
	-- &#039;mirror-edit-summary&#039; --&amp;gt; &#039;Create sandbox version of $1&#039;&lt;br /&gt;
	-- &#039;mirror-link-display&#039; --&amp;gt; &#039;mirror&#039;&lt;br /&gt;
	-- &#039;mirror-link-preload&#039; --&amp;gt; &#039;Template:Documentation/mirror&#039;&lt;br /&gt;
	-- &#039;sandbox-link-display&#039; --&amp;gt; &#039;sandbox&#039;&lt;br /&gt;
	-- &#039;testcases-link-display&#039; --&amp;gt; &#039;testcases&#039;&lt;br /&gt;
	-- &#039;testcases-edit-link-display&#039;--&amp;gt; &#039;edit&#039;&lt;br /&gt;
	-- &#039;template-sandbox-preload&#039; --&amp;gt; &#039;Template:Documentation/preload-sandbox&#039;&lt;br /&gt;
	-- &#039;testcases-create-link-display&#039; --&amp;gt; &#039;create&#039;&lt;br /&gt;
	-- &#039;testcases-link-display&#039; --&amp;gt; &#039;testcases&#039;&lt;br /&gt;
	-- &#039;testcases-edit-link-display&#039; --&amp;gt; &#039;edit&#039;&lt;br /&gt;
	-- &#039;module-testcases-preload&#039; --&amp;gt; &#039;Template:Documentation/preload-module-testcases&#039;&lt;br /&gt;
	-- &#039;template-testcases-preload&#039; --&amp;gt; &#039;Template:Documentation/preload-testcases&#039;&lt;br /&gt;
	-- &#039;experiment-blurb-module&#039; --&amp;gt; &#039;Editors can experiment in this module&#039;s $1 and $2 pages.&#039;&lt;br /&gt;
	-- &#039;experiment-blurb-template&#039; --&amp;gt; &#039;Editors can experiment in this template&#039;s $1 and $2 pages.&#039;&lt;br /&gt;
	--]]&lt;br /&gt;
	local subjectSpace = env.subjectSpace&lt;br /&gt;
	local templateTitle = env.templateTitle&lt;br /&gt;
	local sandboxTitle = env.sandboxTitle&lt;br /&gt;
	local testcasesTitle = env.testcasesTitle&lt;br /&gt;
	local templatePage = templateTitle.prefixedText&lt;br /&gt;
	if not subjectSpace or not templateTitle or not sandboxTitle or not testcasesTitle then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	-- Make links.&lt;br /&gt;
	local sandboxLinks, testcasesLinks&lt;br /&gt;
	if sandboxTitle.exists then&lt;br /&gt;
		local sandboxPage = sandboxTitle.prefixedText&lt;br /&gt;
		local sandboxDisplay = message(&#039;sandbox-link-display&#039;)&lt;br /&gt;
		local sandboxLink = makeWikilink(sandboxPage, sandboxDisplay)&lt;br /&gt;
		local sandboxEditUrl = sandboxTitle:fullUrl{action = &#039;edit&#039;}&lt;br /&gt;
		local sandboxEditDisplay = message(&#039;sandbox-edit-link-display&#039;)&lt;br /&gt;
		local sandboxEditLink = makeUrlLink(sandboxEditUrl, sandboxEditDisplay)&lt;br /&gt;
		local compareUrl = env.compareUrl&lt;br /&gt;
		local compareLink&lt;br /&gt;
		if compareUrl then&lt;br /&gt;
			local compareDisplay = message(&#039;compare-link-display&#039;)&lt;br /&gt;
			compareLink = makeUrlLink(compareUrl, compareDisplay)&lt;br /&gt;
		end&lt;br /&gt;
		sandboxLinks = sandboxLink .. &#039; &#039; .. makeToolbar(sandboxEditLink, compareLink)&lt;br /&gt;
	else&lt;br /&gt;
		local sandboxPreload&lt;br /&gt;
		if subjectSpace == 828 then&lt;br /&gt;
			sandboxPreload = message(&#039;module-sandbox-preload&#039;)&lt;br /&gt;
		else&lt;br /&gt;
			sandboxPreload = message(&#039;template-sandbox-preload&#039;)&lt;br /&gt;
		end&lt;br /&gt;
		local sandboxCreateUrl = sandboxTitle:fullUrl{action = &#039;edit&#039;, preload = sandboxPreload}&lt;br /&gt;
		local sandboxCreateDisplay = message(&#039;sandbox-create-link-display&#039;)&lt;br /&gt;
		local sandboxCreateLink = makeUrlLink(sandboxCreateUrl, sandboxCreateDisplay)&lt;br /&gt;
		local mirrorSummary = message(&#039;mirror-edit-summary&#039;, {makeWikilink(templatePage)})&lt;br /&gt;
		local mirrorPreload = message(&#039;mirror-link-preload&#039;)&lt;br /&gt;
		local mirrorUrl = sandboxTitle:fullUrl{action = &#039;edit&#039;, preload = mirrorPreload, summary = mirrorSummary}&lt;br /&gt;
		local mirrorDisplay = message(&#039;mirror-link-display&#039;)&lt;br /&gt;
		local mirrorLink = makeUrlLink(mirrorUrl, mirrorDisplay)&lt;br /&gt;
		sandboxLinks = message(&#039;sandbox-link-display&#039;) .. &#039; &#039; .. makeToolbar(sandboxCreateLink, mirrorLink)&lt;br /&gt;
	end&lt;br /&gt;
	if testcasesTitle.exists then&lt;br /&gt;
		local testcasesPage = testcasesTitle.prefixedText&lt;br /&gt;
		local testcasesDisplay = message(&#039;testcases-link-display&#039;)&lt;br /&gt;
		local testcasesLink = makeWikilink(testcasesPage, testcasesDisplay)&lt;br /&gt;
		local testcasesEditUrl = testcasesTitle:fullUrl{action = &#039;edit&#039;}&lt;br /&gt;
		local testcasesEditDisplay = message(&#039;testcases-edit-link-display&#039;)&lt;br /&gt;
		local testcasesEditLink = makeUrlLink(testcasesEditUrl, testcasesEditDisplay)&lt;br /&gt;
		testcasesLinks = testcasesLink .. &#039; &#039; .. makeToolbar(testcasesEditLink)&lt;br /&gt;
	else&lt;br /&gt;
		local testcasesPreload&lt;br /&gt;
		if subjectSpace == 828 then&lt;br /&gt;
			testcasesPreload = message(&#039;module-testcases-preload&#039;)&lt;br /&gt;
		else&lt;br /&gt;
			testcasesPreload = message(&#039;template-testcases-preload&#039;)&lt;br /&gt;
		end&lt;br /&gt;
		local testcasesCreateUrl = testcasesTitle:fullUrl{action = &#039;edit&#039;, preload = testcasesPreload}&lt;br /&gt;
		local testcasesCreateDisplay = message(&#039;testcases-create-link-display&#039;)&lt;br /&gt;
		local testcasesCreateLink = makeUrlLink(testcasesCreateUrl, testcasesCreateDisplay)&lt;br /&gt;
		testcasesLinks = message(&#039;testcases-link-display&#039;) .. &#039; &#039; .. makeToolbar(testcasesCreateLink)&lt;br /&gt;
	end&lt;br /&gt;
	local messageName&lt;br /&gt;
	if subjectSpace == 828 then&lt;br /&gt;
		messageName = &#039;experiment-blurb-module&#039;&lt;br /&gt;
	else&lt;br /&gt;
		messageName = &#039;experiment-blurb-template&#039;&lt;br /&gt;
	end&lt;br /&gt;
	return message(messageName, {sandboxLinks, testcasesLinks})&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.makeCategoriesBlurb(args, env)&lt;br /&gt;
	--[[&lt;br /&gt;
	-- Generates the text &amp;quot;Please add categories to the /doc subpage.&amp;quot;&lt;br /&gt;
	-- @args - a table of arguments passed by the user&lt;br /&gt;
	-- @env - environment table containing title objects, etc., generated with p.getEnvironment&lt;br /&gt;
	-- Messages:&lt;br /&gt;
	-- &#039;doc-link-display&#039; --&amp;gt; &#039;/doc&#039;&lt;br /&gt;
	-- &#039;add-categories-blurb&#039; --&amp;gt; &#039;Please add categories to the $1 subpage.&#039;&lt;br /&gt;
	--]]&lt;br /&gt;
	local docTitle = env.docTitle&lt;br /&gt;
	if not docTitle then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	local docPathLink = makeWikilink(docTitle.prefixedText, message(&#039;doc-link-display&#039;))&lt;br /&gt;
	return message(&#039;add-categories-blurb&#039;, {docPathLink})&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.makeSubpagesBlurb(args, env)&lt;br /&gt;
	--[[&lt;br /&gt;
	-- Generates the &amp;quot;Subpages of this template&amp;quot; link.&lt;br /&gt;
	-- @args - a table of arguments passed by the user&lt;br /&gt;
	-- @env - environment table containing title objects, etc., generated with p.getEnvironment&lt;br /&gt;
	&lt;br /&gt;
	-- Messages:&lt;br /&gt;
	-- &#039;template-pagetype&#039; --&amp;gt; &#039;template&#039;&lt;br /&gt;
	-- &#039;module-pagetype&#039; --&amp;gt; &#039;module&#039;&lt;br /&gt;
	-- &#039;default-pagetype&#039; --&amp;gt; &#039;page&#039;&lt;br /&gt;
	-- &#039;subpages-link-display&#039; --&amp;gt; &#039;Subpages of this $1&#039;&lt;br /&gt;
	--]]&lt;br /&gt;
	local subjectSpace = env.subjectSpace&lt;br /&gt;
	local templateTitle = env.templateTitle&lt;br /&gt;
	if not subjectSpace or not templateTitle then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	local pagetype&lt;br /&gt;
	if subjectSpace == 10 then&lt;br /&gt;
		pagetype = message(&#039;template-pagetype&#039;)&lt;br /&gt;
	elseif subjectSpace == 828 then&lt;br /&gt;
		pagetype = message(&#039;module-pagetype&#039;)&lt;br /&gt;
	else&lt;br /&gt;
		pagetype = message(&#039;default-pagetype&#039;)&lt;br /&gt;
	end&lt;br /&gt;
	local subpagesLink = makeWikilink(&lt;br /&gt;
		&#039;Special:PrefixIndex/&#039; .. templateTitle.prefixedText .. &#039;/&#039;,&lt;br /&gt;
		message(&#039;subpages-link-display&#039;, {pagetype})&lt;br /&gt;
	)&lt;br /&gt;
	return message(&#039;subpages-blurb&#039;, {subpagesLink})&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.makePrintBlurb(args, env)&lt;br /&gt;
	--[=[&lt;br /&gt;
	-- Generates the blurb displayed when there is a print version of the template available.&lt;br /&gt;
	-- @args - a table of arguments passed by the user&lt;br /&gt;
	-- @env - environment table containing title objects, etc., generated with p.getEnvironment&lt;br /&gt;
	--&lt;br /&gt;
	-- Messages:&lt;br /&gt;
	-- &#039;print-link-display&#039; --&amp;gt; &#039;/Print&#039;&lt;br /&gt;
	-- &#039;print-blurb&#039; --&amp;gt; &#039;A [[Help:Books/for experts#Improving the book layout|print version]]&#039;&lt;br /&gt;
	--		.. &#039; of this template exists at $1.&#039;&lt;br /&gt;
	--		.. &#039; If you make a change to this template, please update the print version as well.&#039;&lt;br /&gt;
	-- &#039;display-print-category&#039; --&amp;gt; true&lt;br /&gt;
	-- &#039;print-category&#039; --&amp;gt; &#039;Templates with print versions&#039;&lt;br /&gt;
	--]=]&lt;br /&gt;
	local printTitle = env.printTitle&lt;br /&gt;
	if not printTitle then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	local ret&lt;br /&gt;
	if printTitle.exists then&lt;br /&gt;
		local printLink = makeWikilink(printTitle.prefixedText, message(&#039;print-link-display&#039;))&lt;br /&gt;
		ret = message(&#039;print-blurb&#039;, {printLink})&lt;br /&gt;
		local displayPrintCategory = message(&#039;display-print-category&#039;, nil, &#039;boolean&#039;)&lt;br /&gt;
		if displayPrintCategory then&lt;br /&gt;
			ret = ret .. makeCategoryLink(message(&#039;print-category&#039;))&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------&lt;br /&gt;
-- Tracking categories&lt;br /&gt;
----------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function p.addTrackingCategories(env)&lt;br /&gt;
	--[[&lt;br /&gt;
	-- Check if {{documentation}} is transcluded on a /doc or /testcases page.&lt;br /&gt;
	-- @env - environment table containing title objects, etc., generated with p.getEnvironment&lt;br /&gt;
	&lt;br /&gt;
	-- Messages:&lt;br /&gt;
	-- &#039;display-strange-usage-category&#039; --&amp;gt; true&lt;br /&gt;
	-- &#039;doc-subpage&#039; --&amp;gt; &#039;doc&#039;&lt;br /&gt;
	-- &#039;testcases-subpage&#039; --&amp;gt; &#039;testcases&#039;&lt;br /&gt;
	-- &#039;strange-usage-category&#039; --&amp;gt; &#039;Wikipedia pages with strange ((documentation)) usage&#039;&lt;br /&gt;
	-- &lt;br /&gt;
	-- /testcases pages in the module namespace are not categorised, as they may have&lt;br /&gt;
	-- {{documentation}} transcluded automatically.&lt;br /&gt;
	--]]&lt;br /&gt;
	local title = env.title&lt;br /&gt;
	local subjectSpace = env.subjectSpace&lt;br /&gt;
	if not title or not subjectSpace then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	local subpage = title.subpageText&lt;br /&gt;
	local ret = &#039;&#039;&lt;br /&gt;
	if message(&#039;display-strange-usage-category&#039;, nil, &#039;boolean&#039;)&lt;br /&gt;
		and (&lt;br /&gt;
			subpage == message(&#039;doc-subpage&#039;)&lt;br /&gt;
			or subjectSpace ~= 828 and subpage == message(&#039;testcases-subpage&#039;)&lt;br /&gt;
		)&lt;br /&gt;
	then&lt;br /&gt;
		ret = ret .. makeCategoryLink(message(&#039;strange-usage-category&#039;))&lt;br /&gt;
	end&lt;br /&gt;
	return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Antidote</name></author>
	</entry>
	<entry>
		<id>https://wiki.antidotez.ru/mediawiki/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Sandbox_other&amp;diff=418</id>
		<title>Шаблон:Sandbox other</title>
		<link rel="alternate" type="text/html" href="https://wiki.antidotez.ru/mediawiki/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Sandbox_other&amp;diff=418"/>
		<updated>2026-04-19T18:43:49Z</updated>

		<summary type="html">&lt;p&gt;Antidote: 1 версия импортирована&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;onlyinclude&amp;gt;{{#switch:{{SUBPAGENAME}}|sandbox|doc={{{1|}}}|#default={{{2|}}}}}&amp;lt;/onlyinclude&amp;gt;&lt;br /&gt;
{{Documentation}}&lt;br /&gt;
&amp;lt;!-- Add categories to the /doc subpage and interwikis in Wikidata, not here! --&amp;gt;&lt;/div&gt;</summary>
		<author><name>Antidote</name></author>
	</entry>
	<entry>
		<id>https://wiki.antidotez.ru/mediawiki/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Navbar/en&amp;diff=416</id>
		<title>Шаблон:Navbar/en</title>
		<link rel="alternate" type="text/html" href="https://wiki.antidotez.ru/mediawiki/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Navbar/en&amp;diff=416"/>
		<updated>2026-04-19T18:43:49Z</updated>

		<summary type="html">&lt;p&gt;Antidote: 1 версия импортирована&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&amp;lt;languages/&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&amp;lt;templatestyles src=&amp;quot;Module:Navbar/styles.css&amp;quot;/&amp;gt;&amp;lt;span class=&amp;quot;noprint plainlinks navbar&amp;quot; style=&amp;quot;{{{style|}}}&amp;quot;&amp;gt;&amp;lt;small&amp;gt;&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;{{#if:{{{mini|}}}{{{plain|}}}|&amp;lt;!--nothing--&amp;gt;|&amp;lt;!--else:&lt;br /&gt;
--&amp;gt;&amp;lt;span style=&amp;quot;{{{fontstyle|}}}&amp;quot;&amp;gt;{{#if:{{{text|}}}|{{{text}}}|This box:}} &amp;lt;/span&amp;gt;}}&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;{{#if:{{{brackets|}}}|&amp;lt;span style=&amp;quot;{{{fontstyle|}}}&amp;quot;&amp;gt;&amp;amp;#91;&amp;lt;/span&amp;gt;}}&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&amp;lt;span style=&amp;quot;white-space:nowrap;word-spacing:-.12em;&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;[[{{transclude|{{{1}}}}}|&amp;lt;span style=&amp;quot;{{{fontstyle|}}}&amp;quot; title=&amp;quot;View this template&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;{{#if:{{{mini|}}}|v|view}}&amp;lt;/span&amp;gt;]]&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&amp;lt;span style=&amp;quot;{{{fontstyle|}}}&amp;quot;&amp;gt;&amp;amp;#32;&amp;lt;b&amp;gt;&amp;amp;middot;&amp;lt;/b&amp;gt;&amp;amp;#32;&amp;lt;/span&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;[{{fullurl:{{&amp;lt;noinclude&amp;gt;&amp;lt;nowiki/&amp;gt;&amp;lt;/noinclude&amp;gt;TALKPAGENAME:{{transclude|{{{1}}}}}}}}} &amp;lt;span style=&amp;quot;{{{fontstyle|}}}&amp;quot; title=&amp;quot;Discuss this template&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;{{#if:{{{mini|}}}|d|talk}}&amp;lt;/span&amp;gt;]&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;{{#if:{{{noedit|}}}|&amp;lt;!--nothing--&amp;gt;|&amp;lt;!--else:&lt;br /&gt;
--&amp;gt;&amp;lt;span style=&amp;quot;{{{fontstyle|}}}&amp;quot;&amp;gt;&amp;amp;#32;&amp;lt;b&amp;gt;&amp;amp;middot;&amp;lt;/b&amp;gt;&amp;amp;#32;&amp;lt;/span&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;[{{fullurl:{{transclude|{{{1}}}}}|action=edit}} &amp;lt;span style=&amp;quot;{{{fontstyle|}}}&amp;quot; title=&amp;quot;Edit this template&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;{{#if:{{{mini|}}}|e|edit}}&amp;lt;/span&amp;gt;]}}&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;{{#if:{{{brackets|}}}|&amp;lt;span style=&amp;quot;{{{fontstyle|}}}&amp;quot;&amp;gt;&amp;amp;#93;&amp;lt;/span&amp;gt;}}&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&amp;lt;/small&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{Documentation|content=&lt;br /&gt;
{{Uses TemplateStyles|Module:Navbar/styles.css}}&lt;br /&gt;
== Usage ==&lt;br /&gt;
&lt;br /&gt;
=== General ===&lt;br /&gt;
&lt;br /&gt;
When one of the following examples is placed inside a given [[Special:MyLanguage/Help:Templates|template]], it adds navbar navigational functionality:&lt;br /&gt;
&lt;br /&gt;
: {{tlx|Navbar|Navbar|mini{{=}}1}}&lt;br /&gt;
: {{tlx|Navbar|Navbar|plain{{=}}1}}&lt;br /&gt;
: {{tlx|Navbar|Navbar|fontstyle{{=}}color:green}}&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{subst:PAGENAME}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; will be substituted with the template&#039;s name when parsed by the servers.&lt;br /&gt;
For example, {{tlx|Navbar|navbar/doc}} gives:&lt;br /&gt;
&lt;br /&gt;
{{Navbar|navbar/doc}}&lt;br /&gt;
&lt;br /&gt;
=== Font-size ===&lt;br /&gt;
Font-size is &amp;lt;code&amp;gt;88%&amp;lt;/code&amp;gt; when used in a navbar, and &amp;lt;code&amp;gt;100%&amp;lt;/code&amp;gt; when nested in a navbox.&lt;br /&gt;
In the navbar, the weight is &amp;quot;&amp;lt;code&amp;gt;normal&amp;lt;/code&amp;gt;&amp;quot;; when nested in navbox, it takes on the outer setting.&lt;br /&gt;
The middot is bold.&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
=== Required parameters ===&lt;br /&gt;
* {{tlx|Navbar|&#039;&#039;template name&#039;&#039;}} — the template name is required.&lt;br /&gt;
&lt;br /&gt;
=== Optional parameters ===&lt;br /&gt;
{{(}}{{!}} class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Options&lt;br /&gt;
! Parameters&lt;br /&gt;
! Produces...&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} Basic&lt;br /&gt;
{{!}} {{tlx|Navbar|2=&#039;&#039;template name&#039;&#039;}}&lt;br /&gt;
{{!}} {{navbar|navbar/doc}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} Different text&lt;br /&gt;
{{!}} {{tlx|Navbar|2=&#039;&#039;template name&#039;&#039;|3=text{{=}}This template:}}&lt;br /&gt;
{{!}} {{navbar|navbar/doc|text=This template:}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} Without &amp;quot;This box:&amp;quot; text&lt;br /&gt;
{{!}} {{tlx|Navbar|2=&#039;&#039;template name&#039;&#039;|3=plain{{=}}1}}&lt;br /&gt;
{{!}} {{navbar|navbar/doc|plain=1}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} Short version&lt;br /&gt;
{{!}} {{tlx|Navbar|2=&#039;&#039;template name&#039;&#039;|3=mini{{=}}1}}&lt;br /&gt;
{{!}} {{navbar|navbar/doc|mini=1}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} With a color option&lt;br /&gt;
{{!}} {{tlx|Navbar|2=&#039;&#039;template name&#039;&#039;|3=fontstyle{{=}}color:green}}&lt;br /&gt;
{{!}} {{navbar|navbar/doc|fontstyle=color:green}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} With brackets&lt;br /&gt;
{{!}} {{tlx|Navbar|2=&#039;&#039;template name&#039;&#039;|3=brackets{{=}}1}}&lt;br /&gt;
{{!}} {{navbar|navbar/doc|brackets=1}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} Custom namespace&lt;br /&gt;
{{!}} {{tlx|Navbar|2=&#039;&#039;namespaced template name&#039;&#039;|3=plain{{=}}1|4=brackets{{=}}1}}&lt;br /&gt;
{{!}} {{navbar|User:Example|plain=1|brackets=1}}&lt;br /&gt;
{{!}}{{)}}&lt;br /&gt;
&lt;br /&gt;
== TemplateData ==&lt;br /&gt;
{{Navbar/doc}}&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
Navbar is contained within a {{tag|div}} in order to accommodate a horizontal unnumbered list.&lt;br /&gt;
This means it cannot be placed inside a {{tag|span}} or other inline element, because Tidy will &#039;fix&#039; situations where it finds block elements inside inline elements.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--- PLEASE ADD METADATA TO THE &amp;lt;includeonly&amp;gt; SECTION HERE ---&amp;gt;&lt;br /&gt;
&amp;lt;includeonly&amp;gt;&lt;br /&gt;
[[Category:Formatting templates{{#translation:}}]]&lt;br /&gt;
&amp;lt;/includeonly&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Antidote</name></author>
	</entry>
	<entry>
		<id>https://wiki.antidotez.ru/mediawiki/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Navbar&amp;diff=414</id>
		<title>Шаблон:Navbar</title>
		<link rel="alternate" type="text/html" href="https://wiki.antidotez.ru/mediawiki/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Navbar&amp;diff=414"/>
		<updated>2026-04-19T18:43:49Z</updated>

		<summary type="html">&lt;p&gt;Antidote: 1 версия импортирована&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&amp;lt;languages/&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&amp;lt;templatestyles src=&amp;quot;Module:Navbar/styles.css&amp;quot;/&amp;gt;&amp;lt;span class=&amp;quot;noprint plainlinks navbar&amp;quot; style=&amp;quot;{{{style|}}}&amp;quot;&amp;gt;&amp;lt;small&amp;gt;&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;{{#if:{{{mini|}}}{{{plain|}}}|&amp;lt;!--nothing--&amp;gt;|&amp;lt;!--else:&lt;br /&gt;
--&amp;gt;&amp;lt;span style=&amp;quot;{{{fontstyle|}}}&amp;quot;&amp;gt;{{#if:{{{text|}}}|{{{text}}}|&amp;lt;translate&amp;gt;&amp;lt;!--T:1--&amp;gt; This box:&amp;lt;/translate&amp;gt;}} &amp;lt;/span&amp;gt;}}&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;{{#if:{{{brackets|}}}|&amp;lt;span style=&amp;quot;{{{fontstyle|}}}&amp;quot;&amp;gt;&amp;amp;#91;&amp;lt;/span&amp;gt;}}&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&amp;lt;span style=&amp;quot;white-space:nowrap;word-spacing:-.12em;&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;[[{{transclude|{{{1}}}}}|&amp;lt;span style=&amp;quot;{{{fontstyle|}}}&amp;quot; title=&amp;quot;&amp;lt;translate nowrap&amp;gt;&amp;lt;!--T:2--&amp;gt; View this template&amp;lt;/translate&amp;gt;&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;{{#if:{{{mini|}}}|&amp;lt;translate&amp;gt;&amp;lt;!--T:3--&amp;gt; v&amp;lt;/translate&amp;gt;|&amp;lt;translate&amp;gt;&amp;lt;!--T:4--&amp;gt; view&amp;lt;/translate&amp;gt;}}&amp;lt;/span&amp;gt;]]&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&amp;lt;span style=&amp;quot;{{{fontstyle|}}}&amp;quot;&amp;gt;&amp;amp;#32;&amp;lt;b&amp;gt;&amp;amp;middot;&amp;lt;/b&amp;gt;&amp;amp;#32;&amp;lt;/span&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;[{{fullurl:{{&amp;lt;noinclude&amp;gt;&amp;lt;nowiki/&amp;gt;&amp;lt;/noinclude&amp;gt;TALKPAGENAME:{{transclude|{{{1}}}}}}}}} &amp;lt;span style=&amp;quot;{{{fontstyle|}}}&amp;quot; title=&amp;quot;&amp;lt;translate nowrap&amp;gt;&amp;lt;!--T:9--&amp;gt; Discuss this template&amp;lt;/translate&amp;gt;&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;{{#if:{{{mini|}}}|&amp;lt;translate&amp;gt;&amp;lt;!--T:5--&amp;gt; d&amp;lt;/translate&amp;gt;|&amp;lt;translate&amp;gt;&amp;lt;!--T:6--&amp;gt; talk&amp;lt;/translate&amp;gt;}}&amp;lt;/span&amp;gt;]&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;{{#if:{{{noedit|}}}|&amp;lt;!--nothing--&amp;gt;|&amp;lt;!--else:&lt;br /&gt;
--&amp;gt;&amp;lt;span style=&amp;quot;{{{fontstyle|}}}&amp;quot;&amp;gt;&amp;amp;#32;&amp;lt;b&amp;gt;&amp;amp;middot;&amp;lt;/b&amp;gt;&amp;amp;#32;&amp;lt;/span&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;[{{fullurl:{{transclude|{{{1}}}}}|action=edit}} &amp;lt;span style=&amp;quot;{{{fontstyle|}}}&amp;quot; title=&amp;quot;&amp;lt;translate nowrap&amp;gt;&amp;lt;!--T:10--&amp;gt; Edit this template&amp;lt;/translate&amp;gt;&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;{{#if:{{{mini|}}}|&amp;lt;translate&amp;gt;&amp;lt;!--T:7--&amp;gt; e&amp;lt;/translate&amp;gt;|&amp;lt;translate&amp;gt;&amp;lt;!--T:8--&amp;gt; edit&amp;lt;/translate&amp;gt;}}&amp;lt;/span&amp;gt;]}}&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;{{#if:{{{brackets|}}}|&amp;lt;span style=&amp;quot;{{{fontstyle|}}}&amp;quot;&amp;gt;&amp;amp;#93;&amp;lt;/span&amp;gt;}}&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&amp;lt;/small&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{Documentation|content=&lt;br /&gt;
{{Uses TemplateStyles|Module:Navbar/styles.css}}&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
== Usage == &amp;lt;!--T:11--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== General === &amp;lt;!--T:12--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:13--&amp;gt;&lt;br /&gt;
When one of the following examples is placed inside a given [[&amp;lt;tvar name=1&amp;gt;Special:MyLanguage/Help:Templates&amp;lt;/tvar&amp;gt;|template]], it adds navbar navigational functionality:&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
: {{tlx|Navbar|Navbar|mini{{=}}1}}&lt;br /&gt;
: {{tlx|Navbar|Navbar|plain{{=}}1}}&lt;br /&gt;
: {{tlx|Navbar|Navbar|fontstyle{{=}}color:green}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:14--&amp;gt; The &amp;lt;tvar name=1&amp;gt;&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{subst:PAGENAME}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/tvar&amp;gt; will be substituted with the template&#039;s name when parsed by the servers.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:15--&amp;gt; For example, &amp;lt;tvar name=1&amp;gt;{{tlx|Navbar|navbar/doc}}&amp;lt;/tvar&amp;gt; gives:&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Navbar|navbar/doc}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
=== Font-size === &amp;lt;!--T:16--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:17--&amp;gt; Font-size is &amp;lt;tvar name=1&amp;gt;&amp;lt;code&amp;gt;88%&amp;lt;/code&amp;gt;&amp;lt;/tvar&amp;gt; when used in a navbar, and &amp;lt;tvar name=2&amp;gt;&amp;lt;code&amp;gt;100%&amp;lt;/code&amp;gt;&amp;lt;/tvar&amp;gt; when nested in a navbox.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:18--&amp;gt; In the navbar, the weight is &amp;quot;&amp;lt;tvar name=1&amp;gt;&amp;lt;code&amp;gt;normal&amp;lt;/code&amp;gt;&amp;lt;/tvar&amp;gt;&amp;quot;; when nested in navbox, it takes on the outer setting.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:19--&amp;gt; The middot is bold.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
== Examples == &amp;lt;!--T:20--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Required parameters === &amp;lt;!--T:21--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
* {{tlx|Navbar|&#039;&#039;&amp;lt;translate&amp;gt;&amp;lt;!--T:22--&amp;gt; template name&amp;lt;/translate&amp;gt;&#039;&#039;}} — &amp;lt;translate&amp;gt;&amp;lt;!--T:23--&amp;gt; the template name is required.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
=== Optional parameters === &amp;lt;!--T:24--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
{{(}}{{!}} class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! &amp;lt;translate&amp;gt;&amp;lt;!--T:25--&amp;gt; Options&amp;lt;/translate&amp;gt;&lt;br /&gt;
! &amp;lt;translate&amp;gt;&amp;lt;!--T:26--&amp;gt; Parameters&amp;lt;/translate&amp;gt;&lt;br /&gt;
! &amp;lt;translate&amp;gt;&amp;lt;!--T:27--&amp;gt; Produces...&amp;lt;/translate&amp;gt;&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} &amp;lt;translate&amp;gt;&amp;lt;!--T:28--&amp;gt; Basic&amp;lt;/translate&amp;gt;&lt;br /&gt;
{{!}} {{tlx|Navbar|2=&#039;&#039;&amp;lt;translate&amp;gt;&amp;lt;!--T:29--&amp;gt; template name&amp;lt;/translate&amp;gt;&#039;&#039;}}&lt;br /&gt;
{{!}} {{navbar|navbar/doc}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} &amp;lt;translate&amp;gt;&amp;lt;!--T:30--&amp;gt; Different text&amp;lt;/translate&amp;gt;&lt;br /&gt;
{{!}} {{tlx|Navbar|2=&#039;&#039;&amp;lt;translate&amp;gt;&amp;lt;!--T:31--&amp;gt; template name&amp;lt;/translate&amp;gt;&#039;&#039;|3=text{{=}}&amp;lt;translate&amp;gt;&amp;lt;!--T:32--&amp;gt; This template:&amp;lt;/translate&amp;gt;}}&lt;br /&gt;
{{!}} {{navbar|navbar/doc|text=&amp;lt;translate&amp;gt;&amp;lt;!--T:33--&amp;gt; This template:&amp;lt;/translate&amp;gt;}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} &amp;lt;translate&amp;gt;&amp;lt;!--T:34--&amp;gt; Without &amp;quot;This box:&amp;quot; text&amp;lt;/translate&amp;gt;&lt;br /&gt;
{{!}} {{tlx|Navbar|2=&#039;&#039;&amp;lt;translate&amp;gt;&amp;lt;!--T:35--&amp;gt; template name&amp;lt;/translate&amp;gt;&#039;&#039;|3=plain{{=}}1}}&lt;br /&gt;
{{!}} {{navbar|navbar/doc|plain=1}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} &amp;lt;translate&amp;gt;&amp;lt;!--T:36--&amp;gt; Short version&amp;lt;/translate&amp;gt;&lt;br /&gt;
{{!}} {{tlx|Navbar|2=&#039;&#039;&amp;lt;translate&amp;gt;&amp;lt;!--T:37--&amp;gt; template name&amp;lt;/translate&amp;gt;&#039;&#039;|3=mini{{=}}1}}&lt;br /&gt;
{{!}} {{navbar|navbar/doc|mini=1}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} &amp;lt;translate&amp;gt;&amp;lt;!--T:38--&amp;gt; With a color option&amp;lt;/translate&amp;gt;&lt;br /&gt;
{{!}} {{tlx|Navbar|2=&#039;&#039;&amp;lt;translate&amp;gt;&amp;lt;!--T:39--&amp;gt; template name&amp;lt;/translate&amp;gt;&#039;&#039;|3=fontstyle{{=}}color:green}}&lt;br /&gt;
{{!}} {{navbar|navbar/doc|fontstyle=color:green}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} &amp;lt;translate&amp;gt;&amp;lt;!--T:40--&amp;gt; With brackets&amp;lt;/translate&amp;gt;&lt;br /&gt;
{{!}} {{tlx|Navbar|2=&#039;&#039;&amp;lt;translate&amp;gt;&amp;lt;!--T:41--&amp;gt; template name&amp;lt;/translate&amp;gt;&#039;&#039;|3=brackets{{=}}1}}&lt;br /&gt;
{{!}} {{navbar|navbar/doc|brackets=1}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} &amp;lt;translate&amp;gt;&amp;lt;!--T:45--&amp;gt; Custom namespace&amp;lt;/translate&amp;gt;&lt;br /&gt;
{{!}} {{tlx|Navbar|2=&#039;&#039;&amp;lt;translate&amp;gt;&amp;lt;!--T:46--&amp;gt; namespaced template name&amp;lt;/translate&amp;gt;&#039;&#039;|3=plain{{=}}1|4=brackets{{=}}1}}&lt;br /&gt;
{{!}} {{navbar|User:Example|plain=1|brackets=1}}&lt;br /&gt;
{{!}}{{)}}&lt;br /&gt;
&lt;br /&gt;
== TemplateData ==&lt;br /&gt;
{{Navbar/doc}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
== Notes == &amp;lt;!--T:42--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:43--&amp;gt; Navbar is contained within a &amp;lt;tvar name=1&amp;gt;{{tag|div}}&amp;lt;/tvar&amp;gt; in order to accommodate a horizontal unnumbered list.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:44--&amp;gt; This means it cannot be placed inside a &amp;lt;tvar name=1&amp;gt;{{tag|span}}&amp;lt;/tvar&amp;gt; or other inline element, because Tidy will &#039;fix&#039; situations where it finds block elements inside inline elements.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--- PLEASE ADD METADATA TO THE &amp;lt;includeonly&amp;gt; SECTION HERE ---&amp;gt;&lt;br /&gt;
&amp;lt;includeonly&amp;gt;&lt;br /&gt;
[[Category:Formatting templates{{#translation:}}]]&lt;br /&gt;
&amp;lt;/includeonly&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Antidote</name></author>
	</entry>
	<entry>
		<id>https://wiki.antidotez.ru/mediawiki/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Transclude&amp;diff=412</id>
		<title>Шаблон:Transclude</title>
		<link rel="alternate" type="text/html" href="https://wiki.antidotez.ru/mediawiki/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Transclude&amp;diff=412"/>
		<updated>2026-04-19T18:43:48Z</updated>

		<summary type="html">&lt;p&gt;Antidote: 1 версия импортирована&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;onlyinclude&amp;gt;{{#switch: {{NAMESPACE: {{{1}}} }}&lt;br /&gt;
 |#default = {{FULLPAGENAME: {{{1}}} }} &amp;lt;!-- leading namespace prefix, eg &amp;quot;Template:Foo&amp;quot; --&amp;gt;&lt;br /&gt;
 |{{ns:0}} = &lt;br /&gt;
    {{#ifeq: {{NAMESPACE: {{{1}}} }} | {{NAMESPACE: Template{{{1}}} }}&lt;br /&gt;
      | Template:{{{1}}}            &amp;lt;!-- no leading colon, eg &amp;quot;Foo&amp;quot; --&amp;gt;&lt;br /&gt;
      | {{PAGENAME: {{{1}}} }}      &amp;lt;!-- leading colon, eg &amp;quot;:Foo&amp;quot;, so we want the article --&amp;gt;&lt;br /&gt;
    }}&lt;br /&gt;
}}&amp;lt;/onlyinclude&amp;gt;&lt;br /&gt;
{{Documentation}}&lt;/div&gt;</summary>
		<author><name>Antidote</name></author>
	</entry>
	<entry>
		<id>https://wiki.antidotez.ru/mediawiki/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Yesno&amp;diff=410</id>
		<title>Шаблон:Yesno</title>
		<link rel="alternate" type="text/html" href="https://wiki.antidotez.ru/mediawiki/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Yesno&amp;diff=410"/>
		<updated>2026-04-19T18:43:48Z</updated>

		<summary type="html">&lt;p&gt;Antidote: 1 версия импортирована&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{&amp;lt;includeonly&amp;gt;safesubst:&amp;lt;/includeonly&amp;gt;#switch: {{&amp;lt;includeonly&amp;gt;safesubst:&amp;lt;/includeonly&amp;gt;lc: {{{1|¬}}} }}&lt;br /&gt;
 |no&lt;br /&gt;
 |n&lt;br /&gt;
 |false&lt;br /&gt;
 |0        = {{{no|&amp;lt;!-- null --&amp;gt;}}}&lt;br /&gt;
 |         = {{{blank|{{{no|&amp;lt;!-- null --&amp;gt;}}}}}}&lt;br /&gt;
 |¬        = {{{¬|}}}&lt;br /&gt;
 |yes&lt;br /&gt;
 |y&lt;br /&gt;
 |true&lt;br /&gt;
 |1        = {{{yes|yes}}}&lt;br /&gt;
 |#default = {{{def|{{{yes|yes}}}}}}&lt;br /&gt;
}}&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{Documentation}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Antidote</name></author>
	</entry>
	<entry>
		<id>https://wiki.antidotez.ru/mediawiki/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:TemplateData_header/en&amp;diff=408</id>
		<title>Шаблон:TemplateData header/en</title>
		<link rel="alternate" type="text/html" href="https://wiki.antidotez.ru/mediawiki/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:TemplateData_header/en&amp;diff=408"/>
		<updated>2026-04-19T18:43:48Z</updated>

		<summary type="html">&lt;p&gt;Antidote: 1 версия импортирована&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&amp;lt;languages/&amp;gt;&lt;br /&gt;
&amp;lt;onlyinclude&amp;gt;{{#switch:&lt;br /&gt;
|=&lt;br /&gt;
&amp;lt;div class=&amp;quot;templatedata-header&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;{{#if:{{yesno|{{{editlinks|}}}}}&amp;lt;!--&lt;br /&gt;
	--&amp;gt;|{{#ifexpr:&amp;lt;!--&lt;br /&gt;
		--&amp;gt;{{#if:{{{docpage|}}}&amp;lt;!--&lt;br /&gt;
			--&amp;gt;|{{#ifeq:{{FULLPAGENAME}}|{{transclude|{{{docpage}}}}}|0|1}}&amp;lt;!--&lt;br /&gt;
			--&amp;gt;|not{{IsDocSubpage|false=0}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;|{{Navbar|{{{docpage|{{BASEPAGENAME}}/doc}}}|plain=1|brackets=1|style=float:{{dir|{{PAGELANGUAGE}}|left|right}};}}&amp;lt;!--&lt;br /&gt;
	--&amp;gt;}}&amp;lt;!--&lt;br /&gt;
--&amp;gt;}}&lt;br /&gt;
{{#if:{{{noheader|}}}|&amp;lt;!--none--&amp;gt;|This is the [[Special:MyLanguage/Help:TemplateData|TemplateData]] documentation for this template used by [[Special:MyLanguage/VisualEditor|VisualEditor]] and other tools.}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;{{{1|{{BASEPAGENAME}}}}}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;includeonly&amp;gt;{{#ifeq:{{SUBPAGENAME}}|sandbox|&amp;lt;!--&lt;br /&gt;
	--&amp;gt;|{{#if:{{IsDocSubpage|false=}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;|[[Category:TemplateData documentation{{#translation:}}]]&amp;lt;!--&lt;br /&gt;
		--&amp;gt;|[[Category:Templates using TemplateData{{#translation:}}]]&amp;lt;!--&lt;br /&gt;
	--&amp;gt;}}&amp;lt;!--&lt;br /&gt;
--&amp;gt;}}&amp;lt;/includeonly&amp;gt;&lt;br /&gt;
| #default=&lt;br /&gt;
  {{#invoke:Template translation|renderTranslatedTemplate|template=Template:TemplateData header|noshift=1|uselang={{#if:{{pagelang}}|{{pagelang}}|{{int:lang}}}}}}&lt;br /&gt;
}}&amp;lt;/onlyinclude&amp;gt;&lt;br /&gt;
{{Documentation|content=&lt;br /&gt;
&lt;br /&gt;
Inserts a brief header for the template data section.&lt;br /&gt;
Adds the /doc subpage to {{ll|Category:TemplateData documentation}} and the template page to {{ll|Category:Templates using TemplateData}}.&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
{{#tag:syntaxhighlight|&lt;br /&gt;
==TemplateData== or ==Parameters== or ==Usage==&lt;br /&gt;
{{((}}TemplateData header{{))}}&lt;br /&gt;
{{^(}}templatedata{{)^}}{&lt;br /&gt;
...&lt;br /&gt;
}{{^(}}/templatedata{{)^}}&lt;br /&gt;
|lang=html&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Use {{tmpl|0=&amp;lt;code&amp;gt;{{((}}TemplateData header{{!}}$1{{))}}&amp;lt;/code&amp;gt;|Template name}} to display a name for the template other than the default, which is {{ll|Help:Magic words#Variables|&amp;lt;nowiki&amp;gt;{{BASEPAGENAME}}&amp;lt;/nowiki&amp;gt;}}.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dl&amp;gt;&amp;lt;dd&amp;gt;&lt;br /&gt;
{{TemplateData header|Template name}}&lt;br /&gt;
&amp;lt;/dd&amp;gt;&amp;lt;/dl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Use &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{TemplateData header|noheader=1}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; to omit the first sentence of the header text.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dl&amp;gt;&amp;lt;dd&amp;gt;&lt;br /&gt;
{{TemplateData header|noheader=1}}&lt;br /&gt;
&amp;lt;/dd&amp;gt;&amp;lt;/dl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Parameters==&lt;br /&gt;
{{TemplateData header/doc}}&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Antidote</name></author>
	</entry>
	<entry>
		<id>https://wiki.antidotez.ru/mediawiki/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:TemplateData_header&amp;diff=406</id>
		<title>Шаблон:TemplateData header</title>
		<link rel="alternate" type="text/html" href="https://wiki.antidotez.ru/mediawiki/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:TemplateData_header&amp;diff=406"/>
		<updated>2026-04-19T18:43:47Z</updated>

		<summary type="html">&lt;p&gt;Antidote: 1 версия импортирована&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&amp;lt;languages/&amp;gt;&lt;br /&gt;
&amp;lt;onlyinclude&amp;gt;{{#switch:&amp;lt;translate&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
|=&lt;br /&gt;
&amp;lt;div class=&amp;quot;templatedata-header&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;{{#if:{{yesno|{{{editlinks|}}}}}&amp;lt;!--&lt;br /&gt;
	--&amp;gt;|{{#ifexpr:&amp;lt;!--&lt;br /&gt;
		--&amp;gt;{{#if:{{{docpage|}}}&amp;lt;!--&lt;br /&gt;
			--&amp;gt;|{{#ifeq:{{FULLPAGENAME}}|{{transclude|{{{docpage}}}}}|0|1}}&amp;lt;!--&lt;br /&gt;
			--&amp;gt;|not{{IsDocSubpage|false=0}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;|{{Navbar|{{{docpage|{{BASEPAGENAME}}/doc}}}|plain=1|brackets=1|style=float:{{dir|{{PAGELANGUAGE}}|left|right}};}}&amp;lt;!--&lt;br /&gt;
	--&amp;gt;}}&amp;lt;!--&lt;br /&gt;
--&amp;gt;}}&lt;br /&gt;
{{#if:{{{noheader|}}}|&amp;lt;!--none--&amp;gt;|&amp;lt;translate&amp;gt;&amp;lt;!--T:1--&amp;gt; This is the [[&amp;lt;tvar name=1&amp;gt;Special:MyLanguage/Help:TemplateData&amp;lt;/tvar&amp;gt;|TemplateData]] documentation for this template used by [[&amp;lt;tvar name=2&amp;gt;Special:MyLanguage/VisualEditor&amp;lt;/tvar&amp;gt;|VisualEditor]] and other tools.&amp;lt;/translate&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;{{{1|{{BASEPAGENAME}}}}}&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;includeonly&amp;gt;{{#ifeq:{{SUBPAGENAME}}|sandbox|&amp;lt;!--&lt;br /&gt;
	--&amp;gt;|{{#if:{{IsDocSubpage|false=}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;|[[Category:TemplateData documentation{{#translation:}}]]&amp;lt;!--&lt;br /&gt;
		--&amp;gt;|[[Category:Templates using TemplateData{{#translation:}}]]&amp;lt;!--&lt;br /&gt;
	--&amp;gt;}}&amp;lt;!--&lt;br /&gt;
--&amp;gt;}}&amp;lt;/includeonly&amp;gt;&lt;br /&gt;
| #default=&lt;br /&gt;
  {{#invoke:Template translation|renderTranslatedTemplate|template=Template:TemplateData header|noshift=1|uselang={{#if:{{pagelang}}|{{pagelang}}|{{int:lang}}}}}}&lt;br /&gt;
}}&amp;lt;/onlyinclude&amp;gt;&lt;br /&gt;
{{Documentation|content=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:3--&amp;gt; Inserts a brief header for the template data section.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:4--&amp;gt; Adds the &amp;lt;tvar name=1&amp;gt;/doc&amp;lt;/tvar&amp;gt; subpage to &amp;lt;tvar name=2&amp;gt;{{ll|Category:TemplateData documentation}}&amp;lt;/tvar&amp;gt; and the template page to &amp;lt;tvar name=3&amp;gt;{{ll|Category:Templates using TemplateData}}&amp;lt;/tvar&amp;gt;.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
== Usage == &amp;lt;!--T:2--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
{{#tag:syntaxhighlight|&lt;br /&gt;
==TemplateData== or ==Parameters== or ==Usage==&lt;br /&gt;
{{((}}TemplateData header{{))}}&lt;br /&gt;
{{^(}}templatedata{{)^}}{&lt;br /&gt;
...&lt;br /&gt;
}{{^(}}/templatedata{{)^}}&lt;br /&gt;
|lang=html&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:5--&amp;gt;&lt;br /&gt;
Use {{&amp;lt;tvar name=1&amp;gt;tmpl|0=&amp;lt;code&amp;gt;{{((}}TemplateData header{{!}}$1{{))}}&amp;lt;/code&amp;gt;&amp;lt;/tvar&amp;gt;|Template name}} to display a name for the template other than the default, which is &amp;lt;tvar name=&amp;quot;2&amp;quot;&amp;gt;{{ll|Help:Magic words#Variables|&amp;lt;nowiki&amp;gt;{{BASEPAGENAME}}&amp;lt;/nowiki&amp;gt;}}&amp;lt;/tvar&amp;gt;.&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dl&amp;gt;&amp;lt;dd&amp;gt;&lt;br /&gt;
{{TemplateData header|Template name}}&lt;br /&gt;
&amp;lt;/dd&amp;gt;&amp;lt;/dl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
&amp;lt;!--T:6--&amp;gt;&lt;br /&gt;
Use &amp;lt;tvar name=&amp;quot;1&amp;quot;&amp;gt;&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{TemplateData header|noheader=1}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/tvar&amp;gt; to omit the first sentence of the header text.&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dl&amp;gt;&amp;lt;dd&amp;gt;&lt;br /&gt;
{{TemplateData header|noheader=1}}&lt;br /&gt;
&amp;lt;/dd&amp;gt;&amp;lt;/dl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
==Parameters== &amp;lt;!--T:7--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
{{TemplateData header/doc}}&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Antidote</name></author>
	</entry>
	<entry>
		<id>https://wiki.antidotez.ru/mediawiki/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:IsDocSubpage&amp;diff=404</id>
		<title>Шаблон:IsDocSubpage</title>
		<link rel="alternate" type="text/html" href="https://wiki.antidotez.ru/mediawiki/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:IsDocSubpage&amp;diff=404"/>
		<updated>2026-04-19T18:43:47Z</updated>

		<summary type="html">&lt;p&gt;Antidote: 1 версия импортирована&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;onlyinclude&amp;gt;&amp;lt;includeonly&amp;gt;{{#ifexpr: (&lt;br /&gt;
	{{#ifeq:{{lc:{{SUBPAGENAME}}}}|{{lc:{{{override|doc}}}}}|1|0}} or (&lt;br /&gt;
		{{#ifeq:{{lc:{{#titleparts:{{FULLPAGENAME}}|-1|-2}}}}|{{lc:{{{override|doc}}}}}|1|0}}&lt;br /&gt;
		and {{#if:{{#translation:}}|1|0}}&lt;br /&gt;
	)&lt;br /&gt;
)&amp;lt;!--&lt;br /&gt;
	--&amp;gt;|{{{true|1}}}&amp;lt;!--&lt;br /&gt;
	--&amp;gt;|{{{false|}}}&amp;lt;!--&lt;br /&gt;
--&amp;gt;}}&amp;lt;/includeonly&amp;gt;&amp;lt;/onlyinclude&amp;gt;&lt;br /&gt;
{{Documentation}}&lt;br /&gt;
&amp;lt;!-- Add categories to the /doc subpage and interwikis in Wikidata, not here! --&amp;gt;&lt;/div&gt;</summary>
		<author><name>Antidote</name></author>
	</entry>
	<entry>
		<id>https://wiki.antidotez.ru/mediawiki/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Documentation_subpage/en&amp;diff=402</id>
		<title>Шаблон:Documentation subpage/en</title>
		<link rel="alternate" type="text/html" href="https://wiki.antidotez.ru/mediawiki/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Documentation_subpage/en&amp;diff=402"/>
		<updated>2026-04-19T18:43:47Z</updated>

		<summary type="html">&lt;p&gt;Antidote: 1 версия импортирована&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&amp;lt;languages/&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;{{#switch:&lt;br /&gt;
| =&lt;br /&gt;
&amp;lt;includeonly&amp;gt;&amp;lt;!--&lt;br /&gt;
 --&amp;gt;{{#if:{{IsDocSubpage|override={{{override|doc}}}|false=}}&lt;br /&gt;
     | &amp;lt;!--(this template has been transcluded on a /doc or /{{{override}}} page)--&amp;gt;&lt;br /&gt;
&amp;lt;/includeonly&amp;gt;&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
      --&amp;gt;{{#ifeq:{{{doc-notice|show}}} |show&lt;br /&gt;
          | {{Mbox&lt;br /&gt;
             | type = notice&lt;br /&gt;
             | style = margin-bottom:1.0em;&lt;br /&gt;
             | image = [[File:Codex icon book color-base.svg|40px|alt=|class=skin-invert]]&lt;br /&gt;
             | text =&lt;br /&gt;
&#039;&#039;&#039;This is a [[w:Wikipedia:Template documentation|documentation]] [[Special:MyLanguage/Help:Subpages|subpage]] for {{{1|[[:{{SUBJECTSPACE}}:{{BASEPAGENAME}}]]}}}.&#039;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;{{#if:{{{text2|}}}{{{text1|}}}&lt;br /&gt;
  |It contains usage information, [[Special:MyLanguage/Help:Categories|categories]] and other content that is not part of the original {{{text2|{{{text1}}}}}}.&lt;br /&gt;
  |It contains usage information, [[Special:MyLanguage/Help:Categories|categories]] and other content that is not part of the original {{SUBJECTSPACE}} page.&lt;br /&gt;
  }}&lt;br /&gt;
            }}&lt;br /&gt;
         }}&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
      --&amp;gt;{{DEFAULTSORT:{{{defaultsort|{{PAGENAME}}}}}}}&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
      --&amp;gt;{{#if:{{{inhibit|}}} |&amp;lt;!--(don&#039;t categorize)--&amp;gt;&lt;br /&gt;
          |   &amp;lt;includeonly&amp;gt;&amp;lt;!--&lt;br /&gt;
               --&amp;gt;{{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}&lt;br /&gt;
                   | [[Category:{{#switch:{{SUBJECTSPACE}}&lt;br /&gt;
                           | Template | Project = Template&lt;br /&gt;
                           | Module   = Module&lt;br /&gt;
                           | User     = User&lt;br /&gt;
                           | #default = MediaWiki&lt;br /&gt;
                       }} documentation pages{{#translation:}}]]&lt;br /&gt;
                   | [[Category:Documentation subpages without corresponding pages{{#translation:}}]]&lt;br /&gt;
                  }}&amp;lt;!--&lt;br /&gt;
           --&amp;gt;&amp;lt;/includeonly&amp;gt;&lt;br /&gt;
         }}&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
(completing initial #ifeq: at start of template:)&lt;br /&gt;
--&amp;gt;&amp;lt;includeonly&amp;gt;&lt;br /&gt;
     | &amp;lt;!--(this template has not been transcluded on a /doc or /{{{override}}} page)--&amp;gt;&lt;br /&gt;
    }}&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;lt;/includeonly&amp;gt;&lt;br /&gt;
| #default=&lt;br /&gt;
  {{#invoke:Template translation|renderTranslatedTemplate|template=Template:Documentation subpage|noshift=1|uselang={{int:lang}}}}&lt;br /&gt;
}}&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{Documentation|content=&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
&lt;br /&gt;
Use this template on Template Documentation subpage (/doc).&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
*{{tl|Documentation}}&lt;br /&gt;
*{{tl|tl}}&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Antidote</name></author>
	</entry>
	<entry>
		<id>https://wiki.antidotez.ru/mediawiki/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Documentation_subpage&amp;diff=400</id>
		<title>Шаблон:Documentation subpage</title>
		<link rel="alternate" type="text/html" href="https://wiki.antidotez.ru/mediawiki/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Documentation_subpage&amp;diff=400"/>
		<updated>2026-04-19T18:43:47Z</updated>

		<summary type="html">&lt;p&gt;Antidote: 1 версия импортирована&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&amp;lt;languages/&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;{{#switch:&amp;lt;translate&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
| =&lt;br /&gt;
&amp;lt;includeonly&amp;gt;&amp;lt;!--&lt;br /&gt;
 --&amp;gt;{{#if:{{IsDocSubpage|override={{{override|doc}}}|false=}}&lt;br /&gt;
     | &amp;lt;!--(this template has been transcluded on a /doc or /{{{override}}} page)--&amp;gt;&lt;br /&gt;
&amp;lt;/includeonly&amp;gt;&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
      --&amp;gt;{{#ifeq:{{{doc-notice|show}}} |show&lt;br /&gt;
          | {{Mbox&lt;br /&gt;
             | type = notice&lt;br /&gt;
             | style = margin-bottom:1.0em;&lt;br /&gt;
             | image = [[File:Codex icon book color-base.svg|40px|alt=|class=skin-invert]]&lt;br /&gt;
             | text =&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;translate&amp;gt;&amp;lt;!--T:4--&amp;gt; This is a [[w:Wikipedia:Template documentation|documentation]] [[&amp;lt;tvar name=2&amp;gt;Special:MyLanguage/Help:Subpages&amp;lt;/tvar&amp;gt;|subpage]] for &amp;lt;tvar name=1&amp;gt;{{{1|[[:{{SUBJECTSPACE}}:{{BASEPAGENAME}}]]}}}&amp;lt;/tvar&amp;gt;.&amp;lt;/translate&amp;gt;&#039;&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;{{#if:{{{text2|}}}{{{text1|}}}&lt;br /&gt;
  |&amp;lt;translate&amp;gt;&amp;lt;!--T:5--&amp;gt; It contains usage information, [[&amp;lt;tvar name=7&amp;gt;Special:MyLanguage/Help:Categories&amp;lt;/tvar&amp;gt;|categories]] and other content that is not part of the original &amp;lt;tvar name=1&amp;gt;{{{text2|{{{text1}}}}}}&amp;lt;/tvar&amp;gt;.&amp;lt;/translate&amp;gt;&lt;br /&gt;
  |&amp;lt;translate&amp;gt;&amp;lt;!--T:10--&amp;gt; It contains usage information, [[&amp;lt;tvar name=7&amp;gt;Special:MyLanguage/Help:Categories&amp;lt;/tvar&amp;gt;|categories]] and other content that is not part of the original &amp;lt;tvar name=1&amp;gt;{{SUBJECTSPACE}}&amp;lt;/tvar&amp;gt; page.&amp;lt;/translate&amp;gt;&lt;br /&gt;
  }}&lt;br /&gt;
            }}&lt;br /&gt;
         }}&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
      --&amp;gt;{{DEFAULTSORT:{{{defaultsort|{{PAGENAME}}}}}}}&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
      --&amp;gt;{{#if:{{{inhibit|}}} |&amp;lt;!--(don&#039;t categorize)--&amp;gt;&lt;br /&gt;
          |   &amp;lt;includeonly&amp;gt;&amp;lt;!--&lt;br /&gt;
               --&amp;gt;{{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}&lt;br /&gt;
                   | [[Category:{{#switch:{{SUBJECTSPACE}}&lt;br /&gt;
                           | Template | Project = Template&lt;br /&gt;
                           | Module   = Module&lt;br /&gt;
                           | User     = User&lt;br /&gt;
                           | #default = MediaWiki&lt;br /&gt;
                       }} documentation pages{{#translation:}}]]&lt;br /&gt;
                   | [[Category:Documentation subpages without corresponding pages{{#translation:}}]]&lt;br /&gt;
                  }}&amp;lt;!--&lt;br /&gt;
           --&amp;gt;&amp;lt;/includeonly&amp;gt;&lt;br /&gt;
         }}&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
(completing initial #ifeq: at start of template:)&lt;br /&gt;
--&amp;gt;&amp;lt;includeonly&amp;gt;&lt;br /&gt;
     | &amp;lt;!--(this template has not been transcluded on a /doc or /{{{override}}} page)--&amp;gt;&lt;br /&gt;
    }}&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;lt;/includeonly&amp;gt;&lt;br /&gt;
| #default=&lt;br /&gt;
  {{#invoke:Template translation|renderTranslatedTemplate|template=Template:Documentation subpage|noshift=1|uselang={{int:lang}}}}&lt;br /&gt;
}}&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{Documentation|content=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
== Usage == &amp;lt;!--T:6--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:7--&amp;gt;&lt;br /&gt;
Use this template on Template Documentation subpage (/doc).&lt;br /&gt;
&lt;br /&gt;
== See also == &amp;lt;!--T:8--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
*{{tl|Documentation}}&lt;br /&gt;
*{{tl|tl}}&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Antidote</name></author>
	</entry>
	<entry>
		<id>https://wiki.antidotez.ru/mediawiki/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Translatable/en&amp;diff=398</id>
		<title>Шаблон:Translatable/en</title>
		<link rel="alternate" type="text/html" href="https://wiki.antidotez.ru/mediawiki/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Translatable/en&amp;diff=398"/>
		<updated>2026-04-19T18:43:47Z</updated>

		<summary type="html">&lt;p&gt;Antidote: 1 версия импортирована&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&amp;lt;languages /&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;{{#ifeq:{{pagelang|{{{1|{{FULLPAGENAME}}}}}}}|&lt;br /&gt;
|{{{1|{{FULLPAGENAME}}}}}&lt;br /&gt;
|{{#invoke:String|sub|{{{1|{{FULLPAGENAME}}}}}&lt;br /&gt;
  |1&lt;br /&gt;
  |{{#expr:{{#invoke:String|len|{{{1|{{FULLPAGENAME}}}}}}}-{{#invoke:String|len|{{pagelang|{{{1|{{FULLPAGENAME}}}}}}}}}-1}}&lt;br /&gt;
  }}&lt;br /&gt;
}}&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{Documentation|content=&lt;br /&gt;
{{Lua|Module:String}}&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
* {{tlx|translatable}}&lt;br /&gt;
{{translatable}}&lt;br /&gt;
* {{tlx|translatable|2=Page name}}&lt;br /&gt;
{{translatable|1=Page name}}&lt;br /&gt;
* {{tlx|translatable|2=Page name/{{PAGELANGUAGE}} }}&lt;br /&gt;
{{translatable|1=Page name/{{PAGELANGUAGE}} }}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Internationalization templates{{#translation:}}]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Antidote</name></author>
	</entry>
	<entry>
		<id>https://wiki.antidotez.ru/mediawiki/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Uses_TemplateStyles&amp;diff=396</id>
		<title>Шаблон:Uses TemplateStyles</title>
		<link rel="alternate" type="text/html" href="https://wiki.antidotez.ru/mediawiki/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Uses_TemplateStyles&amp;diff=396"/>
		<updated>2026-04-19T18:43:47Z</updated>

		<summary type="html">&lt;p&gt;Antidote: 1 версия импортирована&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;onlyinclude&amp;gt;&amp;lt;includeonly&amp;gt;{{#invoke:Uses TemplateStyles|main}}&amp;lt;/includeonly&amp;gt;&amp;lt;/onlyinclude&amp;gt;&lt;br /&gt;
{{Uses TemplateStyles|Template:Uses TemplateStyles/example.css|nocat=true}}&lt;br /&gt;
{{Documentation}}&lt;br /&gt;
&amp;lt;!-- Add categories to the /doc subpage and interwikis in Wikidata, not here! --&amp;gt;&lt;/div&gt;</summary>
		<author><name>Antidote</name></author>
	</entry>
	<entry>
		<id>https://wiki.antidotez.ru/mediawiki/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Documentation/en&amp;diff=394</id>
		<title>Шаблон:Documentation/en</title>
		<link rel="alternate" type="text/html" href="https://wiki.antidotez.ru/mediawiki/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Documentation/en&amp;diff=394"/>
		<updated>2026-04-19T18:43:46Z</updated>

		<summary type="html">&lt;p&gt;Antidote: 1 версия импортирована&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&amp;lt;languages/&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&amp;lt;includeonly&amp;gt;{{#invoke:documentation|main|_content={{ {{#invoke:documentation|contentTitle}}}}}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{documentation|content=&lt;br /&gt;
&lt;br /&gt;
{{Lua|Module:Documentation}}&lt;br /&gt;
This template automatically displays a documentation box like the one you are seeing now, of which the content is sometimes transcluded from another page.&lt;br /&gt;
It is intended for pages which are [[Special:MyLanguage/Help:Transclusion|transcluded]] in other pages, i.e. templates, whether in the template namespace or not.&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
&lt;br /&gt;
=== Customising display ===&lt;br /&gt;
&lt;br /&gt;
Overrides exist to customise the output in special cases:&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;{{&amp;lt;/nowiki&amp;gt;documentation{{!}}&#039;&#039;&#039;heading&#039;&#039;&#039;=&amp;lt;nowiki&amp;gt;}}&amp;lt;/nowiki&amp;gt; - change the text of the &amp;quot;documentation&amp;quot; heading. If this is set to blank, the entire heading line (including the first [edit] link) will also disappear.&lt;br /&gt;
&lt;br /&gt;
== Rationale ==&lt;br /&gt;
This template allows any page to use any documentation page, and makes it possible to protect templates while allowing anyone to edit the template&#039;s documentation and categories.&lt;br /&gt;
It also reduces server resources by circumventing a [[w:Wikipedia:Template limits|technical limitation of templates]] (see a [[:en:Special:Diff/69888944|developer&#039;s explanation]]).&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[w:Template:Documentation subpage]]&lt;br /&gt;
* {{tim|Documentation}}&lt;br /&gt;
* [[w:Wikipedia:Template documentation]]&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
[[Category:Formatting templates{{#translation:}}|Template documentation]]&lt;br /&gt;
[[Category:Template documentation{{#translation:}}| ]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&amp;lt;includeonly&amp;gt;{{#if:{{{content|}}}|&lt;br /&gt;
[[Category:Template documentation pages{{#translation:}}]]&lt;br /&gt;
}}&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>Antidote</name></author>
	</entry>
	<entry>
		<id>https://wiki.antidotez.ru/mediawiki/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Documentation&amp;diff=392</id>
		<title>Шаблон:Documentation</title>
		<link rel="alternate" type="text/html" href="https://wiki.antidotez.ru/mediawiki/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Documentation&amp;diff=392"/>
		<updated>2026-04-19T18:43:46Z</updated>

		<summary type="html">&lt;p&gt;Antidote: 1 версия импортирована&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&amp;lt;languages/&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&amp;lt;includeonly&amp;gt;{{#invoke:documentation|main|_content={{ {{#invoke:documentation|contentTitle}}}}}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{documentation|content=&lt;br /&gt;
&lt;br /&gt;
{{Lua|Module:Documentation}}&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:12--&amp;gt; This template automatically displays a documentation box like the one you are seeing now, of which the content is sometimes transcluded from another page.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:13--&amp;gt; It is intended for pages which are [[&amp;lt;tvar name=1&amp;gt;Special:MyLanguage/Help:Transclusion&amp;lt;/tvar&amp;gt;|transcluded]] in other pages, i.e. templates, whether in the template namespace or not.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
== Usage == &amp;lt;!--T:2--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Customising display === &amp;lt;!--T:3--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:4--&amp;gt;&lt;br /&gt;
Overrides exist to customise the output in special cases:&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;{{&amp;lt;/nowiki&amp;gt;documentation{{!}}&#039;&#039;&#039;heading&#039;&#039;&#039;=&amp;lt;nowiki&amp;gt;}}&amp;lt;/nowiki&amp;gt; - &amp;lt;translate&amp;gt;&amp;lt;!--T:5--&amp;gt; change the text of the &amp;quot;documentation&amp;quot; heading.&amp;lt;/translate&amp;gt; &amp;lt;translate&amp;gt;&amp;lt;!--T:10--&amp;gt; If this is set to blank, the entire heading line (including the first [edit] link) will also disappear.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
== Rationale == &amp;lt;!--T:6--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:7--&amp;gt; This template allows any page to use any documentation page, and makes it possible to protect templates while allowing anyone to edit the template&#039;s documentation and categories.&amp;lt;/translate&amp;gt;&lt;br /&gt;
&amp;lt;translate&amp;gt;&amp;lt;!--T:8--&amp;gt; It also reduces server resources by circumventing a [[w:Wikipedia:Template limits|technical limitation of templates]] (see a [[&amp;lt;tvar name=1&amp;gt;:en:Special:Diff/69888944&amp;lt;/tvar&amp;gt;|developer&#039;s explanation]]).&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;translate&amp;gt;&lt;br /&gt;
== See also == &amp;lt;!--T:9--&amp;gt;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
* &amp;lt;translate&amp;gt;&amp;lt;!--T:14--&amp;gt; [[w:Template:Documentation subpage]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
* {{tim|Documentation}}&lt;br /&gt;
* &amp;lt;translate&amp;gt;&amp;lt;!--T:11--&amp;gt; [[w:Wikipedia:Template documentation]]&amp;lt;/translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
[[Category:Formatting templates{{#translation:}}|Template documentation]]&lt;br /&gt;
[[Category:Template documentation{{#translation:}}| ]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&amp;lt;includeonly&amp;gt;{{#if:{{{content|}}}|&lt;br /&gt;
[[Category:Template documentation pages{{#translation:}}]]&lt;br /&gt;
}}&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>Antidote</name></author>
	</entry>
	<entry>
		<id>https://wiki.antidotez.ru/mediawiki/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Message_box/configuration&amp;diff=390</id>
		<title>Модуль:Message box/configuration</title>
		<link rel="alternate" type="text/html" href="https://wiki.antidotez.ru/mediawiki/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Message_box/configuration&amp;diff=390"/>
		<updated>2026-04-19T18:43:46Z</updated>

		<summary type="html">&lt;p&gt;Antidote: 1 версия импортирована&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;--------------------------------------------------------------------------------&lt;br /&gt;
--                          Message box configuration                         --&lt;br /&gt;
--                                                                            --&lt;br /&gt;
-- This module contains configuration data for [[Module:Message box]].        --&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
return {&lt;br /&gt;
	ambox = {&lt;br /&gt;
		types = {&lt;br /&gt;
			speedy = {&lt;br /&gt;
				class = &#039;ambox-speedy&#039;,&lt;br /&gt;
				image = &#039;OOjs UI icon clock-destructive.svg&#039;&lt;br /&gt;
			},&lt;br /&gt;
			delete = {&lt;br /&gt;
				class = &#039;ambox-delete&#039;,&lt;br /&gt;
				image = &#039;OOjs UI icon alert-destructive.svg&#039;&lt;br /&gt;
			},&lt;br /&gt;
			warning = { -- alias for content&lt;br /&gt;
				class = &#039;ambox-content&#039;,&lt;br /&gt;
				image = &#039;OOjs UI icon notice-warning.svg&#039;&lt;br /&gt;
			},&lt;br /&gt;
			content = {&lt;br /&gt;
				class = &#039;ambox-content&#039;,&lt;br /&gt;
				image = &#039;OOjs UI icon notice-warning.svg&#039;&lt;br /&gt;
			},&lt;br /&gt;
			style = {&lt;br /&gt;
				class = &#039;ambox-style&#039;,&lt;br /&gt;
				image = &#039;Edit-clear.svg&#039;&lt;br /&gt;
			},&lt;br /&gt;
			move = {&lt;br /&gt;
				class = &#039;ambox-move&#039;,&lt;br /&gt;
				image = &#039;Merge-split-transwiki default.svg&#039;&lt;br /&gt;
			},&lt;br /&gt;
			protection = {&lt;br /&gt;
				class = &#039;ambox-protection&#039;,&lt;br /&gt;
				image = &#039;Semi-protection-shackle-keyhole.svg&#039;&lt;br /&gt;
			},&lt;br /&gt;
			notice = {&lt;br /&gt;
				class = &#039;ambox-notice&#039;,&lt;br /&gt;
				image = &#039;OOjs UI icon information-progressive.svg&#039;&lt;br /&gt;
			}&lt;br /&gt;
		},&lt;br /&gt;
		default                     = &#039;notice&#039;,&lt;br /&gt;
		allowBlankParams            = {&#039;talk&#039;, &#039;sect&#039;, &#039;date&#039;, &#039;issue&#039;, &#039;fix&#039;, &#039;subst&#039;, &#039;hidden&#039;},&lt;br /&gt;
		allowSmall                  = true,&lt;br /&gt;
		smallParam                  = &#039;left&#039;,&lt;br /&gt;
		smallClass                  = &#039;mbox-small-left&#039;,&lt;br /&gt;
		substCheck                  = true,&lt;br /&gt;
		classes                     = {&#039;metadata&#039;, &#039;plainlinks&#039;, &#039;ambox&#039;},&lt;br /&gt;
		imageEmptyCell              = true,&lt;br /&gt;
		imageCheckBlank             = true,&lt;br /&gt;
		imageSmallSize              = &#039;20x20px&#039;,&lt;br /&gt;
		imageCellDiv                = true,&lt;br /&gt;
		useCollapsibleTextFields    = true,&lt;br /&gt;
		imageRightNone              = true,&lt;br /&gt;
		sectionDefault              = &#039;article&#039;,&lt;br /&gt;
		allowMainspaceCategories    = true,&lt;br /&gt;
		templateCategory            = &#039;Article message templates&#039;,&lt;br /&gt;
	        templateCategoryRequireName = true,&lt;br /&gt;
		templateErrorCategory       = nil,&lt;br /&gt;
		templateErrorParamsToCheck  = {&#039;issue&#039;, &#039;fix&#039;, &#039;subst&#039;}&lt;br /&gt;
	},&lt;br /&gt;
	&lt;br /&gt;
	cmbox = {&lt;br /&gt;
		types = {&lt;br /&gt;
			speedy = {&lt;br /&gt;
				class = &#039;cmbox-speedy&#039;,&lt;br /&gt;
				image = &#039;OOjs UI icon clock-destructive.svg&#039;&lt;br /&gt;
			},&lt;br /&gt;
			delete = {&lt;br /&gt;
				class = &#039;cmbox-delete&#039;,&lt;br /&gt;
				image = &#039;OOjs UI icon alert-destructive.svg&#039;&lt;br /&gt;
			},&lt;br /&gt;
			content = {&lt;br /&gt;
				class = &#039;cmbox-content&#039;,&lt;br /&gt;
				image = &#039;OOjs UI icon notice-warning.svg&#039;&lt;br /&gt;
			},&lt;br /&gt;
			style = {&lt;br /&gt;
				class = &#039;cmbox-style&#039;,&lt;br /&gt;
				image = &#039;Edit-clear.svg&#039;&lt;br /&gt;
			},&lt;br /&gt;
			move = {&lt;br /&gt;
				class = &#039;cmbox-move&#039;,&lt;br /&gt;
				image = &#039;Merge-split-transwiki default.svg&#039;&lt;br /&gt;
			},&lt;br /&gt;
			protection = {&lt;br /&gt;
				class = &#039;cmbox-protection&#039;,&lt;br /&gt;
				image = &#039;Semi-protection-shackle-keyhole.svg&#039;&lt;br /&gt;
			},&lt;br /&gt;
			notice = {&lt;br /&gt;
				class = &#039;cmbox-notice&#039;,&lt;br /&gt;
				image = &#039;OOjs UI icon information-progressive.svg&#039;&lt;br /&gt;
			},&lt;br /&gt;
			caution = {&lt;br /&gt;
				class = &#039;cmbox-style&#039;,&lt;br /&gt;
				image = &#039;Ambox warning yellow.svg&#039;&lt;br /&gt;
			}&lt;br /&gt;
		},&lt;br /&gt;
		default              = &#039;notice&#039;,&lt;br /&gt;
		showInvalidTypeError = true,&lt;br /&gt;
		classes              = {&#039;plainlinks&#039;, &#039;cmbox&#039;},&lt;br /&gt;
		imageEmptyCell       = true&lt;br /&gt;
	},&lt;br /&gt;
	&lt;br /&gt;
	fmbox = {&lt;br /&gt;
		types = {&lt;br /&gt;
			warning = {&lt;br /&gt;
				class = &#039;fmbox-warning&#039;,&lt;br /&gt;
				image = &#039;OOjs UI icon clock-destructive.svg&#039;&lt;br /&gt;
			},&lt;br /&gt;
			editnotice = {&lt;br /&gt;
				class = &#039;fmbox-editnotice&#039;,&lt;br /&gt;
				image = &#039;OOjs UI icon information-progressive.svg&#039;&lt;br /&gt;
			},&lt;br /&gt;
			system = {&lt;br /&gt;
				class = &#039;fmbox-system&#039;,&lt;br /&gt;
				image = &#039;OOjs UI icon information-progressive.svg&#039;&lt;br /&gt;
			}&lt;br /&gt;
		},&lt;br /&gt;
		default              = &#039;system&#039;,&lt;br /&gt;
		showInvalidTypeError = true,&lt;br /&gt;
		classes              = {&#039;plainlinks&#039;, &#039;fmbox&#039;},&lt;br /&gt;
		imageEmptyCell       = false,&lt;br /&gt;
		imageRightNone       = false&lt;br /&gt;
	},&lt;br /&gt;
	&lt;br /&gt;
	imbox = {&lt;br /&gt;
		types = {&lt;br /&gt;
			speedy = {&lt;br /&gt;
				class = &#039;imbox-speedy&#039;,&lt;br /&gt;
				image = &#039;OOjs UI icon clock-destructive.svg&#039;&lt;br /&gt;
			},&lt;br /&gt;
			delete = {&lt;br /&gt;
				class = &#039;imbox-delete&#039;,&lt;br /&gt;
				image = &#039;OOjs UI icon alert-destructive.svg&#039;&lt;br /&gt;
			},&lt;br /&gt;
			content = {&lt;br /&gt;
				class = &#039;imbox-content&#039;,&lt;br /&gt;
				image = &#039;OOjs UI icon notice-warning.svg&#039;&lt;br /&gt;
			},&lt;br /&gt;
			style = {&lt;br /&gt;
				class = &#039;imbox-style&#039;,&lt;br /&gt;
				image = &#039;Edit-clear.svg&#039;&lt;br /&gt;
			},&lt;br /&gt;
			move = {&lt;br /&gt;
				class = &#039;imbox-move&#039;,&lt;br /&gt;
				image = &#039;Merge-split-transwiki default.svg&#039;&lt;br /&gt;
			},&lt;br /&gt;
			protection = {&lt;br /&gt;
				class = &#039;imbox-protection&#039;,&lt;br /&gt;
				image = &#039;Semi-protection-shackle-keyhole.svg&#039;&lt;br /&gt;
			},&lt;br /&gt;
			license = {&lt;br /&gt;
				class = &#039;imbox-license licensetpl&#039;,&lt;br /&gt;
				image = &#039;Imbox-license.svg&#039;&lt;br /&gt;
			},&lt;br /&gt;
			featured = {&lt;br /&gt;
				class = &#039;imbox-featured&#039;,&lt;br /&gt;
				image = &#039;Cscr-featured.svg&#039;&lt;br /&gt;
			},&lt;br /&gt;
			notice = {&lt;br /&gt;
				class = &#039;imbox-notice&#039;,&lt;br /&gt;
				image = &#039;OOjs UI icon information-progressive.svg&#039;&lt;br /&gt;
			}&lt;br /&gt;
		},&lt;br /&gt;
		default              = &#039;notice&#039;,&lt;br /&gt;
		showInvalidTypeError = true,&lt;br /&gt;
		classes              = {&#039;imbox&#039;},&lt;br /&gt;
		usePlainlinksParam   = true,&lt;br /&gt;
		imageEmptyCell       = true,&lt;br /&gt;
		below                = true,&lt;br /&gt;
		templateCategory     = &#039;File message boxes&#039;&lt;br /&gt;
	},&lt;br /&gt;
	&lt;br /&gt;
	ombox = {&lt;br /&gt;
		types = {&lt;br /&gt;
			speedy = {&lt;br /&gt;
				class = &#039;ombox-speedy&#039;,&lt;br /&gt;
				image = &#039;OOjs UI icon clock-destructive.svg&#039;&lt;br /&gt;
			},&lt;br /&gt;
			delete = {&lt;br /&gt;
				class = &#039;ombox-delete&#039;,&lt;br /&gt;
				image = &#039;OOjs UI icon alert-destructive.svg&#039;&lt;br /&gt;
			},&lt;br /&gt;
			warning = { -- alias for content&lt;br /&gt;
				class = &#039;ombox-content&#039;,&lt;br /&gt;
				image = &#039;OOjs UI icon notice-warning.svg&#039;&lt;br /&gt;
			},&lt;br /&gt;
			content = {&lt;br /&gt;
				class = &#039;ombox-content&#039;,&lt;br /&gt;
				image = &#039;OOjs UI icon notice-warning.svg&#039;&lt;br /&gt;
			},&lt;br /&gt;
			style = {&lt;br /&gt;
				class = &#039;ombox-style&#039;,&lt;br /&gt;
				image = &#039;Edit-clear.svg&#039;&lt;br /&gt;
			},&lt;br /&gt;
			move = {&lt;br /&gt;
				class = &#039;ombox-move&#039;,&lt;br /&gt;
				image = &#039;Merge-split-transwiki default.svg&#039;&lt;br /&gt;
			},&lt;br /&gt;
			protection = {&lt;br /&gt;
				class = &#039;ombox-protection&#039;,&lt;br /&gt;
				image = &#039;Semi-protection-shackle-keyhole.svg&#039;&lt;br /&gt;
			},&lt;br /&gt;
			notice = {&lt;br /&gt;
				class = &#039;ombox-notice&#039;,&lt;br /&gt;
				image = &#039;OOjs UI icon information-progressive.svg&#039;&lt;br /&gt;
			},&lt;br /&gt;
			critical = {&lt;br /&gt;
				class = &#039;mbox-critical&#039;,&lt;br /&gt;
				image = &#039;OOjs UI icon clock-destructive.svg&#039;&lt;br /&gt;
			}&lt;br /&gt;
		},&lt;br /&gt;
		default              = &#039;notice&#039;,&lt;br /&gt;
		showInvalidTypeError = true,&lt;br /&gt;
		classes              = {&#039;plainlinks&#039;, &#039;ombox&#039;},&lt;br /&gt;
		allowSmall           = true,&lt;br /&gt;
		imageEmptyCell       = true,&lt;br /&gt;
		imageRightNone       = true&lt;br /&gt;
	},&lt;br /&gt;
	&lt;br /&gt;
	tmbox = {&lt;br /&gt;
		types = {&lt;br /&gt;
			speedy = {&lt;br /&gt;
				class = &#039;tmbox-speedy&#039;,&lt;br /&gt;
				image = &#039;OOjs UI icon clock-destructive.svg&#039;&lt;br /&gt;
			},&lt;br /&gt;
			delete = {&lt;br /&gt;
				class = &#039;tmbox-delete&#039;,&lt;br /&gt;
				image = &#039;OOjs UI icon alert-destructive.svg&#039;&lt;br /&gt;
			},&lt;br /&gt;
			content = {&lt;br /&gt;
				class = &#039;tmbox-content&#039;,&lt;br /&gt;
				image = &#039;OOjs UI icon notice-warning.svg&#039;&lt;br /&gt;
			},&lt;br /&gt;
			style = {&lt;br /&gt;
				class = &#039;tmbox-style&#039;,&lt;br /&gt;
				image = &#039;Edit-clear.svg&#039;&lt;br /&gt;
			},&lt;br /&gt;
			move = {&lt;br /&gt;
				class = &#039;tmbox-move&#039;,&lt;br /&gt;
				image = &#039;Merge-split-transwiki default.svg&#039;&lt;br /&gt;
			},&lt;br /&gt;
			protection = {&lt;br /&gt;
				class = &#039;tmbox-protection&#039;,&lt;br /&gt;
				image = &#039;Semi-protection-shackle-keyhole.svg&#039;&lt;br /&gt;
			},&lt;br /&gt;
			notice = {&lt;br /&gt;
				class = &#039;tmbox-notice&#039;,&lt;br /&gt;
				image = &#039;OOjs UI icon information-progressive.svg&#039;&lt;br /&gt;
			}&lt;br /&gt;
		},&lt;br /&gt;
		default              = &#039;notice&#039;,&lt;br /&gt;
		showInvalidTypeError = true,&lt;br /&gt;
		classes              = {&#039;plainlinks&#039;, &#039;tmbox&#039;},&lt;br /&gt;
		allowSmall           = true,&lt;br /&gt;
		imageRightNone       = true,&lt;br /&gt;
		imageEmptyCell       = true,&lt;br /&gt;
		imageEmptyCellStyle  = true,&lt;br /&gt;
		templateCategory     = &#039;Talk message boxes&#039;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Antidote</name></author>
	</entry>
	<entry>
		<id>https://wiki.antidotez.ru/mediawiki/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Arguments&amp;diff=388</id>
		<title>Модуль:Arguments</title>
		<link rel="alternate" type="text/html" href="https://wiki.antidotez.ru/mediawiki/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Arguments&amp;diff=388"/>
		<updated>2026-04-19T18:43:46Z</updated>

		<summary type="html">&lt;p&gt;Antidote: 1 версия импортирована&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- This module provides easy processing of arguments passed to Scribunto from&lt;br /&gt;
-- #invoke. It is intended for use by other Lua modules, and should not be&lt;br /&gt;
-- called from #invoke directly.&lt;br /&gt;
&lt;br /&gt;
local libraryUtil = require(&#039;libraryUtil&#039;)&lt;br /&gt;
local checkType = libraryUtil.checkType&lt;br /&gt;
&lt;br /&gt;
local arguments = {}&lt;br /&gt;
&lt;br /&gt;
-- Generate four different tidyVal functions, so that we don&#039;t have to check the&lt;br /&gt;
-- options every time we call it.&lt;br /&gt;
&lt;br /&gt;
local function tidyValDefault(key, val)&lt;br /&gt;
	if type(val) == &#039;string&#039; then&lt;br /&gt;
		val = val:match(&#039;^%s*(.-)%s*$&#039;)&lt;br /&gt;
		if val == &#039;&#039; then&lt;br /&gt;
			return nil&lt;br /&gt;
		else&lt;br /&gt;
			return val&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		return val&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function tidyValTrimOnly(key, val)&lt;br /&gt;
	if type(val) == &#039;string&#039; then&lt;br /&gt;
		return val:match(&#039;^%s*(.-)%s*$&#039;)&lt;br /&gt;
	else&lt;br /&gt;
		return val&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function tidyValRemoveBlanksOnly(key, val)&lt;br /&gt;
	if type(val) == &#039;string&#039; then&lt;br /&gt;
		if val:find(&#039;%S&#039;) then&lt;br /&gt;
			return val&lt;br /&gt;
		else&lt;br /&gt;
			return nil&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		return val&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function tidyValNoChange(key, val)&lt;br /&gt;
	return val&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function matchesTitle(given, title)&lt;br /&gt;
	local tp = type( given )&lt;br /&gt;
	return (tp == &#039;string&#039; or tp == &#039;number&#039;) and mw.title.new( given ).prefixedText == title&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local translate_mt = { __index = function(t, k) return k end }&lt;br /&gt;
&lt;br /&gt;
function arguments.getArgs(frame, options)&lt;br /&gt;
	checkType(&#039;getArgs&#039;, 1, frame, &#039;table&#039;, true)&lt;br /&gt;
	checkType(&#039;getArgs&#039;, 2, options, &#039;table&#039;, true)&lt;br /&gt;
	frame = frame or {}&lt;br /&gt;
	options = options or {}&lt;br /&gt;
&lt;br /&gt;
	--[[&lt;br /&gt;
	-- Set up argument translation.&lt;br /&gt;
	--]]&lt;br /&gt;
	options.translate = options.translate or {}&lt;br /&gt;
	if getmetatable(options.translate) == nil then&lt;br /&gt;
		setmetatable(options.translate, translate_mt)&lt;br /&gt;
	end&lt;br /&gt;
	if options.backtranslate == nil then&lt;br /&gt;
		options.backtranslate = {}&lt;br /&gt;
		for k,v in pairs(options.translate) do&lt;br /&gt;
			options.backtranslate[v] = k&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if options.backtranslate and getmetatable(options.backtranslate) == nil then&lt;br /&gt;
		setmetatable(options.backtranslate, {&lt;br /&gt;
			__index = function(t, k)&lt;br /&gt;
				if options.translate[k] ~= k then&lt;br /&gt;
					return nil&lt;br /&gt;
				else&lt;br /&gt;
					return k&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		})&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	--[[&lt;br /&gt;
	-- Get the argument tables. If we were passed a valid frame object, get the&lt;br /&gt;
	-- frame arguments (fargs) and the parent frame arguments (pargs), depending&lt;br /&gt;
	-- on the options set and on the parent frame&#039;s availability. If we weren&#039;t&lt;br /&gt;
	-- passed a valid frame object, we are being called from another Lua module&lt;br /&gt;
	-- or from the debug console, so assume that we were passed a table of args&lt;br /&gt;
	-- directly, and assign it to a new variable (luaArgs).&lt;br /&gt;
	--]]&lt;br /&gt;
	local fargs, pargs, luaArgs&lt;br /&gt;
	if type(frame.args) == &#039;table&#039; and type(frame.getParent) == &#039;function&#039; then&lt;br /&gt;
		if options.wrappers then&lt;br /&gt;
			--[[&lt;br /&gt;
			-- The wrappers option makes Module:Arguments look up arguments in&lt;br /&gt;
			-- either the frame argument table or the parent argument table, but&lt;br /&gt;
			-- not both. This means that users can use either the #invoke syntax&lt;br /&gt;
			-- or a wrapper template without the loss of performance associated&lt;br /&gt;
			-- with looking arguments up in both the frame and the parent frame.&lt;br /&gt;
			-- Module:Arguments will look up arguments in the parent frame&lt;br /&gt;
			-- if it finds the parent frame&#039;s title in options.wrapper;&lt;br /&gt;
			-- otherwise it will look up arguments in the frame object passed&lt;br /&gt;
			-- to getArgs.&lt;br /&gt;
			--]]&lt;br /&gt;
			local parent = frame:getParent()&lt;br /&gt;
			if not parent then&lt;br /&gt;
				fargs = frame.args&lt;br /&gt;
			else&lt;br /&gt;
				local title = parent:getTitle():gsub(&#039;/sandbox$&#039;, &#039;&#039;)&lt;br /&gt;
				local found = false&lt;br /&gt;
				if matchesTitle(options.wrappers, title) then&lt;br /&gt;
					found = true&lt;br /&gt;
				elseif type(options.wrappers) == &#039;table&#039; then&lt;br /&gt;
					for _,v in pairs(options.wrappers) do&lt;br /&gt;
						if matchesTitle(v, title) then&lt;br /&gt;
							found = true&lt;br /&gt;
							break&lt;br /&gt;
						end&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
&lt;br /&gt;
				-- We test for false specifically here so that nil (the default) acts like true.&lt;br /&gt;
				if found or options.frameOnly == false then&lt;br /&gt;
					pargs = parent.args&lt;br /&gt;
				end&lt;br /&gt;
				if not found or options.parentOnly == false then&lt;br /&gt;
					fargs = frame.args&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			-- options.wrapper isn&#039;t set, so check the other options.&lt;br /&gt;
			if not options.parentOnly then&lt;br /&gt;
				fargs = frame.args&lt;br /&gt;
			end&lt;br /&gt;
			if not options.frameOnly then&lt;br /&gt;
				local parent = frame:getParent()&lt;br /&gt;
				pargs = parent and parent.args or nil&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		if options.parentFirst then&lt;br /&gt;
			fargs, pargs = pargs, fargs&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		luaArgs = frame&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Set the order of precedence of the argument tables. If the variables are&lt;br /&gt;
	-- nil, nothing will be added to the table, which is how we avoid clashes&lt;br /&gt;
	-- between the frame/parent args and the Lua args.&lt;br /&gt;
	local argTables = {fargs}&lt;br /&gt;
	argTables[#argTables + 1] = pargs&lt;br /&gt;
	argTables[#argTables + 1] = luaArgs&lt;br /&gt;
&lt;br /&gt;
	--[[&lt;br /&gt;
	-- Generate the tidyVal function. If it has been specified by the user, we&lt;br /&gt;
	-- use that; if not, we choose one of four functions depending on the&lt;br /&gt;
	-- options chosen. This is so that we don&#039;t have to call the options table&lt;br /&gt;
	-- every time the function is called.&lt;br /&gt;
	--]]&lt;br /&gt;
	local tidyVal = options.valueFunc&lt;br /&gt;
	if tidyVal then&lt;br /&gt;
		if type(tidyVal) ~= &#039;function&#039; then&lt;br /&gt;
			error(&lt;br /&gt;
				&amp;quot;bad value assigned to option &#039;valueFunc&#039;&amp;quot;&lt;br /&gt;
					.. &#039;(function expected, got &#039;&lt;br /&gt;
					.. type(tidyVal)&lt;br /&gt;
					.. &#039;)&#039;,&lt;br /&gt;
				2&lt;br /&gt;
			)&lt;br /&gt;
		end&lt;br /&gt;
	elseif options.trim ~= false then&lt;br /&gt;
		if options.removeBlanks ~= false then&lt;br /&gt;
			tidyVal = tidyValDefault&lt;br /&gt;
		else&lt;br /&gt;
			tidyVal = tidyValTrimOnly&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		if options.removeBlanks ~= false then&lt;br /&gt;
			tidyVal = tidyValRemoveBlanksOnly&lt;br /&gt;
		else&lt;br /&gt;
			tidyVal = tidyValNoChange&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	--[[&lt;br /&gt;
	-- Set up the args, metaArgs and nilArgs tables. args will be the one&lt;br /&gt;
	-- accessed from functions, and metaArgs will hold the actual arguments. Nil&lt;br /&gt;
	-- arguments are memoized in nilArgs, and the metatable connects all of them&lt;br /&gt;
	-- together.&lt;br /&gt;
	--]]&lt;br /&gt;
	local args, metaArgs, nilArgs, metatable = {}, {}, {}, {}&lt;br /&gt;
	setmetatable(args, metatable)&lt;br /&gt;
&lt;br /&gt;
	local function mergeArgs(tables)&lt;br /&gt;
		--[[&lt;br /&gt;
		-- Accepts multiple tables as input and merges their keys and values&lt;br /&gt;
		-- into one table. If a value is already present it is not overwritten;&lt;br /&gt;
		-- tables listed earlier have precedence. We are also memoizing nil&lt;br /&gt;
		-- values, which can be overwritten if they are &#039;s&#039; (soft).&lt;br /&gt;
		--]]&lt;br /&gt;
		for _, t in ipairs(tables) do&lt;br /&gt;
			for key, val in pairs(t) do&lt;br /&gt;
				if metaArgs[key] == nil and nilArgs[key] ~= &#039;h&#039; then&lt;br /&gt;
					local tidiedVal = tidyVal(key, val)&lt;br /&gt;
					if tidiedVal == nil then&lt;br /&gt;
						nilArgs[key] = &#039;s&#039;&lt;br /&gt;
					else&lt;br /&gt;
						metaArgs[key] = tidiedVal&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	--[[&lt;br /&gt;
	-- Define metatable behaviour. Arguments are memoized in the metaArgs table,&lt;br /&gt;
	-- and are only fetched from the argument tables once. Fetching arguments&lt;br /&gt;
	-- from the argument tables is the most resource-intensive step in this&lt;br /&gt;
	-- module, so we try and avoid it where possible. For this reason, nil&lt;br /&gt;
	-- arguments are also memoized, in the nilArgs table. Also, we keep a record&lt;br /&gt;
	-- in the metatable of when pairs and ipairs have been called, so we do not&lt;br /&gt;
	-- run pairs and ipairs on the argument tables more than once. We also do&lt;br /&gt;
	-- not run ipairs on fargs and pargs if pairs has already been run, as all&lt;br /&gt;
	-- the arguments will already have been copied over.&lt;br /&gt;
	--]]&lt;br /&gt;
&lt;br /&gt;
	metatable.__index = function (t, key)&lt;br /&gt;
		--[[&lt;br /&gt;
		-- Fetches an argument when the args table is indexed. First we check&lt;br /&gt;
		-- to see if the value is memoized, and if not we try and fetch it from&lt;br /&gt;
		-- the argument tables. When we check memoization, we need to check&lt;br /&gt;
		-- metaArgs before nilArgs, as both can be non-nil at the same time.&lt;br /&gt;
		-- If the argument is not present in metaArgs, we also check whether&lt;br /&gt;
		-- pairs has been run yet. If pairs has already been run, we return nil.&lt;br /&gt;
		-- This is because all the arguments will have already been copied into&lt;br /&gt;
		-- metaArgs by the mergeArgs function, meaning that any other arguments&lt;br /&gt;
		-- must be nil.&lt;br /&gt;
		--]]&lt;br /&gt;
		if type(key) == &#039;string&#039; then&lt;br /&gt;
			key = options.translate[key]&lt;br /&gt;
		end&lt;br /&gt;
		local val = metaArgs[key]&lt;br /&gt;
		if val ~= nil then&lt;br /&gt;
			return val&lt;br /&gt;
		elseif metatable.donePairs or nilArgs[key] then&lt;br /&gt;
			return nil&lt;br /&gt;
		end&lt;br /&gt;
		for _, argTable in ipairs(argTables) do&lt;br /&gt;
			local argTableVal = tidyVal(key, argTable[key])&lt;br /&gt;
			if argTableVal ~= nil then&lt;br /&gt;
				metaArgs[key] = argTableVal&lt;br /&gt;
				return argTableVal&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		nilArgs[key] = &#039;h&#039;&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	metatable.__newindex = function (t, key, val)&lt;br /&gt;
		-- This function is called when a module tries to add a new value to the&lt;br /&gt;
		-- args table, or tries to change an existing value.&lt;br /&gt;
		if type(key) == &#039;string&#039; then&lt;br /&gt;
			key = options.translate[key]&lt;br /&gt;
		end&lt;br /&gt;
		if options.readOnly then&lt;br /&gt;
			error(&lt;br /&gt;
				&#039;could not write to argument table key &amp;quot;&#039;&lt;br /&gt;
					.. tostring(key)&lt;br /&gt;
					.. &#039;&amp;quot;; the table is read-only&#039;,&lt;br /&gt;
				2&lt;br /&gt;
			)&lt;br /&gt;
		elseif options.noOverwrite and args[key] ~= nil then&lt;br /&gt;
			error(&lt;br /&gt;
				&#039;could not write to argument table key &amp;quot;&#039;&lt;br /&gt;
					.. tostring(key)&lt;br /&gt;
					.. &#039;&amp;quot;; overwriting existing arguments is not permitted&#039;,&lt;br /&gt;
				2&lt;br /&gt;
			)&lt;br /&gt;
		elseif val == nil then&lt;br /&gt;
			--[[&lt;br /&gt;
			-- If the argument is to be overwritten with nil, we need to erase&lt;br /&gt;
			-- the value in metaArgs, so that __index, __pairs and __ipairs do&lt;br /&gt;
			-- not use a previous existing value, if present; and we also need&lt;br /&gt;
			-- to memoize the nil in nilArgs, so that the value isn&#039;t looked&lt;br /&gt;
			-- up in the argument tables if it is accessed again.&lt;br /&gt;
			--]]&lt;br /&gt;
			metaArgs[key] = nil&lt;br /&gt;
			nilArgs[key] = &#039;h&#039;&lt;br /&gt;
		else&lt;br /&gt;
			metaArgs[key] = val&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local function translatenext(invariant)&lt;br /&gt;
		local k, v = next(invariant.t, invariant.k)&lt;br /&gt;
		invariant.k = k&lt;br /&gt;
		if k == nil then&lt;br /&gt;
			return nil&lt;br /&gt;
		elseif type(k) ~= &#039;string&#039; or not options.backtranslate then&lt;br /&gt;
			return k, v&lt;br /&gt;
		else&lt;br /&gt;
			local backtranslate = options.backtranslate[k]&lt;br /&gt;
			if backtranslate == nil then&lt;br /&gt;
				-- Skip this one. This is a tail call, so this won&#039;t cause stack overflow&lt;br /&gt;
				return translatenext(invariant)&lt;br /&gt;
			else&lt;br /&gt;
				return backtranslate, v&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	metatable.__pairs = function ()&lt;br /&gt;
		-- Called when pairs is run on the args table.&lt;br /&gt;
		if not metatable.donePairs then&lt;br /&gt;
			mergeArgs(argTables)&lt;br /&gt;
			metatable.donePairs = true&lt;br /&gt;
		end&lt;br /&gt;
		return translatenext, { t = metaArgs }&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local function inext(t, i)&lt;br /&gt;
		-- This uses our __index metamethod&lt;br /&gt;
		local v = t[i + 1]&lt;br /&gt;
		if v ~= nil then&lt;br /&gt;
			return i + 1, v&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	metatable.__ipairs = function (t)&lt;br /&gt;
		-- Called when ipairs is run on the args table.&lt;br /&gt;
		return inext, t, 0&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return args&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return arguments&lt;/div&gt;</summary>
		<author><name>Antidote</name></author>
	</entry>
	<entry>
		<id>https://wiki.antidotez.ru/mediawiki/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Yesno&amp;diff=386</id>
		<title>Модуль:Yesno</title>
		<link rel="alternate" type="text/html" href="https://wiki.antidotez.ru/mediawiki/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Yesno&amp;diff=386"/>
		<updated>2026-04-19T18:43:46Z</updated>

		<summary type="html">&lt;p&gt;Antidote: 1 версия импортирована&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- Function allowing for consistent treatment of boolean-like wikitext input.&lt;br /&gt;
-- It works similarly to the template {{yesno}}.&lt;br /&gt;
&lt;br /&gt;
return function (val, default)&lt;br /&gt;
	-- If your wiki uses non-ascii characters for any of &amp;quot;yes&amp;quot;, &amp;quot;no&amp;quot;, etc., you&lt;br /&gt;
	-- should replace &amp;quot;val:lower()&amp;quot; with &amp;quot;mw.ustring.lower(val)&amp;quot; in the&lt;br /&gt;
	-- following line.&lt;br /&gt;
	val = type(val) == &#039;string&#039; and val:lower() or val&lt;br /&gt;
	if val == nil then&lt;br /&gt;
		return nil&lt;br /&gt;
	elseif val == true &lt;br /&gt;
		or val == &#039;yes&#039;&lt;br /&gt;
		or val == &#039;y&#039;&lt;br /&gt;
		or val == &#039;true&#039;&lt;br /&gt;
		or val == &#039;t&#039;&lt;br /&gt;
		or val == &#039;on&#039;&lt;br /&gt;
		or tonumber(val) == 1&lt;br /&gt;
	then&lt;br /&gt;
		return true&lt;br /&gt;
	elseif val == false&lt;br /&gt;
		or val == &#039;no&#039;&lt;br /&gt;
		or val == &#039;n&#039;&lt;br /&gt;
		or val == &#039;false&#039;&lt;br /&gt;
		or val == &#039;f&#039;&lt;br /&gt;
		or val == &#039;off&#039;&lt;br /&gt;
		or tonumber(val) == 0&lt;br /&gt;
	then&lt;br /&gt;
		return false&lt;br /&gt;
	else&lt;br /&gt;
		return default&lt;br /&gt;
	end&lt;br /&gt;
end&lt;/div&gt;</summary>
		<author><name>Antidote</name></author>
	</entry>
</feed>