<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://massarn.com/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Buto</id>
	<title>Тептар - Вклад [ru]</title>
	<link rel="self" type="application/atom+xml" href="https://massarn.com/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Buto"/>
	<link rel="alternate" type="text/html" href="https://massarn.com/w/%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/Buto"/>
	<updated>2026-10-24T05:21:00Z</updated>
	<subtitle>Вклад</subtitle>
	<generator>MediaWiki 1.46.2</generator>
	<entry>
		<id>https://massarn.com/w/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=2538</id>
		<title>Заглавная страница</title>
		<link rel="alternate" type="text/html" href="https://massarn.com/w/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=2538"/>
		<updated>2026-10-22T20:37:27Z</updated>

		<summary type="html">&lt;p&gt;Buto: Защитил страницу Заглавная страница ([Редактирование=Разрешено только администраторам] (бессрочно) [Переименование=Разрешено только администраторам] (бессрочно))&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;templatestyles src=&amp;quot;Шаблон:Заглавная/styles.css&amp;quot; /&amp;gt;__NOTOC____NOEDITSECTION__&lt;br /&gt;
{{Заглавная/Шапка}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;main-wrapper&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;main-wrapper-column&amp;quot;&amp;gt;&lt;br /&gt;
{{Раздел заглавной страницы&lt;br /&gt;
|ID = tfa&lt;br /&gt;
|Подзаголовок = Хаьржина яззамаш&lt;br /&gt;
|Заголовок = Избранные статьи&lt;br /&gt;
|Содержание = {{Материалы 1}}&lt;br /&gt;
|Читателям =&lt;br /&gt;
* &lt;br /&gt;
|Редакторам =&lt;br /&gt;
* {{Заглавная/Кнопка|Шаблон:Материалы 1|Просмотр шаблона|class=mw-ui-quiet}}&lt;br /&gt;
|Главное изображение = 1&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Раздел заглавной страницы&lt;br /&gt;
|ID = tga&lt;br /&gt;
|Подзаголовок = Дика яззамаш&lt;br /&gt;
|Заголовок = Хорошие статьи&lt;br /&gt;
|Содержание = {{Материалы 2}}&lt;br /&gt;
|Читателям =&lt;br /&gt;
* &amp;lt;!--{{Заглавная/Кнопка|{{Материалы 2|выводить = название}}|Читать}}--&amp;gt;&lt;br /&gt;
* &lt;br /&gt;
|Редакторам =&lt;br /&gt;
* &lt;br /&gt;
* {{Заглавная/Кнопка|Шаблон:Материалы 2|Просмотр шаблона|class=mw-ui-quiet}}&lt;br /&gt;
|Главное изображение = 1&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Раздел заглавной страницы&lt;br /&gt;
|ID = tfl&lt;br /&gt;
|Подзаголовок = Хаьржина могIам&lt;br /&gt;
|Заголовок = Избранный список&lt;br /&gt;
|Содержание = {{Материалы 3}}&lt;br /&gt;
|Читателям =&lt;br /&gt;
&lt;br /&gt;
|Редакторам =&lt;br /&gt;
*&lt;br /&gt;
* {{Заглавная/Кнопка|Шаблон:Материалы 3|Просмотр шаблона|class=mw-ui-quiet}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Раздел заглавной страницы&lt;br /&gt;
|ID = potd&lt;br /&gt;
|Подзаголовок = Яззамаш&lt;br /&gt;
|Заголовок = Статьи&lt;br /&gt;
|Содержание = {{Материалы 4}}&lt;br /&gt;
|Читателям =&lt;br /&gt;
*&lt;br /&gt;
* &lt;br /&gt;
|Редакторам =&lt;br /&gt;
* {{Заглавная/Кнопка|Шаблон:Материалы 4|Просмотр шаблона|class=mw-ui-quiet}}&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;main-wrapper-column&amp;quot;&amp;gt;&lt;br /&gt;
{{Раздел заглавной страницы&lt;br /&gt;
|ID = dyk&lt;br /&gt;
|Подзаголовок = Хаари шуна?&lt;br /&gt;
|Заголовок = Знаете ли вы?&lt;br /&gt;
|Содержание = {{Материалы 5}}&lt;br /&gt;
|Читателям =&lt;br /&gt;
* &lt;br /&gt;
* &lt;br /&gt;
|Редакторам =&lt;br /&gt;
* {{Заглавная/Кнопка|Шаблон:Материалы 5|Просмотр шаблона|class=mw-ui-quiet}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Раздел заглавной страницы&lt;br /&gt;
|ID = cur&lt;br /&gt;
|Подзаголовок = Хаи шуна ...&lt;br /&gt;
|Заголовок = Вы знали ...&lt;br /&gt;
|Содержание = {{Материалы 6}}&lt;br /&gt;
|Читателям =&lt;br /&gt;
* &lt;br /&gt;
* &lt;br /&gt;
|Редакторам =&lt;br /&gt;
* {{Заглавная/Кнопка|Шаблон:Материалы 6|Просмотр шаблона|class=mw-ui-quiet}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Раздел заглавной страницы&lt;br /&gt;
|ID = itd&lt;br /&gt;
|Подзаголовок = Кхин хилларш&lt;br /&gt;
|Заголовок = Другие события&lt;br /&gt;
|Содержание = {{Материалы 7}}&lt;br /&gt;
|Читателям =&lt;br /&gt;
* &lt;br /&gt;
* &lt;br /&gt;
|Редакторам =&lt;br /&gt;
* {{Заглавная/Кнопка|Шаблон:Материалы 7|Просмотр шаблона|class=mw-ui-quiet}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Раздел заглавной страницы&lt;br /&gt;
|ID = wotw&lt;br /&gt;
|Подзаголовок = Кхин яззамаш&lt;br /&gt;
|Заголовок = Другие статьи&lt;br /&gt;
|Содержание = {{Материалы 8}}&lt;br /&gt;
|Читателям =&lt;br /&gt;
* &lt;br /&gt;
* &lt;br /&gt;
|Редакторам =&lt;br /&gt;
* {{Заглавная/Кнопка|Шаблон:Материалы 8|Просмотр шаблона|class=mw-ui-quiet}}&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
{{очищать кэш|ежедневно}}&lt;br /&gt;
{{выполнить скрипт|mainPage}}&lt;/div&gt;</summary>
		<author><name>Buto</name></author>
	</entry>
	<entry>
		<id>https://massarn.com/w/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:%D0%A2%D0%B5%D1%81%D1%82%D1%8B_%D0%BC%D0%BE%D0%B4%D1%83%D0%BB%D1%8F/doc&amp;diff=2537</id>
		<title>Шаблон:Тесты модуля/doc</title>
		<link rel="alternate" type="text/html" href="https://massarn.com/w/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:%D0%A2%D0%B5%D1%81%D1%82%D1%8B_%D0%BC%D0%BE%D0%B4%D1%83%D0%BB%D1%8F/doc&amp;diff=2537"/>
		<updated>2026-10-22T20:32:51Z</updated>

		<summary type="html">&lt;p&gt;Buto: Новая страница: «{{docpage}} Шаблон сообщения для страницы тестов песочницы модуля. Может быть размещён на подстранице &amp;lt;code&amp;gt;/тесты&amp;lt;/code&amp;gt; модуля, использующего песочницу.  Другой путь песочницы можно задать в параметре {{para|страница_тестов}}, текст ссылки — в параметре {{para|текст_...»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{docpage}}&lt;br /&gt;
Шаблон сообщения для страницы тестов песочницы модуля. Может быть размещён на подстранице &amp;lt;code&amp;gt;/тесты&amp;lt;/code&amp;gt; модуля, использующего песочницу.&lt;br /&gt;
&lt;br /&gt;
Другой путь песочницы можно задать в параметре {{para|страница_тестов}}, текст ссылки — в параметре {{para|текст_ссылки}}.&lt;br /&gt;
&lt;br /&gt;
Добавляет {{c|Модули:Тесты|ю}}.&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
Подробнее о разработке шаблонов с использованием подстраниц песочницы и тестов (&amp;lt;code&amp;gt;/песочница&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;/тесты&amp;lt;/code&amp;gt;) читайте на странице «[[Тептар:Правка и тестирование шаблонов в песочнице|Правка и тестирование шаблонов в песочнице]]».&lt;br /&gt;
* {{tl|Тесты шаблона}}&lt;br /&gt;
* {{tl|Используйте песочницу}}&lt;br /&gt;
* {{tl|Песочница шаблона}}&lt;br /&gt;
* {{tl|TestCase}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;includeonly&amp;gt;&lt;br /&gt;
[[Категория:Шаблоны:Для документирования модулей]]&lt;br /&gt;
[[Категория:Шаблоны:Тесты]]&lt;br /&gt;
&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>Buto</name></author>
	</entry>
	<entry>
		<id>https://massarn.com/w/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:%D0%A2%D0%B5%D1%81%D1%82%D1%8B_%D0%BC%D0%BE%D0%B4%D1%83%D0%BB%D1%8F&amp;diff=2536</id>
		<title>Шаблон:Тесты модуля</title>
		<link rel="alternate" type="text/html" href="https://massarn.com/w/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:%D0%A2%D0%B5%D1%81%D1%82%D1%8B_%D0%BC%D0%BE%D0%B4%D1%83%D0%BB%D1%8F&amp;diff=2536"/>
		<updated>2026-10-22T20:32:16Z</updated>

		<summary type="html">&lt;p&gt;Buto: Новая страница: «{{ombox | image = 42px | text = Это страница контрольных примеров для тестирования &amp;lt;noinclude&amp;gt;песочницы&amp;lt;/noinclude&amp;gt;&amp;lt;includeonly&amp;gt;../{{{страница_тестов|{{{subpage-name|песочница}}}}}}|{{{текст_ссылки|{{{subpag...»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ombox&lt;br /&gt;
| image = [[Файл:Gnome-applications-science.svg|42px]]&lt;br /&gt;
| text =&lt;br /&gt;
Это страница [[Тептар:Правка и тестирование шаблонов в песочнице|контрольных примеров]] для тестирования &amp;lt;noinclude&amp;gt;[[/песочница|песочницы]]&amp;lt;/noinclude&amp;gt;&amp;lt;includeonly&amp;gt;[[../{{{страница_тестов|{{{subpage-name|песочница}}}}}}|{{{текст_ссылки|{{{subpage-link-text|песочницы}}}}}}]]&amp;lt;/includeonly&amp;gt; модуля «[[{{NAMESPACE}}:{{BASEPAGENAME}}|{{BASEPAGENAME}}]]». Чтобы обновить результаты тестов, {{очистить кэш|очистите кэш страницы}}.&lt;br /&gt;
| text-small = &amp;lt;div class=&amp;quot;hlist noprint plainlinks nowraplinks&amp;quot; style=&amp;quot;{{{style|}}}&amp;quot;&amp;gt; {{pb}} Можно просмотреть данную страницу в соответствующем стилевом оформлении (скине):&lt;br /&gt;
* [{{fullurl:{{{1|{{FULLPAGENAME}}}}}|useskin=vector-2022}} {{int:skinname-vector-2022}}]{{efn|Скин по умолчанию.}}&lt;br /&gt;
* [https://massarn.com/w{{localurl:{{{1|{{FULLPAGENAME}}}}}|useskin=minerva}} {{int:skinname-minerva}}]{{efn|Мобильная версия.}}&lt;br /&gt;
* [{{fullurl:{{{1|{{FULLPAGENAME}}}}}|useskin=vector}} {{int:skinname-vector}}]&lt;br /&gt;
* [{{fullurl:{{{1|{{FULLPAGENAME}}}}}|useskin=monobook}} {{int:skinname-monobook}}]&lt;br /&gt;
* [{{fullurl:{{{1|{{FULLPAGENAME}}}}}|useskin=timeless}} {{int:skinname-timeless}}]&lt;br /&gt;
&amp;lt;/div&amp;gt;{{комментарии}}&lt;br /&gt;
}}&amp;lt;includeonly&amp;gt;{{#ifeq: {{SUBPAGENAME}} | {{PAGENAME}} || __EXPECTUNUSEDTEMPLATE__ }}[[Категория:Модули:Тесты]]&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;{{doc}}&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Buto</name></author>
	</entry>
	<entry>
		<id>https://massarn.com/w/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:%D0%A2%D0%B5%D1%81%D1%82%D1%8B_%D1%88%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD%D0%B0/doc&amp;diff=2535</id>
		<title>Шаблон:Тесты шаблона/doc</title>
		<link rel="alternate" type="text/html" href="https://massarn.com/w/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:%D0%A2%D0%B5%D1%81%D1%82%D1%8B_%D1%88%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD%D0%B0/doc&amp;diff=2535"/>
		<updated>2026-10-22T20:22:45Z</updated>

		<summary type="html">&lt;p&gt;Buto: Новая страница: «{{docpage}} Шаблон сообщения для страницы тестов песочницы шаблона. Может быть размещён на подстранице &amp;lt;code&amp;gt;/тесты&amp;lt;/code&amp;gt; шаблона, использующего песочницу.  Другой путь песочницы можно задать в параметре {{para|страница_тестов}}, текст ссылки — в параметре {{para|тек...»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{docpage}}&lt;br /&gt;
Шаблон сообщения для страницы тестов песочницы шаблона. Может быть размещён на подстранице &amp;lt;code&amp;gt;/тесты&amp;lt;/code&amp;gt; шаблона, использующего песочницу.&lt;br /&gt;
&lt;br /&gt;
Другой путь песочницы можно задать в параметре {{para|страница_тестов}}, текст ссылки — в параметре {{para|текст_ссылки}}.&lt;br /&gt;
&lt;br /&gt;
Подробнее о разработке шаблонов с использованием подстраниц песочницы и тестов (&amp;lt;code&amp;gt;/песочница&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;/тесты&amp;lt;/code&amp;gt;) читайте на странице «[[Тептар:Правка и тестирование шаблонов в песочнице|Правка и тестирование шаблонов в песочнице]]».&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
* {{tl|Используйте песочницу}}&lt;br /&gt;
* {{tl|Песочница шаблона}}&lt;br /&gt;
* {{tl|TestCase}}&lt;br /&gt;
* {{tl|Тесты модуля}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;includeonly&amp;gt;&lt;br /&gt;
[[Категория:Шаблоны:Для документирования шаблонов]]&lt;br /&gt;
[[Категория:Шаблоны:Тесты]]&lt;br /&gt;
&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>Buto</name></author>
	</entry>
	<entry>
		<id>https://massarn.com/w/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:%D0%A2%D0%B5%D1%81%D1%82%D1%8B_%D1%88%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD%D0%B0&amp;diff=2534</id>
		<title>Шаблон:Тесты шаблона</title>
		<link rel="alternate" type="text/html" href="https://massarn.com/w/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:%D0%A2%D0%B5%D1%81%D1%82%D1%8B_%D1%88%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD%D0%B0&amp;diff=2534"/>
		<updated>2026-10-22T20:22:06Z</updated>

		<summary type="html">&lt;p&gt;Buto: Новая страница: «{{ombox | image = 42px | text = Это страница контрольных примеров для тестирования &amp;lt;noinclude&amp;gt;песочницы&amp;lt;/noinclude&amp;gt;&amp;lt;includeonly&amp;gt;../{{{страница_тестов|{{{subpage-name|песочница}}}}}}|{{{текст_ссылки|{{{subpag...»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ombox&lt;br /&gt;
| image = [[Файл:Gnome-applications-science.svg|42px]]&lt;br /&gt;
| text =&lt;br /&gt;
Это страница [[Тептар:Правка и тестирование шаблонов в песочнице|контрольных примеров]] для тестирования &amp;lt;noinclude&amp;gt;[[/песочница|песочницы]]&amp;lt;/noinclude&amp;gt;&amp;lt;includeonly&amp;gt;[[../{{{страница_тестов|{{{subpage-name|песочница}}}}}}|{{{текст_ссылки|{{{subpage-link-text|песочницы}}}}}}]]&amp;lt;/includeonly&amp;gt; шаблона «[[{{NAMESPACE}}:{{BASEPAGENAME}}|{{BASEPAGENAME}}]]». Чтобы обновить результаты тестов, {{очистить кэш|очистите кэш страницы}}.&lt;br /&gt;
| text-small = {{pb}} Если задействовано множество тестов сложного шаблона, то тесты, расположенные последними на странице, [[Тептар:Пределы шаблонов|могут перестать работать]] из-за ограничений MediaWiki. Проверьте в HTML-коде страницы комментарий «&amp;lt;syntaxhighlight inline copy lang=&amp;quot;wikitext&amp;quot;&amp;gt;NewPP limit report&amp;lt;/syntaxhighlight&amp;gt;».&lt;br /&gt;
&lt;br /&gt;
Для исследования разных вариантов, как использовать шаблон, существует [[Служебная:Развёртка шаблонов]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;hlist noprint plainlinks nowraplinks&amp;quot; style=&amp;quot;{{{style|}}}&amp;quot;&amp;gt;Можно просмотреть данную страницу в соответствующем стилевом оформлении (скине):&lt;br /&gt;
* [{{fullurl:{{{1|{{FULLPAGENAME}}}}}|useskin=vector-2022}} {{int:skinname-vector-2022}}]{{efn|Скин по умолчанию.}}&lt;br /&gt;
* [//ru.m.wikipedia.org{{localurl:{{{1|{{FULLPAGENAME}}}}}|useskin=minerva}} {{int:skinname-minerva}}]{{efn|Мобильная версия.}}&lt;br /&gt;
* [{{fullurl:{{{1|{{FULLPAGENAME}}}}}|useskin=vector}} {{int:skinname-vector}}]&lt;br /&gt;
* [{{fullurl:{{{1|{{FULLPAGENAME}}}}}|useskin=monobook}} {{int:skinname-monobook}}]&lt;br /&gt;
* [{{fullurl:{{{1|{{FULLPAGENAME}}}}}|useskin=timeless}} {{int:skinname-timeless}}]&lt;br /&gt;
&amp;lt;/div&amp;gt;{{комментарии}}&lt;br /&gt;
}}&amp;lt;includeonly&amp;gt;{{#ifeq: {{SUBPAGENAME}} | {{PAGENAME}} || __EXPECTUNUSEDTEMPLATE__ }}[[Категория:Тесты шаблонов]]&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;{{doc}}&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Buto</name></author>
	</entry>
	<entry>
		<id>https://massarn.com/w/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Str_mid/testcases&amp;diff=2533</id>
		<title>Шаблон:Str mid/testcases</title>
		<link rel="alternate" type="text/html" href="https://massarn.com/w/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Str_mid/testcases&amp;diff=2533"/>
		<updated>2026-10-22T20:21:04Z</updated>

		<summary type="html">&lt;p&gt;Buto: Новая страница: «{{Тесты шаблона}}  * {{tl|Str mid/core}} * {{tl|Str mid/sandbox}}  == input params 2,3,4 == === Regular === * abc;1;26: {{str mid| Abcdefghijklmnopqrstuvwxyz |1|26}} * abc;10;5: {{str mid| Abcdefghijklmnopqrstuvwxyz |10|5}} * abc;10;;: {{str mid| Abcdefghijklmnopqrstuvwxyz |10}} * abc;;6;: {{str mid|Abcdefghijklmnopqrstuvwxyz||6}} * abc;6;200: {{str mid|Abcdefghijklmnopqrstuvwxyz|6|200}} * abc;6;200: {{str mid|Abcdefghijklmnopqrstuvwxyz|6|200}}...»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Тесты шаблона}}&lt;br /&gt;
&lt;br /&gt;
* {{tl|Str mid/core}}&lt;br /&gt;
* {{tl|Str mid/sandbox}}&lt;br /&gt;
&lt;br /&gt;
== input params 2,3,4 ==&lt;br /&gt;
=== Regular ===&lt;br /&gt;
* abc;1;26: {{str mid| Abcdefghijklmnopqrstuvwxyz |1|26}}&lt;br /&gt;
* abc;10;5: {{str mid| Abcdefghijklmnopqrstuvwxyz |10|5}}&lt;br /&gt;
* abc;10;;: {{str mid| Abcdefghijklmnopqrstuvwxyz |10}}&lt;br /&gt;
* abc;;6;: {{str mid|Abcdefghijklmnopqrstuvwxyz||6}}&lt;br /&gt;
* abc;6;200: {{str mid|Abcdefghijklmnopqrstuvwxyz|6|200}}&lt;br /&gt;
* abc;6;200: {{str mid|Abcdefghijklmnopqrstuvwxyz|6|200}}&lt;br /&gt;
&lt;br /&gt;
=== Use param 4 (index j) not sublength ===&lt;br /&gt;
* abc;10;15: {{str mid| Abcdefghijklmnopqrstuvwxyz |10||15}}&lt;br /&gt;
* abc;10; {{str mid| Abcdefghijklmnopqrstuvwxyz |10||}}&lt;br /&gt;
* abc;;6: {{str mid| Abcdefghijklmnopqrstuvwxyz |||6}}&lt;br /&gt;
&lt;br /&gt;
=== blank params ===&lt;br /&gt;
; blank string&lt;br /&gt;
* : {{str mid}}&lt;br /&gt;
* ;5: {{str mid|2=5}}&lt;br /&gt;
* ;;5: {{str mid|3=5}}&lt;br /&gt;
* ;;;5: {{str mid|4=5}}&lt;br /&gt;
* ;6;7;8: {{str mid|2=6|3=7|4=8}}&lt;br /&gt;
&lt;br /&gt;
;blank for numbers&lt;br /&gt;
* abc: {{str mid| Abcdefghijklmnopqrstuvwxyz}}&lt;br /&gt;
* abc;: {{str mid| Abcdefghijklmnopqrstuvwxyz|}}&lt;br /&gt;
* abc;;: {{str mid| Abcdefghijklmnopqrstuvwxyz||}}&lt;br /&gt;
* abc;;;: {{str mid| Abcdefghijklmnopqrstuvwxyz|||}}&lt;br /&gt;
&lt;br /&gt;
* abc;2=: {{str mid| Abcdefghijklmnopqrstuvwxyz|2=}}&lt;br /&gt;
* abc;2=;3=: {{str mid| Abcdefghijklmnopqrstuvwxyz|2=|3=}}&lt;br /&gt;
* abc;2=;3=;4=: {{str mid| Abcdefghijklmnopqrstuvwxyz|2=|3=|4=}}&lt;br /&gt;
&lt;br /&gt;
* abc;;3=: {{str mid| Abcdefghijklmnopqrstuvwxyz |3=}}&lt;br /&gt;
* abc;;;4=: {{str mid| Abcdefghijklmnopqrstuvwxyz |4=}}&lt;br /&gt;
* abc;2=;;4=: {{str mid| Abcdefghijklmnopqrstuvwxyz |2=|4=}}&lt;br /&gt;
&lt;br /&gt;
=== i &amp;lt; 0 ===&lt;br /&gt;
* abc;-10;: {{str mid| Abcdefghijklmnopqrstuvwxyz |-10}}&lt;br /&gt;
* abc;-10;7: {{str mid| Abcdefghijklmnopqrstuvwxyz |-10|7}}&lt;br /&gt;
&lt;br /&gt;
=== i &amp;lt; 0, using j ===&lt;br /&gt;
* abc;-10;;20: {{str mid| Abcdefghijklmnopqrstuvwxyz |-10||20}}&lt;br /&gt;
* abc;-10;;-7: {{str mid| Abcdefghijklmnopqrstuvwxyz |-10||-7}}&lt;br /&gt;
* abc;-10;;-10: {{str mid| Abcdefghijklmnopqrstuvwxyz |-10||-10}}&lt;br /&gt;
* abc;-10;;7: {{str mid| Abcdefghijklmnopqrstuvwxyz |-10||7}}&lt;br /&gt;
&lt;br /&gt;
=== sublen&amp;lt;0 ===&lt;br /&gt;
* abc;2=5;3=-3: {{str mid| Abcdefghijklmnopqrstuvwxyz |2=5|3=-3}}&lt;br /&gt;
* abc;2=7;3=-3: {{str mid| Abcdefghijklmnopqrstuvwxyz |2=7|3=-3}}&lt;br /&gt;
* abc;;3=-3;j=10: {{str mid| Abcdefghijklmnopqrstuvwxyz |2=|3=-3|4=10}}&lt;br /&gt;
* abc;;3=3;j=10: {{str mid| Abcdefghijklmnopqrstuvwxyz |2=|3=3|4=10}}&lt;br /&gt;
* abc;2=7;3=-3: {{str mid| Abcdefghijklmnopqrstuvwxyz |2=7|3=-3}}&lt;br /&gt;
* abc;;3=-3: {{str mid| Abcdefghijklmnopqrstuvwxyz |3=-3}} TODO apply logic: from the end&lt;br /&gt;
* abc;;3=-10;4=30: {{str mid| Abcdefghijklmnopqrstuvwxyz |3=-10|4=30}} (check this: j=30 or j=26?)&lt;br /&gt;
&lt;br /&gt;
=== Zeros ===&lt;br /&gt;
* abc;0: {{str mid| Abcdefghijklmnopqrstuvwxyz |0}}&lt;br /&gt;
* abc;5;0: {{str mid| Abcdefghijklmnopqrstuvwxyz |5|0}}&lt;br /&gt;
* abc;5;;0: {{str mid| Abcdefghijklmnopqrstuvwxyz |5||0}}&lt;br /&gt;
* abc;0;0;0: {{str mid| Abcdefghijklmnopqrstuvwxyz |0|0|0}}&lt;br /&gt;
&lt;br /&gt;
* abc;2=;: {{str mid| Abcdefghijklmnopqrstuvwxyz |2=}}&lt;br /&gt;
* abc;2=5;3=0: {{str mid| Abcdefghijklmnopqrstuvwxyz |2=5|3=0}}&lt;br /&gt;
* abc;2=5;j=0: {{str mid| Abcdefghijklmnopqrstuvwxyz |2=5|4=0}}&lt;br /&gt;
&lt;br /&gt;
=== Input errors ===&lt;br /&gt;
* abc;2=2;3=3;7: {{str mid|Abcdefghijklmnopqrstuvwxyz |2=2|3=3|4=7}}&lt;br /&gt;
* abc;;2=foo; {{str mid|Abcdefghijklmnopqrstuvwxyz |2=foo}}&lt;br /&gt;
* abc;3=foo; {{str mid|Abcdefghijklmnopqrstuvwxyz |3=foo}}&lt;br /&gt;
* abc;2=foo;3=bar; {{str mid|Abcdefghijklmnopqrstuvwxyz |2=foo|3=bar}}&lt;br /&gt;
&lt;br /&gt;
=== Index errors ===&lt;br /&gt;
;Triangular calculation check:&lt;br /&gt;
* abc;6;7;8: {{str mid|Abcdefghijklmnopqrstuvwxyz|2=6|3=7|4=8}}&lt;br /&gt;
* abc;6;7;8: {{str mid|Abcdefghijklmnopqrstuvwxyz|6|7|8}}&lt;br /&gt;
* ;6;1;8: {{str mid|1=Abcdefghijklmnopqrstuvwxyz|2=6|3=1|4=8}}&lt;br /&gt;
&lt;br /&gt;
;other&lt;br /&gt;
* abc;0: {{str mid| Abcdefghijklmnopqrstuvwxyz |0}}&lt;br /&gt;
* abc;3;0: {{str mid| Abcdefghijklmnopqrstuvwxyz |3|0}}&lt;br /&gt;
* abc;0;;15: {{str mid| Abcdefghijklmnopqrstuvwxyz |0||15}}&lt;br /&gt;
* abc;10;;7: {{str mid| Abcdefghijklmnopqrstuvwxyz |10||7}}&lt;br /&gt;
* abc;-5;26: {{str mid| Abcdefghijklmnopqrstuvwxyz |-5|26}}&lt;br /&gt;
* abc;-1;5: {{str mid| Abcdefghijklmnopqrstuvwxyz |-1|5}}&lt;br /&gt;
&lt;br /&gt;
=== Error message suppression ===&lt;br /&gt;
* abc;0;10; ignore errors=false: {{str mid| Abcdefghijklmnopqrstuvwxyz |2=0|3=10|ignore errors=false}}&lt;br /&gt;
* abc;0;10; ignore errors=true: {{str mid| Abcdefghijklmnopqrstuvwxyz |2=0|3=10|ignore errors=true}}&lt;br /&gt;
&lt;br /&gt;
* abc;0;5: ignore errors=false; ignore errors=false: {{str mid| Abcdefghijklmnopqrstuvwxyz |2=0|3=5|ignore errors=false}}&lt;br /&gt;
* abc;0;5:ignore errors=true: {{str mid| Abcdefghijklmnopqrstuvwxyz |2=0|3=5|ignore errors=true}}&lt;/div&gt;</summary>
		<author><name>Buto</name></author>
	</entry>
	<entry>
		<id>https://massarn.com/w/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Ent&amp;diff=2532</id>
		<title>Шаблон:Ent</title>
		<link rel="alternate" type="text/html" href="https://massarn.com/w/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Ent&amp;diff=2532"/>
		<updated>2026-10-22T20:19:30Z</updated>

		<summary type="html">&lt;p&gt;Buto: Новая страница: «{{t|{{{1}}}|lang=en}}&amp;lt;noinclude&amp;gt;{{doc-inline}} Ссылка на шаблон в английском разделе. Шаблон-обёртка для {{t|t}}.  {{пример|ent|Underlinked}}  {{шаблоны для документирования}}  {{doc-end}} Категория:Шаблоны:Ссылки на разделы Тептар Категория:Шаблоны:Ссылки на шаблоны Категория:Шаблоны:Д...»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{t|{{{1}}}|lang=en}}&amp;lt;noinclude&amp;gt;{{doc-inline}}&lt;br /&gt;
Ссылка на шаблон в английском разделе. Шаблон-обёртка для {{t|t}}.&lt;br /&gt;
&lt;br /&gt;
{{пример|ent|Underlinked}}&lt;br /&gt;
&lt;br /&gt;
{{шаблоны для документирования}}&lt;br /&gt;
&lt;br /&gt;
{{doc-end}}&lt;br /&gt;
[[Категория:Шаблоны:Ссылки на разделы Тептар]]&lt;br /&gt;
[[Категория:Шаблоны:Ссылки на шаблоны]]&lt;br /&gt;
[[Категория:Шаблоны:Для облегчения набора]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Buto</name></author>
	</entry>
	<entry>
		<id>https://massarn.com/w/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Str_sub_find/doc&amp;diff=2531</id>
		<title>Шаблон:Str sub find/doc</title>
		<link rel="alternate" type="text/html" href="https://massarn.com/w/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Str_sub_find/doc&amp;diff=2531"/>
		<updated>2026-10-22T20:13:20Z</updated>

		<summary type="html">&lt;p&gt;Buto: Новая страница: «{{docpage}} {{onLua|String}}  Данный шаблон ищет подстроку в строке с заданным отступом от начала.  === Использование === : {{tlc|str sub find|&amp;lt;строка1&amp;gt;|&amp;lt;строка2&amp;gt;|&amp;lt;отступ&amp;gt;}}  Если подстрока найдена, возвращает 1, в противном случае возвращает пустую строку. Такой результат удобен дл...»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{docpage}}&lt;br /&gt;
{{onLua|String}}&lt;br /&gt;
&lt;br /&gt;
Данный шаблон ищет подстроку в строке с заданным отступом от начала.&lt;br /&gt;
&lt;br /&gt;
=== Использование ===&lt;br /&gt;
: {{tlc|str sub find|&amp;lt;строка1&amp;gt;|&amp;lt;строка2&amp;gt;|&amp;lt;отступ&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
Если подстрока найдена, возвращает 1, в противном случае возвращает пустую строку. Такой результат удобен для использования в [[ТП:ПАРС|функциях парсера]], как, например, {{mwmw|#if:}}. Отступы нумеруются с нуля, по умолчанию отступ равен нулю.&lt;br /&gt;
&lt;br /&gt;
=== Примеры ===&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{#if: {{str sub find|abcdef|abc}}   | Подстрока найдена | Подстрока не найдена }}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; → {{#if:{{str sub find|abcdef|abc}}|Подстрока найдена|Подстрока не найдена}}&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{#if: {{str sub find|abcdef|abc|2}} | Подстрока найдена | Подстрока не найдена }}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; → {{#if:{{str sub find|abcdef|abc|2}}|Подстрока найдена|Подстрока не найдена}}&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{#if: {{str sub find|abcdef|def}}   | Подстрока найдена | Подстрока не найдена }}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; → {{#if:{{str sub find|abcdef|def}}|Подстрока найдена|Подстрока не найдена}}&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{#if: {{str sub find|abcdef|def|3}} | Подстрока найдена | Подстрока не найдена }}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; → {{#if:{{str sub find|abcdef|def|3}}|Подстрока найдена|Подстрока не найдена}}&lt;br /&gt;
&lt;br /&gt;
{{шаблоны обработки строк|анализ}}&lt;/div&gt;</summary>
		<author><name>Buto</name></author>
	</entry>
	<entry>
		<id>https://massarn.com/w/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Str_sub_find&amp;diff=2530</id>
		<title>Шаблон:Str sub find</title>
		<link rel="alternate" type="text/html" href="https://massarn.com/w/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Str_sub_find&amp;diff=2530"/>
		<updated>2026-10-22T20:12:43Z</updated>

		<summary type="html">&lt;p&gt;Buto: Новая страница: «{{&amp;lt;includeonly&amp;gt;safesubst:&amp;lt;/includeonly&amp;gt;#ifeq:{{&amp;lt;includeonly&amp;gt;safesubst:&amp;lt;/includeonly&amp;gt;#Invoke:String|find|{{{1}}}|{{{2}}}|{{&amp;lt;includeonly&amp;gt;safesubst:&amp;lt;/includeonly&amp;gt;#expr:1+{{{3|0}}}}}|plain={{{plain|}}}}}|{{&amp;lt;includeonly&amp;gt;safesubst:&amp;lt;/includeonly&amp;gt;#expr:1+{{{3|0}}}}}|1}}&amp;lt;noinclude&amp;gt; {{doc}}&amp;lt;/noinclude&amp;gt;»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{&amp;lt;includeonly&amp;gt;safesubst:&amp;lt;/includeonly&amp;gt;#ifeq:{{&amp;lt;includeonly&amp;gt;safesubst:&amp;lt;/includeonly&amp;gt;#Invoke:String|find|{{{1}}}|{{{2}}}|{{&amp;lt;includeonly&amp;gt;safesubst:&amp;lt;/includeonly&amp;gt;#expr:1+{{{3|0}}}}}|plain={{{plain|}}}}}|{{&amp;lt;includeonly&amp;gt;safesubst:&amp;lt;/includeonly&amp;gt;#expr:1+{{{3|0}}}}}|1}}&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{doc}}&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Buto</name></author>
	</entry>
	<entry>
		<id>https://massarn.com/w/index.php?title=$1&amp;diff=2529</id>
		<title>$1</title>
		<link rel="alternate" type="text/html" href="https://massarn.com/w/index.php?title=$1&amp;diff=2529"/>
		<updated>2026-10-22T20:06:31Z</updated>

		<summary type="html">&lt;p&gt;Buto: Перенаправление на Заглавная страница&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Заглавная страница]]&lt;/div&gt;</summary>
		<author><name>Buto</name></author>
	</entry>
	<entry>
		<id>https://massarn.com/w/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Str_mid/doc&amp;diff=2528</id>
		<title>Шаблон:Str mid/doc</title>
		<link rel="alternate" type="text/html" href="https://massarn.com/w/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Str_mid/doc&amp;diff=2528"/>
		<updated>2026-10-22T20:03:02Z</updated>

		<summary type="html">&lt;p&gt;Buto: Новая страница: «{{docpage}} {{onLua|String|pos}}  * {{tl|Str mid}} * {{tl|Str mid/core}} * {{tl|Str mid/testcases}}  == Использование == Символы в исходной строке нумеруются с единицы до длины строки. Подстрока определятся двумя индексами. &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt; {{str mid|&amp;lt;строка&amp;gt;|&amp;lt;индекс первого символа&amp;gt;|&amp;lt;длина подстроки&amp;gt;|&amp;lt;индекс пос...»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{docpage}}&lt;br /&gt;
{{onLua|String|pos}}&lt;br /&gt;
&lt;br /&gt;
* {{tl|Str mid}}&lt;br /&gt;
* {{tl|Str mid/core}}&lt;br /&gt;
* {{tl|Str mid/testcases}}&lt;br /&gt;
&lt;br /&gt;
== Использование ==&lt;br /&gt;
Символы в исходной строке нумеруются с единицы до длины строки. Подстрока определятся двумя индексами.&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt; {{str mid|&amp;lt;строка&amp;gt;|&amp;lt;индекс первого символа&amp;gt;|&amp;lt;длина подстроки&amp;gt;|&amp;lt;индекс последнего символа&amp;gt;}} &amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* {{example||Abcdefghijklmnopqrstuvwxyz|5|3}}&lt;br /&gt;
&lt;br /&gt;
Если второй параметр опущен, подстрока берётся с начала строки:&lt;br /&gt;
* {{example||Abcdefghijklmnopqrstuvwxyz||5}}&lt;br /&gt;
&lt;br /&gt;
Если третий параметр опущен, подстрока берётся до конца строки:&lt;br /&gt;
* {{example||Abcdefghijklmnopqrstuvwxyz|15}}&lt;br /&gt;
&lt;br /&gt;
Если вместо третьего параметра задать четвёртый, то будет возвращена подстрока по символ с таким номером:&lt;br /&gt;
* {{example||Abcdefghijklmnopqrstuvwxyz|5||7}}&lt;br /&gt;
&lt;br /&gt;
== Подсчёт с конца ==&lt;br /&gt;
При введении отрицательных значений, индексы считаются с обратной стороны:&lt;br /&gt;
* {{example||Abcdefghijklmnopqrstuvwxyz|-7|4}}&lt;br /&gt;
* {{example||Abcdefghijklmnopqrstuvwxyz|-7}}&lt;br /&gt;
&lt;br /&gt;
== Пробелы ==&lt;br /&gt;
В результирующей строке пробелы &amp;lt;!--кажется, тут различия с английской версией! не --&amp;gt; обрезаются:&lt;br /&gt;
* {{example||I like this.|2|6|_prefix=&amp;gt;|_postfix=&amp;lt;}}&lt;br /&gt;
Исходная строка до обработки от них тоже избавляется:&lt;br /&gt;
* {{example||   I like this.   |2|6|_prefix=&amp;gt;|_postfix=&amp;lt;}}&lt;br /&gt;
&lt;br /&gt;
== Сообщения об ошибках ==&lt;br /&gt;
При выходе за границы строки выбрасывается ошибка:&lt;br /&gt;
* {{example||Abcdefghijklmnopqrstuvwxyz|30|_nocat=1}}&lt;br /&gt;
* {{example||Abcdefghijklmnopqrstuvwxyz|0|45|_nocat=1}}&lt;br /&gt;
При установке {{para|ignore errors|true}} вместо ошибки возвращается пустая строка:&lt;br /&gt;
* {{example||Abcdefghijklmnopqrstuvwxyz|0|45|ignore errors=true}}&lt;br /&gt;
&lt;br /&gt;
=== Категория ошибок ===&lt;br /&gt;
* {{para|no category|true}} отключает добавление в категорию.&lt;br /&gt;
* {{para|error category|{{brackets|Категория:Название категории}}}} позволяет заменять категорию, в которую заносятся страницы с ошибками.&lt;br /&gt;
: По умолчанию используется [[:Категория:Страницы с ошибками модуля String]].&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
* {{tl|str sub}} — индексы нумеруются с нуля.&lt;br /&gt;
{{шаблоны обработки строк|обрезка}}&lt;/div&gt;</summary>
		<author><name>Buto</name></author>
	</entry>
	<entry>
		<id>https://massarn.com/w/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Str_mid/core&amp;diff=2527</id>
		<title>Шаблон:Str mid/core</title>
		<link rel="alternate" type="text/html" href="https://massarn.com/w/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Str_mid/core&amp;diff=2527"/>
		<updated>2026-10-22T20:01:45Z</updated>

		<summary type="html">&lt;p&gt;Buto: Новая страница: «&amp;lt;includeonly&amp;gt;{{#ifexpr:({{#if:{{{sublen|}}}|{{{sublen|}}}|1}}=0) or ({{{slen|1}}}=0)|&amp;lt;!--blank--&amp;gt;  |{{#if:{{{triangle check|}}}|{{error|{{{triangle check|}}}}}   |{{#invoke:String|sub |s={{{s|}}} |i={{#ifeq:{{{invert|no}}}|yes|{{{j|}}}|{{{i|}}}}} |j={{#ifeq:{{{invert|no}}}|yes|{{{i|}}}|{{{j|}}}}} |ignore_errors={{{ignore_errors|false}}} |{{#if:{{{error_category|}}}|error_category={{{error_category}}}}} |no_category={{{no_category|false}}}&amp;lt;!-- --&amp;gt;}}}}}}&amp;lt;!-- -...»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;{{#ifexpr:({{#if:{{{sublen|}}}|{{{sublen|}}}|1}}=0) or ({{{slen|1}}}=0)|&amp;lt;!--blank--&amp;gt;&lt;br /&gt;
 |{{#if:{{{triangle check|}}}|{{error|{{{triangle check|}}}}}&lt;br /&gt;
  |{{#invoke:String|sub&lt;br /&gt;
|s={{{s|}}}&lt;br /&gt;
|i={{#ifeq:{{{invert|no}}}|yes|{{{j|}}}|{{{i|}}}}}&lt;br /&gt;
|j={{#ifeq:{{{invert|no}}}|yes|{{{i|}}}|{{{j|}}}}}&lt;br /&gt;
|ignore_errors={{{ignore_errors|false}}}&lt;br /&gt;
|{{#if:{{{error_category|}}}|error_category={{{error_category}}}}}&lt;br /&gt;
|no_category={{{no_category|false}}}&amp;lt;!--&lt;br /&gt;
--&amp;gt;}}}}}}&amp;lt;!--&lt;br /&gt;
--&amp;gt;{{#ifeq:{{{dbg|no}}}&lt;br /&gt;
|yes|{{{dbg_in|}}}_CORE:slen:{{{slen|u}}}_i={{{i|u}}}_j={{{j|u}}}_inv={{{invert|u}}}_tchk={{#if:{{{triangle check|}}}|TCHK|-}}_blankexpr:{{#expr:({{#if:{{{sublen|}}}|{{{sublen|}}}|1}}=0) or ({{{slen|1}}}=0)}}&lt;br /&gt;
}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{doc-inline}}&lt;br /&gt;
* {{tl|Str mid}}&lt;br /&gt;
* {{tl|Str mid/core}}&lt;br /&gt;
* {{tl|Str mid/testcases}}&lt;br /&gt;
{{doc-end}}&lt;br /&gt;
[[Категория:Шаблоны:Подстраницы шаблонов]]&lt;br /&gt;
[[Категория:Шаблоны:Работа со строками]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Buto</name></author>
	</entry>
	<entry>
		<id>https://massarn.com/w/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Str_mid&amp;diff=2526</id>
		<title>Шаблон:Str mid</title>
		<link rel="alternate" type="text/html" href="https://massarn.com/w/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Str_mid&amp;diff=2526"/>
		<updated>2026-10-22T20:01:18Z</updated>

		<summary type="html">&lt;p&gt;Buto: Новая страница: «{{str mid/core | s={{{1|}}} | i={{#if:{{{2|}}}}|{{{2|}}}|{{#ifexpr:({{#if:{{{3|}}}|1|0}} and {{#if:{{{4|}}}|1|0}})|{{#expr:{{min|{{{4|}}}|{{#invoke:String|len|{{trim|{{{1|}}}}}}}}}-{{{3|}}}+{{#ifexpr:{{{3|}}}&amp;lt;0|-1|1}}}}|1}}}} | j={{min|{{#invoke:String|len|{{trim|{{{1|}}}}}}}|{{#if:{{{4|}}}|{{{4|}}}|{{#if:{{{3|}}}|{{#expr:{{#if:{{{2|}}}|{{{2|}}}|1}}+{{{3|}}}+{{#ifexpr:{{{3|}}}&amp;lt;0|1|-1}}}}|}}}}}} | slen={{#invoke:String|len|{{trim|{{{1|}}}}}}} | sublen={{forma...»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{str mid/core&lt;br /&gt;
| s={{{1|}}}&lt;br /&gt;
| i={{#if:{{{2|}}}}|{{{2|}}}|{{#ifexpr:({{#if:{{{3|}}}|1|0}} and {{#if:{{{4|}}}|1|0}})|{{#expr:{{min|{{{4|}}}|{{#invoke:String|len|{{trim|{{{1|}}}}}}}}}-{{{3|}}}+{{#ifexpr:{{{3|}}}&amp;lt;0|-1|1}}}}|1}}}}&lt;br /&gt;
| j={{min|{{#invoke:String|len|{{trim|{{{1|}}}}}}}|{{#if:{{{4|}}}|{{{4|}}}|{{#if:{{{3|}}}|{{#expr:{{#if:{{{2|}}}|{{{2|}}}|1}}+{{{3|}}}+{{#ifexpr:{{{3|}}}&amp;lt;0|1|-1}}}}|}}}}}}&lt;br /&gt;
| slen={{#invoke:String|len|{{trim|{{{1|}}}}}}}&lt;br /&gt;
| sublen={{formatnum:{{{3|}}}}}&lt;br /&gt;
| invert={{#ifexpr:{{formatnum:{{#ifeq:{{{3|}}}||0|{{{3|}}}}}}}&amp;lt;0|yes|no}}&lt;br /&gt;
| triangle check={{#if:{{{2|}}}|{{#if:{{{3|}}}|{{#if:{{{4|}}}|{{#ifexpr:(({{{4|}}}-{{{2|0}}}+1)&amp;lt;&amp;gt;{{{3|0}}}) and ({{{2|}}}*{{{4|}}}&amp;lt;&amp;gt;0)|Ошибка при вызове {{tl|Str mid}}: индексы i={{{2|}}} и j={{{4|}}} не соответствуют длине подстроки {{trim|{{{3|}}}}}}}|}}}}}}&lt;br /&gt;
|ignore_errors={{{ignore errors|false}}}&lt;br /&gt;
|error_category={{{error category|}}}&lt;br /&gt;
|no_category={{{no category|{{{nocat|false}}}}}}&lt;br /&gt;
&lt;br /&gt;
|dbg_in=_IN:_i2={{{2|u}}}_sublen3={{{3|u}}}_j4={{{4|u}}}_min={{min|{{{4|}}}|{{str len|{{trim|{{{1|}}}}}}}}}&lt;br /&gt;
|dbg=no&lt;br /&gt;
}}&amp;lt;noinclude&amp;gt;{{doc}}&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Buto</name></author>
	</entry>
	<entry>
		<id>https://massarn.com/w/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:U/doc&amp;diff=2525</id>
		<title>Шаблон:U/doc</title>
		<link rel="alternate" type="text/html" href="https://massarn.com/w/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:U/doc&amp;diff=2525"/>
		<updated>2026-10-22T20:00:20Z</updated>

		<summary type="html">&lt;p&gt;Buto: Новая страница: «{{docpage}}__NOTOC__ Шаблон отображает имя участника Тептар со ссылкой на его страницу. Предназначен для использования вне пространства энциклопедических статей: форум, ТП:Страницы обсуждений|страницы обсужде...»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{docpage}}__NOTOC__&lt;br /&gt;
Шаблон отображает имя участника [[Тептар]] со ссылкой на [[Тептар:Личная страница участника|его страницу]]. Предназначен для использования вне пространства энциклопедических статей: [[ТП:форум|форум]], [[ТП:Страницы обсуждений|страницы обсуждения]] и т. п. Использование шаблона вызывает уведомление упомянутого участника, подробнее см. [[ТП:пинг|ТП:пинг]].&lt;br /&gt;
&lt;br /&gt;
В заголовках тем используйте его только с подстановкой, так как прямое использование ломает ссылки для быстрого перехода из описания изменений.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Обратите внимание&#039;&#039;&#039;: в Тептар для пространства имён Участник есть сокращение &amp;quot;u:&amp;quot; ([[WP:Пространства имён#Синонимы и псевдонимы]]). Правильное использование: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{u|Имя}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;, что соответствует &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{Шаблон:U |1=Имя}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;. Если случайно указать &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{u:Имя}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;, что соответствует &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{Участник:Имя}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;, то вся личная страница участника подставится в обсуждение, а если в ней есть ссылки на страницы участников, произойдёт ещё и массовое упоминание этих участников.&lt;br /&gt;
&lt;br /&gt;
{{t:u|Имя}}&lt;br /&gt;
&lt;br /&gt;
== Использование ==&lt;br /&gt;
{{tc||&#039;&#039;Имя участника&#039;&#039;{{optp|&#039;&#039;текст ссылки&#039;&#039;}}}}&lt;br /&gt;
&lt;br /&gt;
{{optp/comment}}&lt;br /&gt;
&lt;br /&gt;
=== Примеры ===&lt;br /&gt;
* {{nobrc|&amp;lt;nowiki&amp;gt;К нам присоединился {{u|Участник}}&amp;lt;/nowiki&amp;gt;}} → К нам присоединился {{u|Участник}}.&lt;br /&gt;
* {{nobrc|&amp;lt;nowiki&amp;gt;У {{u|Участник}}а есть и другие проекты.&amp;lt;/nowiki&amp;gt;}} → У {{u|Участник}}а есть и другие проекты.&lt;br /&gt;
* {{nobrc|&amp;lt;nowiki&amp;gt;Об {{u|Участник|этом участнике}} есть статья в Тептар.&amp;lt;/nowiki&amp;gt;}} → Об {{u|Участник|этом участнике}} есть статья в Тептар.&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
* {{t|noping}} — для создания ссылки, не уведомляющей участников;&lt;br /&gt;
* {{t|user}}, {{t|userlinks}} — в дополнение к ссылке на личную страницу участника, выводят дополнительные ссылки (на страницу обсуждения, вклад и т. д.);&lt;br /&gt;
** {{t|userlinks-cu}} — в дополнение к упомянутым ссылкам также добавляется ссылка &#039;&#039;проверить&#039;&#039;, используемая при [[Тептар:Проверка участников|проверке участников]].&lt;br /&gt;
* {{t|IP}} — для ссылок на вклад незарегистрированных участников;&lt;br /&gt;
* {{t|reply to}} (он же {{t|ping}}) — с двоеточием и возможностью перечисления нескольких ников;&lt;br /&gt;
* {{t|t}} — для ссылок на [[Тептар:Шаблоны|шаблоны]];&lt;br /&gt;
* {{t|cl}} — для ссылок на [[Тептар:Категория|категории]];&lt;br /&gt;
* {{t|fl}} — для ссылок на [[Тептар:Иллюстрирование|файлы]].&lt;br /&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;Шаблон отображает имя участника русской Тептар со ссылкой на его личную страницу.&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;type&amp;quot;: &amp;quot;wiki-user-name&amp;quot;,&lt;br /&gt;
			&amp;quot;required&amp;quot;: true,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;просто имя участника&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;2&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;default&amp;quot;: &amp;quot;имя участника&amp;quot;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/templatedata&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;includeonly&amp;gt;&lt;br /&gt;
[[Категория:Шаблоны:Ссылки на страницы участников]]&lt;br /&gt;
[[Категория:Шаблоны:Для облегчения набора]]&lt;br /&gt;
&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>Buto</name></author>
	</entry>
	<entry>
		<id>https://massarn.com/w/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:U&amp;diff=2524</id>
		<title>Шаблон:U</title>
		<link rel="alternate" type="text/html" href="https://massarn.com/w/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:U&amp;diff=2524"/>
		<updated>2026-10-22T19:57:58Z</updated>

		<summary type="html">&lt;p&gt;Buto: Новая страница: «&amp;lt;includeonly&amp;gt;}}}}}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;{{doc}}&amp;lt;/noinclude&amp;gt;»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;[[Участник:{{{1|}}}|{{{2|{{{1|}}}}}}]]&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;{{doc}}&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Buto</name></author>
	</entry>
	<entry>
		<id>https://massarn.com/w/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:%D0%9B%D0%B8%D1%87%D0%BD%D1%8B%D0%B9_%D0%BC%D0%BE%D0%B4%D1%83%D0%BB%D1%8C&amp;diff=2523</id>
		<title>Шаблон:Личный модуль</title>
		<link rel="alternate" type="text/html" href="https://massarn.com/w/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:%D0%9B%D0%B8%D1%87%D0%BD%D1%8B%D0%B9_%D0%BC%D0%BE%D0%B4%D1%83%D0%BB%D1%8C&amp;diff=2523"/>
		<updated>2026-10-22T19:57:34Z</updated>

		<summary type="html">&lt;p&gt;Buto: Новая страница: «{{hatnote|Это {{{2}}} участни{{GENDER:{{{1}}}|ка|цы}} {{u|{{{1}}}}}}}&amp;lt;noinclude&amp;gt; {{doc-inline}} Вспомогательный шаблон для отображения ссылок на владельца персонального модуля. Используется в MediaWiki:Scribunto-doc-page-does-not-exist и MediaWiki:Scribunto-doc-page-show. {{doc-end}} Категория:Шаблоны:MediaWiki Категория:...»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{hatnote|Это {{{2}}} участни{{GENDER:{{{1}}}|ка|цы}} {{u|{{{1}}}}}}}&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{doc-inline}}&lt;br /&gt;
Вспомогательный шаблон для отображения ссылок на владельца персонального модуля. Используется в [[MediaWiki:Scribunto-doc-page-does-not-exist]] и [[MediaWiki:Scribunto-doc-page-show]].&lt;br /&gt;
{{doc-end}}&lt;br /&gt;
[[Категория:Шаблоны:MediaWiki]]&lt;br /&gt;
[[Категория:Шаблоны:Для документирования модулей]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Buto</name></author>
	</entry>
	<entry>
		<id>https://massarn.com/w/index.php?title=MediaWiki:Scribunto-doc-page-does-not-exist&amp;diff=2522</id>
		<title>MediaWiki:Scribunto-doc-page-does-not-exist</title>
		<link rel="alternate" type="text/html" href="https://massarn.com/w/index.php?title=MediaWiki:Scribunto-doc-page-does-not-exist&amp;diff=2522"/>
		<updated>2026-10-22T19:56:32Z</updated>

		<summary type="html">&lt;p&gt;Buto: Новая страница: «{{doc/begin|$1}}{{ #ifeq: {{ROOTPAGENAME}} | Песочница | {{личный модуль|{{#titleparts:{{PAGENAME}}|1|2}}|подстраница личной песочницы}} Категория:Модули:Личные песочницы | {{#if: {{str sub find|{{ROOTPAGENAME}}|Участник:}}{{str sub find|{{ROOTPAGENAME}}|Участница:}}{{str sub find|{{ROOTPAGENAME}}|User:}}  | {{личный модуль|{{str mid|{{ROOTPAGENAME}}...»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{doc/begin|$1}}{{&lt;br /&gt;
#ifeq: {{ROOTPAGENAME}} | Песочница&lt;br /&gt;
| {{личный модуль|{{#titleparts:{{PAGENAME}}|1|2}}|подстраница личной песочницы}}&lt;br /&gt;
[[Категория:Модули:Личные песочницы]]&lt;br /&gt;
| {{#if: {{str sub find|{{ROOTPAGENAME}}|Участник:}}{{str sub find|{{ROOTPAGENAME}}|Участница:}}{{str sub find|{{ROOTPAGENAME}}|User:}}&lt;br /&gt;
 | {{личный модуль|{{str mid|{{ROOTPAGENAME}}|{{#expr: {{str find|{{ROOTPAGENAME}}|:}} + 1}}}}|персональный модуль}}&lt;br /&gt;
[[Категория:Модули:Пользовательские]]&lt;br /&gt;
|{{#ifeq: {{SUBPAGENAME}} | песочница&lt;br /&gt;
  | {{песочница модуля}}&lt;br /&gt;
  | {{документировать|$1}}&lt;br /&gt;
  }}&lt;br /&gt;
 }}&lt;br /&gt;
}}&lt;br /&gt;
{{doc/end}}&lt;/div&gt;</summary>
		<author><name>Buto</name></author>
	</entry>
	<entry>
		<id>https://massarn.com/w/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Yesno&amp;diff=2521</id>
		<title>Шаблон:Yesno</title>
		<link rel="alternate" type="text/html" href="https://massarn.com/w/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Yesno&amp;diff=2521"/>
		<updated>2026-10-22T19:44:06Z</updated>

		<summary type="html">&lt;p&gt;Buto: Изменил настройки защиты для «Шаблон:Yesno» ([Редактирование=Разрешено только администраторам] (бессрочно) [Переименование=Разрешено только администраторам] (бессрочно))&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;
 |нет&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;
 |да&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>Buto</name></author>
	</entry>
	<entry>
		<id>https://massarn.com/w/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Yesno&amp;diff=2520</id>
		<title>Шаблон:Yesno</title>
		<link rel="alternate" type="text/html" href="https://massarn.com/w/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Yesno&amp;diff=2520"/>
		<updated>2026-10-22T19:43:17Z</updated>

		<summary type="html">&lt;p&gt;Buto: Изменил настройки защиты для «Шаблон:Yesno» ([Редактирование=Разрешено только автоподтверждённым участникам] (бессрочно) [Переименование=Разрешено только автоподтверждённым участникам] (бессрочно))&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;
 |нет&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;
 |да&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>Buto</name></author>
	</entry>
	<entry>
		<id>https://massarn.com/w/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Yesno&amp;diff=2519</id>
		<title>Шаблон:Yesno</title>
		<link rel="alternate" type="text/html" href="https://massarn.com/w/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Yesno&amp;diff=2519"/>
		<updated>2026-10-22T19:42:40Z</updated>

		<summary type="html">&lt;p&gt;Buto: Защитил страницу Шаблон:Yesno ([Редактирование=Разрешено только администраторам] (бессрочно) [Переименование=Разрешено только администраторам] (бессрочно))&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;
 |нет&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;
 |да&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>Buto</name></author>
	</entry>
	<entry>
		<id>https://massarn.com/w/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Submit_an_edit_request/preload&amp;diff=2518</id>
		<title>Шаблон:Submit an edit request/preload</title>
		<link rel="alternate" type="text/html" href="https://massarn.com/w/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Submit_an_edit_request/preload&amp;diff=2518"/>
		<updated>2026-10-22T19:38:45Z</updated>

		<summary type="html">&lt;p&gt;Buto: Новая страница: «&amp;lt;includeonly&amp;gt;{{$1}}&amp;lt;!-- Напишите под этой строкой причину запроса, иначе он будет отменён! --&amp;gt; &amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;категория:Шаблоны:Подстраницы шаблонов&amp;lt;/noinclude&amp;gt;»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;{{$1}}&amp;lt;!-- Напишите под этой строкой причину запроса, иначе он будет отменён! --&amp;gt;&lt;br /&gt;
&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;[[категория:Шаблоны:Подстраницы шаблонов]]&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Buto</name></author>
	</entry>
	<entry>
		<id>https://massarn.com/w/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Submit_an_edit_request/doc&amp;diff=2517</id>
		<title>Шаблон:Submit an edit request/doc</title>
		<link rel="alternate" type="text/html" href="https://massarn.com/w/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Submit_an_edit_request/doc&amp;diff=2517"/>
		<updated>2026-10-22T19:38:15Z</updated>

		<summary type="html">&lt;p&gt;Buto: Новая страница: «{{docpage}} {{ombox | type = content | text = &amp;#039;&amp;#039;&amp;#039;Этот шаблон используется в системном сообщении MediaWiki:Protectedinterface&amp;#039;&amp;#039;&amp;#039;.&amp;lt;br&amp;gt; Изменения в нём приведут к немедленному изменению интерфейса Тептар.  }} {{onLua|Submit an edit request|button}}  === Использование === Шаблон предназначен для создания кнопки,...»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{docpage}}&lt;br /&gt;
{{ombox&lt;br /&gt;
| type = content&lt;br /&gt;
| text = &#039;&#039;&#039;Этот шаблон используется в системном сообщении [[MediaWiki:Protectedinterface]]&#039;&#039;&#039;.&amp;lt;br&amp;gt; Изменения в нём приведут к немедленному изменению интерфейса Тептар. &lt;br /&gt;
}}&lt;br /&gt;
{{onLua|Submit an edit request|button}}&lt;br /&gt;
&lt;br /&gt;
=== Использование ===&lt;br /&gt;
Шаблон предназначен для создания кнопки, облегчающей создания запросов об изменении защищённых страниц.&lt;br /&gt;
&lt;br /&gt;
=== Подстраницы ===&lt;br /&gt;
* [[Шаблон:Submit an edit request/preload|/preload]]&lt;br /&gt;
&amp;lt;includeonly&amp;gt;&lt;br /&gt;
[[Категория:Шаблоны:Кнопки]]&lt;br /&gt;
[[Категория:Шаблоны:MediaWiki]]&lt;br /&gt;
&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>Buto</name></author>
	</entry>
	<entry>
		<id>https://massarn.com/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:%D0%9A%D0%BD%D0%BE%D0%BF%D0%BA%D0%B0_2/doc&amp;diff=2516</id>
		<title>Модуль:Кнопка 2/doc</title>
		<link rel="alternate" type="text/html" href="https://massarn.com/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:%D0%9A%D0%BD%D0%BE%D0%BF%D0%BA%D0%B0_2/doc&amp;diff=2516"/>
		<updated>2026-10-22T19:37:20Z</updated>

		<summary type="html">&lt;p&gt;Buto: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{docpage}}&lt;br /&gt;
Реализация шаблона {{tl|Кнопка 2}}.&lt;br /&gt;
&lt;br /&gt;
== Использование на Тептар-страницах ==&lt;br /&gt;
В обычном случае для использования на страницах модуль должен вызываться через шаблон {{tl|Кнопка 2}}. Однако, он также может быть вызван с помощью конструкции &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{#invoke:Кнопка 2|main|&amp;lt;/nowiki&amp;gt;&#039;&#039;args&#039;&#039;&amp;lt;nowiki&amp;gt;}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;. Для информации о доступных параметрах см. документацию шаблона.&lt;br /&gt;
&lt;br /&gt;
== Использование из других модулей ==&lt;br /&gt;
Для загрузки модуля используйте стандартный синтаксис вызова:&lt;br /&gt;
&lt;br /&gt;
{{luacode|1=&lt;br /&gt;
local mClickableButton2 = require(&#039;Модуль:Кнопка 2&#039;)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
С помощью функции {{luacode|luaMain|inline=1}} можно будет генерировать кнопки.&lt;br /&gt;
&lt;br /&gt;
{{luacode|&lt;br /&gt;
mClickableButton2.luaMain(args)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Переменная &amp;lt;var&amp;gt;args&amp;lt;/var&amp;gt; должна быть таблицей, содержащей аргументы, передаваемые модулю. Для информации о доступных параметрах см. документацию шаблона.&lt;br /&gt;
&amp;lt;includeonly&amp;gt;[[Категория:Модули:Служебные]]&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>Buto</name></author>
	</entry>
	<entry>
		<id>https://massarn.com/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:%D0%9A%D0%BD%D0%BE%D0%BF%D0%BA%D0%B0_2/doc&amp;diff=2515</id>
		<title>Модуль:Кнопка 2/doc</title>
		<link rel="alternate" type="text/html" href="https://massarn.com/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:%D0%9A%D0%BD%D0%BE%D0%BF%D0%BA%D0%B0_2/doc&amp;diff=2515"/>
		<updated>2026-10-22T19:37:01Z</updated>

		<summary type="html">&lt;p&gt;Buto: Новая страница: «{{docpage}} Реализация шаблона {{tl|Кнопка 2}}.  == Использование на вики-страницах == В обычном случае для использования на страницах модуль должен вызываться через шаблон {{tl|Кнопка 2}}. Однако, он также может быть вызван с помощью конструкции &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{#invoke:Кнопка...»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{docpage}}&lt;br /&gt;
Реализация шаблона {{tl|Кнопка 2}}.&lt;br /&gt;
&lt;br /&gt;
== Использование на вики-страницах ==&lt;br /&gt;
В обычном случае для использования на страницах модуль должен вызываться через шаблон {{tl|Кнопка 2}}. Однако, он также может быть вызван с помощью конструкции &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{#invoke:Кнопка 2|main|&amp;lt;/nowiki&amp;gt;&#039;&#039;args&#039;&#039;&amp;lt;nowiki&amp;gt;}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;. Для информации о доступных параметрах см. документацию шаблона.&lt;br /&gt;
&lt;br /&gt;
== Использование из других модулей ==&lt;br /&gt;
Для загрузки модуля используйте стандартный синтаксис вызова:&lt;br /&gt;
&lt;br /&gt;
{{luacode|1=&lt;br /&gt;
local mClickableButton2 = require(&#039;Модуль:Кнопка 2&#039;)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
С помощью функции {{luacode|luaMain|inline=1}} можно будет генерировать кнопки.&lt;br /&gt;
&lt;br /&gt;
{{luacode|&lt;br /&gt;
mClickableButton2.luaMain(args)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Переменная &amp;lt;var&amp;gt;args&amp;lt;/var&amp;gt; должна быть таблицей, содержащей аргументы, передаваемые модулю. Для информации о доступных параметрах см. документацию шаблона.&lt;br /&gt;
&amp;lt;includeonly&amp;gt;[[Категория:Модули:Служебные]]&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>Buto</name></author>
	</entry>
	<entry>
		<id>https://massarn.com/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:%D0%9A%D0%BD%D0%BE%D0%BF%D0%BA%D0%B0_2&amp;diff=2514</id>
		<title>Модуль:Кнопка 2</title>
		<link rel="alternate" type="text/html" href="https://massarn.com/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:%D0%9A%D0%BD%D0%BE%D0%BF%D0%BA%D0%B0_2&amp;diff=2514"/>
		<updated>2026-10-22T19:36:39Z</updated>

		<summary type="html">&lt;p&gt;Buto: Новая страница: «-- This module implements {{Кнопка 2}}.  local yesno = require(&amp;#039;Модуль:Yesno&amp;#039;)  local p = {}  function p.main(frame) 	local args = require(&amp;#039;Модуль:Arguments&amp;#039;).getArgs(frame, { 		wrappers = &amp;#039;Шаблон:Clickable button 2&amp;#039; 	}) 	return p.luaMain(args) end  function p.luaMain(args) 	if not args[1] and not args.url then 		return &amp;#039;&amp;#039; 	end 	local data = p.makeLinkData(args) 	local link = p.renderLink(data) 	local trackingCategories = p.renderTrac...»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- This module implements {{Кнопка 2}}.&lt;br /&gt;
&lt;br /&gt;
local yesno = require(&#039;Модуль:Yesno&#039;)&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
function p.main(frame)&lt;br /&gt;
	local args = require(&#039;Модуль:Arguments&#039;).getArgs(frame, {&lt;br /&gt;
		wrappers = &#039;Шаблон:Clickable button 2&#039;&lt;br /&gt;
	})&lt;br /&gt;
	return p.luaMain(args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.luaMain(args)&lt;br /&gt;
	if not args[1] and not args.url then&lt;br /&gt;
		return &#039;&#039;&lt;br /&gt;
	end&lt;br /&gt;
	local data = p.makeLinkData(args)&lt;br /&gt;
	local link = p.renderLink(data)&lt;br /&gt;
	local trackingCategories = p.renderTrackingCategories(args)&lt;br /&gt;
	return link .. trackingCategories&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.makeLinkData(args)&lt;br /&gt;
	local data = {}&lt;br /&gt;
&lt;br /&gt;
	-- Get the link and display values, and find whether we are outputting a&lt;br /&gt;
	-- wikilink or a URL.&lt;br /&gt;
	if args.url then&lt;br /&gt;
		data.isUrl = true&lt;br /&gt;
		data.link = args.url&lt;br /&gt;
		if args[1] then&lt;br /&gt;
			data.display = args[1]&lt;br /&gt;
		else&lt;br /&gt;
			data.display = args.url&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		data.isUrl = false&lt;br /&gt;
		data.link = args[1]&lt;br /&gt;
		if args[2] then&lt;br /&gt;
			data.display = args[2]&lt;br /&gt;
		else&lt;br /&gt;
			data.display = args[1]&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Classes&lt;br /&gt;
	local class = args.class and args.class:lower()&lt;br /&gt;
	data.classes = {}&lt;br /&gt;
	if class == &#039;ui-button-green&#039;&lt;br /&gt;
		or class == &#039;ui-button-blue&#039;&lt;br /&gt;
		or class == &#039;ui-button-red&#039;&lt;br /&gt;
	then&lt;br /&gt;
		table.insert(&lt;br /&gt;
			data.classes,&lt;br /&gt;
			&#039;submit ui-button ui-widget ui-state-default ui-corner-all&#039;&lt;br /&gt;
				.. &#039; ui-button-text-only ui-button-text&#039;&lt;br /&gt;
		)&lt;br /&gt;
	else&lt;br /&gt;
		table.insert(data.classes, &#039;mw-ui-button&#039;)&lt;br /&gt;
	end&lt;br /&gt;
	if class then&lt;br /&gt;
		table.insert(data.classes, class)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Styles&lt;br /&gt;
	do&lt;br /&gt;
		--[[&lt;br /&gt;
		-- Check whether we are on the same page as we have specified in&lt;br /&gt;
		-- args[1], but not if we are using a URL link, as then args[1] is only&lt;br /&gt;
		-- a display value. If we are currently on the page specified in&lt;br /&gt;
		-- args[1] make the button colour darker so that it stands out from&lt;br /&gt;
		-- other buttons on the page.&lt;br /&gt;
		--]]&lt;br /&gt;
		local success, linkTitle, currentTitle&lt;br /&gt;
		if not data.isUrl then&lt;br /&gt;
			currentTitle = mw.title.getCurrentTitle()&lt;br /&gt;
			success, linkTitle = pcall(mw.title.new, args[1])&lt;br /&gt;
		end&lt;br /&gt;
		if success&lt;br /&gt;
			and linkTitle&lt;br /&gt;
			and mw.title.equals(currentTitle, linkTitle)&lt;br /&gt;
		then&lt;br /&gt;
			if class == &#039;ui-button-blue&#039;&lt;br /&gt;
				or class == &#039;mw-ui-progressive&#039;&lt;br /&gt;
			then&lt;br /&gt;
				data.backgroundColor = &#039;#2962CB&#039;&lt;br /&gt;
			elseif class == &#039;ui-button-green&#039;&lt;br /&gt;
				or class == &#039;mw-ui-constructive&#039;&lt;br /&gt;
			then&lt;br /&gt;
				data.backgroundColor = &#039;#008B6D&#039;&lt;br /&gt;
			elseif class == &#039;ui-button-red&#039;&lt;br /&gt;
				or class == &#039;mw-ui-destructive&#039;&lt;br /&gt;
			then&lt;br /&gt;
				data.backgroundColor = &#039;#A6170F&#039;&lt;br /&gt;
			else&lt;br /&gt;
				data.backgroundColor = &#039;#CCC&#039;&lt;br /&gt;
				data.color = &#039;#666&#039;&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		-- Add user-specified styles.&lt;br /&gt;
		data.style = args.style&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return data&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.renderLink(data)&lt;br /&gt;
	-- Render the display span tag.&lt;br /&gt;
	local display&lt;br /&gt;
	do&lt;br /&gt;
		local displaySpan = mw.html.create(&#039;span&#039;)&lt;br /&gt;
		for i, class in ipairs(data.classes or {}) do&lt;br /&gt;
			displaySpan:addClass(class)&lt;br /&gt;
		end&lt;br /&gt;
		displaySpan&lt;br /&gt;
			:attr(&#039;role&#039;, &#039;button&#039;)&lt;br /&gt;
			:attr(&#039;aria-disabled&#039;, &#039;false&#039;)&lt;br /&gt;
			:css{&lt;br /&gt;
				[&#039;background-color&#039;] = data.backgroundColor,&lt;br /&gt;
				color = data.color&lt;br /&gt;
			}&lt;br /&gt;
		if data.style then&lt;br /&gt;
			displaySpan:cssText(data.style)&lt;br /&gt;
		end&lt;br /&gt;
		displaySpan:wikitext(data.display)&lt;br /&gt;
		display = tostring(displaySpan)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Render the link&lt;br /&gt;
	local link &lt;br /&gt;
	if data.isUrl then&lt;br /&gt;
		link = string.format(&#039;[%s %s]&#039;, data.link, display)&lt;br /&gt;
	else&lt;br /&gt;
		link = string.format(&#039;[[%s|%s]]&#039;, data.link, display)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return string.format(&#039;&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;%s&amp;lt;/span&amp;gt;&#039;, link)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.renderTrackingCategories(args)&lt;br /&gt;
	if yesno(args.category) == false then&lt;br /&gt;
		return &#039;&#039;&lt;br /&gt;
	end&lt;br /&gt;
	local class = args.class and args.class:lower()&lt;br /&gt;
	if class == &#039;ui-button-green&#039;&lt;br /&gt;
		or class == &#039;ui-button-blue&#039;&lt;br /&gt;
		or class == &#039;ui-button-red&#039;&lt;br /&gt;
	then&lt;br /&gt;
		return &#039;[[Category:Pages using old style ui-button-color]]&#039;&lt;br /&gt;
	else&lt;br /&gt;
		return &#039;&#039;&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Buto</name></author>
	</entry>
	<entry>
		<id>https://massarn.com/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Effective_protection_level&amp;diff=2513</id>
		<title>Модуль:Effective protection level</title>
		<link rel="alternate" type="text/html" href="https://massarn.com/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Effective_protection_level&amp;diff=2513"/>
		<updated>2026-10-22T19:34:53Z</updated>

		<summary type="html">&lt;p&gt;Buto: Новая страница: «local p = {}  -- Returns the permission required to perform a given action on a given title. -- If no title is specified, the title of the page being displayed is used. function p._main(action, pagename) 	local title 	if type(pagename) == &amp;#039;table&amp;#039; and pagename.prefixedText then 		title = pagename 	elseif pagename then 		title = mw.title.new(pagename) 	else 		title = mw.title.getCurrentTitle() 	end 	pagename = title.prefixedText 	if action == &amp;#039;autoreview&amp;#039; then...»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local p = {}&lt;br /&gt;
&lt;br /&gt;
-- Returns the permission required to perform a given action on a given title.&lt;br /&gt;
-- If no title is specified, the title of the page being displayed is used.&lt;br /&gt;
function p._main(action, pagename)&lt;br /&gt;
	local title&lt;br /&gt;
	if type(pagename) == &#039;table&#039; and pagename.prefixedText then&lt;br /&gt;
		title = pagename&lt;br /&gt;
	elseif pagename then&lt;br /&gt;
		title = mw.title.new(pagename)&lt;br /&gt;
	else&lt;br /&gt;
		title = mw.title.getCurrentTitle()&lt;br /&gt;
	end&lt;br /&gt;
	pagename = title.prefixedText&lt;br /&gt;
	if action == &#039;autoreview&#039; then&lt;br /&gt;
		local level = mw.ext.FlaggedRevs.getStabilitySettings(title)&lt;br /&gt;
		level = level and level.autoreview&lt;br /&gt;
		if level == &#039;review&#039; then&lt;br /&gt;
			return &#039;reviewer&#039;&lt;br /&gt;
		elseif level ~= &#039;&#039; then&lt;br /&gt;
			return level&lt;br /&gt;
		else&lt;br /&gt;
			return nil -- not &#039;*&#039;. a page not being PC-protected is distinct from it being PC-protected with anyone able to review. also not &#039;&#039;, as that would mean PC-protected but nobody can review&lt;br /&gt;
		end&lt;br /&gt;
	elseif action ~= &#039;edit&#039; and action ~= &#039;move&#039; and action ~= &#039;create&#039; and action ~= &#039;upload&#039; then&lt;br /&gt;
		error( &#039;First parameter must be one of edit, move, create, upload, autoreview&#039;, 2 )&lt;br /&gt;
	end&lt;br /&gt;
	if title.namespace == 8 then -- MediaWiki namespace&lt;br /&gt;
		if title.contentModel == &#039;javascript&#039; or title.contentModel == &#039;css&#039; then -- site JS or CSS page&lt;br /&gt;
			return &#039;interfaceadmin&#039;&lt;br /&gt;
		else -- any non-JS/CSS MediaWiki page&lt;br /&gt;
			return &#039;sysop&#039;&lt;br /&gt;
		end&lt;br /&gt;
	elseif title.namespace == 2 and title.isSubpage then&lt;br /&gt;
		if title.contentModel == &#039;javascript&#039; or title.contentModel == &#039;css&#039; then -- user JS or CSS page&lt;br /&gt;
			return &#039;interfaceadmin&#039;&lt;br /&gt;
		elseif title.contentModel == &#039;json&#039; then -- user JSON page&lt;br /&gt;
			return &#039;sysop&#039;&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	local level = title.protectionLevels[action] and title.protectionLevels[action][1]&lt;br /&gt;
	if level == &#039;sysop&#039; or level == &#039;editprotected&#039; then&lt;br /&gt;
		return &#039;sysop&#039;&lt;br /&gt;
	elseif title.cascadingProtection.restrictions[action] and title.cascadingProtection.restrictions[action][1] then -- used by a cascading-protected page&lt;br /&gt;
		return &#039;sysop&#039;&lt;br /&gt;
	elseif level == &#039;templateeditor&#039; then&lt;br /&gt;
		return &#039;templateeditor&#039;&lt;br /&gt;
	elseif action == &#039;move&#039; then&lt;br /&gt;
		local blacklistentry = mw.ext.TitleBlacklist.test(&#039;edit&#039;, pagename) -- Testing action edit is correct, since this is for the source page. The target page name gets tested with action move.&lt;br /&gt;
		if blacklistentry and not blacklistentry.params.autoconfirmed then&lt;br /&gt;
			return &#039;templateeditor&#039;&lt;br /&gt;
		elseif title.namespace == 6 then&lt;br /&gt;
			return &#039;filemover&#039;&lt;br /&gt;
		elseif level == &#039;extendedconfirmed&#039; then&lt;br /&gt;
			return &#039;extendedconfirmed&#039;&lt;br /&gt;
		else&lt;br /&gt;
			return &#039;autoconfirmed&#039;&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	local blacklistentry = mw.ext.TitleBlacklist.test(action, pagename)&lt;br /&gt;
	if blacklistentry then&lt;br /&gt;
		if not blacklistentry.params.autoconfirmed then&lt;br /&gt;
			return &#039;templateeditor&#039;&lt;br /&gt;
		elseif level == &#039;extendedconfirmed&#039; then&lt;br /&gt;
			return &#039;extendedconfirmed&#039;&lt;br /&gt;
		else&lt;br /&gt;
			return &#039;autoconfirmed&#039;&lt;br /&gt;
		end&lt;br /&gt;
	elseif level == &#039;editsemiprotected&#039; then -- create-semiprotected pages return this for some reason&lt;br /&gt;
		return &#039;autoconfirmed&#039;&lt;br /&gt;
	elseif level then&lt;br /&gt;
		return level&lt;br /&gt;
	elseif action == &#039;upload&#039; then&lt;br /&gt;
		return &#039;autoconfirmed&#039;&lt;br /&gt;
	else&lt;br /&gt;
		return &#039;*&#039;&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
setmetatable(p, { __index = function(t, k)&lt;br /&gt;
	return function(frame)&lt;br /&gt;
		return t._main(k, frame.args[1])&lt;br /&gt;
	end&lt;br /&gt;
end })&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Buto</name></author>
	</entry>
	<entry>
		<id>https://massarn.com/w/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:%D0%9A%D0%BE%D0%BD%D1%84%D0%B8%D0%B3%D1%83%D1%80%D0%B0%D1%86%D0%B8%D1%8F_%D0%BC%D0%BE%D0%B4%D1%83%D0%BB%D1%8F&amp;diff=2512</id>
		<title>Шаблон:Конфигурация модуля</title>
		<link rel="alternate" type="text/html" href="https://massarn.com/w/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:%D0%9A%D0%BE%D0%BD%D1%84%D0%B8%D0%B3%D1%83%D1%80%D0%B0%D1%86%D0%B8%D1%8F_%D0%BC%D0%BE%D0%B4%D1%83%D0%BB%D1%8F&amp;diff=2512"/>
		<updated>2026-10-22T19:33:49Z</updated>

		<summary type="html">&lt;p&gt;Buto: Новая страница: «&amp;lt;includeonly&amp;gt;{{docpage}} Подстраница конфигурации для модуля {{ссылка на базовый модуль}} {{#ifeq:{{SUBPAGENAME}}|doc|| Категория:Модули:Конфигурация }}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt; {{doc-inline}} Шаблон для создания типовой документации конфигурации модуля. Ка...»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;{{docpage}}&lt;br /&gt;
Подстраница конфигурации для модуля {{ссылка на базовый модуль}}&lt;br /&gt;
{{#ifeq:{{SUBPAGENAME}}|doc||&lt;br /&gt;
[[Категория:Модули:Конфигурация]]&lt;br /&gt;
}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{doc-inline}}&lt;br /&gt;
Шаблон для создания типовой документации [[:Категория:Модули:Конфигурация|конфигурации модуля]].&lt;br /&gt;
[[Категория:Шаблоны:Для документирования модулей]]&lt;br /&gt;
{{doc-end}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Buto</name></author>
	</entry>
	<entry>
		<id>https://massarn.com/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Submit_an_edit_request/config/doc&amp;diff=2511</id>
		<title>Модуль:Submit an edit request/config/doc</title>
		<link rel="alternate" type="text/html" href="https://massarn.com/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Submit_an_edit_request/config/doc&amp;diff=2511"/>
		<updated>2026-10-22T19:33:25Z</updated>

		<summary type="html">&lt;p&gt;Buto: Новая страница: «{{конфигурация модуля}}»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{конфигурация модуля}}&lt;/div&gt;</summary>
		<author><name>Buto</name></author>
	</entry>
	<entry>
		<id>https://massarn.com/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Submit_an_edit_request/config&amp;diff=2510</id>
		<title>Модуль:Submit an edit request/config</title>
		<link rel="alternate" type="text/html" href="https://massarn.com/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Submit_an_edit_request/config&amp;diff=2510"/>
		<updated>2026-10-22T19:33:14Z</updated>

		<summary type="html">&lt;p&gt;Buto: Новая страница: «-- This module contains configuration data for Module:Submit an edit request.  return { -------------------------------------------------------------------------------- -- Messages -------------------------------------------------------------------------------- 	-- The default display value for edit requests. 	[&amp;#039;default-display-value&amp;#039;] = &amp;#039;Запросить изменения&amp;#039;,  	-- The template that stores the edit request preload text 	[&amp;#039;preload-templa...»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- This module contains configuration data for [[Module:Submit an edit request]].&lt;br /&gt;
&lt;br /&gt;
return {&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- Messages&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
	-- The default display value for edit requests.&lt;br /&gt;
	[&#039;default-display-value&#039;] = &#039;Запросить изменения&#039;,&lt;br /&gt;
&lt;br /&gt;
	-- The template that stores the edit request preload text&lt;br /&gt;
	[&#039;preload-template&#039;] = &#039;Шаблон:Submit an edit request/preload&#039;,&lt;br /&gt;
&lt;br /&gt;
	-- The section heading that is generated when a user clicks on an edit request&lt;br /&gt;
	-- link. $1 is the protection level text, e.g. &amp;quot;Semi-protected&amp;quot; or&lt;br /&gt;
	-- &amp;quot;Template-protected&amp;quot;. $2 is the current date, in the format specified by the&lt;br /&gt;
	-- &amp;quot;preload-title-date-format&amp;quot; message.&lt;br /&gt;
	[&#039;preload-title-text&#039;] = &#039;Запрос правки $1 страницы от $2&#039;,&lt;br /&gt;
&lt;br /&gt;
	-- The date format for the automatically-generated section heading. The format&lt;br /&gt;
	-- must be valid input for the #time parser function.&lt;br /&gt;
	[&#039;preload-title-date-format&#039;] = &#039;j xg Y&#039;,&lt;br /&gt;
&lt;br /&gt;
	-- The name of the Main Page for this wiki.&lt;br /&gt;
	[&#039;main-page&#039;] = &#039;Заглавная страница&#039;,&lt;br /&gt;
&lt;br /&gt;
	-- The page used to request changes to things on the Main Page.&lt;br /&gt;
	[&#039;main-page-request-page&#039;] = &#039;Обсуждение:Заглавная страница&#039;,&lt;br /&gt;
&lt;br /&gt;
	-- The page used to request edits to protected talk pages.&lt;br /&gt;
	[&#039;protected-talk-page-request-page&#039;] = &#039;Тептар:Технические запросы&#039;,&lt;br /&gt;
&lt;br /&gt;
	-- The names of the templates to be used as wrappers for the &amp;quot;link&amp;quot;&lt;br /&gt;
	-- and &amp;quot;button&amp;quot; functions. These are passed as arguments to the &amp;quot;wrappers&amp;quot;&lt;br /&gt;
	-- option of [[Module:Arguments]].&lt;br /&gt;
	[&#039;link-wrapper-template&#039;] = &#039;Шаблон:Submit an edit request/link&#039;, -- не создан&lt;br /&gt;
	[&#039;button-wrapper-template&#039;] = &#039;Шаблон:Submit an edit request&#039;,&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- Protection level config&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
	protectionLevels = {&lt;br /&gt;
		--[[&lt;br /&gt;
		-- These settings are for the different protection levels which the module can&lt;br /&gt;
		-- output edit request links for.&lt;br /&gt;
		--&lt;br /&gt;
		-- editintro:&lt;br /&gt;
		-- The template to use as the edit intro users see when they click on an edit&lt;br /&gt;
		-- request link.&lt;br /&gt;
		--&lt;br /&gt;
		-- request-template:&lt;br /&gt;
		-- The name of the edit request template for that protection level. Do not&lt;br /&gt;
		-- include the &amp;quot;Template:&amp;quot; text.&lt;br /&gt;
		--&lt;br /&gt;
		-- protectionlevel:&lt;br /&gt;
		-- The name of the protection level, used for formatting the automatically-&lt;br /&gt;
		-- generated section headings.&lt;br /&gt;
		--]]&lt;br /&gt;
&lt;br /&gt;
		-- Semi-protection&lt;br /&gt;
		semi = {&lt;br /&gt;
			editintro = &#039;Шаблон:Edit semi-protected/editintro&#039;, -- не создан&lt;br /&gt;
			requestTemplate = &#039;edit semi-protected&#039;,&lt;br /&gt;
			levelText = &#039;полузащищённой&#039;,&lt;br /&gt;
		},&lt;br /&gt;
&lt;br /&gt;
		-- Extended-confirmed-protection&lt;br /&gt;
		extended = {&lt;br /&gt;
			editintro = &#039;Шаблон:Edit extended-protected/editintro&#039;, -- не создан&lt;br /&gt;
			requestTemplate = &#039;edit extended-protected&#039;,&lt;br /&gt;
			levelText = &#039;Extended-confirmed-protected&#039;,&lt;br /&gt;
		},&lt;br /&gt;
&lt;br /&gt;
		-- Template-protection&lt;br /&gt;
		template = {&lt;br /&gt;
			editintro = &#039;Шаблон:Edit template-protected/editintro&#039;, -- не создан&lt;br /&gt;
			requestTemplate = &#039;edit template-protected&#039;,&lt;br /&gt;
			levelText = &#039;Template-protected&#039;,&lt;br /&gt;
		},&lt;br /&gt;
&lt;br /&gt;
		-- Full protection&lt;br /&gt;
		full = {&lt;br /&gt;
			editintro = &#039;Шаблон:Edit protected/editintro&#039;, -- не создан&lt;br /&gt;
			requestTemplate = &#039;edit protected&#039;,&lt;br /&gt;
			levelText = &#039;защищённой&#039;,&lt;br /&gt;
		},&lt;br /&gt;
&lt;br /&gt;
		-- Interface-protection&lt;br /&gt;
		interface = {&lt;br /&gt;
			editintro = &#039;Шаблон:Edit interface-protected/editintro&#039;, -- не создан&lt;br /&gt;
			requestTemplate = &#039;edit interface-protected&#039;,&lt;br /&gt;
			levelText = &#039;Interface-protected&#039;,&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Buto</name></author>
	</entry>
	<entry>
		<id>https://massarn.com/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Redirect/doc&amp;diff=2509</id>
		<title>Модуль:Redirect/doc</title>
		<link rel="alternate" type="text/html" href="https://massarn.com/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Redirect/doc&amp;diff=2509"/>
		<updated>2026-10-22T19:31:49Z</updated>

		<summary type="html">&lt;p&gt;Buto: Новая страница: «{{Module rating|beta}}  This module contains functions to find the target of a redirect page.  == Main ==  The main function accepts the name of a single page.  It determines if the page is a redirect; if so it looks up the page, extracts the target, and returns the target name as text. Its usage is &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{#invoke:redirect|main|redirect-page-name}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;.  The template normally neither takes nor gives square brackets, so...»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Module rating|beta}}&lt;br /&gt;
&lt;br /&gt;
This module contains functions to find the target of a [[Help:Redirect|redirect]] page.&lt;br /&gt;
&lt;br /&gt;
== Main ==&lt;br /&gt;
&lt;br /&gt;
The main function accepts the name of a single page.  It determines if the page is a redirect; if so it looks up the page, extracts the target, and returns the target name as text. Its usage is &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{#invoke:redirect|main|redirect-page-name}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The template normally neither takes nor gives square brackets, so to show the result as a link use &amp;lt;nowiki&amp;gt;[[{{#invoke:redirect|main|redirect-page-name}}]]&amp;lt;/nowiki&amp;gt;.  An error is produced if the redirect does not exist, but for versatility no error is given if the file is not a redirect (returns the original text) or if the file name is blank (returns blank).&lt;br /&gt;
&lt;br /&gt;
However, if the parameter &#039;&#039;bracket&#039;&#039; is given a nonblank value, brackets will be passed on if present.&lt;br /&gt;
&lt;br /&gt;
=== Examples ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{#invoke:redirect|main|WP:AFC}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; &amp;amp;rarr; {{#invoke:redirect|main|WP:AFC}}&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{#invoke:redirect|main|[[WP:AFD]]|bracket=yes}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; &amp;amp;rarr; {{#invoke:redirect|main|[[WP:AFD]]|bracket=yes}}&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{#invoke:redirect|main|Wikipedia:Articles for deletion}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; &amp;amp;rarr; {{#invoke:redirect|main|Wikipedia:Articles for deletion}}&lt;br /&gt;
&lt;br /&gt;
Note: [[WP:AFC]] and [[WP:AFD]] are both redirects, but [[Wikipedia:Articles for deletion]] is not.&lt;br /&gt;
&lt;br /&gt;
=== LuaMain ===&lt;br /&gt;
&lt;br /&gt;
If you want to use the main function from another Lua module, you may want to use the luaMain function. This provides the same functionality as the main function, but doesn&#039;t require that a frame object be available.&lt;br /&gt;
&lt;br /&gt;
To use this, first load the module.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
local mRedirect = require(&#039;Module:Redirect&#039;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then use the function with the following syntax: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
mRedirect.luaMain(rname, bracket)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;var&amp;gt;rname&amp;lt;/var&amp;gt; is the name of the redirect page, and if &amp;lt;var&amp;gt;bracket&amp;lt;/var&amp;gt; is anything but false or nil, the module will produce a link rather than just a page name.&lt;br /&gt;
&lt;br /&gt;
== IsRedirect ==&lt;br /&gt;
&lt;br /&gt;
The isRedirect function is used from wiki pages to find out if a given page is a redirect or not. If the page is a redirect, the function returns &amp;quot;yes&amp;quot;, and if not the output is blank. Its usage is &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{#invoke:redirect|isRedirect|redirect-page-name}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Examples ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{#invoke:redirect|isRedirect|WP:AFC}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; &amp;amp;rarr; {{#invoke:redirect|isRedirect|WP:AFC}}&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{#invoke:redirect|isRedirect|Wikipedia:Articles for deletion}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; &amp;amp;rarr; {{#invoke:redirect|isRedirect|Wikipedia:Articles for deletion}}&lt;br /&gt;
&lt;br /&gt;
=== LuaIsRedirect ===&lt;br /&gt;
The isRedirect can be accessed from other Lua modules in the same way as the main function:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
local mRedirect = require(&#039;Module:Redirect&#039;)&lt;br /&gt;
mRedirect.luaIsRedirect(rname)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== GetTarget ==&lt;br /&gt;
&lt;br /&gt;
The getTarget function fetches the target page name of a redirect page, and is only usable from Lua. If the page specified is a redirect, then the target is returned; otherwise the function returns nil.&lt;br /&gt;
&lt;br /&gt;
To use it, first load the module.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
local mRedirect = require(&#039;Module:Redirect&#039;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then use the function with the following syntax: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
mRedirect.getTarget(page)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;var&amp;gt;page&amp;lt;/var&amp;gt; can be either the name of the redirect page as a string, or a [[mw:Extension:Scribunto/Lua reference manual#Title objects|mw.title object]].&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
* [[bugzilla:66974]] -  Provide a standard way to get the target of a redirect page&lt;br /&gt;
* [[mw:Extension:Scribunto/Lua reference manual#Title objects]], the Scribunto interface for determining a page&#039;s redirect status&lt;br /&gt;
* [[Template:Submit an edit request]], which uses this module&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;[[Категория:Модули:Документация]]&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Buto</name></author>
	</entry>
	<entry>
		<id>https://massarn.com/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Redirect&amp;diff=2508</id>
		<title>Модуль:Redirect</title>
		<link rel="alternate" type="text/html" href="https://massarn.com/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Redirect&amp;diff=2508"/>
		<updated>2026-10-22T19:31:27Z</updated>

		<summary type="html">&lt;p&gt;Buto: Новая страница: «-- This module provides functions for getting the target of a redirect page.  local p = {}  -- Gets a mw.title object, using pcall to avoid generating script errors if we -- are over the expensive function count limit (among other possible causes). local function getTitle(...) 	local success, titleObj = pcall(mw.title.new, ...) 	if success then 		return titleObj 	else 		return nil 	end end  -- added in ruwiki local function caseInsensitivePattern(pattern)...»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- This module provides functions for getting the target of a redirect page.&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
-- Gets a mw.title object, using pcall to avoid generating script errors if we&lt;br /&gt;
-- are over the expensive function count limit (among other possible causes).&lt;br /&gt;
local function getTitle(...)&lt;br /&gt;
	local success, titleObj = pcall(mw.title.new, ...)&lt;br /&gt;
	if success then&lt;br /&gt;
		return titleObj&lt;br /&gt;
	else&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- added in ruwiki&lt;br /&gt;
local function caseInsensitivePattern(pattern)&lt;br /&gt;
  -- find an optional &#039;%&#039; (group 1) followed by any character (group 2)&lt;br /&gt;
  local p = mw.ustring.gsub(pattern, &amp;quot;(%%?)(.)&amp;quot;, function(percent, letter)&lt;br /&gt;
    if percent ~= &amp;quot;&amp;quot; or not mw.ustring.match(letter, &amp;quot;%a&amp;quot;) then&lt;br /&gt;
      -- if the &#039;%&#039; matched, or `letter` is not a letter, return &amp;quot;as is&amp;quot;&lt;br /&gt;
      return percent .. letter&lt;br /&gt;
    else&lt;br /&gt;
      -- else, return a case-insensitive character class of the matched letter&lt;br /&gt;
      return string.format(&amp;quot;[%s%s]&amp;quot;, mw.ustring.lower(letter), mw.ustring.upper(letter))&lt;br /&gt;
    end&lt;br /&gt;
  end)&lt;br /&gt;
  return p&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Gets the name of a page that a redirect leads to, or nil if it isn&#039;t a&lt;br /&gt;
-- redirect.&lt;br /&gt;
function p.getTargetFromText(text)&lt;br /&gt;
	local ru_redirect = caseInsensitivePattern(&amp;quot;перенаправление&amp;quot;)&lt;br /&gt;
	local target = string.match(&lt;br /&gt;
		text,&lt;br /&gt;
		&amp;quot;^%s*#[Rr][Ee][Dd][Ii][Rr][Ee][Cc][Tt]%s*:?%s*%[%[([^%[%]|]-)%]%]&amp;quot;&lt;br /&gt;
	) or string.match(&lt;br /&gt;
		text,&lt;br /&gt;
		&amp;quot;^%s*#[Rr][Ee][Dd][Ii][Rr][Ee][Cc][Tt]%s*:?%s*%[%[([^%[%]|]-)|[^%[%]]-%]%]&amp;quot;&lt;br /&gt;
	) or mw.ustring.match(&lt;br /&gt;
		text,&lt;br /&gt;
		&amp;quot;^%s*#&amp;quot; .. ru_redirect .. &amp;quot;%s*:?%s*%[%[([^%[%]|]-)%]%]&amp;quot;&lt;br /&gt;
	) or mw.ustring.match(&lt;br /&gt;
		text,&lt;br /&gt;
		&amp;quot;^%s*#&amp;quot; .. ru_redirect .. &amp;quot;%s*:?%s*%[%[([^%[%]|]-)|[^%[%]]-%]%]&amp;quot;&lt;br /&gt;
	)&lt;br /&gt;
&lt;br /&gt;
	return target and mw.uri.decode(target, &#039;PATH&#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Gets the target of a redirect. If the page specified is not a redirect,&lt;br /&gt;
-- returns nil.&lt;br /&gt;
function p.getTarget(page, fulltext)&lt;br /&gt;
	-- Get the title object. Both page names and title objects are allowed&lt;br /&gt;
	-- as input.&lt;br /&gt;
	local titleObj&lt;br /&gt;
	if type(page) == &#039;string&#039; or type(page) == &#039;number&#039; then&lt;br /&gt;
		titleObj = getTitle(page)&lt;br /&gt;
	elseif type(page) == &#039;table&#039; and type(page.getContent) == &#039;function&#039; then&lt;br /&gt;
		titleObj = page&lt;br /&gt;
	else&lt;br /&gt;
		error(string.format(&lt;br /&gt;
			&amp;quot;bad argument #1 to &#039;getTarget&#039;&amp;quot;&lt;br /&gt;
				.. &amp;quot; (string, number, or title object expected, got %s)&amp;quot;,&lt;br /&gt;
			type(page)&lt;br /&gt;
		), 2)&lt;br /&gt;
	end&lt;br /&gt;
	if not titleObj then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	local targetTitle = titleObj.redirectTarget&lt;br /&gt;
	if targetTitle then&lt;br /&gt;
		if fulltext then&lt;br /&gt;
			return targetTitle.fullText&lt;br /&gt;
		else&lt;br /&gt;
			return targetTitle.prefixedText&lt;br /&gt;
		end&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;
-- Given a single page name determines what page it redirects to and returns the&lt;br /&gt;
-- target page name, or the passed page name when not a redirect. The passed&lt;br /&gt;
-- page name can be given as plain text or as a page link.&lt;br /&gt;
--&lt;br /&gt;
-- Returns page name as plain text, or when the bracket parameter is given, as a&lt;br /&gt;
-- page link. Returns an error message when page does not exist or the redirect&lt;br /&gt;
-- target cannot be determined for some reason.&lt;br /&gt;
--]]&lt;br /&gt;
function p.luaMain(rname, bracket, fulltext)&lt;br /&gt;
	if type(rname) ~= &amp;quot;string&amp;quot; or not rname:find(&amp;quot;%S&amp;quot;) then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	bracket = bracket and &amp;quot;[[%s]]&amp;quot; or &amp;quot;%s&amp;quot;&lt;br /&gt;
	rname = rname:match(&amp;quot;%[%[(.+)%]%]&amp;quot;) or rname&lt;br /&gt;
	local target = p.getTarget(rname, fulltext)&lt;br /&gt;
	local ret = target or rname&lt;br /&gt;
	ret = getTitle(ret)&lt;br /&gt;
	if ret then&lt;br /&gt;
		if fulltext then&lt;br /&gt;
			ret = ret.fullText&lt;br /&gt;
		else&lt;br /&gt;
			ret = ret.prefixedText&lt;br /&gt;
		end&lt;br /&gt;
		return bracket:format(ret)&lt;br /&gt;
	else&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Provides access to the luaMain function from wikitext.&lt;br /&gt;
function p.main(frame)&lt;br /&gt;
	local args = require(&#039;Module:Arguments&#039;).getArgs(frame, {frameOnly = true})&lt;br /&gt;
	return p.luaMain(args[1], args.bracket, args.fulltext) or &#039;&#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Returns true if the specified page is a redirect, and false otherwise.&lt;br /&gt;
function p.luaIsRedirect(page)&lt;br /&gt;
	local titleObj = getTitle(page)&lt;br /&gt;
	if not titleObj then&lt;br /&gt;
		return false&lt;br /&gt;
	end&lt;br /&gt;
	if titleObj.isRedirect 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;
-- Provides access to the luaIsRedirect function from wikitext, returning &#039;yes&#039;&lt;br /&gt;
-- if the specified page is a redirect, and the blank string otherwise.&lt;br /&gt;
function p.isRedirect(frame)&lt;br /&gt;
	local args = require(&#039;Module:Arguments&#039;).getArgs(frame, {frameOnly = true})&lt;br /&gt;
	if p.luaIsRedirect(args[1]) then&lt;br /&gt;
		return &#039;yes&#039;&lt;br /&gt;
	else&lt;br /&gt;
		return &#039;&#039;&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Buto</name></author>
	</entry>
	<entry>
		<id>https://massarn.com/w/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Submit_an_edit_request&amp;diff=2507</id>
		<title>Шаблон:Submit an edit request</title>
		<link rel="alternate" type="text/html" href="https://massarn.com/w/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Submit_an_edit_request&amp;diff=2507"/>
		<updated>2026-10-22T19:30:46Z</updated>

		<summary type="html">&lt;p&gt;Buto: Новая страница: «{{#invoke:Submit an edit request|button}}&amp;lt;noinclude&amp;gt; {{documentation}} &amp;lt;!-- Categories go on the /doc subpage, and interwikis go on Wikidata. --&amp;gt; &amp;lt;/noinclude&amp;gt;»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#invoke:Submit an edit request|button}}&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{documentation}}&lt;br /&gt;
&amp;lt;!-- Categories go on the /doc subpage, and interwikis go on Wikidata. --&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Buto</name></author>
	</entry>
	<entry>
		<id>https://massarn.com/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Submit_an_edit_request/doc&amp;diff=2506</id>
		<title>Модуль:Submit an edit request/doc</title>
		<link rel="alternate" type="text/html" href="https://massarn.com/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Submit_an_edit_request/doc&amp;diff=2506"/>
		<updated>2026-10-22T19:30:14Z</updated>

		<summary type="html">&lt;p&gt;Buto: Новая страница: «{{docpage}} Реализация шаблона {{tl|submit an edit request}}.  == Использование на обычных страницах == Для использования модуля из Тептар-текста в большинстве случаев следует использовать шаблон {{tl|submit an edit request}}. Однако модуль можно вызвать напрямую через #invoke. Для добав...»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{docpage}}&lt;br /&gt;
Реализация шаблона {{tl|submit an edit request}}.&lt;br /&gt;
&lt;br /&gt;
== Использование на обычных страницах ==&lt;br /&gt;
Для использования модуля из Тептар-текста в большинстве случаев следует использовать шаблон {{tl|submit an edit request}}. Однако модуль можно вызвать напрямую через #invoke. Для добавления кнопки запроса правки используйте &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{#invoke:Submit an edit request|button|&amp;lt;/nowiki&amp;gt;&#039;&#039;args&#039;&#039;&amp;lt;nowiki&amp;gt;}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;, для отдельной ссылки — &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{#invoke:Submit an edit request|link|&amp;lt;/nowiki&amp;gt;&#039;&#039;args&#039;&#039;&amp;lt;nowiki&amp;gt;}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;. &amp;lt;!-- Список параметров см. в документации шаблона.--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Использование из других модулей ==&lt;br /&gt;
Для загрузки модуля используйте стандартный синтаксис вызова:&lt;br /&gt;
{{luacode|1=&lt;br /&gt;
local mEditRequest = require(&#039;Модуль:Submit an edit request&#039;)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Вы можете использовать функцию {{luacode|_button|inline=1}} для получения кнопки и функцию {{luacode|_link|inline=1}} для получения ссылки..&lt;br /&gt;
&lt;br /&gt;
{{luacode|&lt;br /&gt;
mEditRequest._button(args)&lt;br /&gt;
mEditRequest._link(args)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Переменная &amp;lt;var&amp;gt;args&amp;lt;/var&amp;gt; должна быть таблицей, содержащей аргументы, передаваемые модулю. &amp;lt;!-- Для информации о доступных параметрах см. документацию шаблона.--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Конфигурация ==&lt;br /&gt;
Модуль может быть переведён и сконфигурирован для использования в других проектах с помощью [[Модуль:Submit an edit request/config]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;includeonly&amp;gt;[[Категория:Модули:Оформление]]&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>Buto</name></author>
	</entry>
	<entry>
		<id>https://massarn.com/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Submit_an_edit_request&amp;diff=2505</id>
		<title>Модуль:Submit an edit request</title>
		<link rel="alternate" type="text/html" href="https://massarn.com/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Submit_an_edit_request&amp;diff=2505"/>
		<updated>2026-10-22T19:29:29Z</updated>

		<summary type="html">&lt;p&gt;Buto: Новая страница: «-- This module implements {{Submit an edit request}}.  local CONFIG_MODULE = &amp;#039;Module:Submit an edit request/config&amp;#039;  -- Load necessary modules local mRedirect = require(&amp;#039;Module:Redirect&amp;#039;) local cfg = mw.loadData(CONFIG_MODULE) local effectiveProtectionLevel = require(&amp;#039;Module:Effective protection level&amp;#039;)._main local lang = mw.language.getContentLanguage()  local p = {}  local validLevels = { 	semi = &amp;#039;semi&amp;#039;, 	extended = &amp;#039;extended&amp;#039;, 	template = &amp;#039;template&amp;#039;, 	ful...»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- This module implements {{Submit an edit request}}.&lt;br /&gt;
&lt;br /&gt;
local CONFIG_MODULE = &#039;Module:Submit an edit request/config&#039;&lt;br /&gt;
&lt;br /&gt;
-- Load necessary modules&lt;br /&gt;
local mRedirect = require(&#039;Module:Redirect&#039;)&lt;br /&gt;
local cfg = mw.loadData(CONFIG_MODULE)&lt;br /&gt;
local effectiveProtectionLevel = require(&#039;Module:Effective protection level&#039;)._main&lt;br /&gt;
local lang = mw.language.getContentLanguage()&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
local validLevels = {&lt;br /&gt;
	semi = &#039;semi&#039;,&lt;br /&gt;
	extended = &#039;extended&#039;,&lt;br /&gt;
	template = &#039;template&#039;,&lt;br /&gt;
	full = &#039;full&#039;,&lt;br /&gt;
	interface = &#039;interface&#039;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local function message(key, ...)&lt;br /&gt;
	local params = {...}&lt;br /&gt;
	local msg = cfg[key]&lt;br /&gt;
	if #params &amp;lt; 1 then&lt;br /&gt;
		return msg&lt;br /&gt;
	else&lt;br /&gt;
		return mw.message.newRawMessage(msg):params(params):plain()&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function isTranscludedOnMainPage(titleObj)&lt;br /&gt;
	local mainPage = message(&#039;main-page&#039;)&lt;br /&gt;
	for i, source in ipairs(titleObj.cascadingProtection.sources) do&lt;br /&gt;
		if source == mainPage then&lt;br /&gt;
			return true&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function validateLevel(level)&lt;br /&gt;
	return level and validLevels[level] or &#039;full&#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getLevelInfo(level, field)&lt;br /&gt;
	return cfg.protectionLevels[level][field]&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function resolveRedirect(page)&lt;br /&gt;
	return mRedirect.luaMain(page)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function isProtected(page)&lt;br /&gt;
	local action = mw.title.new(page).exists and &#039;edit&#039; or &#039;create&#039;&lt;br /&gt;
	return effectiveProtectionLevel(action, page) ~= &#039;*&#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.makeRequestUrl(level, titleObj)&lt;br /&gt;
	titleObj = titleObj or mw.title.getCurrentTitle()&lt;br /&gt;
	if isTranscludedOnMainPage(titleObj) then&lt;br /&gt;
		return tostring(mw.uri.fullUrl(message(&#039;main-page-request-page&#039;)))&lt;br /&gt;
	end&lt;br /&gt;
	local talkPageName = titleObj.talkPageTitle&lt;br /&gt;
	if talkPageName == nil then&lt;br /&gt;
		return tostring(mw.uri.fullUrl(message(&#039;protected-talk-page-request-page&#039;)))&lt;br /&gt;
	end&lt;br /&gt;
	talkPageName = resolveRedirect(talkPageName.prefixedText)&lt;br /&gt;
	if isProtected(talkPageName) then&lt;br /&gt;
		return tostring(mw.uri.fullUrl(message(&#039;protected-talk-page-request-page&#039;)))&lt;br /&gt;
	end&lt;br /&gt;
	level = validateLevel(level)&lt;br /&gt;
	local url = mw.uri.fullUrl(talkPageName, {&lt;br /&gt;
		action = &#039;edit&#039;,&lt;br /&gt;
		editintro = getLevelInfo(level, &#039;editintro&#039;),&lt;br /&gt;
		preload = message(&#039;preload-template&#039;),&lt;br /&gt;
		preloadtitle = message(&lt;br /&gt;
			&#039;preload-title-text&#039;,&lt;br /&gt;
			getLevelInfo(level, &#039;levelText&#039;),&lt;br /&gt;
			lang:formatDate(message(&#039;preload-title-date-format&#039;))&lt;br /&gt;
		),&lt;br /&gt;
		section = &#039;new&#039;,&lt;br /&gt;
		dtpreload = 1&lt;br /&gt;
	})&lt;br /&gt;
	url = tostring(url)&lt;br /&gt;
&lt;br /&gt;
	-- Add the preload parameters. @TODO: merge this into the mw.uri.fullUrl&lt;br /&gt;
	-- query table once [[phab:T93059]] is fixed.&lt;br /&gt;
	local function encodeParam(key, val)&lt;br /&gt;
		return string.format(&#039;&amp;amp;%s=%s&#039;, mw.uri.encode(key), mw.uri.encode(val))&lt;br /&gt;
	end&lt;br /&gt;
	url = url .. encodeParam(&#039;preloadparams[]&#039;, getLevelInfo(level, &#039;requestTemplate&#039;))&lt;br /&gt;
	url = url .. encodeParam(&#039;preloadparams[]&#039;, titleObj.prefixedText)&lt;br /&gt;
&lt;br /&gt;
	return url&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._link(args)&lt;br /&gt;
	return string.format(&lt;br /&gt;
		&#039;&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[%s %s]&amp;lt;/span&amp;gt;&#039;,&lt;br /&gt;
		p.makeRequestUrl(args.type),&lt;br /&gt;
		args.display or message(&#039;default-display-value&#039;)&lt;br /&gt;
	)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._button(args)&lt;br /&gt;
	return require(&#039;Модуль:Кнопка 2&#039;).luaMain{&lt;br /&gt;
		[1] = args.display or message(&#039;default-display-value&#039;),&lt;br /&gt;
		url = p.makeRequestUrl(args.type),&lt;br /&gt;
		class = &#039;mw-ui-progressive&#039;&lt;br /&gt;
	}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeInvokeFunc(func, wrapper)&lt;br /&gt;
	return function (frame)&lt;br /&gt;
		local args = require(&#039;Module:Arguments&#039;).getArgs(frame, {&lt;br /&gt;
			wrappers = {wrapper}&lt;br /&gt;
		})&lt;br /&gt;
		return func(args)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
p.link = makeInvokeFunc(p._link, message(&#039;link-wrapper-template&#039;))&lt;br /&gt;
p.button = makeInvokeFunc(p._button, message(&#039;button-wrapper-template&#039;))&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Buto</name></author>
	</entry>
	<entry>
		<id>https://massarn.com/w/index.php?title=MediaWiki:Protectedpagetext&amp;diff=2504</id>
		<title>MediaWiki:Protectedpagetext</title>
		<link rel="alternate" type="text/html" href="https://massarn.com/w/index.php?title=MediaWiki:Protectedpagetext&amp;diff=2504"/>
		<updated>2026-10-22T19:26:51Z</updated>

		<summary type="html">&lt;p&gt;Buto: Новая страница: «{{Editnotice | type = error | image = link= | text = {{#ifexist: {{FULLPAGENAME}} | {{#switch: $1 &amp;lt;!-- защита от редактирования --&amp;gt;     | editprotected = Эта страница &amp;#039;&amp;#039;&amp;#039;защищена&amp;#039;&amp;#039;&amp;#039; и может редактироваться только &amp;#039;&amp;#039;&amp;#039;Тептар:Администраторы|админ...»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Editnotice&lt;br /&gt;
| type = error&lt;br /&gt;
| image = [[Файл:OOjs UI icon lock-destructive.svg|middle|20px|alt=|link=]]&lt;br /&gt;
| text = {{#ifexist: {{FULLPAGENAME}}&lt;br /&gt;
| {{#switch: $1 &amp;lt;!-- защита от редактирования --&amp;gt;&lt;br /&gt;
    | editprotected = Эта страница &#039;&#039;&#039;[[Тептар:Правила защиты страниц|защищена]]&#039;&#039;&#039; и может редактироваться только &#039;&#039;&#039;[[Тептар:Администраторы|администраторами]]&#039;&#039;&#039; и &#039;&#039;&#039;[[Тептар:Инженеры|инженерами]]&#039;&#039;&#039;.&lt;br /&gt;
    | editautoreviewprotected = Эта страница &#039;&#039;&#039;[[Тептар:Правила защиты страниц|частично защищена]]&#039;&#039;&#039; и может редактироваться только &#039;&#039;&#039;[[Тептар:Автопатрулируемые|автопатрулируемыми]]&#039;&#039;&#039;.&lt;br /&gt;
    | #default = Эта страница &#039;&#039;&#039;[[Тептар:Частичная защита страниц|частично защищена]]&#039;&#039;&#039; и не может редактироваться &#039;&#039;&#039;незарегистрированными&#039;&#039;&#039; и &#039;&#039;&#039;новыми участниками&#039;&#039;&#039;.&lt;br /&gt;
    }}&lt;br /&gt;
| {{#switch: $1 &amp;lt;!-- защита от создания--&amp;gt;&lt;br /&gt;
    | editprotected = Эта страница &#039;&#039;&#039;[[Тептар:Правила защиты страниц|защищена]]&#039;&#039;&#039; и может быть создана только &#039;&#039;&#039;[[Тептар:Администраторы|администраторами]]&#039;&#039;&#039; и &#039;&#039;&#039;[[Тептар:Инженеры|инженерами]]&#039;&#039;&#039;.&lt;br /&gt;
    | editautoreviewprotected = Эта страница &#039;&#039;&#039;[[Тептар:Правила защиты страниц|частично защищена]]&#039;&#039;&#039; и может быть создана только &#039;&#039;&#039;[[Тептар:Автопатрулируемые|автопатрулируемыми]]&#039;&#039;&#039;.&lt;br /&gt;
    | #default = Эта страница &#039;&#039;&#039;[[Тептар:Частичная защита страниц|частично защищена]]&#039;&#039;&#039; и не может быть создана &#039;&#039;&#039;незарегистрированными&#039;&#039;&#039; и &#039;&#039;&#039;новыми участниками&#039;&#039;&#039;.&lt;br /&gt;
    }}&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;br /&gt;
{{Editnotice&lt;br /&gt;
| type = neutral&lt;br /&gt;
| text = {{#ifexist: {{FULLPAGENAME}} |&lt;br /&gt;
{{#switch: $1&lt;br /&gt;
    | editprotected =&lt;br /&gt;
&#039;&#039;&#039;Почему так произошло:&#039;&#039;&#039;&lt;br /&gt;
* Некоторые [[Тептар:Шаблоны|шаблоны]] постоянно защищены. Статьи могут быть временно защищены из-за [[Тептар:Война правок|войны правок]].&lt;br /&gt;
* Причина может быть указана в [{{fullurl:Special:Log|type=protect&amp;amp;page={{#ifeq: {{NAMESPACENUMBER}} | -1&lt;br /&gt;
    | {{#titleparts: {{PAGENAME}} | 1 | 2 }}&lt;br /&gt;
    | {{FULLPAGENAMEE}}&lt;br /&gt;
  }}}} журнале защиты]. Если в журнале нет подходящих записей — возможно, страница была переименована после защиты.&lt;br /&gt;
&#039;&#039;&#039;Вы можете:&#039;&#039;&#039;&amp;lt;!--&lt;br /&gt;
 --&amp;gt;{{#if: {{#switch: {{NAMESPACE}} | Шаблон | Модуль = 1 }} | &amp;lt;!--&lt;br /&gt;
   --&amp;gt;{{#ifexist: {{FULLPAGENAME}}/doc |&lt;br /&gt;
* Свободно редактировать страницу документации {{#ifeq: {{NAMESPACE}} | Шаблон | шаблона | модуля }} — [[{{FULLPAGENAME}}/doc]]{{#ifeq: {{NAMESPACE}} | {{TALKSPACE}} | . | &amp;lt;nowiki /&amp;gt;; }}&lt;br /&gt;
      }}&lt;br /&gt;
    }}&amp;lt;!--&lt;br /&gt;
 --&amp;gt;{{#ifeq: {{NAMESPACE}} | {{TALKSPACE}} ||&lt;br /&gt;
* [[{{#ifeq: {{NAMESPACENUMBER}} | -1&lt;br /&gt;
    | {{TALKSPACE:{{#titleparts: {{PAGENAME}} | 1 | 2 }}}}:{{#titleparts: {{PAGENAME}} | 1 | 2 }}&lt;br /&gt;
    | {{TALKPAGENAME}}&lt;br /&gt;
  }}|Обсудить эту страницу]] с другими участниками.&lt;br /&gt;
* {{#ifeq: {{NAMESPACENUMBER}} | -1&lt;br /&gt;
    |[[Тептар:Установка защиты|Добавить запрос]]&lt;br /&gt;
    |{{#invoke:Submit an edit request|link|display=Добавить запрос}}&lt;br /&gt;
  }} на изменение страницы.&lt;br /&gt;
    }}&lt;br /&gt;
    | #default =&lt;br /&gt;
&#039;&#039;&#039;Почему так произошло:&#039;&#039;&#039;&lt;br /&gt;
* Частичная защита обычно ставится для предотвращения [[Тептар:Вандализм|вандализма]] популярных страниц. Большинство статей могут свободно редактироваться всеми.&lt;br /&gt;
* Причина может быть указана в [{{fullurl:Special:Log|type=protect&amp;amp;page={{FULLPAGENAMEE}}}} журнале защиты]. Если в журнале нет подходящих записей, возможно, страница была переименована после защиты.&lt;br /&gt;
&#039;&#039;&#039;Вы можете:&#039;&#039;&#039;&lt;br /&gt;
* [[Special:Userlogin|Представиться]], если вы уже [[Тептар:Регистрация|зарегистрированы]].&lt;br /&gt;
* [[Special:CreateAccount|Зарегистрироваться]]{{#switch: $1 | editautoreviewprotected = {{sp}}и получить [[Тептар:Автопатрулируемые|права автопатрулируемых]] | #default = , подождать 4 дня и сделать 15 правок }}.&amp;lt;!--&lt;br /&gt;
 --&amp;gt;{{#ifeq: {{NAMESPACE}} | {{TALKSPACE}} ||&lt;br /&gt;
* {{#invoke:Submit an edit request|link|display=Добавить на странице обсуждения запрос|type=semi}} на изменение страницы.&lt;br /&gt;
    }}&lt;br /&gt;
    }}&lt;br /&gt;
* &amp;lt;li class=&amp;quot;group-user-show&amp;quot;&amp;gt;[[Тептар:Снятие защиты|Предложить снять защиту]] со страницы.&lt;br /&gt;
  | На страницу «{{FULLPAGENAME}}» установлена &#039;&#039;&#039;[[Тептар:{{#ifeq: $1 | protect | Правила защиты страниц{{!}} | Частичная защита страниц{{!}}частичная }} защита]]&#039;&#039;&#039; для предотвращения её создания. Если вы хотите создать страницу с таким названием, подайте запрос на восстановление на странице [[Тептар:К восстановлению]].&lt;br /&gt;
  }}&lt;br /&gt;
&amp;lt;nowiki/&amp;gt;&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Buto</name></author>
	</entry>
	<entry>
		<id>https://massarn.com/w/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:%D0%9C%D0%B5%D0%B6%D0%B4%D1%83_pre&amp;diff=2503</id>
		<title>Шаблон:Между pre</title>
		<link rel="alternate" type="text/html" href="https://massarn.com/w/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:%D0%9C%D0%B5%D0%B6%D0%B4%D1%83_pre&amp;diff=2503"/>
		<updated>2026-10-22T19:08:20Z</updated>

		<summary type="html">&lt;p&gt;Buto: Новая страница: «&amp;lt;noinclude&amp;gt; &amp;lt;/noinclude&amp;gt;&amp;lt;div style=&amp;quot;margin:-0.5em 0;&amp;quot;&amp;gt;{{{1}}}&amp;lt;/div&amp;gt;&amp;lt;noinclude&amp;gt; {{doc-inline}} {{tc||&amp;#039;&amp;#039;текст между двух тегов &amp;amp;lt;pre&amp;gt;&amp;#039;&amp;#039;}}  Тег {{tago|pre}} создает большие поля вокруг себя, которые полезно сократить, если между двумя такими тегами расположен текст-связка. Код этого шаблона выглядит буквально...»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&amp;lt;div style=&amp;quot;margin:-0.5em 0;&amp;quot;&amp;gt;{{{1}}}&amp;lt;/div&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{doc-inline}}&lt;br /&gt;
{{tc||&#039;&#039;текст между двух тегов &amp;amp;lt;pre&amp;gt;&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
Тег {{tago|pre}} создает большие поля вокруг себя, которые полезно сократить, если между двумя такими тегами расположен текст-связка. Код этого шаблона выглядит буквально так: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&amp;lt;div style=&amp;quot;margin:-0.5em 0;&amp;quot;&amp;gt;{{{1}}}&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Без этого шаблона:&lt;br /&gt;
&amp;lt;dl&amp;gt;&amp;lt;dd&amp;gt;&lt;br /&gt;
{{tpre|[[t:редактирую|редактирую]]|&amp;lt;nowiki&amp;gt;~~~&amp;lt;/nowiki&amp;gt;|{{CURRENTDAY}} {{CURRENTMONTHNAMEGEN}} {{CURRENTYEAR}}|{{#time: H:i}}}} или просто {{tpre|subst:L|_link=1}}&lt;br /&gt;
&amp;lt;/dd&amp;gt;&amp;lt;/dl&amp;gt;&lt;br /&gt;
С этим шаблоном:&lt;br /&gt;
&amp;lt;dl&amp;gt;&amp;lt;dd&amp;gt;&lt;br /&gt;
{{tpre|редактирую|&amp;lt;nowiki&amp;gt;~~~&amp;lt;/nowiki&amp;gt;|{{CURRENTDAY}} {{CURRENTMONTHNAMEGEN}} {{CURRENTYEAR}}|{{#time: H:i}}}} {{между pre|или просто}} {{tpre|subst:L|_link=1}}&lt;br /&gt;
&amp;lt;/dd&amp;gt;&amp;lt;/dl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
* {{t|pre}}&lt;br /&gt;
* {{t|tpre}}&lt;br /&gt;
* {{t|*tpre}}&lt;br /&gt;
{{doc-end}}&lt;br /&gt;
&lt;br /&gt;
[[Категория:Шаблоны:Для документирования шаблонов]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Buto</name></author>
	</entry>
	<entry>
		<id>https://massarn.com/w/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:%D0%9C%D0%BE%D0%BD%D0%B8%D1%82%D0%BE%D1%80%D0%B8%D0%BD%D0%B3_%D1%82%D0%B5%D0%BC/doc&amp;diff=2502</id>
		<title>Шаблон:Мониторинг тем/doc</title>
		<link rel="alternate" type="text/html" href="https://massarn.com/w/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:%D0%9C%D0%BE%D0%BD%D0%B8%D1%82%D0%BE%D1%80%D0%B8%D0%BD%D0%B3_%D1%82%D0%B5%D0%BC/doc&amp;diff=2502"/>
		<updated>2026-10-22T19:05:15Z</updated>

		<summary type="html">&lt;p&gt;Buto: Новая страница: «{{docpage}} {{onLua|Topic monitoring}} Шаблон позволяет собрать на одной странице содержимое разделов других страниц и вывести статистику сообщений в них (если это темы, содержащие подписи). Он может использоваться на вашей ТП:Личная страница участника|личной страниц...»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{docpage}}&lt;br /&gt;
{{onLua|Topic monitoring}}&lt;br /&gt;
Шаблон позволяет собрать на одной странице содержимое разделов других страниц и вывести статистику сообщений в них (если это темы, содержащие подписи). Он может использоваться на вашей [[ТП:Личная страница участника|личной странице участника]] или [[ТП:Личная страница участника#Подстраницы участника|её подстранице]].&lt;br /&gt;
&lt;br /&gt;
Примеры, когда может появиться потребность в таком шаблоне:&lt;br /&gt;
* Если есть страницы обсуждения, на которых есть ваша тема, но на них происходит слишком много изменений, чтобы каждый раз проверять, ответили ли вам.&lt;br /&gt;
* Если есть обсуждения, в которых вы ждёте итога, но не успеваете следить за ними.&lt;br /&gt;
* Если вы собираетесь отлучиться от Тептар на время и хотите по возвращении узнать, что написали в темах, которые вас интересуют.&lt;br /&gt;
&lt;br /&gt;
== Использование ==&lt;br /&gt;
{{tpre|Мониторинг тем&amp;amp;#10;&lt;br /&gt;
|&#039;&#039;Страница 1#Тема 1&#039;&#039;&amp;amp;#10;&lt;br /&gt;
|&#039;&#039;Страница 2#Тема 2&#039;&#039;&amp;amp;#10;&lt;br /&gt;
|&#039;&#039;...&#039;&#039;&amp;amp;#10;&lt;br /&gt;
|&#039;&#039;Страница#Обсуждение без итога&#039;&#039;\итог&amp;amp;#10;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Добавление &amp;lt;code&amp;gt;\итог&amp;lt;/code&amp;gt; к концу параметра приведёт к тому, что выведется не вся тема, а только её итог, если он есть. Пока его нет, будет выводиться соответствующее сообщение.&lt;br /&gt;
&lt;br /&gt;
Ссылки на правку соответствующих страниц справа от заголовка &#039;&#039;работают&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Используйте &amp;lt;code&amp;gt;#top&amp;lt;/code&amp;gt; как название раздела для вывода преамбулы страницы (то есть части до первого раздела).&lt;br /&gt;
&lt;br /&gt;
Параметры:&lt;br /&gt;
* {{para|обновить|1}} покажет ссылку «Обновить» (но обычно страница сама обновляется через небольшое время после обновления отслеживаемых страниц).&lt;br /&gt;
* {{para|режим|список страниц}} выводит таблицу со страницами без их содержимого&lt;br /&gt;
* {{para|режим|КУ}} — показывает самые старые незакрытые номинации к удалению, количество отображаемых записей по умолчанию: {{para|номинаций|50}}&lt;br /&gt;
* {{para|полных тем|10}} — количество тем, для которых показывается содержимое&lt;br /&gt;
* {{para|тем|50}} — количество показываемых тем&lt;br /&gt;
* {{para|стиль|wikitable}} по умолчанию или {{para|стиль|форумный}}&lt;br /&gt;
* {{para|показывать количество тем|1 или 0}} — выводится или нет сообщение о том, сколько тем, на скольких страницах&lt;br /&gt;
&amp;lt;!-- *{{para|режим|страницы}} работает некорректно&lt;br /&gt;
* {{para|короткие заголовки|1}}&lt;br /&gt;
* {{para|только статистика|1}}&lt;br /&gt;
* {{para|итог}} {{para|подраздел}} {{para|как данные}} {{para|режим КУ}}--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Предосторожности ==&lt;br /&gt;
Так как каждое изменение на отслеживаемой странице вызывает [[ТП:Кэш|пересборку]] страницы, на которой размещён шаблон, при масштабном использовании он может быть весьма требователен к ресурсам серверов. Воздержитесь от того, чтобы массово (например, сразу через многие страницы) наблюдать за большим количеством часто обновляемых страниц.&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
* {{t|вставить раздел}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;includeonly&amp;gt;&lt;br /&gt;
[[Категория:Шаблоны:Обсуждения]]&lt;br /&gt;
&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>Buto</name></author>
	</entry>
	<entry>
		<id>https://massarn.com/w/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:%D0%9C%D0%BE%D0%BD%D0%B8%D1%82%D0%BE%D1%80%D0%B8%D0%BD%D0%B3_%D1%82%D0%B5%D0%BC/styles.css&amp;diff=2501</id>
		<title>Шаблон:Мониторинг тем/styles.css</title>
		<link rel="alternate" type="text/html" href="https://massarn.com/w/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:%D0%9C%D0%BE%D0%BD%D0%B8%D1%82%D0%BE%D1%80%D0%B8%D0%BD%D0%B3_%D1%82%D0%B5%D0%BC/styles.css&amp;diff=2501"/>
		<updated>2026-10-22T19:04:07Z</updated>

		<summary type="html">&lt;p&gt;Buto: Новая страница: «body.ext-discussiontools-replytool-enabled .topicWatch-outFragmentLink { 	color: var(--color-base,#202122); } /* Категория:Шаблоны:Подстраницы CSS */»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;body.ext-discussiontools-replytool-enabled .topicWatch-outFragmentLink {&lt;br /&gt;
	color: var(--color-base,#202122);&lt;br /&gt;
}&lt;br /&gt;
/* [[Категория:Шаблоны:Подстраницы CSS]] */&lt;/div&gt;</summary>
		<author><name>Buto</name></author>
	</entry>
	<entry>
		<id>https://massarn.com/w/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:%D0%9C%D0%BE%D0%BD%D0%B8%D1%82%D0%BE%D1%80%D0%B8%D0%BD%D0%B3_%D1%82%D0%B5%D0%BC&amp;diff=2500</id>
		<title>Шаблон:Мониторинг тем</title>
		<link rel="alternate" type="text/html" href="https://massarn.com/w/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:%D0%9C%D0%BE%D0%BD%D0%B8%D1%82%D0%BE%D1%80%D0%B8%D0%BD%D0%B3_%D1%82%D0%B5%D0%BC&amp;diff=2500"/>
		<updated>2026-10-22T19:03:43Z</updated>

		<summary type="html">&lt;p&gt;Buto: Новая страница: «&amp;lt;templatestyles src=&amp;quot;Шаблон:Мониторинг тем/styles.css&amp;quot; /&amp;gt;{{#invoke:Topic monitoring|main}}&amp;lt;noinclude&amp;gt;{{doc}}&amp;lt;/noinclude&amp;gt;»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;templatestyles src=&amp;quot;Шаблон:Мониторинг тем/styles.css&amp;quot; /&amp;gt;{{#invoke:Topic monitoring|main}}&amp;lt;noinclude&amp;gt;{{doc}}&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Buto</name></author>
	</entry>
	<entry>
		<id>https://massarn.com/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Topic_monitoring/doc&amp;diff=2499</id>
		<title>Модуль:Topic monitoring/doc</title>
		<link rel="alternate" type="text/html" href="https://massarn.com/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Topic_monitoring/doc&amp;diff=2499"/>
		<updated>2026-10-22T19:03:02Z</updated>

		<summary type="html">&lt;p&gt;Buto: Новая страница: «Реализация шаблона {{tl|Мониторинг тем}}. Основан на модуле Get page content.  == См. также == * Модуль:Get page content  &amp;lt;noinclude&amp;gt;Категория:Модули:Документация&amp;lt;/noinclude&amp;gt; &amp;lt;includeonly&amp;gt;Категория:ТП:Модули&amp;lt;/includeonly&amp;gt;»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Реализация шаблона {{tl|Мониторинг тем}}. Основан на модуле [[Модуль:Get page content|Get page content]].&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
* [[Модуль:Get page content]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;[[Категория:Модули:Документация]]&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&amp;lt;includeonly&amp;gt;[[Категория:ТП:Модули]]&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>Buto</name></author>
	</entry>
	<entry>
		<id>https://massarn.com/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Topic_monitoring&amp;diff=2498</id>
		<title>Модуль:Topic monitoring</title>
		<link rel="alternate" type="text/html" href="https://massarn.com/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Topic_monitoring&amp;diff=2498"/>
		<updated>2026-10-22T19:02:42Z</updated>

		<summary type="html">&lt;p&gt;Buto: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local p = {}&lt;br /&gt;
&lt;br /&gt;
local function conceal(text, class)&lt;br /&gt;
	 class = class or &#039;&#039;&lt;br /&gt;
	 return &#039;&amp;lt;span style=&amp;quot;display:none; speak:none;&amp;quot; class=&amp;quot;topicWatch-&#039; .. class .. &#039;&amp;quot;&amp;gt;&#039; .. text .. &#039;&amp;lt;/span&amp;gt;&#039; -- содержимое шаблона {{~}}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function findInTable(table, value)&lt;br /&gt;
	for k, v in pairs(table) do&lt;br /&gt;
		if v == value then&lt;br /&gt;
			return true&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function cleanSectionHeading(heading)&lt;br /&gt;
	-- The following patterns reproduce [[Участник:Buto/transferHeadingToSummary.js]]&lt;br /&gt;
	heading = mw.ustring.gsub(heading, &#039;%[%[:?[^|%]]*|([^%]]*)%]%]&#039;, &#039;%1&#039;)&lt;br /&gt;
	heading = mw.ustring.gsub(heading, &#039;%[%[:?([^%]]*)%]%]&#039;, &#039;%1&#039;)&lt;br /&gt;
	heading = mw.ustring.gsub(heading, &amp;quot;&#039;&#039;&#039;(.-)&#039;&#039;&#039;&amp;quot;, &#039;%1&#039;)&lt;br /&gt;
	heading = mw.ustring.gsub(heading, &amp;quot;&#039;&#039;(.-)&#039;&#039;&amp;quot;, &#039;%1&#039;)&lt;br /&gt;
	heading = mw.ustring.gsub(heading, &#039;&amp;lt;/?%w+ ?/?&amp;gt;&#039;, &#039;&#039;)&lt;br /&gt;
	heading = mw.ustring.gsub(heading, &#039;&amp;lt;%w+ [%w ]-=[^&amp;lt;&amp;gt;]-&amp;gt;&#039;, &#039;&#039;)&lt;br /&gt;
	heading = mw.ustring.gsub(heading, &#039;  +&#039;, &#039; &#039;)&lt;br /&gt;
	heading = mw.text.trim(heading)&lt;br /&gt;
	return heading&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function sectionHeadingToLink(sectionHeading)&lt;br /&gt;
	local sectionHeadingLink = sectionHeading&lt;br /&gt;
	-- The following reproduces processURI function of [[Участник:Jack who built the house/copyWikilinks.js]]&lt;br /&gt;
	--[[sectionHeadingLink = mw.ustring.gsub(sectionHeadingLink, &#039;&amp;lt;&#039;, &#039;%%3C&#039;)&lt;br /&gt;
	sectionHeadingLink = mw.ustring.gsub(sectionHeadingLink, &#039;&amp;gt;&#039;, &#039;%%3E&#039;)&lt;br /&gt;
	sectionHeadingLink = mw.ustring.gsub(sectionHeadingLink, &#039;%[&#039;, &#039;%%5B&#039;)&lt;br /&gt;
	sectionHeadingLink = mw.ustring.gsub(sectionHeadingLink, &#039;%]&#039;, &#039;%%5D&#039;)&lt;br /&gt;
	sectionHeadingLink = mw.ustring.gsub(sectionHeadingLink, &#039;{&#039;, &#039;%%7B&#039;)&lt;br /&gt;
	sectionHeadingLink = mw.ustring.gsub(sectionHeadingLink, &#039;|&#039;, &#039;%%7C&#039;)&lt;br /&gt;
	sectionHeadingLink = mw.ustring.gsub(sectionHeadingLink, &#039;}&#039;, &#039;%%7D&#039;)&lt;br /&gt;
	sectionHeadingLink = mw.ustring.gsub(sectionHeadingLink, &#039; &#039;, &#039;.C2.A0&#039;)]]&lt;br /&gt;
	return &#039;#&#039; .. sectionHeadingLink&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function killHeadingMarkers(content)&lt;br /&gt;
	content = mw.ustring.gsub(&lt;br /&gt;
		content,&lt;br /&gt;
		string.char(127) .. &#039;\&#039;&amp;quot;`UNIQ%-%-h%-%d+%-%-QINU`&amp;quot;\&#039;&#039; .. string.char(127),&lt;br /&gt;
		&#039;&#039;&lt;br /&gt;
	)&lt;br /&gt;
	return content&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.main(frame)&lt;br /&gt;
	if not getArgs then&lt;br /&gt;
		getArgs = require(&#039;Модуль:Arguments&#039;).getArgs&lt;br /&gt;
	end&lt;br /&gt;
	local yesno = require(&#039;Module:Yesno&#039;)&lt;br /&gt;
	local args = getArgs(frame, {removeBlanks = false})&lt;br /&gt;
	local ru = mw.getLanguage(&#039;ru&#039;)&lt;br /&gt;
	local errorInfo = {}&lt;br /&gt;
	&lt;br /&gt;
	-- обрабатываем параметры&lt;br /&gt;
	local talkpageMode = args[&#039;режим&#039;] == &#039;страницы&#039;&lt;br /&gt;
	local afdMode = args[&#039;режим&#039;] == &#039;КУ&#039;&lt;br /&gt;
	local pageListMode = args[&#039;режим&#039;] == &#039;список страниц&#039;&lt;br /&gt;
	local standardMode&lt;br /&gt;
	if not talkpageMode and not afdMode and not pageListMode then&lt;br /&gt;
		standardMode = true&lt;br /&gt;
	end&lt;br /&gt;
	local closureSize = &amp;quot;83.33%&amp;quot;;&lt;br /&gt;
	if args[&#039;актуально&#039;] then &lt;br /&gt;
	closureSize = &amp;quot;70%&amp;quot;;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local separateTopicListPage, separateTopicList&lt;br /&gt;
	if standardMode and not args[1] then&lt;br /&gt;
		separateTopicListPage = mw.title.new(args[&#039;список&#039;] or mw.title.getCurrentTitle().prefixedText .. &#039;/список&#039;)&lt;br /&gt;
		if separateTopicListPage.exists then&lt;br /&gt;
			local content = separateTopicListPage:getContent()&lt;br /&gt;
			if content:find(&#039;{{&#039;) then&lt;br /&gt;
				content = frame:preprocess(content)&lt;br /&gt;
			end&lt;br /&gt;
			separateTopicList = mw.text.split(content, &#039;\n&#039;)&lt;br /&gt;
		end&lt;br /&gt;
		if not separateTopicList or (separateTopicList[1] == &#039;&#039; and not separateTopicList[2]) then&lt;br /&gt;
			separateTopicList = {}&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local afdItems, nominationsNum&lt;br /&gt;
	if afdMode then&lt;br /&gt;
		local afdListPage = mw.title.new(&#039;Тептар:К удалению&#039;) -- Участник:Buto/песочница2&lt;br /&gt;
		nominationsNum = tonumber(args[&#039;номинаций&#039;]) or 50&lt;br /&gt;
		&lt;br /&gt;
		afdItems = {}&lt;br /&gt;
		local afdListContent = afdListPage:getContent()&lt;br /&gt;
		afdListContent = mw.ustring.gsub(afdListContent, &#039;&amp;lt;small&amp;gt;.-&amp;lt;\/small&amp;gt;&#039;, &#039;&#039;)&lt;br /&gt;
		afdListContent = mw.ustring.gsub(afdListContent, &#039;&amp;lt;s&amp;gt;.-&amp;lt;\/s&amp;gt;&#039;, &#039;&#039;)&lt;br /&gt;
		local iterator = mw.ustring.gmatch(afdListContent, &#039;{{Удаление статей|([^|]+)|([^\n]+)}}&#039;)&lt;br /&gt;
		reversedIteratorTable = {}&lt;br /&gt;
		for day, topics in iterator do&lt;br /&gt;
			table.insert(reversedIteratorTable, 1, {day = day, topics = topics})&lt;br /&gt;
		end&lt;br /&gt;
		for k, v in pairs(reversedIteratorTable) do&lt;br /&gt;
			day = v.day&lt;br /&gt;
			topics = v.topics&lt;br /&gt;
			local afdPage = &#039;Тептар:К удалению/&#039; .. ru:formatDate(&#039;j xg Y&#039;, day)&lt;br /&gt;
			&lt;br /&gt;
			local iterator = mw.text.gsplit(topics, &#039; • &#039;, true)&lt;br /&gt;
			for v2 in iterator do&lt;br /&gt;
				if v2 ~= &#039;&#039; then&lt;br /&gt;
					v2 = cleanSectionHeading(v2)&lt;br /&gt;
					table.insert(afdItems, afdPage .. &#039;#&#039; .. v2)&lt;br /&gt;
				end&lt;br /&gt;
				if #afdItems &amp;gt;= nominationsNum + 50 then break end&lt;br /&gt;
			end&lt;br /&gt;
			if #afdItems &amp;gt;= nominationsNum + 50 then break end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local topicsToShow = tonumber(args[&#039;тем&#039;]) or 10000&lt;br /&gt;
	&lt;br /&gt;
	-- число тем, содержимое которых выводить непосредственно на странице, а не ссылаться на другую&lt;br /&gt;
	local fullTopicsToShow = not pageListMode and (&lt;br /&gt;
			   tonumber(args[&#039;полных тем&#039;])&lt;br /&gt;
			or (&lt;br /&gt;
				afdMode and 1000 or 10&lt;br /&gt;
			   )&lt;br /&gt;
		)&lt;br /&gt;
	&lt;br /&gt;
	if topicsToShow == 0 and fullTopicsToShow == 0 then return &#039;&#039; end&lt;br /&gt;
	&lt;br /&gt;
	local style = args[&#039;стиль&#039;] or &#039;wikitable&#039;;&lt;br /&gt;
	if style ~= &#039;wikitable&#039; and style ~= &#039;форумный&#039; and style ~= &#039;список&#039; then&lt;br /&gt;
		style = &#039;wikitable&#039;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local showTopicCount&lt;br /&gt;
	if args[&#039;показывать количество тем&#039;] then&lt;br /&gt;
		showTopicCount = yesno(args[&#039;показывать количество тем&#039;], true)&lt;br /&gt;
	else&lt;br /&gt;
		showTopicCount = true&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local reloadLink&lt;br /&gt;
	if args[&#039;обновить&#039;] then&lt;br /&gt;
		reloadLink = yesno(args[&#039;обновить&#039;], false)&lt;br /&gt;
	else&lt;br /&gt;
		reloadLink = false&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local sortFullTopics, sortTopics&lt;br /&gt;
	if afdMode then&lt;br /&gt;
		sortFullTopics = false&lt;br /&gt;
		sortTopics = false&lt;br /&gt;
	elseif args[&#039;сортировка полных тем&#039;] then&lt;br /&gt;
		sortFullTopics = yesno(args[&#039;сортировка полных тем&#039;], false)&lt;br /&gt;
		sortTopics = true&lt;br /&gt;
	else&lt;br /&gt;
		sortFullTopics = true&lt;br /&gt;
		sortTopics = true&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- проверяем и обрабатываем части названий, чистим от дубликатов&lt;br /&gt;
	-- wrongItems — элементы, с которыми что-то не так уже на этапе распознавания адреса&lt;br /&gt;
	-- itemsToRemove — элементы, которые предлагается удалить из списка отслеживания&lt;br /&gt;
	-- errorInfo (объявлено выше) — сообщения об ошибке&lt;br /&gt;
	local items, wrongItems, itemsToRemove = {}, {}, {}&lt;br /&gt;
	for k, v in pairs(separateTopicList or afdItems or args) do&lt;br /&gt;
		if type(k) == &#039;number&#039; then&lt;br /&gt;
			if v ~= &#039;&#039; then&lt;br /&gt;
				local newItem = {&lt;br /&gt;
					originalFullTitle = v,&lt;br /&gt;
					titleObject = mw.title.new(v),&lt;br /&gt;
				}&lt;br /&gt;
				if newItem.titleObject and newItem.titleObject.prefixedText ~= &#039;&#039; then&lt;br /&gt;
					if newItem.titleObject.fragment ~= &#039;&#039; then&lt;br /&gt;
						newItem.sectionHeading = mw.text.encode(mw.uri.decode(newItem.titleObject.fragment), &#039;&amp;lt;&amp;gt;%[%]{|}&#039;)&lt;br /&gt;
						if not talkpageMode and not pageListMode then&lt;br /&gt;
							newItem.resultMode = false&lt;br /&gt;
							newItem.sectionHeading = mw.ustring.gsub(newItem.sectionHeading, &#039;\\итог$&#039;, function (s)&lt;br /&gt;
								newItem.resultMode = true&lt;br /&gt;
								return &#039;&#039;&lt;br /&gt;
							end)&lt;br /&gt;
							newItem.sectionHeading = mw.ustring.gsub(newItem.sectionHeading, &#039;\\\\\\.*$&#039;, function (s) -- \\\Итог&lt;br /&gt;
								newItem.subsectionHeading = s&lt;br /&gt;
								return &#039;&#039;&lt;br /&gt;
							end)&lt;br /&gt;
						end&lt;br /&gt;
					end&lt;br /&gt;
					&lt;br /&gt;
					if not newItem.sectionHeading and not talkpageMode and not pageListMode then&lt;br /&gt;
						table.insert(wrongItems, v)&lt;br /&gt;
						table.insert(itemsToRemove, v)&lt;br /&gt;
					else&lt;br /&gt;
						local found = false&lt;br /&gt;
						for k2, v2 in pairs(items) do&lt;br /&gt;
							if v2.titleObject.prefixedText == newItem.titleObject.prefixedText and (not newItem.sectionHeading or v2.sectionHeading == newItem.sectionHeading) and (not newItem.subsectionHeading or v2.subsectionHeading == newItem.subsectionHeading) then&lt;br /&gt;
								found = true&lt;br /&gt;
								break&lt;br /&gt;
							end&lt;br /&gt;
						end&lt;br /&gt;
						if not found then&lt;br /&gt;
							table.insert(items, newItem)&lt;br /&gt;
						else&lt;br /&gt;
							table.insert(itemsToRemove, v)&lt;br /&gt;
						end&lt;br /&gt;
					end&lt;br /&gt;
				else&lt;br /&gt;
					table.insert(wrongItems, v)&lt;br /&gt;
					table.insert(itemsToRemove, v)&lt;br /&gt;
				end&lt;br /&gt;
			else&lt;br /&gt;
				table.insert(itemsToRemove, v)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if #wrongItems &amp;gt; 0 then&lt;br /&gt;
		local wrongItemsString =&lt;br /&gt;
				#wrongItems == 1&lt;br /&gt;
			and &#039;Что-то не так с элементом&#039;&lt;br /&gt;
			 or &#039;Что-то не так со следующими элементами:&#039;&lt;br /&gt;
		for k, v in pairs(wrongItems) do&lt;br /&gt;
			if k ~= 1 then&lt;br /&gt;
				wrongItemsString = wrongItemsString .. &#039;, &#039;&lt;br /&gt;
			end&lt;br /&gt;
			wrongItemsString = wrongItemsString .. &#039; «&#039; .. v .. &#039;»&#039;&lt;br /&gt;
		end&lt;br /&gt;
		wrongItemsString = wrongItemsString .. &#039;.&#039;&lt;br /&gt;
		table.insert(errorInfo, wrongItemsString)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- запрашиваем данные&lt;br /&gt;
	local allData = {}&lt;br /&gt;
	local talkpageCount&lt;br /&gt;
	local onlyPageTitle&lt;br /&gt;
	local pageListData&lt;br /&gt;
	if talkpageMode then&lt;br /&gt;
		talkpageCount = 0&lt;br /&gt;
		local parse_talkpage_content = require(&#039;Модуль:Get page content&#039;)._parse_talkpage_content&lt;br /&gt;
		&lt;br /&gt;
		for k, v in pairs(items) do&lt;br /&gt;
			local argsToPass = {}&lt;br /&gt;
			argsToPass[1] = v.titleObject&lt;br /&gt;
			argsToPass[&#039;короткие заголовки&#039;] = not items[2] and true or false&lt;br /&gt;
			if fullTopicsToShow == 0 then&lt;br /&gt;
				argsToPass[&#039;только статистика&#039;] = true&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			local allDataFromPage = parse_talkpage_content(argsToPass)&lt;br /&gt;
			if type(allDataFromPage) == &#039;table&#039; then&lt;br /&gt;
				if allDataFromPage[1] then&lt;br /&gt;
					local pageTitle = v.titleObject.prefixedText&lt;br /&gt;
					talkpageCount = talkpageCount + 1&lt;br /&gt;
					for k2, v2 in pairs(allDataFromPage) do&lt;br /&gt;
						v2.pageTitle = pageTitle&lt;br /&gt;
						v2.canonicalPath = v2.pageTitle .. &#039;#&#039; .. v2.sectionHeading .. (v2.subsectionHeading and &#039;\\\\\\&#039; .. v2.subsectionHeading or &#039;&#039;)&lt;br /&gt;
						table.insert(allData, v2)&lt;br /&gt;
					end&lt;br /&gt;
					if talkpageCount == 1 then&lt;br /&gt;
						onlyPageTitle = pageTitle&lt;br /&gt;
					end&lt;br /&gt;
				elseif allDataFromPage.pageNotExistMessage then&lt;br /&gt;
					table.insert(itemsToRemove, v.originalFullTitle)&lt;br /&gt;
					table.insert(errorInfo, allDataFromPage.pageNotExistMessage)&lt;br /&gt;
				end&lt;br /&gt;
			else&lt;br /&gt;
				table.insert(errorInfo, &#039;Не удалось получить данные о странице «&#039; .. v.titleObject.prefixedText .. &#039;» от модуля получения содержимого страницы.&#039;)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	elseif pageListMode then&lt;br /&gt;
		pageListData = {}&lt;br /&gt;
		local parse_talkpage_content = require(&#039;Модуль:Get page content&#039;)._parse_talkpage_content&lt;br /&gt;
		&lt;br /&gt;
		for k, v in pairs(items) do&lt;br /&gt;
			local argsToPass = {}&lt;br /&gt;
			argsToPass[1] = v.titleObject&lt;br /&gt;
			argsToPass[&#039;только статистика&#039;] = true&lt;br /&gt;
			argsToPass[&#039;режим списков страниц&#039;] = true&lt;br /&gt;
			&lt;br /&gt;
			local allDataFromPage = parse_talkpage_content(argsToPass)&lt;br /&gt;
			if type(allDataFromPage) == &#039;table&#039; then&lt;br /&gt;
				if allDataFromPage[1] then&lt;br /&gt;
					local pageTitle = v.titleObject.prefixedText&lt;br /&gt;
					local pageData = {&lt;br /&gt;
						num = k,&lt;br /&gt;
						pageTitle = pageTitle,&lt;br /&gt;
						msgCount = 0,&lt;br /&gt;
						topicCount = 0,&lt;br /&gt;
						lastMsgDateTimestamp = 0&lt;br /&gt;
					}&lt;br /&gt;
					for k2, v2 in pairs(allDataFromPage) do&lt;br /&gt;
						if v2.msgCount then&lt;br /&gt;
							pageData.msgCount = pageData.msgCount + v2.msgCount&lt;br /&gt;
							if v2.lastMsgDateTimestamp &amp;gt; pageData.lastMsgDateTimestamp then&lt;br /&gt;
								--pageData.lastMsgDate = v2.lastMsgDate&lt;br /&gt;
								pageData.lastMsgDateString = v2.lastMsgDateString&lt;br /&gt;
								pageData.lastMsgDateTimestamp = v2.lastMsgDateTimestamp&lt;br /&gt;
								pageData.lastMsgAuthor = v2.lastMsgAuthor&lt;br /&gt;
							end&lt;br /&gt;
						end&lt;br /&gt;
						pageData.topicCount = pageData.topicCount + 1&lt;br /&gt;
						if v2.warningHeading and not pageData.warningHeading then&lt;br /&gt;
							pageData.warningHeading = v2.warningHeading&lt;br /&gt;
						end&lt;br /&gt;
					end&lt;br /&gt;
					table.insert(pageListData, pageData)&lt;br /&gt;
				elseif allDataFromPage.pageNotExistMessage then&lt;br /&gt;
					table.insert(itemsToRemove, v.originalFullTitle)&lt;br /&gt;
					table.insert(errorInfo, allDataFromPage.pageNotExistMessage)&lt;br /&gt;
				end&lt;br /&gt;
			else&lt;br /&gt;
				table.insert(errorInfo, &#039;Не удалось получить данные о странице «&#039; .. v.titleObject.prefixedText .. &#039;» от модуля получения содержимого страницы.&#039;)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		local parse_section_content = require(&#039;Модуль:Get page content&#039;)._parse_section_content&lt;br /&gt;
		&lt;br /&gt;
		for k, v in pairs(items) do&lt;br /&gt;
			local argsToPass = {}&lt;br /&gt;
			table.insert(argsToPass, v.titleObject)&lt;br /&gt;
			table.insert(argsToPass, v.sectionHeading)&lt;br /&gt;
			argsToPass[&#039;итог&#039;] = v.resultMode&lt;br /&gt;
			argsToPass[&#039;подраздел&#039;] = v.subsectionHeading&lt;br /&gt;
			argsToPass[&#039;как данные&#039;] = true&lt;br /&gt;
			if fullTopicsToShow == 0 then&lt;br /&gt;
				argsToPass[&#039;только статистика&#039;] = true&lt;br /&gt;
			else&lt;br /&gt;
				argsToPass[&#039;стандартный заголовок&#039;] = true&lt;br /&gt;
			end&lt;br /&gt;
			if afdMode then&lt;br /&gt;
				argsToPass[&#039;режим КУ&#039;] = true&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			local data = parse_section_content(argsToPass)&lt;br /&gt;
			if type(data) == &#039;table&#039; then&lt;br /&gt;
				if data.pageNotExistMessage then&lt;br /&gt;
					table.insert(itemsToRemove, v.originalFullTitle)&lt;br /&gt;
					table.insert(errorInfo, data.pageNotExistMessage)&lt;br /&gt;
				elseif data.sectionNotExistMessage then&lt;br /&gt;
					table.insert(itemsToRemove, v.originalFullTitle)&lt;br /&gt;
					table.insert(errorInfo, data.sectionNotExistMessage)&lt;br /&gt;
				else&lt;br /&gt;
					if topicsToShow ~= 0 and data.msgCount then&lt;br /&gt;
						data.pageTitle = v.titleObject.prefixedText&lt;br /&gt;
						data.sectionHeading = v.sectionHeading&lt;br /&gt;
						if argsToPass[&#039;подраздел&#039;] then&lt;br /&gt;
							data.subsectionHeading = argsToPass[&#039;подраздел&#039;]&lt;br /&gt;
						end&lt;br /&gt;
						data.canonicalPath = data.pageTitle .. &#039;#&#039; .. data.sectionHeading .. (data.subsectionHeading and &#039;\\\\\\&#039; .. data.subsectionHeading or &#039;&#039;)&lt;br /&gt;
					end&lt;br /&gt;
					if afdMode then&lt;br /&gt;
						if not data.closureHeading then&lt;br /&gt;
							table.insert(allData, data)&lt;br /&gt;
							if #allData &amp;gt;= nominationsNum then break end&lt;br /&gt;
						end&lt;br /&gt;
					else&lt;br /&gt;
						table.insert(allData, data)&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			else&lt;br /&gt;
				table.insert(errorInfo, &#039;Не удалось получить данные о странице «&#039; .. v.titleObject.prefixedText .. &#039;» от модуля получения содержимого страницы.&#039;)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	for k, v in pairs(allData) do&lt;br /&gt;
		allData[k].num = k&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- если включена сортировка и полных тем, и тем в таблице, мы можем сразу отсортировать общий массив&lt;br /&gt;
	if sortTopics and (fullTopicsToShow == 0 or sortFullTopics) then&lt;br /&gt;
		table.sort(allData, function (data1, data2)&lt;br /&gt;
			-- благодаря 10000 - dataN.num темы частично сохраняют изначальный порядок&lt;br /&gt;
			local lastMsgDate1Timestamp = data1.lastMsgDateTimestamp or 10000 - data1.num&lt;br /&gt;
			local lastMsgDate2Timestamp = data2.lastMsgDateTimestamp or 10000 - data2.num&lt;br /&gt;
			&lt;br /&gt;
			return lastMsgDate1Timestamp &amp;gt; lastMsgDate2Timestamp&lt;br /&gt;
		end)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- считаем число тем и страниц, откладываем отсутствующие&lt;br /&gt;
	local pages, topics, fullTopics = {}, {}, {}&lt;br /&gt;
	local randomNum&lt;br /&gt;
	if allData[1] then&lt;br /&gt;
		if fullTopicsToShow ~= 0 then&lt;br /&gt;
			randomNum = tostring(os.clock()):sub(-7)&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		for k, v in pairs(allData) do&lt;br /&gt;
			table.insert(fullTopics, v)&lt;br /&gt;
			if v.msgCount then&lt;br /&gt;
				table.insert(topics, v)&lt;br /&gt;
				if not findInTable(pages, v.pageTitle) then&lt;br /&gt;
					table.insert(pages, v.pageTitle)&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;
	if sortTopics and (fullTopicsToShow ~= 0 and not sortFullTopics) then&lt;br /&gt;
		table.sort(topics, function (data1, data2)&lt;br /&gt;
			-- благодаря 10000 - dataN.num темы частично сохраняют изначальный порядок&lt;br /&gt;
			local lastMsgDate1Timestamp = data1.lastMsgDateTimestamp or 10000 - data1.num&lt;br /&gt;
			local lastMsgDate2Timestamp = data2.lastMsgDateTimestamp or 10000 - data2.num&lt;br /&gt;
			&lt;br /&gt;
			return lastMsgDate1Timestamp &amp;gt; lastMsgDate2Timestamp&lt;br /&gt;
		end)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if #topics &amp;gt; topicsToShow then&lt;br /&gt;
		pages = {}&lt;br /&gt;
		for k, v in pairs(topics) do&lt;br /&gt;
			if not findInTable(pages, v.pageTitle) then&lt;br /&gt;
				table.insert(pages, v.pageTitle)&lt;br /&gt;
			end&lt;br /&gt;
			if k == topicsToShow then&lt;br /&gt;
				for i = k + 1, #topics do&lt;br /&gt;
					table.remove(topics, k + 1)&lt;br /&gt;
				end&lt;br /&gt;
				break&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- формируем шапку&lt;br /&gt;
	local headerContent = &#039;&#039;&lt;br /&gt;
	if talkpageMode and talkpageCount == 1 then&lt;br /&gt;
		headerContent = headerContent .. &#039;&amp;lt;div style=&amp;quot;font-size:1.5em;&amp;quot;&amp;gt;[[&#039; .. onlyPageTitle .. &#039;]]&amp;lt;/div&amp;gt;\n&#039;&lt;br /&gt;
	elseif afdMode then&lt;br /&gt;
		headerContent = headerContent .. &#039;&amp;lt;div style=&amp;quot;font-size:1.5em;&amp;quot;&amp;gt;&#039; .. #topics .. &#039; &#039; .. ru:plural(#topics, &#039;самая старая незакрытая номинация&#039;, &#039;самые старые незакрытые номинации&#039;, &#039;самых старых незакрытых номинаций&#039;) .. &#039; «[[ТП:К удалению|К удалению]]»&amp;lt;/div&amp;gt;\n&#039;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if showTopicCount then&lt;br /&gt;
		if standardMode or talkpageMode then&lt;br /&gt;
			headerContent = headerContent .. &#039;&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;&#039; .. #topics .. &#039;&amp;lt;/b&amp;gt; &#039; .. ru:plural(#topics, &#039;тема&#039;, &#039;темы&#039;, &#039;тем&#039;) .. &#039; на &amp;lt;b&amp;gt;&#039; .. #pages .. &#039;&amp;lt;/b&amp;gt; &#039; .. ru:plural(#pages, &#039;странице&#039;, &#039;страницах&#039;)&lt;br /&gt;
		elseif afdMode then&lt;br /&gt;
			if #pages ~= 0 then&lt;br /&gt;
				headerContent = headerContent .. &#039;&amp;lt;p&amp;gt;За &amp;lt;b&amp;gt;&#039; .. #pages .. &#039;&amp;lt;/b&amp;gt; &#039; .. ru:plural(#pages, &#039;день&#039;, &#039;дня&#039;, &#039;дней&#039;)&lt;br /&gt;
			end&lt;br /&gt;
		elseif pageListMode then&lt;br /&gt;
			headerContent = headerContent .. &#039;&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;&#039; .. #pageListData .. &#039;&amp;lt;/b&amp;gt; &#039; .. ru:plural(#pageListData, &#039;страница&#039;, &#039;страницы&#039;, &#039;страниц&#039;)&lt;br /&gt;
		end&lt;br /&gt;
		if separateTopicListPage then&lt;br /&gt;
			headerContent = headerContent .. &#039;&amp;amp;nbsp;&amp;lt;b&amp;gt;·&amp;lt;/b&amp;gt; &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[&#039; .. separateTopicListPage:fullUrl(&#039;action=edit&#039;) .. &#039; Редактировать список тем]&amp;lt;/span&amp;gt;\n&#039;&lt;br /&gt;
		end&lt;br /&gt;
		headerContent = headerContent .. &#039;&amp;lt;/p&amp;gt;\n&#039;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if reloadLink then&lt;br /&gt;
		headerContent = headerContent .. &#039;&amp;lt;p &#039; .. (&lt;br /&gt;
				not false  -- пока оставим&lt;br /&gt;
			and &#039;style=&amp;quot;margin-top:1.5em;&amp;quot;&#039;&lt;br /&gt;
			 or &#039;&#039;&lt;br /&gt;
		) .. &#039;&amp;gt;&amp;lt;span style=&amp;quot;font-size:1.5em;&amp;quot; class=&amp;quot;plainlinks purgelink&amp;quot;&amp;gt;[&#039; .. mw.title.getCurrentTitle():fullUrl(&#039;action=purge&#039;) .. &#039; Обновить]&amp;lt;/span&amp;gt;&amp;amp;nbsp;&amp;lt;b&amp;gt;·&amp;lt;/b&amp;gt; обновлялось в &#039; .. ru:formatDate(&#039;H:i j xg Y&#039;) .. &#039; (UTC)&#039;&lt;br /&gt;
	end&lt;br /&gt;
	if reloadLink or separateTopicPage then&lt;br /&gt;
		headerContent = headerContent .. &#039;&amp;lt;/p&amp;gt;\n&#039;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if style == &#039;список&#039; then&lt;br /&gt;
		headerContent = &#039;&#039;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if not afdMode and not pageListMode and fullTopicsToShow &amp;gt; 50 and #topics &amp;gt; 50 then&lt;br /&gt;
		headerContent = headerContent .. &#039;&amp;lt;p style=&amp;quot;font-size:85%;&amp;quot;&amp;gt;Для более быстрой загрузки страницы и экономии ресурсов сервера сократите число тем, содержимое которых выводится на странице, уменьшив значение параметра &amp;lt;code&amp;gt;полных тем&amp;lt;/code&amp;gt; в шаблоне.&amp;lt;/p&amp;gt;\n&#039;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- формируем таблицу&lt;br /&gt;
	local outFragmentLink_title = &#039;Ссылка прямо на реплику в настоящий момент работает только при включенном гаджете «Удобные обсуждения»&#039;&lt;br /&gt;
	if pageListData and pageListData[1] then&lt;br /&gt;
		local tableContent =&lt;br /&gt;
			   &#039;{| class=&amp;quot;wikitable wide sortable&amp;quot; style=&amp;quot;line-height:1.4;&amp;quot;\n&#039;&lt;br /&gt;
			.. &#039;! scope=&amp;quot;col&amp;quot; width=&amp;quot;2%&amp;quot; | №\n&#039;&lt;br /&gt;
			.. &#039;! scope=&amp;quot;col&amp;quot; | Страница\n&#039;&lt;br /&gt;
			.. &#039;! scope=&amp;quot;col&amp;quot; width=&amp;quot;25%&amp;quot; class=&amp;quot;nowrap&amp;quot; | Последнее сообщение\n&#039;&lt;br /&gt;
			.. &#039;! scope=&amp;quot;col&amp;quot; width=&amp;quot;10%&amp;quot; | Тем\n&#039;&lt;br /&gt;
			.. &#039;! scope=&amp;quot;col&amp;quot; width=&amp;quot;10%&amp;quot; | Сообщений\n&#039;&lt;br /&gt;
		for k, v in pairs(pageListData) do&lt;br /&gt;
			if v.msgCount then&lt;br /&gt;
				tableContent = tableContent&lt;br /&gt;
					.. &#039;|-\n&#039;&lt;br /&gt;
					.. &#039;| style=&amp;quot;text-align:center;&amp;quot; | &#039; .. v.num .. &#039;\n&#039;&lt;br /&gt;
					.. &#039;| &#039; .. conceal(v.pageTitle, &#039;wikilink&#039;) .. &#039;[[&#039; .. v.pageTitle .. &#039;|&amp;lt;span style=&amp;quot;display:block; font-size:110%;&amp;quot;&amp;gt;&#039; .. v.pageTitle .. (&lt;br /&gt;
								v.warningHeading&lt;br /&gt;
							and &#039;&amp;lt;span style=&amp;quot;display:inline-block; margin-left:1em; padding:0 8px; border-radius:5px; font-size:83.33%; line-height:1.5; letter-spacing:1px; background-color:#a07; color:var(--color-inverted, #fff); white-space:nowrap;&amp;quot;&amp;gt;ПРЕДУПР.&amp;lt;/span&amp;gt;&#039;&lt;br /&gt;
							 or &#039;&#039;&lt;br /&gt;
						) .. &#039;&amp;lt;/span&amp;gt;]]\n&#039;&lt;br /&gt;
					.. &#039;| style=&amp;quot;/* Chrome */ word-break:break-word; /* ? */ word-wrap:break-word;&amp;quot; | &#039; .. (&lt;br /&gt;
							v.msgCount &amp;gt; 0&lt;br /&gt;
						and conceal(v.lastMsgDateTimestamp, &#039;lastMsgDate&#039;) .. &#039;[[&#039; .. v.pageTitle .. &#039;#&#039; .. v.lastMsgAnchor .. &#039;|&amp;lt;span style=&amp;quot;display:block; text-decoration:inherit;&amp;quot; class=&amp;quot;topicWatch-outFragmentLink&amp;quot; title=&amp;quot;&#039; .. outFragmentLink_title .. &#039;&amp;quot;&amp;gt;&#039; .. v.lastMsgDateString .. &#039;&amp;lt;br&amp;gt;от &#039; .. v.lastMsgAuthor .. &#039;&amp;lt;/span&amp;gt;]]\n&#039;&lt;br /&gt;
						 or &#039;—\n&#039;&lt;br /&gt;
					)&lt;br /&gt;
					.. &#039;| style=&amp;quot;text-align:center;&amp;quot; | &#039; .. conceal(v.msgCount, &#039;topicCount&#039;) .. v.topicCount .. &#039;\n&#039;&lt;br /&gt;
					.. &#039;| style=&amp;quot;text-align:center;&amp;quot; | &#039; .. conceal(v.msgCount, &#039;msgCount&#039;) .. v.msgCount .. &#039;\n&#039;&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		tableContent = tableContent .. &#039;|}\n&#039;&lt;br /&gt;
		headerContent = headerContent .. tableContent&lt;br /&gt;
	elseif topicsToShow ~= 0 and #topics ~= 0 then&lt;br /&gt;
		local needHighlightOutLinks = fullTopicsToShow ~= 0 and fullTopicsToShow &amp;lt; math.min(#topics, topicsToShow)&lt;br /&gt;
		local labelColors =&lt;br /&gt;
				afdMode&lt;br /&gt;
			and {&lt;br /&gt;
					closure           = &#039;var(--border-color-destructive--active, #b32424)&#039;,&lt;br /&gt;
					preclosure        = &#039;var(--border-color-success, #096450)&#039;,&lt;br /&gt;
					challengedClosure = &#039;var(--border-color-destructive, #d73333)&#039;,&lt;br /&gt;
					partialClosure    = &#039;var(--border-color-progressive, #36c)&#039;,&lt;br /&gt;
				}&lt;br /&gt;
			 or {&lt;br /&gt;
					closure           = &#039;var(--border-color-interactive, #72777d)&#039;,&lt;br /&gt;
					preclosure        = &#039;var(--border-color-interactive, #72777d)&#039;,&lt;br /&gt;
					challengedClosure = &#039;var(--border-color-interactive, #72777d)&#039;,&lt;br /&gt;
					partialClosure    = &#039;var(--border-color-interactive, #72777d)&#039;,&lt;br /&gt;
				}&lt;br /&gt;
		&lt;br /&gt;
		local tableContent&lt;br /&gt;
		if style == &#039;wikitable&#039; then&lt;br /&gt;
			tableContent =&lt;br /&gt;
				   &#039;{| class=&amp;quot;wikitable sortable topicWatch-topicTable&amp;quot;&#039; .. (fullTopicsToShow ~= 0 and &#039; id=&amp;quot;topicTable&#039; .. randomNum .. &#039;&amp;quot;&#039; or &#039;&#039;) .. &#039; style=&amp;quot;line-height:1.4;&amp;quot;\n&#039;&lt;br /&gt;
				.. (talkpageMode and talkpageCount &amp;gt; 1 and &#039;&#039; or &#039;! scope=&amp;quot;col&amp;quot; width=&amp;quot;2%&amp;quot; | № !&#039;)&lt;br /&gt;
				.. &#039;! Тема &#039;&lt;br /&gt;
				.. &#039;!! scope=&amp;quot;col&amp;quot; style=&amp;quot;width:25%&amp;quot; class=&amp;quot;nowrap&amp;quot; | Последнее сообщение &#039;&lt;br /&gt;
				.. &#039;!! scope=&amp;quot;col&amp;quot; style=&amp;quot;width:10%&amp;quot; | Сообщений &#039;&lt;br /&gt;
				.. &#039;!! scope=&amp;quot;col&amp;quot; style=&amp;quot;width:10%&amp;quot; | Авторов\n&#039;&lt;br /&gt;
		elseif style == &#039;форумный&#039; then&lt;br /&gt;
			tableContent =&lt;br /&gt;
				   &#039;&amp;lt;div style=&amp;quot;margin:1em 0; padding:8px 13px; border:1px solid var(--border-color-content-added, #afb6e9); background:var(--background-color-progressive-subtle, #eaf3ff); color:inherit; line-height:1.4; display:table; &amp;quot;&amp;gt;\n&#039;&lt;br /&gt;
				.. &#039;{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; class=&amp;quot;sortable topicWatch-topicTable&amp;quot;&#039; .. (fullTopicsToShow ~= 0 and &#039; id=&amp;quot;topicTable&#039; .. randomNum .. &#039;&amp;quot;&#039; or &#039;&#039;) .. &#039;\n&#039;&lt;br /&gt;
				.. &#039;|-\n&#039;&lt;br /&gt;
				.. (talkpageMode and talkpageCount &amp;gt; 1 and &#039;&#039; or &#039;! scope=&amp;quot;col&amp;quot; style=&amp;quot;border-bottom:1px solid var(--border-color-base, #afd2e9); padding:2px 1.5em 4px 0; text-align:right; font-weight:normal;&amp;quot; | № !&#039;)&lt;br /&gt;
				.. &#039;! scope=&amp;quot;col&amp;quot; style=&amp;quot;border-bottom:1px solid var(--border-color-base, #afd2e9); padding:2px 2em 4px 0; text-align:left; font-weight:normal;&amp;quot; | &#039; .. (talkpageMode and talkpageCount == 1 and &#039;&#039; or &#039;&amp;lt;span style=&amp;quot;visibility:hidden;&amp;quot;&amp;gt;§ &amp;lt;/span&amp;gt;&#039;) .. &#039;Тема &#039;&lt;br /&gt;
				.. &#039;!! scope=&amp;quot;col&amp;quot; style=&amp;quot;border-bottom:1px solid var(--border-color-base, #afd2e9); padding:2px 2em 4px 0; text-align:left; font-weight:normal;&amp;quot; class=&amp;quot;nowrap&amp;quot; | Последнее сообщение &#039;&lt;br /&gt;
				.. &#039;!! scope=&amp;quot;col&amp;quot; style=&amp;quot;border-bottom:1px solid var(--border-color-base, #afd2e9); padding:2px 1.5em 4px 0; text-align:left; font-weight:normal;&amp;quot; | Сообщений\n&#039;&lt;br /&gt;
				.. &#039;|-\n&#039;&lt;br /&gt;
				.. &#039;| colspan=&amp;quot;3&amp;quot; style=&amp;quot;padding-top:6px;&amp;quot; |\n&#039;&lt;br /&gt;
		elseif style == &#039;список&#039; then&lt;br /&gt;
			tableContent = &#039;&#039;&lt;br /&gt;
		end&lt;br /&gt;
		for k, v in pairs(topics) do&lt;br /&gt;
			local labels = (  -- может быть предварительный после оспоренного, поэтому ярлык оспаривания раньше&lt;br /&gt;
						v.challengedClosureHeading&lt;br /&gt;
					and &#039;&amp;lt;span style=&amp;quot;display:inline-block; margin-left:1em; padding:0 8px; border-radius:5px; font-size:&#039;.. closureSize ..&#039;; line-height:1.5; letter-spacing:1px; background-color:&#039; .. labelColors.challengedClosure .. &#039;; color:var(--color-inverted, #fff); white-space:nowrap;&amp;quot; title=&amp;quot;В теме есть подраздел с названием «&#039; .. v.challengedClosureHeading .. &#039;»&amp;quot;&#039; .. (afdMode and &#039;&#039; or &#039; class=&amp;quot;topicWatch-label-challengedClosure&amp;quot;&#039;) .. &#039;&amp;gt;ОСПОРЕНО&amp;lt;/span&amp;gt;&#039;&lt;br /&gt;
					 or &#039;&#039;&lt;br /&gt;
				) .. (&lt;br /&gt;
						v.preclosureHeading and not v.closureHeading&lt;br /&gt;
					and &#039;&amp;lt;span style=&amp;quot;display:inline-block; margin-left:1em; padding:0 8px; border-radius:5px; font-size:&#039;.. closureSize ..&#039;; line-height:1.5; letter-spacing:1px; background-color:&#039; .. labelColors.preclosure .. &#039;; color:var(--color-inverted, #fff); white-space:nowrap;&amp;quot; title=&amp;quot;В теме есть подраздел с названием «&#039; .. v.preclosureHeading .. &#039;»&amp;quot;&#039; .. (afdMode and &#039;&#039; or &#039; class=&amp;quot;topicWatch-label-preclosure&amp;quot;&#039;) .. &#039;&amp;gt;ПРЕДЫТОГ&amp;lt;/span&amp;gt;&#039;&lt;br /&gt;
					 or &#039;&#039;&lt;br /&gt;
				) .. (&lt;br /&gt;
						v.partialClosureHeading and not v.closureHeading&lt;br /&gt;
					and &#039;&amp;lt;span style=&amp;quot;display:inline-block; margin-left:1em; padding:0 8px; border-radius:5px; font-size:&#039;.. closureSize ..&#039;; line-height:1.5; letter-spacing:1px; background-color:&#039; .. labelColors.partialClosure .. &#039;; color:var(--color-inverted, #fff); white-space:nowrap;&amp;quot; title=&amp;quot;В теме есть подподраздел с названием «&#039; .. v.partialClosureHeading .. &#039;»&amp;quot;&#039; .. (afdMode and &#039;&#039; or &#039; class=&amp;quot;topicWatch-label-partialClosure&amp;quot;&#039;) .. &#039;&amp;gt;ЧАСТ. ИТОГ&amp;lt;/span&amp;gt;&#039;&lt;br /&gt;
					 or &#039;&#039;&lt;br /&gt;
				) .. (&lt;br /&gt;
						v.closureHeading&lt;br /&gt;
					and &#039;&amp;lt;span style=&amp;quot;display:inline-block; margin-left:1em; padding:0 8px; border-radius:5px; font-size:&#039;.. closureSize ..&#039;; line-height:1.5; letter-spacing:1px; background-color:&#039; .. labelColors.closure .. &#039;; color:var(--color-inverted, #fff); white-space:nowrap;&amp;quot; title=&amp;quot;В теме есть подраздел с названием «&#039; .. v.closureHeading .. &#039;»&amp;quot;&#039; .. (afdMode and &#039;&#039; or &#039; class=&amp;quot;topicWatch-label-closure&amp;quot;&#039;) .. &#039;&amp;gt;ИТОГ&amp;lt;/span&amp;gt;&#039;&lt;br /&gt;
					 or &#039;&#039;&lt;br /&gt;
				)&lt;br /&gt;
			&lt;br /&gt;
			local topicString, lastMsgString, msgCountString, authorCountString, numString&lt;br /&gt;
			local topicAttrs, lastMsgAttrs, msgCountAttrs, authorCountAttrs, numAttrs&lt;br /&gt;
			if style == &#039;wikitable&#039; then&lt;br /&gt;
				numString = v.num&lt;br /&gt;
				topicString = conceal(v.canonicalPath, &#039;wikilink&#039;) .. &#039;[[&#039; .. (&lt;br /&gt;
							k &amp;lt;= fullTopicsToShow&lt;br /&gt;
						and (&lt;br /&gt;
								talkpageMode and talkpageCount == 1&lt;br /&gt;
							and v.sectionHeadingLink&lt;br /&gt;
							 or (&lt;br /&gt;
									v.subsectionHeading&lt;br /&gt;
								and v.subsectionHeading .. &#039; (&#039; .. v.sectionHeadingLink .. &#039;)&#039;&lt;br /&gt;
								 or v.sectionHeadingLink&lt;br /&gt;
								) .. &#039; ← &#039; .. v.pageTitle&lt;br /&gt;
							)&lt;br /&gt;
						 or v.pageTitle .. (&lt;br /&gt;
								v.subsectionHeading&lt;br /&gt;
							and v.subsectionHeading .. &#039; (&#039; .. v.sectionHeadingLink .. &#039;)&#039;&lt;br /&gt;
							 or v.sectionHeadingLink&lt;br /&gt;
							)&lt;br /&gt;
					) .. &#039;|&amp;lt;span &#039; .. (k &amp;lt;= fullTopicsToShow and fullTopicsToShow ~= 0 and &#039;&#039; or &#039;title=&amp;quot;Откроется на отдельной странице&amp;quot; &#039;) .. (&lt;br /&gt;
							talkpageMode and talkpageCount == 1&lt;br /&gt;
						and &#039;style=&amp;quot;display:block; font-size:110%;&amp;quot;&amp;gt;&#039;&lt;br /&gt;
						 or &#039;style=&amp;quot;display:block;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;visibility:hidden;&amp;quot;&amp;gt;§ &amp;lt;/span&amp;gt;&amp;lt;small&amp;gt;&#039; .. v.pageTitle .. &#039;&amp;lt;/small&amp;gt;&amp;lt;br&amp;gt;&amp;lt;span style=&amp;quot;display:inline-block;&amp;quot;&amp;gt;§ &amp;lt;/span&amp;gt;&#039;&lt;br /&gt;
					) .. v.sectionHeading .. labels .. &#039;&amp;lt;/span&amp;gt;]]&#039;  -- TODO: учёт подраздела&lt;br /&gt;
				lastMsgString = conceal(v.lastMsgDateTimestamp, &#039;lastMsgDate&#039;) .. (&lt;br /&gt;
							k &amp;lt;= fullTopicsToShow&lt;br /&gt;
						and &#039;[[#&#039; .. v.lastMsgAnchor .. &#039;|&amp;lt;span style=&amp;quot;display:block; text-decoration:inherit;&amp;quot;&amp;gt;&#039;&lt;br /&gt;
						 or &#039;[[&#039; .. v.pageTitle .. &#039;#&#039; .. v.lastMsgAnchor .. &#039;|&amp;lt;span style=&amp;quot;display:block; text-decoration:inherit;&amp;quot; class=&amp;quot;topicWatch-outFragmentLink&amp;quot; title=&amp;quot;&#039; .. outFragmentLink_title .. &#039;&amp;quot;&amp;gt;&#039;&lt;br /&gt;
					) .. v.lastMsgDateString .. &#039;&amp;lt;br&amp;gt;от &#039; .. v.lastMsgAuthor .. &#039;&amp;lt;/span&amp;gt;]]&#039;&lt;br /&gt;
				msgCountString = conceal(v.msgCount, &#039;msgCount&#039;) .. v.msgCount&lt;br /&gt;
				authorCountString = conceal(#v.authors, &#039;authorCount&#039;) .. &#039;&amp;lt;span style=&amp;quot;border-bottom:1px dotted; cursor:help;&amp;quot; title=&amp;quot;&#039; .. table.concat(v.authors, &#039;, &#039;) .. &#039;&amp;quot;&amp;gt;&#039; .. #v.authors .. &#039;&amp;lt;/span&amp;gt;&#039;&lt;br /&gt;
				&lt;br /&gt;
				numAttrs = &#039;style=&amp;quot;text-align:center;&amp;quot;&#039;&lt;br /&gt;
				topicAttrs = &#039;&#039;&lt;br /&gt;
				lastMsgAttrs = &#039;style=&amp;quot;/* Chrome */ word-break:break-word; /* ? */ word-wrap:break-word;&amp;quot;&#039;&lt;br /&gt;
				msgCountAttrs = &#039;style=&amp;quot;text-align:center;&amp;quot;&#039;&lt;br /&gt;
				authorCountAttrs = &#039;style=&amp;quot;text-align:center;&amp;quot;&#039;&lt;br /&gt;
			elseif style == &#039;форумный&#039; then&lt;br /&gt;
				numString =     talkpageMode and talkpageCount == 1&lt;br /&gt;
							and &#039;&amp;lt;span style=&amp;quot;font-size:110%; visibility:hidden;&amp;quot;&amp;gt;l&amp;lt;/span&amp;gt;&#039; .. v.num .. &#039;&amp;lt;span style=&amp;quot;font-size:110%; visibility:hidden;&amp;quot;&amp;gt;l&amp;lt;/span&amp;gt;&#039;  -- способ, рекомендуемый Горбуновым, чтобы строки были на одной линии&lt;br /&gt;
							 or v.num&lt;br /&gt;
				topicString = conceal(v.canonicalPath, &#039;wikilink&#039;)  .. &#039;[[&#039; .. v.pageTitle .. (&lt;br /&gt;
							v.subsectionHeading&lt;br /&gt;
						and v.subsectionHeading .. &#039; (&#039; .. v.sectionHeadingLink .. &#039;)&#039;&lt;br /&gt;
						 or v.sectionHeadingLink&lt;br /&gt;
					) .. &#039;|&#039; .. (&lt;br /&gt;
							talkpageMode and talkpageCount == 1&lt;br /&gt;
						and &#039;&amp;lt;span style=&amp;quot;display:block; font-size:110%;&amp;quot;&amp;gt;&#039;&lt;br /&gt;
						 or &#039;&amp;lt;span style=&amp;quot;display:block;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;display:inline-block;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;visibility:hidden;&amp;quot;&amp;gt;§ &amp;lt;/span&amp;gt;&amp;lt;small&amp;gt;&#039; .. mw.ustring.gsub(v.pageTitle, &#039;Тептар:Форум/&#039;, &#039;&#039;) .. &#039;&amp;lt;/small&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&amp;lt;span style=&amp;quot;display:inline-block;&amp;quot;&amp;gt;§ &amp;lt;/span&amp;gt;&#039;&lt;br /&gt;
					) .. v.sectionHeading .. labels .. &#039;&amp;lt;/span&amp;gt;]]&#039;&lt;br /&gt;
				lastMsgString = conceal(v.lastMsgDateTimestamp, &#039;lastMsgDate&#039;) .. (&lt;br /&gt;
							k &amp;lt;= fullTopicsToShow&lt;br /&gt;
						and &#039;[[#&#039; .. v.lastMsgAnchor .. &#039;|&amp;lt;span style=&amp;quot;display:block; text-decoration:inherit;&amp;quot;&amp;gt;&#039;&lt;br /&gt;
						 or &#039;[[&#039; .. v.pageTitle .. &#039;#&#039; .. v.lastMsgAnchor .. &#039;|&amp;lt;span style=&amp;quot;display:block; text-decoration:inherit;&amp;quot; class=&amp;quot;topicWatch-outFragmentLink&amp;quot; title=&amp;quot;&#039; .. outFragmentLink_title .. &#039;&amp;quot;&amp;gt;&#039;&lt;br /&gt;
					) .. v.lastMsgDateString .. &#039;&amp;lt;br&amp;gt;от &#039; .. v.lastMsgAuthor .. &#039;&amp;lt;/span&amp;gt;]]&#039;&lt;br /&gt;
				msgCountString = conceal(v.msgCount, &#039;msgCount&#039;) .. &#039;&amp;lt;span style=&amp;quot;border-bottom:1px dotted; cursor:help;&amp;quot; title=&amp;quot;От &#039; .. #v.authors .. &#039; &#039; .. ru:plural(#v.authors , &#039;автора&#039;, &#039;авторов&#039;) .. &#039;:&amp;amp;#10;&#039; .. table.concat(v.authors, &#039;, &#039;) .. &#039;&amp;quot;&amp;gt;&#039; .. v.msgCount .. &#039;&amp;lt;/span&amp;gt;&#039;&lt;br /&gt;
				&lt;br /&gt;
				numAttrs = &#039;style=&amp;quot;padding:3px 0; vertical-align:top; text-align:right; padding-right:8px;&amp;quot;&#039;&lt;br /&gt;
				topicAttrs = &#039;style=&amp;quot;padding:3px 2em 3px 0; vertical-align:top;&amp;quot;&#039;&lt;br /&gt;
				lastMsgAttrs = &#039;style=&amp;quot;padding:3px 0.5em 3px 0; vertical-align:top; /* Chrome */ word-break:break-word; /* ? */ word-wrap:break-word;&amp;quot;&#039;&lt;br /&gt;
				msgCountAttrs = &#039;style=&amp;quot;padding:3px 0; vertical-align:top; text-align:center; vertical-align:top;&amp;quot;&#039;&lt;br /&gt;
			elseif style == &#039;список&#039; then&lt;br /&gt;
				topicString = conceal(v.canonicalPath, &#039;wikilink&#039;)  .. &#039;[[&#039; .. v.pageTitle .. (&lt;br /&gt;
							v.subsectionHeading&lt;br /&gt;
						and v.subsectionHeading .. &#039; (&#039; .. v.sectionHeadingLink .. &#039;)&#039;&lt;br /&gt;
						 or v.sectionHeadingLink&lt;br /&gt;
					) .. &#039;|&#039; .. (&lt;br /&gt;
							talkpageMode and talkpageCount == 1&lt;br /&gt;
						and &#039;&#039;&lt;br /&gt;
						 or &#039;&amp;lt;small&amp;gt;&#039; .. mw.ustring.gsub(v.pageTitle, &#039;Тептар:Форум/&#039;, &#039;&#039;) .. &#039;&amp;lt;/small&amp;gt;&amp;lt;br&amp;gt;&#039;&lt;br /&gt;
					) .. v.sectionHeading .. labels .. &#039;]]&#039;&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			if style == &#039;список&#039; then&lt;br /&gt;
				tableContent = tableContent&lt;br /&gt;
					.. &#039;* &#039; .. topicString&lt;br /&gt;
					.. &#039;\n&#039;&lt;br /&gt;
			else&lt;br /&gt;
				tableContent = tableContent&lt;br /&gt;
					.. &#039;|-&#039; .. (style ~= &#039;форумный&#039; and needHighlightOutLinks and k &amp;gt; fullTopicsToShow and &#039; style=&amp;quot;background-color:var(--background-color-neutral); color:inherit;&amp;quot;&#039; or &#039;&#039;) .. &#039;\n&#039;&lt;br /&gt;
					.. (talkpageMode and talkpageCount &amp;gt; 1 and &#039;&#039; or &#039;| &#039; .. numAttrs .. &#039; | &#039; .. numString .. &#039;\n&#039;)&lt;br /&gt;
					.. &#039;| &#039; .. topicAttrs .. &#039; | &#039; .. topicString .. &#039;\n&#039;&lt;br /&gt;
					.. &#039;| &#039; .. lastMsgAttrs .. &#039; | &#039; .. lastMsgString .. &#039;\n&#039;&lt;br /&gt;
					.. &#039;| &#039; .. msgCountAttrs .. &#039; | &#039; .. msgCountString .. &#039;\n&#039;&lt;br /&gt;
					.. (style == &#039;форумный&#039; and &#039;&#039; or &#039;| &#039; .. authorCountAttrs .. &#039; | &#039; .. authorCountString .. &#039;\n&#039;)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		if style ~= &#039;список&#039; then&lt;br /&gt;
			tableContent = tableContent .. &#039;|}\n&#039;&lt;br /&gt;
			if style == &#039;форумный&#039; then&lt;br /&gt;
				tableContent = tableContent .. &#039;&amp;lt;/div&amp;gt;\n&#039;&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		headerContent = headerContent .. tableContent&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- формируем сообщение(-я) об ошибке&lt;br /&gt;
	if not items[1] then&lt;br /&gt;
		if standardMode then&lt;br /&gt;
			table.insert(errorInfo, &#039;В списке тем для отслеживания пока пусто.&#039;)&lt;br /&gt;
		elseif talkpageMode or pageListMode then&lt;br /&gt;
			table.insert(errorInfo, &#039;В списке страниц пусто.&#039;)&lt;br /&gt;
		elseif afdMode then&lt;br /&gt;
			table.insert(errorInfo, &#039;Не удалось найти темы.&#039;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if errorInfo[1] then&lt;br /&gt;
		headerContent = headerContent&lt;br /&gt;
			.. &#039;&amp;lt;div style=&amp;quot;font-style:italic; margin:1em 0;&amp;quot;&amp;gt;\n&#039;&lt;br /&gt;
			.. table.concat(errorInfo, &#039;&amp;lt;br&amp;gt;&#039;)&lt;br /&gt;
			.. &#039;&amp;lt;/div&amp;gt;\n&#039;&lt;br /&gt;
	end&lt;br /&gt;
	local itemsToRemoveString&lt;br /&gt;
	if itemsToRemove[1] then&lt;br /&gt;
		itemsToRemoveString = &#039;&amp;lt;ul style=&amp;quot;display:none;&amp;quot; class=&amp;quot;topicWatch-itemsToRemove&amp;quot;&amp;gt;\n&#039;&lt;br /&gt;
		for k, v in pairs(itemsToRemove) do&lt;br /&gt;
			itemsToRemoveString = itemsToRemoveString .. &#039;&amp;lt;li&amp;gt;&#039; .. v .. &#039;&amp;lt;/li&amp;gt;\n&#039;&lt;br /&gt;
		end&lt;br /&gt;
		itemsToRemoveString = itemsToRemoveString .. &#039;&amp;lt;/ul&amp;gt;\n&#039;&lt;br /&gt;
		headerContent = headerContent .. itemsToRemoveString&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- формируем сами темы&lt;br /&gt;
	local content = &#039;&#039;&lt;br /&gt;
	if fullTopicsToShow ~= 0 then&lt;br /&gt;
		headerContent = headerContent .. &#039;__TOC__\n&#039;&lt;br /&gt;
		for k, v in pairs(fullTopics) do&lt;br /&gt;
			if v.msgCount then&lt;br /&gt;
				v.sectionContent = mw.ustring.gsub(v.sectionContent, v.lastMsgDateString .. &#039; %(UTC%)&#039;, &#039;&amp;lt;cite id=&amp;quot;&#039; .. v.lastMsgAnchor:gsub(&#039;&amp;quot;&#039;, &#039;&amp;amp;quot;&#039;) .. &#039;&amp;quot; style=&amp;quot;font-style:normal;&amp;quot;&amp;gt;%0&amp;lt;/cite&amp;gt;&#039;)&lt;br /&gt;
			end&lt;br /&gt;
			content = content&lt;br /&gt;
				.. killHeadingMarkers(frame:preprocess(v.sectionContent)) .. &#039;\n&#039;&lt;br /&gt;
				.. &#039;&amp;lt;div style=&amp;quot;margin-top:1em;&amp;quot;&amp;gt;&#039; .. (topicsToShow ~= 0 and &#039;[[#topicTable&#039; .. randomNum .. &#039;|↑ К списку тем]]&#039; or &#039;[[#toc|↑ К содержанию]]&#039;) .. &#039;&amp;lt;/div&amp;gt;\n&#039;&lt;br /&gt;
			if k == fullTopicsToShow then break end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	content = headerContent .. content&lt;br /&gt;
	&lt;br /&gt;
	return content&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Buto</name></author>
	</entry>
	<entry>
		<id>https://massarn.com/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Topic_monitoring&amp;diff=2497</id>
		<title>Модуль:Topic monitoring</title>
		<link rel="alternate" type="text/html" href="https://massarn.com/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Topic_monitoring&amp;diff=2497"/>
		<updated>2026-10-22T19:01:35Z</updated>

		<summary type="html">&lt;p&gt;Buto: Новая страница: «local p = {}  local function conceal(text, class) 	 class = class or &amp;#039;&amp;#039; 	 return &amp;#039;&amp;lt;span style=&amp;quot;display:none; speak:none;&amp;quot; class=&amp;quot;topicWatch-&amp;#039; .. class .. &amp;#039;&amp;quot;&amp;gt;&amp;#039; .. text .. &amp;#039;&amp;lt;/span&amp;gt;&amp;#039; -- содержимое шаблона {{~}} end  local function findInTable(table, value) 	for k, v in pairs(table) do 		if v == value then 			return true 		end 	end 	return false end  local function cleanSectionHeading(heading) 	-- The following patterns reproduce [[Участн...»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local p = {}&lt;br /&gt;
&lt;br /&gt;
local function conceal(text, class)&lt;br /&gt;
	 class = class or &#039;&#039;&lt;br /&gt;
	 return &#039;&amp;lt;span style=&amp;quot;display:none; speak:none;&amp;quot; class=&amp;quot;topicWatch-&#039; .. class .. &#039;&amp;quot;&amp;gt;&#039; .. text .. &#039;&amp;lt;/span&amp;gt;&#039; -- содержимое шаблона {{~}}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function findInTable(table, value)&lt;br /&gt;
	for k, v in pairs(table) do&lt;br /&gt;
		if v == value then&lt;br /&gt;
			return true&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function cleanSectionHeading(heading)&lt;br /&gt;
	-- The following patterns reproduce [[Участник:Buto/transferHeadingToSummary.js]]&lt;br /&gt;
	heading = mw.ustring.gsub(heading, &#039;%[%[:?[^|%]]*|([^%]]*)%]%]&#039;, &#039;%1&#039;)&lt;br /&gt;
	heading = mw.ustring.gsub(heading, &#039;%[%[:?([^%]]*)%]%]&#039;, &#039;%1&#039;)&lt;br /&gt;
	heading = mw.ustring.gsub(heading, &amp;quot;&#039;&#039;&#039;(.-)&#039;&#039;&#039;&amp;quot;, &#039;%1&#039;)&lt;br /&gt;
	heading = mw.ustring.gsub(heading, &amp;quot;&#039;&#039;(.-)&#039;&#039;&amp;quot;, &#039;%1&#039;)&lt;br /&gt;
	heading = mw.ustring.gsub(heading, &#039;&amp;lt;/?%w+ ?/?&amp;gt;&#039;, &#039;&#039;)&lt;br /&gt;
	heading = mw.ustring.gsub(heading, &#039;&amp;lt;%w+ [%w ]-=[^&amp;lt;&amp;gt;]-&amp;gt;&#039;, &#039;&#039;)&lt;br /&gt;
	heading = mw.ustring.gsub(heading, &#039;  +&#039;, &#039; &#039;)&lt;br /&gt;
	heading = mw.text.trim(heading)&lt;br /&gt;
	return heading&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function sectionHeadingToLink(sectionHeading)&lt;br /&gt;
	local sectionHeadingLink = sectionHeading&lt;br /&gt;
	-- The following reproduces processURI function of [[Участник:Jack who built the house/copyWikilinks.js]]&lt;br /&gt;
	--[[sectionHeadingLink = mw.ustring.gsub(sectionHeadingLink, &#039;&amp;lt;&#039;, &#039;%%3C&#039;)&lt;br /&gt;
	sectionHeadingLink = mw.ustring.gsub(sectionHeadingLink, &#039;&amp;gt;&#039;, &#039;%%3E&#039;)&lt;br /&gt;
	sectionHeadingLink = mw.ustring.gsub(sectionHeadingLink, &#039;%[&#039;, &#039;%%5B&#039;)&lt;br /&gt;
	sectionHeadingLink = mw.ustring.gsub(sectionHeadingLink, &#039;%]&#039;, &#039;%%5D&#039;)&lt;br /&gt;
	sectionHeadingLink = mw.ustring.gsub(sectionHeadingLink, &#039;{&#039;, &#039;%%7B&#039;)&lt;br /&gt;
	sectionHeadingLink = mw.ustring.gsub(sectionHeadingLink, &#039;|&#039;, &#039;%%7C&#039;)&lt;br /&gt;
	sectionHeadingLink = mw.ustring.gsub(sectionHeadingLink, &#039;}&#039;, &#039;%%7D&#039;)&lt;br /&gt;
	sectionHeadingLink = mw.ustring.gsub(sectionHeadingLink, &#039; &#039;, &#039;.C2.A0&#039;)]]&lt;br /&gt;
	return &#039;#&#039; .. sectionHeadingLink&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function killHeadingMarkers(content)&lt;br /&gt;
	content = mw.ustring.gsub(&lt;br /&gt;
		content,&lt;br /&gt;
		string.char(127) .. &#039;\&#039;&amp;quot;`UNIQ%-%-h%-%d+%-%-QINU`&amp;quot;\&#039;&#039; .. string.char(127),&lt;br /&gt;
		&#039;&#039;&lt;br /&gt;
	)&lt;br /&gt;
	return content&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.main(frame)&lt;br /&gt;
	if not getArgs then&lt;br /&gt;
		getArgs = require(&#039;Модуль:Arguments&#039;).getArgs&lt;br /&gt;
	end&lt;br /&gt;
	local yesno = require(&#039;Module:Yesno&#039;)&lt;br /&gt;
	local args = getArgs(frame, {removeBlanks = false})&lt;br /&gt;
	local ru = mw.getLanguage(&#039;ru&#039;)&lt;br /&gt;
	local errorInfo = {}&lt;br /&gt;
	&lt;br /&gt;
	-- обрабатываем параметры&lt;br /&gt;
	local talkpageMode = args[&#039;режим&#039;] == &#039;страницы&#039;&lt;br /&gt;
	local afdMode = args[&#039;режим&#039;] == &#039;КУ&#039;&lt;br /&gt;
	local pageListMode = args[&#039;режим&#039;] == &#039;список страниц&#039;&lt;br /&gt;
	local standardMode&lt;br /&gt;
	if not talkpageMode and not afdMode and not pageListMode then&lt;br /&gt;
		standardMode = true&lt;br /&gt;
	end&lt;br /&gt;
	local closureSize = &amp;quot;83.33%&amp;quot;;&lt;br /&gt;
	if args[&#039;актуально&#039;] then &lt;br /&gt;
	closureSize = &amp;quot;70%&amp;quot;;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local separateTopicListPage, separateTopicList&lt;br /&gt;
	if standardMode and not args[1] then&lt;br /&gt;
		separateTopicListPage = mw.title.new(args[&#039;список&#039;] or mw.title.getCurrentTitle().prefixedText .. &#039;/список&#039;)&lt;br /&gt;
		if separateTopicListPage.exists then&lt;br /&gt;
			local content = separateTopicListPage:getContent()&lt;br /&gt;
			if content:find(&#039;{{&#039;) then&lt;br /&gt;
				content = frame:preprocess(content)&lt;br /&gt;
			end&lt;br /&gt;
			separateTopicList = mw.text.split(content, &#039;\n&#039;)&lt;br /&gt;
		end&lt;br /&gt;
		if not separateTopicList or (separateTopicList[1] == &#039;&#039; and not separateTopicList[2]) then&lt;br /&gt;
			separateTopicList = {}&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local afdItems, nominationsNum&lt;br /&gt;
	if afdMode then&lt;br /&gt;
		local afdListPage = mw.title.new(&#039;Тептар:К удалению&#039;) -- Участник:Jack who built the house/песочница2&lt;br /&gt;
		nominationsNum = tonumber(args[&#039;номинаций&#039;]) or 50&lt;br /&gt;
		&lt;br /&gt;
		afdItems = {}&lt;br /&gt;
		local afdListContent = afdListPage:getContent()&lt;br /&gt;
		afdListContent = mw.ustring.gsub(afdListContent, &#039;&amp;lt;small&amp;gt;.-&amp;lt;\/small&amp;gt;&#039;, &#039;&#039;)&lt;br /&gt;
		afdListContent = mw.ustring.gsub(afdListContent, &#039;&amp;lt;s&amp;gt;.-&amp;lt;\/s&amp;gt;&#039;, &#039;&#039;)&lt;br /&gt;
		local iterator = mw.ustring.gmatch(afdListContent, &#039;{{Удаление статей|([^|]+)|([^\n]+)}}&#039;)&lt;br /&gt;
		reversedIteratorTable = {}&lt;br /&gt;
		for day, topics in iterator do&lt;br /&gt;
			table.insert(reversedIteratorTable, 1, {day = day, topics = topics})&lt;br /&gt;
		end&lt;br /&gt;
		for k, v in pairs(reversedIteratorTable) do&lt;br /&gt;
			day = v.day&lt;br /&gt;
			topics = v.topics&lt;br /&gt;
			local afdPage = &#039;Тептар:К удалению/&#039; .. ru:formatDate(&#039;j xg Y&#039;, day)&lt;br /&gt;
			&lt;br /&gt;
			local iterator = mw.text.gsplit(topics, &#039; • &#039;, true)&lt;br /&gt;
			for v2 in iterator do&lt;br /&gt;
				if v2 ~= &#039;&#039; then&lt;br /&gt;
					v2 = cleanSectionHeading(v2)&lt;br /&gt;
					table.insert(afdItems, afdPage .. &#039;#&#039; .. v2)&lt;br /&gt;
				end&lt;br /&gt;
				if #afdItems &amp;gt;= nominationsNum + 50 then break end&lt;br /&gt;
			end&lt;br /&gt;
			if #afdItems &amp;gt;= nominationsNum + 50 then break end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local topicsToShow = tonumber(args[&#039;тем&#039;]) or 10000&lt;br /&gt;
	&lt;br /&gt;
	-- число тем, содержимое которых выводить непосредственно на странице, а не ссылаться на другую&lt;br /&gt;
	local fullTopicsToShow = not pageListMode and (&lt;br /&gt;
			   tonumber(args[&#039;полных тем&#039;])&lt;br /&gt;
			or (&lt;br /&gt;
				afdMode and 1000 or 10&lt;br /&gt;
			   )&lt;br /&gt;
		)&lt;br /&gt;
	&lt;br /&gt;
	if topicsToShow == 0 and fullTopicsToShow == 0 then return &#039;&#039; end&lt;br /&gt;
	&lt;br /&gt;
	local style = args[&#039;стиль&#039;] or &#039;wikitable&#039;;&lt;br /&gt;
	if style ~= &#039;wikitable&#039; and style ~= &#039;форумный&#039; and style ~= &#039;список&#039; then&lt;br /&gt;
		style = &#039;wikitable&#039;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local showTopicCount&lt;br /&gt;
	if args[&#039;показывать количество тем&#039;] then&lt;br /&gt;
		showTopicCount = yesno(args[&#039;показывать количество тем&#039;], true)&lt;br /&gt;
	else&lt;br /&gt;
		showTopicCount = true&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local reloadLink&lt;br /&gt;
	if args[&#039;обновить&#039;] then&lt;br /&gt;
		reloadLink = yesno(args[&#039;обновить&#039;], false)&lt;br /&gt;
	else&lt;br /&gt;
		reloadLink = false&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local sortFullTopics, sortTopics&lt;br /&gt;
	if afdMode then&lt;br /&gt;
		sortFullTopics = false&lt;br /&gt;
		sortTopics = false&lt;br /&gt;
	elseif args[&#039;сортировка полных тем&#039;] then&lt;br /&gt;
		sortFullTopics = yesno(args[&#039;сортировка полных тем&#039;], false)&lt;br /&gt;
		sortTopics = true&lt;br /&gt;
	else&lt;br /&gt;
		sortFullTopics = true&lt;br /&gt;
		sortTopics = true&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- проверяем и обрабатываем части названий, чистим от дубликатов&lt;br /&gt;
	-- wrongItems — элементы, с которыми что-то не так уже на этапе распознавания адреса&lt;br /&gt;
	-- itemsToRemove — элементы, которые предлагается удалить из списка отслеживания&lt;br /&gt;
	-- errorInfo (объявлено выше) — сообщения об ошибке&lt;br /&gt;
	local items, wrongItems, itemsToRemove = {}, {}, {}&lt;br /&gt;
	for k, v in pairs(separateTopicList or afdItems or args) do&lt;br /&gt;
		if type(k) == &#039;number&#039; then&lt;br /&gt;
			if v ~= &#039;&#039; then&lt;br /&gt;
				local newItem = {&lt;br /&gt;
					originalFullTitle = v,&lt;br /&gt;
					titleObject = mw.title.new(v),&lt;br /&gt;
				}&lt;br /&gt;
				if newItem.titleObject and newItem.titleObject.prefixedText ~= &#039;&#039; then&lt;br /&gt;
					if newItem.titleObject.fragment ~= &#039;&#039; then&lt;br /&gt;
						newItem.sectionHeading = mw.text.encode(mw.uri.decode(newItem.titleObject.fragment), &#039;&amp;lt;&amp;gt;%[%]{|}&#039;)&lt;br /&gt;
						if not talkpageMode and not pageListMode then&lt;br /&gt;
							newItem.resultMode = false&lt;br /&gt;
							newItem.sectionHeading = mw.ustring.gsub(newItem.sectionHeading, &#039;\\итог$&#039;, function (s)&lt;br /&gt;
								newItem.resultMode = true&lt;br /&gt;
								return &#039;&#039;&lt;br /&gt;
							end)&lt;br /&gt;
							newItem.sectionHeading = mw.ustring.gsub(newItem.sectionHeading, &#039;\\\\\\.*$&#039;, function (s) -- \\\Итог&lt;br /&gt;
								newItem.subsectionHeading = s&lt;br /&gt;
								return &#039;&#039;&lt;br /&gt;
							end)&lt;br /&gt;
						end&lt;br /&gt;
					end&lt;br /&gt;
					&lt;br /&gt;
					if not newItem.sectionHeading and not talkpageMode and not pageListMode then&lt;br /&gt;
						table.insert(wrongItems, v)&lt;br /&gt;
						table.insert(itemsToRemove, v)&lt;br /&gt;
					else&lt;br /&gt;
						local found = false&lt;br /&gt;
						for k2, v2 in pairs(items) do&lt;br /&gt;
							if v2.titleObject.prefixedText == newItem.titleObject.prefixedText and (not newItem.sectionHeading or v2.sectionHeading == newItem.sectionHeading) and (not newItem.subsectionHeading or v2.subsectionHeading == newItem.subsectionHeading) then&lt;br /&gt;
								found = true&lt;br /&gt;
								break&lt;br /&gt;
							end&lt;br /&gt;
						end&lt;br /&gt;
						if not found then&lt;br /&gt;
							table.insert(items, newItem)&lt;br /&gt;
						else&lt;br /&gt;
							table.insert(itemsToRemove, v)&lt;br /&gt;
						end&lt;br /&gt;
					end&lt;br /&gt;
				else&lt;br /&gt;
					table.insert(wrongItems, v)&lt;br /&gt;
					table.insert(itemsToRemove, v)&lt;br /&gt;
				end&lt;br /&gt;
			else&lt;br /&gt;
				table.insert(itemsToRemove, v)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if #wrongItems &amp;gt; 0 then&lt;br /&gt;
		local wrongItemsString =&lt;br /&gt;
				#wrongItems == 1&lt;br /&gt;
			and &#039;Что-то не так с элементом&#039;&lt;br /&gt;
			 or &#039;Что-то не так со следующими элементами:&#039;&lt;br /&gt;
		for k, v in pairs(wrongItems) do&lt;br /&gt;
			if k ~= 1 then&lt;br /&gt;
				wrongItemsString = wrongItemsString .. &#039;, &#039;&lt;br /&gt;
			end&lt;br /&gt;
			wrongItemsString = wrongItemsString .. &#039; «&#039; .. v .. &#039;»&#039;&lt;br /&gt;
		end&lt;br /&gt;
		wrongItemsString = wrongItemsString .. &#039;.&#039;&lt;br /&gt;
		table.insert(errorInfo, wrongItemsString)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- запрашиваем данные&lt;br /&gt;
	local allData = {}&lt;br /&gt;
	local talkpageCount&lt;br /&gt;
	local onlyPageTitle&lt;br /&gt;
	local pageListData&lt;br /&gt;
	if talkpageMode then&lt;br /&gt;
		talkpageCount = 0&lt;br /&gt;
		local parse_talkpage_content = require(&#039;Модуль:Get page content&#039;)._parse_talkpage_content&lt;br /&gt;
		&lt;br /&gt;
		for k, v in pairs(items) do&lt;br /&gt;
			local argsToPass = {}&lt;br /&gt;
			argsToPass[1] = v.titleObject&lt;br /&gt;
			argsToPass[&#039;короткие заголовки&#039;] = not items[2] and true or false&lt;br /&gt;
			if fullTopicsToShow == 0 then&lt;br /&gt;
				argsToPass[&#039;только статистика&#039;] = true&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			local allDataFromPage = parse_talkpage_content(argsToPass)&lt;br /&gt;
			if type(allDataFromPage) == &#039;table&#039; then&lt;br /&gt;
				if allDataFromPage[1] then&lt;br /&gt;
					local pageTitle = v.titleObject.prefixedText&lt;br /&gt;
					talkpageCount = talkpageCount + 1&lt;br /&gt;
					for k2, v2 in pairs(allDataFromPage) do&lt;br /&gt;
						v2.pageTitle = pageTitle&lt;br /&gt;
						v2.canonicalPath = v2.pageTitle .. &#039;#&#039; .. v2.sectionHeading .. (v2.subsectionHeading and &#039;\\\\\\&#039; .. v2.subsectionHeading or &#039;&#039;)&lt;br /&gt;
						table.insert(allData, v2)&lt;br /&gt;
					end&lt;br /&gt;
					if talkpageCount == 1 then&lt;br /&gt;
						onlyPageTitle = pageTitle&lt;br /&gt;
					end&lt;br /&gt;
				elseif allDataFromPage.pageNotExistMessage then&lt;br /&gt;
					table.insert(itemsToRemove, v.originalFullTitle)&lt;br /&gt;
					table.insert(errorInfo, allDataFromPage.pageNotExistMessage)&lt;br /&gt;
				end&lt;br /&gt;
			else&lt;br /&gt;
				table.insert(errorInfo, &#039;Не удалось получить данные о странице «&#039; .. v.titleObject.prefixedText .. &#039;» от модуля получения содержимого страницы.&#039;)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	elseif pageListMode then&lt;br /&gt;
		pageListData = {}&lt;br /&gt;
		local parse_talkpage_content = require(&#039;Модуль:Get page content&#039;)._parse_talkpage_content&lt;br /&gt;
		&lt;br /&gt;
		for k, v in pairs(items) do&lt;br /&gt;
			local argsToPass = {}&lt;br /&gt;
			argsToPass[1] = v.titleObject&lt;br /&gt;
			argsToPass[&#039;только статистика&#039;] = true&lt;br /&gt;
			argsToPass[&#039;режим списков страниц&#039;] = true&lt;br /&gt;
			&lt;br /&gt;
			local allDataFromPage = parse_talkpage_content(argsToPass)&lt;br /&gt;
			if type(allDataFromPage) == &#039;table&#039; then&lt;br /&gt;
				if allDataFromPage[1] then&lt;br /&gt;
					local pageTitle = v.titleObject.prefixedText&lt;br /&gt;
					local pageData = {&lt;br /&gt;
						num = k,&lt;br /&gt;
						pageTitle = pageTitle,&lt;br /&gt;
						msgCount = 0,&lt;br /&gt;
						topicCount = 0,&lt;br /&gt;
						lastMsgDateTimestamp = 0&lt;br /&gt;
					}&lt;br /&gt;
					for k2, v2 in pairs(allDataFromPage) do&lt;br /&gt;
						if v2.msgCount then&lt;br /&gt;
							pageData.msgCount = pageData.msgCount + v2.msgCount&lt;br /&gt;
							if v2.lastMsgDateTimestamp &amp;gt; pageData.lastMsgDateTimestamp then&lt;br /&gt;
								--pageData.lastMsgDate = v2.lastMsgDate&lt;br /&gt;
								pageData.lastMsgDateString = v2.lastMsgDateString&lt;br /&gt;
								pageData.lastMsgDateTimestamp = v2.lastMsgDateTimestamp&lt;br /&gt;
								pageData.lastMsgAuthor = v2.lastMsgAuthor&lt;br /&gt;
							end&lt;br /&gt;
						end&lt;br /&gt;
						pageData.topicCount = pageData.topicCount + 1&lt;br /&gt;
						if v2.warningHeading and not pageData.warningHeading then&lt;br /&gt;
							pageData.warningHeading = v2.warningHeading&lt;br /&gt;
						end&lt;br /&gt;
					end&lt;br /&gt;
					table.insert(pageListData, pageData)&lt;br /&gt;
				elseif allDataFromPage.pageNotExistMessage then&lt;br /&gt;
					table.insert(itemsToRemove, v.originalFullTitle)&lt;br /&gt;
					table.insert(errorInfo, allDataFromPage.pageNotExistMessage)&lt;br /&gt;
				end&lt;br /&gt;
			else&lt;br /&gt;
				table.insert(errorInfo, &#039;Не удалось получить данные о странице «&#039; .. v.titleObject.prefixedText .. &#039;» от модуля получения содержимого страницы.&#039;)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		local parse_section_content = require(&#039;Модуль:Get page content&#039;)._parse_section_content&lt;br /&gt;
		&lt;br /&gt;
		for k, v in pairs(items) do&lt;br /&gt;
			local argsToPass = {}&lt;br /&gt;
			table.insert(argsToPass, v.titleObject)&lt;br /&gt;
			table.insert(argsToPass, v.sectionHeading)&lt;br /&gt;
			argsToPass[&#039;итог&#039;] = v.resultMode&lt;br /&gt;
			argsToPass[&#039;подраздел&#039;] = v.subsectionHeading&lt;br /&gt;
			argsToPass[&#039;как данные&#039;] = true&lt;br /&gt;
			if fullTopicsToShow == 0 then&lt;br /&gt;
				argsToPass[&#039;только статистика&#039;] = true&lt;br /&gt;
			else&lt;br /&gt;
				argsToPass[&#039;стандартный заголовок&#039;] = true&lt;br /&gt;
			end&lt;br /&gt;
			if afdMode then&lt;br /&gt;
				argsToPass[&#039;режим КУ&#039;] = true&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			local data = parse_section_content(argsToPass)&lt;br /&gt;
			if type(data) == &#039;table&#039; then&lt;br /&gt;
				if data.pageNotExistMessage then&lt;br /&gt;
					table.insert(itemsToRemove, v.originalFullTitle)&lt;br /&gt;
					table.insert(errorInfo, data.pageNotExistMessage)&lt;br /&gt;
				elseif data.sectionNotExistMessage then&lt;br /&gt;
					table.insert(itemsToRemove, v.originalFullTitle)&lt;br /&gt;
					table.insert(errorInfo, data.sectionNotExistMessage)&lt;br /&gt;
				else&lt;br /&gt;
					if topicsToShow ~= 0 and data.msgCount then&lt;br /&gt;
						data.pageTitle = v.titleObject.prefixedText&lt;br /&gt;
						data.sectionHeading = v.sectionHeading&lt;br /&gt;
						if argsToPass[&#039;подраздел&#039;] then&lt;br /&gt;
							data.subsectionHeading = argsToPass[&#039;подраздел&#039;]&lt;br /&gt;
						end&lt;br /&gt;
						data.canonicalPath = data.pageTitle .. &#039;#&#039; .. data.sectionHeading .. (data.subsectionHeading and &#039;\\\\\\&#039; .. data.subsectionHeading or &#039;&#039;)&lt;br /&gt;
					end&lt;br /&gt;
					if afdMode then&lt;br /&gt;
						if not data.closureHeading then&lt;br /&gt;
							table.insert(allData, data)&lt;br /&gt;
							if #allData &amp;gt;= nominationsNum then break end&lt;br /&gt;
						end&lt;br /&gt;
					else&lt;br /&gt;
						table.insert(allData, data)&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			else&lt;br /&gt;
				table.insert(errorInfo, &#039;Не удалось получить данные о странице «&#039; .. v.titleObject.prefixedText .. &#039;» от модуля получения содержимого страницы.&#039;)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	for k, v in pairs(allData) do&lt;br /&gt;
		allData[k].num = k&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- если включена сортировка и полных тем, и тем в таблице, мы можем сразу отсортировать общий массив&lt;br /&gt;
	if sortTopics and (fullTopicsToShow == 0 or sortFullTopics) then&lt;br /&gt;
		table.sort(allData, function (data1, data2)&lt;br /&gt;
			-- благодаря 10000 - dataN.num темы частично сохраняют изначальный порядок&lt;br /&gt;
			local lastMsgDate1Timestamp = data1.lastMsgDateTimestamp or 10000 - data1.num&lt;br /&gt;
			local lastMsgDate2Timestamp = data2.lastMsgDateTimestamp or 10000 - data2.num&lt;br /&gt;
			&lt;br /&gt;
			return lastMsgDate1Timestamp &amp;gt; lastMsgDate2Timestamp&lt;br /&gt;
		end)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- считаем число тем и страниц, откладываем отсутствующие&lt;br /&gt;
	local pages, topics, fullTopics = {}, {}, {}&lt;br /&gt;
	local randomNum&lt;br /&gt;
	if allData[1] then&lt;br /&gt;
		if fullTopicsToShow ~= 0 then&lt;br /&gt;
			randomNum = tostring(os.clock()):sub(-7)&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		for k, v in pairs(allData) do&lt;br /&gt;
			table.insert(fullTopics, v)&lt;br /&gt;
			if v.msgCount then&lt;br /&gt;
				table.insert(topics, v)&lt;br /&gt;
				if not findInTable(pages, v.pageTitle) then&lt;br /&gt;
					table.insert(pages, v.pageTitle)&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;
	if sortTopics and (fullTopicsToShow ~= 0 and not sortFullTopics) then&lt;br /&gt;
		table.sort(topics, function (data1, data2)&lt;br /&gt;
			-- благодаря 10000 - dataN.num темы частично сохраняют изначальный порядок&lt;br /&gt;
			local lastMsgDate1Timestamp = data1.lastMsgDateTimestamp or 10000 - data1.num&lt;br /&gt;
			local lastMsgDate2Timestamp = data2.lastMsgDateTimestamp or 10000 - data2.num&lt;br /&gt;
			&lt;br /&gt;
			return lastMsgDate1Timestamp &amp;gt; lastMsgDate2Timestamp&lt;br /&gt;
		end)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if #topics &amp;gt; topicsToShow then&lt;br /&gt;
		pages = {}&lt;br /&gt;
		for k, v in pairs(topics) do&lt;br /&gt;
			if not findInTable(pages, v.pageTitle) then&lt;br /&gt;
				table.insert(pages, v.pageTitle)&lt;br /&gt;
			end&lt;br /&gt;
			if k == topicsToShow then&lt;br /&gt;
				for i = k + 1, #topics do&lt;br /&gt;
					table.remove(topics, k + 1)&lt;br /&gt;
				end&lt;br /&gt;
				break&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- формируем шапку&lt;br /&gt;
	local headerContent = &#039;&#039;&lt;br /&gt;
	if talkpageMode and talkpageCount == 1 then&lt;br /&gt;
		headerContent = headerContent .. &#039;&amp;lt;div style=&amp;quot;font-size:1.5em;&amp;quot;&amp;gt;[[&#039; .. onlyPageTitle .. &#039;]]&amp;lt;/div&amp;gt;\n&#039;&lt;br /&gt;
	elseif afdMode then&lt;br /&gt;
		headerContent = headerContent .. &#039;&amp;lt;div style=&amp;quot;font-size:1.5em;&amp;quot;&amp;gt;&#039; .. #topics .. &#039; &#039; .. ru:plural(#topics, &#039;самая старая незакрытая номинация&#039;, &#039;самые старые незакрытые номинации&#039;, &#039;самых старых незакрытых номинаций&#039;) .. &#039; «[[ТП:К удалению|К удалению]]»&amp;lt;/div&amp;gt;\n&#039;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if showTopicCount then&lt;br /&gt;
		if standardMode or talkpageMode then&lt;br /&gt;
			headerContent = headerContent .. &#039;&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;&#039; .. #topics .. &#039;&amp;lt;/b&amp;gt; &#039; .. ru:plural(#topics, &#039;тема&#039;, &#039;темы&#039;, &#039;тем&#039;) .. &#039; на &amp;lt;b&amp;gt;&#039; .. #pages .. &#039;&amp;lt;/b&amp;gt; &#039; .. ru:plural(#pages, &#039;странице&#039;, &#039;страницах&#039;)&lt;br /&gt;
		elseif afdMode then&lt;br /&gt;
			if #pages ~= 0 then&lt;br /&gt;
				headerContent = headerContent .. &#039;&amp;lt;p&amp;gt;За &amp;lt;b&amp;gt;&#039; .. #pages .. &#039;&amp;lt;/b&amp;gt; &#039; .. ru:plural(#pages, &#039;день&#039;, &#039;дня&#039;, &#039;дней&#039;)&lt;br /&gt;
			end&lt;br /&gt;
		elseif pageListMode then&lt;br /&gt;
			headerContent = headerContent .. &#039;&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;&#039; .. #pageListData .. &#039;&amp;lt;/b&amp;gt; &#039; .. ru:plural(#pageListData, &#039;страница&#039;, &#039;страницы&#039;, &#039;страниц&#039;)&lt;br /&gt;
		end&lt;br /&gt;
		if separateTopicListPage then&lt;br /&gt;
			headerContent = headerContent .. &#039;&amp;amp;nbsp;&amp;lt;b&amp;gt;·&amp;lt;/b&amp;gt; &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[&#039; .. separateTopicListPage:fullUrl(&#039;action=edit&#039;) .. &#039; Редактировать список тем]&amp;lt;/span&amp;gt;\n&#039;&lt;br /&gt;
		end&lt;br /&gt;
		headerContent = headerContent .. &#039;&amp;lt;/p&amp;gt;\n&#039;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if reloadLink then&lt;br /&gt;
		headerContent = headerContent .. &#039;&amp;lt;p &#039; .. (&lt;br /&gt;
				not false  -- пока оставим&lt;br /&gt;
			and &#039;style=&amp;quot;margin-top:1.5em;&amp;quot;&#039;&lt;br /&gt;
			 or &#039;&#039;&lt;br /&gt;
		) .. &#039;&amp;gt;&amp;lt;span style=&amp;quot;font-size:1.5em;&amp;quot; class=&amp;quot;plainlinks purgelink&amp;quot;&amp;gt;[&#039; .. mw.title.getCurrentTitle():fullUrl(&#039;action=purge&#039;) .. &#039; Обновить]&amp;lt;/span&amp;gt;&amp;amp;nbsp;&amp;lt;b&amp;gt;·&amp;lt;/b&amp;gt; обновлялось в &#039; .. ru:formatDate(&#039;H:i j xg Y&#039;) .. &#039; (UTC)&#039;&lt;br /&gt;
	end&lt;br /&gt;
	if reloadLink or separateTopicPage then&lt;br /&gt;
		headerContent = headerContent .. &#039;&amp;lt;/p&amp;gt;\n&#039;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if style == &#039;список&#039; then&lt;br /&gt;
		headerContent = &#039;&#039;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if not afdMode and not pageListMode and fullTopicsToShow &amp;gt; 50 and #topics &amp;gt; 50 then&lt;br /&gt;
		headerContent = headerContent .. &#039;&amp;lt;p style=&amp;quot;font-size:85%;&amp;quot;&amp;gt;Для более быстрой загрузки страницы и экономии ресурсов сервера сократите число тем, содержимое которых выводится на странице, уменьшив значение параметра &amp;lt;code&amp;gt;полных тем&amp;lt;/code&amp;gt; в шаблоне.&amp;lt;/p&amp;gt;\n&#039;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- формируем таблицу&lt;br /&gt;
	local outFragmentLink_title = &#039;Ссылка прямо на реплику в настоящий момент работает только при включенном гаджете «Удобные обсуждения»&#039;&lt;br /&gt;
	if pageListData and pageListData[1] then&lt;br /&gt;
		local tableContent =&lt;br /&gt;
			   &#039;{| class=&amp;quot;wikitable wide sortable&amp;quot; style=&amp;quot;line-height:1.4;&amp;quot;\n&#039;&lt;br /&gt;
			.. &#039;! scope=&amp;quot;col&amp;quot; width=&amp;quot;2%&amp;quot; | №\n&#039;&lt;br /&gt;
			.. &#039;! scope=&amp;quot;col&amp;quot; | Страница\n&#039;&lt;br /&gt;
			.. &#039;! scope=&amp;quot;col&amp;quot; width=&amp;quot;25%&amp;quot; class=&amp;quot;nowrap&amp;quot; | Последнее сообщение\n&#039;&lt;br /&gt;
			.. &#039;! scope=&amp;quot;col&amp;quot; width=&amp;quot;10%&amp;quot; | Тем\n&#039;&lt;br /&gt;
			.. &#039;! scope=&amp;quot;col&amp;quot; width=&amp;quot;10%&amp;quot; | Сообщений\n&#039;&lt;br /&gt;
		for k, v in pairs(pageListData) do&lt;br /&gt;
			if v.msgCount then&lt;br /&gt;
				tableContent = tableContent&lt;br /&gt;
					.. &#039;|-\n&#039;&lt;br /&gt;
					.. &#039;| style=&amp;quot;text-align:center;&amp;quot; | &#039; .. v.num .. &#039;\n&#039;&lt;br /&gt;
					.. &#039;| &#039; .. conceal(v.pageTitle, &#039;wikilink&#039;) .. &#039;[[&#039; .. v.pageTitle .. &#039;|&amp;lt;span style=&amp;quot;display:block; font-size:110%;&amp;quot;&amp;gt;&#039; .. v.pageTitle .. (&lt;br /&gt;
								v.warningHeading&lt;br /&gt;
							and &#039;&amp;lt;span style=&amp;quot;display:inline-block; margin-left:1em; padding:0 8px; border-radius:5px; font-size:83.33%; line-height:1.5; letter-spacing:1px; background-color:#a07; color:var(--color-inverted, #fff); white-space:nowrap;&amp;quot;&amp;gt;ПРЕДУПР.&amp;lt;/span&amp;gt;&#039;&lt;br /&gt;
							 or &#039;&#039;&lt;br /&gt;
						) .. &#039;&amp;lt;/span&amp;gt;]]\n&#039;&lt;br /&gt;
					.. &#039;| style=&amp;quot;/* Chrome */ word-break:break-word; /* ? */ word-wrap:break-word;&amp;quot; | &#039; .. (&lt;br /&gt;
							v.msgCount &amp;gt; 0&lt;br /&gt;
						and conceal(v.lastMsgDateTimestamp, &#039;lastMsgDate&#039;) .. &#039;[[&#039; .. v.pageTitle .. &#039;#&#039; .. v.lastMsgAnchor .. &#039;|&amp;lt;span style=&amp;quot;display:block; text-decoration:inherit;&amp;quot; class=&amp;quot;topicWatch-outFragmentLink&amp;quot; title=&amp;quot;&#039; .. outFragmentLink_title .. &#039;&amp;quot;&amp;gt;&#039; .. v.lastMsgDateString .. &#039;&amp;lt;br&amp;gt;от &#039; .. v.lastMsgAuthor .. &#039;&amp;lt;/span&amp;gt;]]\n&#039;&lt;br /&gt;
						 or &#039;—\n&#039;&lt;br /&gt;
					)&lt;br /&gt;
					.. &#039;| style=&amp;quot;text-align:center;&amp;quot; | &#039; .. conceal(v.msgCount, &#039;topicCount&#039;) .. v.topicCount .. &#039;\n&#039;&lt;br /&gt;
					.. &#039;| style=&amp;quot;text-align:center;&amp;quot; | &#039; .. conceal(v.msgCount, &#039;msgCount&#039;) .. v.msgCount .. &#039;\n&#039;&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		tableContent = tableContent .. &#039;|}\n&#039;&lt;br /&gt;
		headerContent = headerContent .. tableContent&lt;br /&gt;
	elseif topicsToShow ~= 0 and #topics ~= 0 then&lt;br /&gt;
		local needHighlightOutLinks = fullTopicsToShow ~= 0 and fullTopicsToShow &amp;lt; math.min(#topics, topicsToShow)&lt;br /&gt;
		local labelColors =&lt;br /&gt;
				afdMode&lt;br /&gt;
			and {&lt;br /&gt;
					closure           = &#039;var(--border-color-destructive--active, #b32424)&#039;,&lt;br /&gt;
					preclosure        = &#039;var(--border-color-success, #096450)&#039;,&lt;br /&gt;
					challengedClosure = &#039;var(--border-color-destructive, #d73333)&#039;,&lt;br /&gt;
					partialClosure    = &#039;var(--border-color-progressive, #36c)&#039;,&lt;br /&gt;
				}&lt;br /&gt;
			 or {&lt;br /&gt;
					closure           = &#039;var(--border-color-interactive, #72777d)&#039;,&lt;br /&gt;
					preclosure        = &#039;var(--border-color-interactive, #72777d)&#039;,&lt;br /&gt;
					challengedClosure = &#039;var(--border-color-interactive, #72777d)&#039;,&lt;br /&gt;
					partialClosure    = &#039;var(--border-color-interactive, #72777d)&#039;,&lt;br /&gt;
				}&lt;br /&gt;
		&lt;br /&gt;
		local tableContent&lt;br /&gt;
		if style == &#039;wikitable&#039; then&lt;br /&gt;
			tableContent =&lt;br /&gt;
				   &#039;{| class=&amp;quot;wikitable sortable topicWatch-topicTable&amp;quot;&#039; .. (fullTopicsToShow ~= 0 and &#039; id=&amp;quot;topicTable&#039; .. randomNum .. &#039;&amp;quot;&#039; or &#039;&#039;) .. &#039; style=&amp;quot;line-height:1.4;&amp;quot;\n&#039;&lt;br /&gt;
				.. (talkpageMode and talkpageCount &amp;gt; 1 and &#039;&#039; or &#039;! scope=&amp;quot;col&amp;quot; width=&amp;quot;2%&amp;quot; | № !&#039;)&lt;br /&gt;
				.. &#039;! Тема &#039;&lt;br /&gt;
				.. &#039;!! scope=&amp;quot;col&amp;quot; style=&amp;quot;width:25%&amp;quot; class=&amp;quot;nowrap&amp;quot; | Последнее сообщение &#039;&lt;br /&gt;
				.. &#039;!! scope=&amp;quot;col&amp;quot; style=&amp;quot;width:10%&amp;quot; | Сообщений &#039;&lt;br /&gt;
				.. &#039;!! scope=&amp;quot;col&amp;quot; style=&amp;quot;width:10%&amp;quot; | Авторов\n&#039;&lt;br /&gt;
		elseif style == &#039;форумный&#039; then&lt;br /&gt;
			tableContent =&lt;br /&gt;
				   &#039;&amp;lt;div style=&amp;quot;margin:1em 0; padding:8px 13px; border:1px solid var(--border-color-content-added, #afb6e9); background:var(--background-color-progressive-subtle, #eaf3ff); color:inherit; line-height:1.4; display:table; &amp;quot;&amp;gt;\n&#039;&lt;br /&gt;
				.. &#039;{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; class=&amp;quot;sortable topicWatch-topicTable&amp;quot;&#039; .. (fullTopicsToShow ~= 0 and &#039; id=&amp;quot;topicTable&#039; .. randomNum .. &#039;&amp;quot;&#039; or &#039;&#039;) .. &#039;\n&#039;&lt;br /&gt;
				.. &#039;|-\n&#039;&lt;br /&gt;
				.. (talkpageMode and talkpageCount &amp;gt; 1 and &#039;&#039; or &#039;! scope=&amp;quot;col&amp;quot; style=&amp;quot;border-bottom:1px solid var(--border-color-base, #afd2e9); padding:2px 1.5em 4px 0; text-align:right; font-weight:normal;&amp;quot; | № !&#039;)&lt;br /&gt;
				.. &#039;! scope=&amp;quot;col&amp;quot; style=&amp;quot;border-bottom:1px solid var(--border-color-base, #afd2e9); padding:2px 2em 4px 0; text-align:left; font-weight:normal;&amp;quot; | &#039; .. (talkpageMode and talkpageCount == 1 and &#039;&#039; or &#039;&amp;lt;span style=&amp;quot;visibility:hidden;&amp;quot;&amp;gt;§ &amp;lt;/span&amp;gt;&#039;) .. &#039;Тема &#039;&lt;br /&gt;
				.. &#039;!! scope=&amp;quot;col&amp;quot; style=&amp;quot;border-bottom:1px solid var(--border-color-base, #afd2e9); padding:2px 2em 4px 0; text-align:left; font-weight:normal;&amp;quot; class=&amp;quot;nowrap&amp;quot; | Последнее сообщение &#039;&lt;br /&gt;
				.. &#039;!! scope=&amp;quot;col&amp;quot; style=&amp;quot;border-bottom:1px solid var(--border-color-base, #afd2e9); padding:2px 1.5em 4px 0; text-align:left; font-weight:normal;&amp;quot; | Сообщений\n&#039;&lt;br /&gt;
				.. &#039;|-\n&#039;&lt;br /&gt;
				.. &#039;| colspan=&amp;quot;3&amp;quot; style=&amp;quot;padding-top:6px;&amp;quot; |\n&#039;&lt;br /&gt;
		elseif style == &#039;список&#039; then&lt;br /&gt;
			tableContent = &#039;&#039;&lt;br /&gt;
		end&lt;br /&gt;
		for k, v in pairs(topics) do&lt;br /&gt;
			local labels = (  -- может быть предварительный после оспоренного, поэтому ярлык оспаривания раньше&lt;br /&gt;
						v.challengedClosureHeading&lt;br /&gt;
					and &#039;&amp;lt;span style=&amp;quot;display:inline-block; margin-left:1em; padding:0 8px; border-radius:5px; font-size:&#039;.. closureSize ..&#039;; line-height:1.5; letter-spacing:1px; background-color:&#039; .. labelColors.challengedClosure .. &#039;; color:var(--color-inverted, #fff); white-space:nowrap;&amp;quot; title=&amp;quot;В теме есть подраздел с названием «&#039; .. v.challengedClosureHeading .. &#039;»&amp;quot;&#039; .. (afdMode and &#039;&#039; or &#039; class=&amp;quot;topicWatch-label-challengedClosure&amp;quot;&#039;) .. &#039;&amp;gt;ОСПОРЕНО&amp;lt;/span&amp;gt;&#039;&lt;br /&gt;
					 or &#039;&#039;&lt;br /&gt;
				) .. (&lt;br /&gt;
						v.preclosureHeading and not v.closureHeading&lt;br /&gt;
					and &#039;&amp;lt;span style=&amp;quot;display:inline-block; margin-left:1em; padding:0 8px; border-radius:5px; font-size:&#039;.. closureSize ..&#039;; line-height:1.5; letter-spacing:1px; background-color:&#039; .. labelColors.preclosure .. &#039;; color:var(--color-inverted, #fff); white-space:nowrap;&amp;quot; title=&amp;quot;В теме есть подраздел с названием «&#039; .. v.preclosureHeading .. &#039;»&amp;quot;&#039; .. (afdMode and &#039;&#039; or &#039; class=&amp;quot;topicWatch-label-preclosure&amp;quot;&#039;) .. &#039;&amp;gt;ПРЕДЫТОГ&amp;lt;/span&amp;gt;&#039;&lt;br /&gt;
					 or &#039;&#039;&lt;br /&gt;
				) .. (&lt;br /&gt;
						v.partialClosureHeading and not v.closureHeading&lt;br /&gt;
					and &#039;&amp;lt;span style=&amp;quot;display:inline-block; margin-left:1em; padding:0 8px; border-radius:5px; font-size:&#039;.. closureSize ..&#039;; line-height:1.5; letter-spacing:1px; background-color:&#039; .. labelColors.partialClosure .. &#039;; color:var(--color-inverted, #fff); white-space:nowrap;&amp;quot; title=&amp;quot;В теме есть подподраздел с названием «&#039; .. v.partialClosureHeading .. &#039;»&amp;quot;&#039; .. (afdMode and &#039;&#039; or &#039; class=&amp;quot;topicWatch-label-partialClosure&amp;quot;&#039;) .. &#039;&amp;gt;ЧАСТ. ИТОГ&amp;lt;/span&amp;gt;&#039;&lt;br /&gt;
					 or &#039;&#039;&lt;br /&gt;
				) .. (&lt;br /&gt;
						v.closureHeading&lt;br /&gt;
					and &#039;&amp;lt;span style=&amp;quot;display:inline-block; margin-left:1em; padding:0 8px; border-radius:5px; font-size:&#039;.. closureSize ..&#039;; line-height:1.5; letter-spacing:1px; background-color:&#039; .. labelColors.closure .. &#039;; color:var(--color-inverted, #fff); white-space:nowrap;&amp;quot; title=&amp;quot;В теме есть подраздел с названием «&#039; .. v.closureHeading .. &#039;»&amp;quot;&#039; .. (afdMode and &#039;&#039; or &#039; class=&amp;quot;topicWatch-label-closure&amp;quot;&#039;) .. &#039;&amp;gt;ИТОГ&amp;lt;/span&amp;gt;&#039;&lt;br /&gt;
					 or &#039;&#039;&lt;br /&gt;
				)&lt;br /&gt;
			&lt;br /&gt;
			local topicString, lastMsgString, msgCountString, authorCountString, numString&lt;br /&gt;
			local topicAttrs, lastMsgAttrs, msgCountAttrs, authorCountAttrs, numAttrs&lt;br /&gt;
			if style == &#039;wikitable&#039; then&lt;br /&gt;
				numString = v.num&lt;br /&gt;
				topicString = conceal(v.canonicalPath, &#039;wikilink&#039;) .. &#039;[[&#039; .. (&lt;br /&gt;
							k &amp;lt;= fullTopicsToShow&lt;br /&gt;
						and (&lt;br /&gt;
								talkpageMode and talkpageCount == 1&lt;br /&gt;
							and v.sectionHeadingLink&lt;br /&gt;
							 or (&lt;br /&gt;
									v.subsectionHeading&lt;br /&gt;
								and v.subsectionHeading .. &#039; (&#039; .. v.sectionHeadingLink .. &#039;)&#039;&lt;br /&gt;
								 or v.sectionHeadingLink&lt;br /&gt;
								) .. &#039; ← &#039; .. v.pageTitle&lt;br /&gt;
							)&lt;br /&gt;
						 or v.pageTitle .. (&lt;br /&gt;
								v.subsectionHeading&lt;br /&gt;
							and v.subsectionHeading .. &#039; (&#039; .. v.sectionHeadingLink .. &#039;)&#039;&lt;br /&gt;
							 or v.sectionHeadingLink&lt;br /&gt;
							)&lt;br /&gt;
					) .. &#039;|&amp;lt;span &#039; .. (k &amp;lt;= fullTopicsToShow and fullTopicsToShow ~= 0 and &#039;&#039; or &#039;title=&amp;quot;Откроется на отдельной странице&amp;quot; &#039;) .. (&lt;br /&gt;
							talkpageMode and talkpageCount == 1&lt;br /&gt;
						and &#039;style=&amp;quot;display:block; font-size:110%;&amp;quot;&amp;gt;&#039;&lt;br /&gt;
						 or &#039;style=&amp;quot;display:block;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;visibility:hidden;&amp;quot;&amp;gt;§ &amp;lt;/span&amp;gt;&amp;lt;small&amp;gt;&#039; .. v.pageTitle .. &#039;&amp;lt;/small&amp;gt;&amp;lt;br&amp;gt;&amp;lt;span style=&amp;quot;display:inline-block;&amp;quot;&amp;gt;§ &amp;lt;/span&amp;gt;&#039;&lt;br /&gt;
					) .. v.sectionHeading .. labels .. &#039;&amp;lt;/span&amp;gt;]]&#039;  -- TODO: учёт подраздела&lt;br /&gt;
				lastMsgString = conceal(v.lastMsgDateTimestamp, &#039;lastMsgDate&#039;) .. (&lt;br /&gt;
							k &amp;lt;= fullTopicsToShow&lt;br /&gt;
						and &#039;[[#&#039; .. v.lastMsgAnchor .. &#039;|&amp;lt;span style=&amp;quot;display:block; text-decoration:inherit;&amp;quot;&amp;gt;&#039;&lt;br /&gt;
						 or &#039;[[&#039; .. v.pageTitle .. &#039;#&#039; .. v.lastMsgAnchor .. &#039;|&amp;lt;span style=&amp;quot;display:block; text-decoration:inherit;&amp;quot; class=&amp;quot;topicWatch-outFragmentLink&amp;quot; title=&amp;quot;&#039; .. outFragmentLink_title .. &#039;&amp;quot;&amp;gt;&#039;&lt;br /&gt;
					) .. v.lastMsgDateString .. &#039;&amp;lt;br&amp;gt;от &#039; .. v.lastMsgAuthor .. &#039;&amp;lt;/span&amp;gt;]]&#039;&lt;br /&gt;
				msgCountString = conceal(v.msgCount, &#039;msgCount&#039;) .. v.msgCount&lt;br /&gt;
				authorCountString = conceal(#v.authors, &#039;authorCount&#039;) .. &#039;&amp;lt;span style=&amp;quot;border-bottom:1px dotted; cursor:help;&amp;quot; title=&amp;quot;&#039; .. table.concat(v.authors, &#039;, &#039;) .. &#039;&amp;quot;&amp;gt;&#039; .. #v.authors .. &#039;&amp;lt;/span&amp;gt;&#039;&lt;br /&gt;
				&lt;br /&gt;
				numAttrs = &#039;style=&amp;quot;text-align:center;&amp;quot;&#039;&lt;br /&gt;
				topicAttrs = &#039;&#039;&lt;br /&gt;
				lastMsgAttrs = &#039;style=&amp;quot;/* Chrome */ word-break:break-word; /* ? */ word-wrap:break-word;&amp;quot;&#039;&lt;br /&gt;
				msgCountAttrs = &#039;style=&amp;quot;text-align:center;&amp;quot;&#039;&lt;br /&gt;
				authorCountAttrs = &#039;style=&amp;quot;text-align:center;&amp;quot;&#039;&lt;br /&gt;
			elseif style == &#039;форумный&#039; then&lt;br /&gt;
				numString =     talkpageMode and talkpageCount == 1&lt;br /&gt;
							and &#039;&amp;lt;span style=&amp;quot;font-size:110%; visibility:hidden;&amp;quot;&amp;gt;l&amp;lt;/span&amp;gt;&#039; .. v.num .. &#039;&amp;lt;span style=&amp;quot;font-size:110%; visibility:hidden;&amp;quot;&amp;gt;l&amp;lt;/span&amp;gt;&#039;  -- способ, рекомендуемый Горбуновым, чтобы строки были на одной линии&lt;br /&gt;
							 or v.num&lt;br /&gt;
				topicString = conceal(v.canonicalPath, &#039;wikilink&#039;)  .. &#039;[[&#039; .. v.pageTitle .. (&lt;br /&gt;
							v.subsectionHeading&lt;br /&gt;
						and v.subsectionHeading .. &#039; (&#039; .. v.sectionHeadingLink .. &#039;)&#039;&lt;br /&gt;
						 or v.sectionHeadingLink&lt;br /&gt;
					) .. &#039;|&#039; .. (&lt;br /&gt;
							talkpageMode and talkpageCount == 1&lt;br /&gt;
						and &#039;&amp;lt;span style=&amp;quot;display:block; font-size:110%;&amp;quot;&amp;gt;&#039;&lt;br /&gt;
						 or &#039;&amp;lt;span style=&amp;quot;display:block;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;display:inline-block;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;visibility:hidden;&amp;quot;&amp;gt;§ &amp;lt;/span&amp;gt;&amp;lt;small&amp;gt;&#039; .. mw.ustring.gsub(v.pageTitle, &#039;Тептар:Форум/&#039;, &#039;&#039;) .. &#039;&amp;lt;/small&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&amp;lt;span style=&amp;quot;display:inline-block;&amp;quot;&amp;gt;§ &amp;lt;/span&amp;gt;&#039;&lt;br /&gt;
					) .. v.sectionHeading .. labels .. &#039;&amp;lt;/span&amp;gt;]]&#039;&lt;br /&gt;
				lastMsgString = conceal(v.lastMsgDateTimestamp, &#039;lastMsgDate&#039;) .. (&lt;br /&gt;
							k &amp;lt;= fullTopicsToShow&lt;br /&gt;
						and &#039;[[#&#039; .. v.lastMsgAnchor .. &#039;|&amp;lt;span style=&amp;quot;display:block; text-decoration:inherit;&amp;quot;&amp;gt;&#039;&lt;br /&gt;
						 or &#039;[[&#039; .. v.pageTitle .. &#039;#&#039; .. v.lastMsgAnchor .. &#039;|&amp;lt;span style=&amp;quot;display:block; text-decoration:inherit;&amp;quot; class=&amp;quot;topicWatch-outFragmentLink&amp;quot; title=&amp;quot;&#039; .. outFragmentLink_title .. &#039;&amp;quot;&amp;gt;&#039;&lt;br /&gt;
					) .. v.lastMsgDateString .. &#039;&amp;lt;br&amp;gt;от &#039; .. v.lastMsgAuthor .. &#039;&amp;lt;/span&amp;gt;]]&#039;&lt;br /&gt;
				msgCountString = conceal(v.msgCount, &#039;msgCount&#039;) .. &#039;&amp;lt;span style=&amp;quot;border-bottom:1px dotted; cursor:help;&amp;quot; title=&amp;quot;От &#039; .. #v.authors .. &#039; &#039; .. ru:plural(#v.authors , &#039;автора&#039;, &#039;авторов&#039;) .. &#039;:&amp;amp;#10;&#039; .. table.concat(v.authors, &#039;, &#039;) .. &#039;&amp;quot;&amp;gt;&#039; .. v.msgCount .. &#039;&amp;lt;/span&amp;gt;&#039;&lt;br /&gt;
				&lt;br /&gt;
				numAttrs = &#039;style=&amp;quot;padding:3px 0; vertical-align:top; text-align:right; padding-right:8px;&amp;quot;&#039;&lt;br /&gt;
				topicAttrs = &#039;style=&amp;quot;padding:3px 2em 3px 0; vertical-align:top;&amp;quot;&#039;&lt;br /&gt;
				lastMsgAttrs = &#039;style=&amp;quot;padding:3px 0.5em 3px 0; vertical-align:top; /* Chrome */ word-break:break-word; /* ? */ word-wrap:break-word;&amp;quot;&#039;&lt;br /&gt;
				msgCountAttrs = &#039;style=&amp;quot;padding:3px 0; vertical-align:top; text-align:center; vertical-align:top;&amp;quot;&#039;&lt;br /&gt;
			elseif style == &#039;список&#039; then&lt;br /&gt;
				topicString = conceal(v.canonicalPath, &#039;wikilink&#039;)  .. &#039;[[&#039; .. v.pageTitle .. (&lt;br /&gt;
							v.subsectionHeading&lt;br /&gt;
						and v.subsectionHeading .. &#039; (&#039; .. v.sectionHeadingLink .. &#039;)&#039;&lt;br /&gt;
						 or v.sectionHeadingLink&lt;br /&gt;
					) .. &#039;|&#039; .. (&lt;br /&gt;
							talkpageMode and talkpageCount == 1&lt;br /&gt;
						and &#039;&#039;&lt;br /&gt;
						 or &#039;&amp;lt;small&amp;gt;&#039; .. mw.ustring.gsub(v.pageTitle, &#039;Тептар:Форум/&#039;, &#039;&#039;) .. &#039;&amp;lt;/small&amp;gt;&amp;lt;br&amp;gt;&#039;&lt;br /&gt;
					) .. v.sectionHeading .. labels .. &#039;]]&#039;&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			if style == &#039;список&#039; then&lt;br /&gt;
				tableContent = tableContent&lt;br /&gt;
					.. &#039;* &#039; .. topicString&lt;br /&gt;
					.. &#039;\n&#039;&lt;br /&gt;
			else&lt;br /&gt;
				tableContent = tableContent&lt;br /&gt;
					.. &#039;|-&#039; .. (style ~= &#039;форумный&#039; and needHighlightOutLinks and k &amp;gt; fullTopicsToShow and &#039; style=&amp;quot;background-color:var(--background-color-neutral); color:inherit;&amp;quot;&#039; or &#039;&#039;) .. &#039;\n&#039;&lt;br /&gt;
					.. (talkpageMode and talkpageCount &amp;gt; 1 and &#039;&#039; or &#039;| &#039; .. numAttrs .. &#039; | &#039; .. numString .. &#039;\n&#039;)&lt;br /&gt;
					.. &#039;| &#039; .. topicAttrs .. &#039; | &#039; .. topicString .. &#039;\n&#039;&lt;br /&gt;
					.. &#039;| &#039; .. lastMsgAttrs .. &#039; | &#039; .. lastMsgString .. &#039;\n&#039;&lt;br /&gt;
					.. &#039;| &#039; .. msgCountAttrs .. &#039; | &#039; .. msgCountString .. &#039;\n&#039;&lt;br /&gt;
					.. (style == &#039;форумный&#039; and &#039;&#039; or &#039;| &#039; .. authorCountAttrs .. &#039; | &#039; .. authorCountString .. &#039;\n&#039;)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		if style ~= &#039;список&#039; then&lt;br /&gt;
			tableContent = tableContent .. &#039;|}\n&#039;&lt;br /&gt;
			if style == &#039;форумный&#039; then&lt;br /&gt;
				tableContent = tableContent .. &#039;&amp;lt;/div&amp;gt;\n&#039;&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		headerContent = headerContent .. tableContent&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- формируем сообщение(-я) об ошибке&lt;br /&gt;
	if not items[1] then&lt;br /&gt;
		if standardMode then&lt;br /&gt;
			table.insert(errorInfo, &#039;В списке тем для отслеживания пока пусто.&#039;)&lt;br /&gt;
		elseif talkpageMode or pageListMode then&lt;br /&gt;
			table.insert(errorInfo, &#039;В списке страниц пусто.&#039;)&lt;br /&gt;
		elseif afdMode then&lt;br /&gt;
			table.insert(errorInfo, &#039;Не удалось найти темы.&#039;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if errorInfo[1] then&lt;br /&gt;
		headerContent = headerContent&lt;br /&gt;
			.. &#039;&amp;lt;div style=&amp;quot;font-style:italic; margin:1em 0;&amp;quot;&amp;gt;\n&#039;&lt;br /&gt;
			.. table.concat(errorInfo, &#039;&amp;lt;br&amp;gt;&#039;)&lt;br /&gt;
			.. &#039;&amp;lt;/div&amp;gt;\n&#039;&lt;br /&gt;
	end&lt;br /&gt;
	local itemsToRemoveString&lt;br /&gt;
	if itemsToRemove[1] then&lt;br /&gt;
		itemsToRemoveString = &#039;&amp;lt;ul style=&amp;quot;display:none;&amp;quot; class=&amp;quot;topicWatch-itemsToRemove&amp;quot;&amp;gt;\n&#039;&lt;br /&gt;
		for k, v in pairs(itemsToRemove) do&lt;br /&gt;
			itemsToRemoveString = itemsToRemoveString .. &#039;&amp;lt;li&amp;gt;&#039; .. v .. &#039;&amp;lt;/li&amp;gt;\n&#039;&lt;br /&gt;
		end&lt;br /&gt;
		itemsToRemoveString = itemsToRemoveString .. &#039;&amp;lt;/ul&amp;gt;\n&#039;&lt;br /&gt;
		headerContent = headerContent .. itemsToRemoveString&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- формируем сами темы&lt;br /&gt;
	local content = &#039;&#039;&lt;br /&gt;
	if fullTopicsToShow ~= 0 then&lt;br /&gt;
		headerContent = headerContent .. &#039;__TOC__\n&#039;&lt;br /&gt;
		for k, v in pairs(fullTopics) do&lt;br /&gt;
			if v.msgCount then&lt;br /&gt;
				v.sectionContent = mw.ustring.gsub(v.sectionContent, v.lastMsgDateString .. &#039; %(UTC%)&#039;, &#039;&amp;lt;cite id=&amp;quot;&#039; .. v.lastMsgAnchor:gsub(&#039;&amp;quot;&#039;, &#039;&amp;amp;quot;&#039;) .. &#039;&amp;quot; style=&amp;quot;font-style:normal;&amp;quot;&amp;gt;%0&amp;lt;/cite&amp;gt;&#039;)&lt;br /&gt;
			end&lt;br /&gt;
			content = content&lt;br /&gt;
				.. killHeadingMarkers(frame:preprocess(v.sectionContent)) .. &#039;\n&#039;&lt;br /&gt;
				.. &#039;&amp;lt;div style=&amp;quot;margin-top:1em;&amp;quot;&amp;gt;&#039; .. (topicsToShow ~= 0 and &#039;[[#topicTable&#039; .. randomNum .. &#039;|↑ К списку тем]]&#039; or &#039;[[#toc|↑ К содержанию]]&#039;) .. &#039;&amp;lt;/div&amp;gt;\n&#039;&lt;br /&gt;
			if k == fullTopicsToShow then break end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	content = headerContent .. content&lt;br /&gt;
	&lt;br /&gt;
	return content&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Buto</name></author>
	</entry>
	<entry>
		<id>https://massarn.com/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Pageparser/doc&amp;diff=2496</id>
		<title>Модуль:Pageparser/doc</title>
		<link rel="alternate" type="text/html" href="https://massarn.com/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Pageparser/doc&amp;diff=2496"/>
		<updated>2026-10-22T18:58:55Z</updated>

		<summary type="html">&lt;p&gt;Buto: Новая страница: «{{docpage}}  &amp;lt;includeonly&amp;gt; Категория:Тептар:Модули &amp;lt;/includeonly&amp;gt;»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{docpage}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;includeonly&amp;gt;&lt;br /&gt;
[[Категория:Тептар:Модули]]&lt;br /&gt;
&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>Buto</name></author>
	</entry>
	<entry>
		<id>https://massarn.com/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Pageparser&amp;diff=2495</id>
		<title>Модуль:Pageparser</title>
		<link rel="alternate" type="text/html" href="https://massarn.com/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Pageparser&amp;diff=2495"/>
		<updated>2026-10-22T18:58:37Z</updated>

		<summary type="html">&lt;p&gt;Buto: Новая страница: « ---- Этот модуль содержит функции работы с текстом страницы local p = {}   --[[    Функция возвращает названия всех секций на странице      Параметры:   1. page= имя страницы (текущая по умолчанию)   2. level= уровень секции (2 по умолчанию)   3. namespace= простраство имён (статьи);...»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; ---- Этот модуль содержит функции работы с текстом страницы&lt;br /&gt;
local p = {}&lt;br /&gt;
 &lt;br /&gt;
--[[ &lt;br /&gt;
  Функция возвращает названия всех секций на странице&lt;br /&gt;
  &lt;br /&gt;
  Параметры:&lt;br /&gt;
  1. page= имя страницы (текущая по умолчанию)&lt;br /&gt;
  2. level= уровень секции (2 по умолчанию)&lt;br /&gt;
  3. namespace= простраство имён (статьи); простраство имён можно передовать внутри имени страницы через двоеточие&lt;br /&gt;
  4. delimiter= разделитель названий секций (&#039;&amp;amp;nbsp;&amp;amp;#149; &#039; по умолчанию)&lt;br /&gt;
  &lt;br /&gt;
  Возвращаемое значение:&lt;br /&gt;
  Строка, содержащая список всех секций, разделённых указанным разделителем&lt;br /&gt;
]]&lt;br /&gt;
function p.sections(frame)&lt;br /&gt;
	local function getParameters( frame_args, arg_list )&lt;br /&gt;
		local new_args = {};&lt;br /&gt;
		local index = 1;&lt;br /&gt;
		local value;&lt;br /&gt;
 &lt;br /&gt;
		for i,arg in ipairs( arg_list ) do&lt;br /&gt;
			value = frame_args[arg]&lt;br /&gt;
			if value == nil then&lt;br /&gt;
				value = frame_args[index];&lt;br /&gt;
				index = index + 1;&lt;br /&gt;
			end&lt;br /&gt;
			new_args[arg] = value;&lt;br /&gt;
		end&lt;br /&gt;
 &lt;br /&gt;
		return new_args;&lt;br /&gt;
	end&lt;br /&gt;
	local new_args = getParameters( frame.args, { &#039;page&#039;, &#039;level&#039;, &#039;namespace&#039;, &#039;delimiter&#039;, &#039;get_numbers&#039;, &#039;firstonly&#039;, &#039;length&#039; } );&lt;br /&gt;
	local page  = new_args[&#039;page&#039;] or &#039;&#039;;&lt;br /&gt;
	local namespace = new_args[&#039;namespace&#039;] or &#039;&#039;;&lt;br /&gt;
	local level = new_args[&#039;level&#039;] or 2;&lt;br /&gt;
	local delimiter = new_args[&#039;delimiter&#039;] or &#039;\n&#039;;&lt;br /&gt;
	local get_numbers = new_args[&#039;get_numbers&#039;] or false;&lt;br /&gt;
	local firstonly = new_args[&#039;firstonly&#039;] or false;&lt;br /&gt;
	local length = new_args[&#039;length&#039;] or false;&lt;br /&gt;
	local pagepointer;&lt;br /&gt;
	if page == &#039;&#039; then&lt;br /&gt;
		pagepointer=mw.title.getCurrentTitle()&lt;br /&gt;
		assert(pagepointer,&amp;quot;failed to access getCurrentTitle&amp;quot;)&lt;br /&gt;
	else&lt;br /&gt;
		pagepointer=mw.title.new(page, namespace)&lt;br /&gt;
		assert(pagepointer,&amp;quot;failed to access mw.title.new(&amp;quot;..tostring(page)..&amp;quot;)&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
	local text=pagepointer.getContent(pagepointer);&lt;br /&gt;
	assert (text,&amp;quot;error: failed to get text from &amp;quot;.. page)&lt;br /&gt;
	text= mw.ustring.gsub( text, &amp;quot;&amp;lt;!%-%-.-%-%-&amp;gt;&amp;quot;, &amp;quot;&amp;quot; ); -- убираем HTML комментарии&lt;br /&gt;
	local hpref = mw.ustring.rep(&amp;quot;=&amp;quot;, tonumber(level));&lt;br /&gt;
	local iterator  = mw.ustring.gmatch(text, &amp;quot;\n&amp;quot; .. hpref .. &amp;quot;%s*([^=]-)%s*&amp;quot; .. hpref ..&amp;quot;\n&amp;quot;);&lt;br /&gt;
	local sections = {};&lt;br /&gt;
	&lt;br /&gt;
	local tocNumber = 1&lt;br /&gt;
	for sectionname in iterator do&lt;br /&gt;
		table.insert(sections, sectionname .. (get_numbers and &#039; [&#039; .. tocNumber .. &#039;]&#039; or &#039;&#039;));&lt;br /&gt;
		tocNumber = tocNumber + 1;&lt;br /&gt;
	end&lt;br /&gt;
	if firstonly then return sections[1] elseif length then return #sections else&lt;br /&gt;
	return table.concat(sections, delimiter);&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Buto</name></author>
	</entry>
	<entry>
		<id>https://massarn.com/w/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:%D0%92%D1%81%D1%82%D0%B0%D0%B2%D0%B8%D1%82%D1%8C_%D1%80%D0%B0%D0%B7%D0%B4%D0%B5%D0%BB/doc&amp;diff=2494</id>
		<title>Шаблон:Вставить раздел/doc</title>
		<link rel="alternate" type="text/html" href="https://massarn.com/w/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:%D0%92%D1%81%D1%82%D0%B0%D0%B2%D0%B8%D1%82%D1%8C_%D1%80%D0%B0%D0%B7%D0%B4%D0%B5%D0%BB/doc&amp;diff=2494"/>
		<updated>2026-10-22T18:56:38Z</updated>

		<summary type="html">&lt;p&gt;Buto: Новая страница: «{{docpage}} {{onLua|Get page content}} Шаблон позволяет вставить в страницу раздел указанной страницы. Используется в {{t|Мониторинг тем}}.  Шаблон предназначен для использования преимущественно в технических целях. В общем случае &amp;#039;&amp;#039;&amp;#039;не используйте&amp;#039;&amp;#039;&amp;#039; шаблон для трансляци...»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{docpage}}&lt;br /&gt;
{{onLua|Get page content}}&lt;br /&gt;
Шаблон позволяет вставить в страницу раздел указанной страницы. Используется в {{t|Мониторинг тем}}.&lt;br /&gt;
&lt;br /&gt;
Шаблон предназначен для использования преимущественно в технических целях. В общем случае &#039;&#039;&#039;не используйте&#039;&#039;&#039; шаблон для трансляции тем обсуждений на другие страницы — вместо этого давайте ссылку (обратное может иметь признаки «[[:en:Wikipedia:Consensus#FORUMSHOP|форумшоппинга]]»).&lt;br /&gt;
&lt;br /&gt;
Использование:&lt;br /&gt;
{{tpre||&#039;&#039;Страница#Раздел&#039;&#039;}}&lt;br /&gt;
{{между pre|или}}&lt;br /&gt;
{{tpre||&#039;&#039;Страница&#039;&#039;|&#039;&#039;Раздел&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
С необязательными параметрами:&lt;br /&gt;
{{tpre||&#039;&#039;Страница#Раздел&#039;&#039;|заголовок{{=}}0|итог{{=}}1|уровень{{=}}&#039;&#039;N&#039;&#039;|показывать в содержании{{=}}0|обрамление{{=}}0|свернуть{{=}}1|править{{=}}0}}&lt;br /&gt;
&lt;br /&gt;
Чтобы получать корректные ссылки на разделы, может использоваться скрипт [[u:JWBTH/copyWikilinks|copyWikilinks]].&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;|заголовок=0&amp;lt;/code&amp;gt; — вывести раздел без заголовка.&lt;br /&gt;
* &amp;lt;code&amp;gt;|итог=1&amp;lt;/code&amp;gt; — вывести не всю тему, а только её итог, если он есть. Пока его нет, будет выводиться соответствующее сообщение.&lt;br /&gt;
* &amp;lt;code&amp;gt;|уровень=&#039;&#039;N&#039;&#039;&amp;lt;/code&amp;gt; — использовать уровень заголовка N как базовый (по умолчанию 2, то есть &amp;lt;code&amp;gt;== ==&amp;lt;/code&amp;gt;).&lt;br /&gt;
* &amp;lt;code&amp;gt;|показывать в содержании=0&amp;lt;/code&amp;gt; — не показывать заголовок раздела и внутренние заголовки в [[Тептар:Разделы#Содержание|содержании]].&lt;br /&gt;
* &amp;lt;code&amp;gt;|обрамление=0&amp;lt;/code&amp;gt; — показывать раздел без левой рамки и поясняющей надписи (используйте осторожно; при включении шаблона в обсуждения страницы читающим должно быть понятно, что раздел взят с другой страницы).&lt;br /&gt;
* &amp;lt;code&amp;gt;|свернуть=1&amp;lt;/code&amp;gt; — обернуть раздел в сворачиваемый блок, свёрнутый по умолчанию. Включает в себя функционал предыдущих двух параметров.&lt;br /&gt;
* &amp;lt;code&amp;gt;|править=0&amp;lt;/code&amp;gt; — не показывать ссылки на правку.&lt;br /&gt;
&lt;br /&gt;
Ссылки на правку соответствующих страниц справа от заголовка &#039;&#039;работают&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Используйте &amp;lt;code&amp;gt;#top&amp;lt;/code&amp;gt; как название раздела для вывода преамбулы страницы (то есть части до первого раздела).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;includeonly&amp;gt;&lt;br /&gt;
[[Категория:Шаблоны:Обсуждения]]&lt;br /&gt;
&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>Buto</name></author>
	</entry>
	<entry>
		<id>https://massarn.com/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Get_page_content/doc&amp;diff=2493</id>
		<title>Модуль:Get page content/doc</title>
		<link rel="alternate" type="text/html" href="https://massarn.com/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Get_page_content/doc&amp;diff=2493"/>
		<updated>2026-10-22T18:55:27Z</updated>

		<summary type="html">&lt;p&gt;Buto: Новая страница: « Реализация шаблона {{tl|вставить раздел}}, но может возвращать информацию данными. В этом качестве активно используется модулем Topic monitoring. Модуль может быть дополнен другими функциями.  == См. также == * Модуль:Topic monitoring * Модуль:Pageparser  &amp;lt;...»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
Реализация шаблона {{tl|вставить раздел}}, но может возвращать информацию данными. В этом качестве активно используется модулем [[Модуль:Topic monitoring|Topic monitoring]]. Модуль может быть дополнен другими функциями.&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
* [[Модуль:Topic monitoring]]&lt;br /&gt;
* [[Модуль:Pageparser]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;[[Категория:Модули:Документация]]&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&amp;lt;includeonly&amp;gt;[[Категория:Тептар:Модули]]&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>Buto</name></author>
	</entry>
	<entry>
		<id>https://massarn.com/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Get_page_content&amp;diff=2492</id>
		<title>Модуль:Get page content</title>
		<link rel="alternate" type="text/html" href="https://massarn.com/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Get_page_content&amp;diff=2492"/>
		<updated>2026-10-22T18:54:38Z</updated>

		<summary type="html">&lt;p&gt;Buto: Новая страница: «local p = {}  local monthNames = {&amp;#039;января&amp;#039;, &amp;#039;февраля&amp;#039;, &amp;#039;марта&amp;#039;, &amp;#039;апреля&amp;#039;, &amp;#039;мая&amp;#039;, &amp;#039;июня&amp;#039;, &amp;#039;июля&amp;#039;, &amp;#039;августа&amp;#039;, &amp;#039;сентября&amp;#039;, &amp;#039;октября&amp;#039;, &amp;#039;ноября&amp;#039;, &amp;#039;декабря&amp;#039;}  if not getArgs then 	getArgs = require(&amp;#039;Модуль:Arguments&amp;#039;).getArgs end  local pageTitle, pageTitleText, sectionHeading, _frame  --[=[ Helper function that escapes all pattern characters so that they will be treated as plain text. Cop...»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local p = {}&lt;br /&gt;
&lt;br /&gt;
local monthNames = {&#039;января&#039;, &#039;февраля&#039;, &#039;марта&#039;, &#039;апреля&#039;, &#039;мая&#039;, &#039;июня&#039;, &#039;июля&#039;, &#039;августа&#039;, &#039;сентября&#039;, &#039;октября&#039;, &#039;ноября&#039;, &#039;декабря&#039;}&lt;br /&gt;
&lt;br /&gt;
if not getArgs then&lt;br /&gt;
	getArgs = require(&#039;Модуль:Arguments&#039;).getArgs&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local pageTitle, pageTitleText, sectionHeading, _frame&lt;br /&gt;
&lt;br /&gt;
--[=[&lt;br /&gt;
Helper function that escapes all pattern characters so that they will be treated&lt;br /&gt;
as plain text. Copied from [[:en:Module:String]].&lt;br /&gt;
]=]&lt;br /&gt;
local function escapePattern(pattern_str)&lt;br /&gt;
	return mw.ustring.gsub(pattern_str, &#039;([%(%)%.%%%+%-%*%?%[%^%$%]])&#039;, &#039;%%%1&#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Native function can return &amp;quot;Ошибка Lua: PCRE backtrack limit reached while matching pattern &#039;^[	� ]*(.-)[	� ]*$&#039;.&amp;quot;&lt;br /&gt;
-- in case of very long sections.&lt;br /&gt;
local function trim(str)&lt;br /&gt;
	str = mw.ustring.gsub(str, &#039;^[	� ]*&#039;, &#039;&#039;)&lt;br /&gt;
	str = mw.ustring.gsub(str, &#039;[	� ]*$&#039;, &#039;&#039;)&lt;br /&gt;
	return str&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function cleanSectionHeading(heading)&lt;br /&gt;
	-- The following patterns reproduce [[Участник:Buto/transferHeadingToSummary.js]]&lt;br /&gt;
	heading = mw.ustring.gsub(heading, &#039;%[%[:?[^|%]]*|([^%]]*)%]%]&#039;, &#039;%1&#039;)&lt;br /&gt;
	heading = mw.ustring.gsub(heading, &#039;%[%[:?([^%]]*)%]%]&#039;, &#039;%1&#039;)&lt;br /&gt;
	heading = mw.ustring.gsub(heading, &amp;quot;&#039;&#039;&#039;(.-)&#039;&#039;&#039;&amp;quot;, &#039;%1&#039;)&lt;br /&gt;
	heading = mw.ustring.gsub(heading, &amp;quot;&#039;&#039;(.-)&#039;&#039;&amp;quot;, &#039;%1&#039;)&lt;br /&gt;
	heading = mw.ustring.gsub(heading, &#039;&amp;lt;/?%w+ ?/?&amp;gt;&#039;, &#039;&#039;)&lt;br /&gt;
	heading = mw.ustring.gsub(heading, &#039;&amp;lt;%w+ [%w ]-=[^&amp;lt;&amp;gt;]-&amp;gt;&#039;, &#039;&#039;)&lt;br /&gt;
	heading = mw.ustring.gsub(heading, &#039;  +&#039;, &#039; &#039;)&lt;br /&gt;
	heading = mw.text.trim(heading)&lt;br /&gt;
	return heading&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function sectionHeadingToLink(sectionHeading)&lt;br /&gt;
	local sectionHeadingLink = sectionHeading&lt;br /&gt;
	-- The following reproduces processURI function of [[Участник:Jack who built the house/copyWikilinks.js]]&lt;br /&gt;
	--[[sectionHeadingLink = mw.ustring.gsub(sectionHeadingLink, &#039;&amp;lt;&#039;, &#039;%%3C&#039;)&lt;br /&gt;
	sectionHeadingLink = mw.ustring.gsub(sectionHeadingLink, &#039;&amp;gt;&#039;, &#039;%%3E&#039;)&lt;br /&gt;
	sectionHeadingLink = mw.ustring.gsub(sectionHeadingLink, &#039;%[&#039;, &#039;%%5B&#039;)&lt;br /&gt;
	sectionHeadingLink = mw.ustring.gsub(sectionHeadingLink, &#039;%]&#039;, &#039;%%5D&#039;)&lt;br /&gt;
	sectionHeadingLink = mw.ustring.gsub(sectionHeadingLink, &#039;{&#039;, &#039;%%7B&#039;)&lt;br /&gt;
	sectionHeadingLink = mw.ustring.gsub(sectionHeadingLink, &#039;|&#039;, &#039;%%7C&#039;)&lt;br /&gt;
	sectionHeadingLink = mw.ustring.gsub(sectionHeadingLink, &#039;}&#039;, &#039;%%7D&#039;)&lt;br /&gt;
	sectionHeadingLink = mw.ustring.gsub(sectionHeadingLink, &#039; &#039;, &#039;.C2.A0&#039;)]]&lt;br /&gt;
	return &#039;#&#039; .. sectionHeadingLink&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function expandTemplate(tname, targs)&lt;br /&gt;
	local success, result = pcall(&lt;br /&gt;
		_frame.expandTemplate,&lt;br /&gt;
		_frame,&lt;br /&gt;
		{title = tname, args = targs}&lt;br /&gt;
	)&lt;br /&gt;
	return success and result or &#039;&#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getLastMatchWith2Captures(s, pattern)&lt;br /&gt;
	local iterator = mw.ustring.gmatch(s, pattern)&lt;br /&gt;
	local lastCapture1, lastCapture2&lt;br /&gt;
	for capture1, capture2 in iterator do&lt;br /&gt;
		lastCapture1 = capture1&lt;br /&gt;
		lastCapture2 = capture2&lt;br /&gt;
	end&lt;br /&gt;
	return lastCapture1, lastCapture2&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function isEmptyClosure(closureContent)&lt;br /&gt;
	if closureContent then&lt;br /&gt;
		closureContent = closureContent&lt;br /&gt;
			:gsub(&#039;&amp;lt;includeonly&amp;gt;.-&amp;lt;/includeonly&amp;gt;&#039;, &#039;&#039;)&lt;br /&gt;
			:gsub(&#039;&amp;lt;!%-%-.-%-%-&amp;gt;&#039;, &#039;&#039;)&lt;br /&gt;
		closureContent = mw.text.trim(closureContent)&lt;br /&gt;
		if #closureContent &amp;lt; 10 then&lt;br /&gt;
			return true&lt;br /&gt;
		else&lt;br /&gt;
			return false&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		return true&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function killHeadingMarkers(content)&lt;br /&gt;
	content = mw.ustring.gsub(&lt;br /&gt;
		content,&lt;br /&gt;
		string.char(127) .. &#039;\&#039;&amp;quot;`UNIQ%-%-h%-%d+%-%-QINU`&amp;quot;\&#039;&#039; .. string.char(127),&lt;br /&gt;
		&#039;&#039;&lt;br /&gt;
	)&lt;br /&gt;
	return content&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function parsePage(args, talkpageMode)&lt;br /&gt;
	if not _frame then&lt;br /&gt;
		_frame = mw.getCurrentFrame()&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local yesno = require(&#039;Module:Yesno&#039;)&lt;br /&gt;
	&lt;br /&gt;
	local afdMode = yesno(args[&#039;режим КУ&#039;], false)&lt;br /&gt;
	local pageListMode = yesno(args[&#039;режим списков страниц&#039;], false)&lt;br /&gt;
	local standardMode&lt;br /&gt;
	if not talkpageMode and not afdMode and not pageListMode then&lt;br /&gt;
		standardMode = true&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local returnAsData = not standardMode or yesno(args[&#039;как данные&#039;], false)&lt;br /&gt;
	&lt;br /&gt;
	local returnAsData_onlyStats&lt;br /&gt;
	if returnAsData and args[&#039;только статистика&#039;] then&lt;br /&gt;
		returnAsData_onlyStats = yesno(args[&#039;только статистика&#039;], false)&lt;br /&gt;
	else&lt;br /&gt;
		returnAsData_onlyStats = false&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local subsectionHeading, resultMode&lt;br /&gt;
	if standardMode then&lt;br /&gt;
		resultMode = yesno(args[&#039;итог&#039;], false)&lt;br /&gt;
		subsectionHeading = args[&#039;подраздел&#039;]&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local standardHeading = not standardMode or yesno(args[&#039;стандартный заголовок&#039;], false)&lt;br /&gt;
	local shortHeadings = talkpageMode and yesno(args[&#039;короткие заголовки&#039;], false)&lt;br /&gt;
	&lt;br /&gt;
	local collapsed = not returnAsData and yesno(args[&#039;свернуть&#039;], false)&lt;br /&gt;
	local showFrame = collapsed or (not returnAsData and (yesno(args[&#039;обрамление&#039;]) or (yesno(args[&#039;из шаблона&#039;], false) and (args[&#039;обрамление&#039;] == nil))))&lt;br /&gt;
	&lt;br /&gt;
	local sectionHeadingLink&lt;br /&gt;
	if showFrame or (standardHeading or returnAsData_onlyStats) and not talkpageMode then&lt;br /&gt;
		sectionHeadingLink = sectionHeadingToLink(sectionHeading)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local renameHeading = args[&#039;переименовать раздел&#039;]&lt;br /&gt;
	&lt;br /&gt;
	local withoutHeading, standardSectionHeading&lt;br /&gt;
	if standardHeading then&lt;br /&gt;
		withoutHeading = true&lt;br /&gt;
		&lt;br /&gt;
		if afdMode then&lt;br /&gt;
			standardSectionHeading = sectionHeading .. &#039; &amp;lt;span style=&amp;quot;font-size:80%;&amp;quot;&amp;gt;← [[&#039; .. pageTitleText .. sectionHeadingLink .. &#039;|&#039; .. pageTitleText .. &#039;]]&amp;lt;/span&amp;gt;&#039;&lt;br /&gt;
		elseif not talkpageMode then&lt;br /&gt;
			standardSectionHeading = &#039;[[&#039; .. pageTitleText .. sectionHeadingLink .. &#039;|&#039; .. (&lt;br /&gt;
					subsectionHeading&lt;br /&gt;
					and subsectionHeading .. &#039; (&#039; .. (renameHeading or sectionHeading) .. &#039;)&#039;&lt;br /&gt;
					or (sectionHeading == &#039;top&#039; and &#039;&amp;lt;i&amp;gt;Преамбула&amp;lt;/i&amp;gt;&#039; or renameHeading or sectionHeading)&lt;br /&gt;
				) .. &#039;]] &amp;lt;span style=&amp;quot;font-size:80%;&amp;quot;&amp;gt;← &#039; .. pageTitleText .. &#039;&amp;lt;/span&amp;gt;&#039;&lt;br /&gt;
		end&lt;br /&gt;
	elseif not talkpageMode and args[&#039;заголовок&#039;] then&lt;br /&gt;
		withoutHeading = not yesno(args[&#039;заголовок&#039;], false)&lt;br /&gt;
	else&lt;br /&gt;
		withoutHeading = false&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local level = tonumber(args[&#039;уровень&#039;]) or 2  -- базовый уровень при вставке разделов&lt;br /&gt;
	local additionalEqualSigns = &#039;&#039;&lt;br /&gt;
	if level &amp;gt; 2 then&lt;br /&gt;
		for i = 3, level do&lt;br /&gt;
			additionalEqualSigns = additionalEqualSigns .. &#039;=&#039;&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local showInTOC&lt;br /&gt;
	if args[&#039;показывать в содержании&#039;] then&lt;br /&gt;
		showInTOC = yesno(args[&#039;показывать в содержании&#039;], true)&lt;br /&gt;
	elseif collapsed then&lt;br /&gt;
		showInTOC = false&lt;br /&gt;
	else&lt;br /&gt;
		showInTOC = true&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local showEditLink&lt;br /&gt;
	if args[&#039;править&#039;] then&lt;br /&gt;
		showEditLink = yesno(args[&#039;править&#039;], true)&lt;br /&gt;
	else&lt;br /&gt;
		showEditLink = true&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local showStatsLine&lt;br /&gt;
	if standardHeading and args[&#039;строка статистики&#039;] then&lt;br /&gt;
		showStatsLine = yesno(args[&#039;строка статистики&#039;], false)&lt;br /&gt;
	else&lt;br /&gt;
		showStatsLine = false&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	--local additionalLabels = afdMode or args[&#039;дополнительные ярлыки&#039;]&lt;br /&gt;
	&lt;br /&gt;
	local sectionContent&lt;br /&gt;
	local data = {}&lt;br /&gt;
	local allData = talkpageMode and {}&lt;br /&gt;
	if pageTitle.exists then&lt;br /&gt;
		local fullContent = (talkpageMode and &#039;&#039; or &#039;\n== top ==&#039;) .. &#039;\n&#039; .. pageTitle:getContent() .. &#039;\n= technical heading =\n&#039;&lt;br /&gt;
		fullContent = mw.ustring.gsub(&#039;\n&#039; .. fullContent, &#039;(\n(=+)[^\n]-%2[ \t\f\v]*)&amp;lt;!%-%-.-%-%-&amp;gt;&#039;, &#039;%1&#039;)&lt;br /&gt;
		&lt;br /&gt;
		local iterator&lt;br /&gt;
		local rootSectionID&lt;br /&gt;
		if talkpageMode then -- соответствие заголовков второго уровня заголовкам вообще для talkpageMode&lt;br /&gt;
			rootSectionID = {}&lt;br /&gt;
			iterator = mw.ustring.gmatch(fullContent, &#039;\n(=+)[^\n]-%1&#039;)&lt;br /&gt;
			local i, j = 0, 0&lt;br /&gt;
			for equalSigns in iterator do&lt;br /&gt;
				i = i + 1&lt;br /&gt;
				if equalSigns == &#039;==&#039; then&lt;br /&gt;
					j = j + 1&lt;br /&gt;
					rootSectionID[j] = i&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			iterator = mw.ustring.gmatch(fullContent, &#039;\n((==)([^=][^\n]-)==)&#039;)&lt;br /&gt;
		else&lt;br /&gt;
			iterator = mw.ustring.gmatch(fullContent, &#039;\n((=+)([^\n]-)%2)&#039;)&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		local headingNum = 0&lt;br /&gt;
		for fullMatch, equalSigns, match in iterator do&lt;br /&gt;
			headingNum = headingNum + 1&lt;br /&gt;
			data = {}&lt;br /&gt;
			match = mw.text.trim(match)&lt;br /&gt;
			&lt;br /&gt;
			local thisHeading = mw.text.encode(cleanSectionHeading(match), &#039;&amp;lt;&amp;gt;%[%]{|}&#039;)&lt;br /&gt;
			if thisHeading == sectionHeading or talkpageMode then&lt;br /&gt;
				-- получаем содержимое раздела&lt;br /&gt;
				local equalSignsPattern = &#039;=&#039;&lt;br /&gt;
				for i = 2, #equalSigns do&lt;br /&gt;
					equalSignsPattern = equalSignsPattern .. &#039;=?&#039;&lt;br /&gt;
				end&lt;br /&gt;
				&lt;br /&gt;
				sectionContent =&lt;br /&gt;
					mw.ustring.match(fullContent,&lt;br /&gt;
						   (withoutHeading and &#039;&#039; or &#039;(&#039;)&lt;br /&gt;
						.. escapePattern(fullMatch) .. &#039;[ \t\f\v]*\n+&#039;&lt;br /&gt;
						.. (withoutHeading and &#039;(&#039; or &#039;&#039;)&lt;br /&gt;
						.. &#039;.-)\n&#039; .. equalSignsPattern .. &#039;[^=][^\n]-=+[ \t\f\v]*\n&#039;) or &#039;&#039; --will fail at &amp;quot;===&amp;quot; or the like&lt;br /&gt;
				sectionContent = sectionContent:gsub(&#039;&amp;lt;onlyinclude&amp;gt;.-&amp;lt;/onlyinclude&amp;gt;&#039;, &#039;&#039;)&lt;br /&gt;
				sectionContent = sectionContent:gsub(&#039;&amp;lt;includeonly&amp;gt;(.-)&amp;lt;/includeonly&amp;gt;&#039;, &#039;%1&#039;)&lt;br /&gt;
				&lt;br /&gt;
				local subsectionHeadingNum&lt;br /&gt;
				if subsectionHeading then -- withoutHeading тут неактуально — standardHeading всегда true&lt;br /&gt;
					local beforeContent&lt;br /&gt;
					beforeContent, sectionContent = mw.ustring.match(sectionContent .. &#039;\n= technical heading =\n&#039;, &#039;(.-)\n&#039; .. equalSigns .. &#039;=[ \t\f\v]*&#039; .. escapePattern(subsectionHeading) .. &#039;[ \t\f\v]*=+[ \t\f\v]*\n+(.-)\n&#039; .. equalSignsPattern .. &#039;[^=][^\n]-=+[ \t\f\v]*\n&#039;)&lt;br /&gt;
					subsectionHeadingNum = 0&lt;br /&gt;
					for match2 in mw.ustring.gmatch(&#039;\n&#039; .. beforeContent, &#039;\n=+[^\n]-=+&#039;) do&lt;br /&gt;
						subsectionHeadingNum = subsectionHeadingNum + 1&lt;br /&gt;
					end&lt;br /&gt;
					if not sectionContent then&lt;br /&gt;
						sectionContent = &#039;&#039;&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
				&lt;br /&gt;
				local closureHeading, resultMode_closureHeadingNum&lt;br /&gt;
				if resultMode then&lt;br /&gt;
					local beforeContent, newSectionContent, closureContent&lt;br /&gt;
					local closureTitles = {&#039;Итог&#039;, &#039;Окончательный итог&#039;, &#039;Автоитог&#039;}&lt;br /&gt;
					if withoutHeading and not standardHeading then&lt;br /&gt;
						for i = 1, #closureTitles do -- через or несколько match&#039;ей тут нельзя, так как возвращаются несколько значений&lt;br /&gt;
							if i == 1 or not newSectionContent then&lt;br /&gt;
								beforeContent, closureHeading, newSectionContent = mw.ustring.match(sectionContent .. &#039;\n= technical heading =\n&#039;, &#039;(.*)\n&#039; .. equalSigns .. &#039;=[ \t\f\v]*(&#039; .. closureTitles[i] .. &#039;[^\n]-)[ \t\f\v]*=+[ \t\f\v]*\n+(.-)\n&#039; .. equalSignsPattern .. &#039;[^=][^\n]-=+[ \t\f\v]*\n&#039;)&lt;br /&gt;
							end&lt;br /&gt;
						end&lt;br /&gt;
					else&lt;br /&gt;
						for i = 1, #closureTitles do -- через or несколько match&#039;ей тут нельзя, так как возвращаются несколько значений&lt;br /&gt;
							if i == 1 or not newSectionContent then&lt;br /&gt;
								beforeContent, newSectionContent, closureHeading, closureContent = mw.ustring.match(sectionContent .. &#039;\n= technical heading =\n&#039;, &#039;(.*)\n(&#039; .. equalSigns .. &#039;=[ \t\f\v]*(&#039; .. closureTitles[i] .. &#039;[^\n]-)[ \t\f\v]*=+[ \t\f\v]*\n(.-))\n&#039; .. equalSignsPattern .. &#039;[^=][^\n]-=+[ \t\f\v]*\n&#039;)&lt;br /&gt;
							end&lt;br /&gt;
						end&lt;br /&gt;
					end&lt;br /&gt;
					if newSectionContent then&lt;br /&gt;
						sectionContent = newSectionContent&lt;br /&gt;
						newSectionContent = nil&lt;br /&gt;
						resultMode_closureHeadingNum = 0&lt;br /&gt;
						for match2 in mw.ustring.gmatch(&#039;\n&#039; .. beforeContent, &#039;\n=+[^\n]-=+&#039;) do&lt;br /&gt;
							resultMode_closureHeadingNum = resultMode_closureHeadingNum + 1&lt;br /&gt;
						end&lt;br /&gt;
						&lt;br /&gt;
						-- проверяем, не пустая ли секция итога&lt;br /&gt;
						emptyClosure = isEmptyClosure(closureContent or sectionContent)&lt;br /&gt;
						if emptyClosure then&lt;br /&gt;
							closureHeading = nil&lt;br /&gt;
							&lt;br /&gt;
							if not returnAsData_onlyStats then&lt;br /&gt;
								sectionContent = &amp;quot;&#039;&#039;Похоже, что итога пока нет.&#039;&#039;&amp;quot;&lt;br /&gt;
							end&lt;br /&gt;
						end&lt;br /&gt;
					else&lt;br /&gt;
						if not returnAsData_onlyStats then&lt;br /&gt;
							sectionContent = &amp;quot;&#039;&#039;Похоже, что итога пока нет.&#039;&#039;&amp;quot;&lt;br /&gt;
						else&lt;br /&gt;
							sectionContent = &#039;&#039;&lt;br /&gt;
						end&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
				&lt;br /&gt;
				-- извлекаем данные:&lt;br /&gt;
				-- о сообщениях&lt;br /&gt;
				if showStatsLine or returnAsData then&lt;br /&gt;
					local iterator2 = mw.ustring.gmatch(&#039;\n&#039; .. sectionContent, &#039;\n([^\n]+)((%d%d):(%d%d), (%d%d?) (%w+) (%d%d%d%d)) %(UTC%)&#039;) --(%d%d? %w+ %d%d%d%d)&lt;br /&gt;
					local msgCount, authors = 0, {}&lt;br /&gt;
					local lastMsgDate, lastMsgDateString, lastMsgAuthor&lt;br /&gt;
					for precedingText, fullDateString, h, i, d, mesyats, y in iterator2 do&lt;br /&gt;
						msgCount = msgCount + 1&lt;br /&gt;
						h = tonumber(h)&lt;br /&gt;
						i = tonumber(i)&lt;br /&gt;
						d = tonumber(d)&lt;br /&gt;
						y = tonumber(y)&lt;br /&gt;
						local m = 1&lt;br /&gt;
						for k, v in pairs(monthNames) do&lt;br /&gt;
							if v == mesyats then&lt;br /&gt;
								m = k&lt;br /&gt;
							end&lt;br /&gt;
						end&lt;br /&gt;
						&lt;br /&gt;
						local patterns = {&lt;br /&gt;
							&#039;()%[%[[УуUu]:([^|%]#]+)&#039;,&lt;br /&gt;
							&#039;()%[%[[Уу]частни[кц]а?:([^|%]#]+)&#039;,&lt;br /&gt;
							&#039;()%[%[[Uu]ser:([^|%]#]+)&#039;,&lt;br /&gt;
							&#039;()%[%[[Оо][Уу]:([^|%]#]+)&#039;,                    &lt;br /&gt;
							&#039;()%[%[[Оо]бсуждение[ _]участника:([^|%]]+)&#039;,  &lt;br /&gt;
							&#039;()%[%[[Uu]ser[ _]talk:([^|%]#]+)&#039;,&lt;br /&gt;
							&#039;()%[%[Special:Contributions/([^|%]]+)&#039;,  -- анонимы&lt;br /&gt;
							&#039;()%[%[Служебная:Вклад/([^|%]]+)&#039;,        -- анонимы&lt;br /&gt;
							&#039;()%[%[[^|]+|([^%]]+)%]%]&#039;                -- случаи типа [[w:en:Wikipedia:TWL/Coordinators|The Wikipedia Library Team]]&lt;br /&gt;
						}&lt;br /&gt;
						local lastPos = 0&lt;br /&gt;
						local author&lt;br /&gt;
						for k, v in pairs(patterns) do&lt;br /&gt;
							pos, mention = getLastMatchWith2Captures(precedingText, v)&lt;br /&gt;
							if pos and pos &amp;gt; lastPos then&lt;br /&gt;
								lastPos = pos&lt;br /&gt;
								author = mention&lt;br /&gt;
							end&lt;br /&gt;
							&lt;br /&gt;
							-- чтобы «обс» / «вкл» и т. п. из последнего паттерна&lt;br /&gt;
							-- не вытесняли ники&lt;br /&gt;
							if k == #patterns - 1 and author then break end&lt;br /&gt;
						end&lt;br /&gt;
						if author then&lt;br /&gt;
							author = string.gsub( author, &#039;&amp;amp;#126;&#039;, &#039;~&#039; )&lt;br /&gt;
							author = mw.text.encode(author)&lt;br /&gt;
						end&lt;br /&gt;
						&lt;br /&gt;
						if&lt;br /&gt;
							   not lastMsgDate&lt;br /&gt;
							or (y &amp;gt; lastMsgDate.y)&lt;br /&gt;
							or (y == lastMsgDate.y and m &amp;gt; lastMsgDate.m)&lt;br /&gt;
							or (y == lastMsgDate.y and m == lastMsgDate.m and d &amp;gt; lastMsgDate.d)&lt;br /&gt;
							or (y == lastMsgDate.y and m == lastMsgDate.m and d == lastMsgDate.d and h &amp;gt; lastMsgDate.h)&lt;br /&gt;
							or (y == lastMsgDate.y and m == lastMsgDate.m and d == lastMsgDate.d and h == lastMsgDate.h and i &amp;gt; lastMsgDate.i)&lt;br /&gt;
						then&lt;br /&gt;
							lastMsgDate = {y = y, m = m, d = d, h = h, i = i}&lt;br /&gt;
							lastMsgDateString = fullDateString&lt;br /&gt;
							lastMsgAuthor = author or &#039;?&#039;&lt;br /&gt;
						end&lt;br /&gt;
						&lt;br /&gt;
						local found = false&lt;br /&gt;
						for k, v in pairs(authors) do&lt;br /&gt;
							if v == author then&lt;br /&gt;
								found = true&lt;br /&gt;
								break&lt;br /&gt;
							end&lt;br /&gt;
						end&lt;br /&gt;
						if not found then&lt;br /&gt;
							table.insert(authors, author)&lt;br /&gt;
						end&lt;br /&gt;
					end&lt;br /&gt;
					--local authorsList = table.concat(authors, &#039;, &#039;)&lt;br /&gt;
					if msgCount &amp;gt; 0 then&lt;br /&gt;
						if returnAsData then&lt;br /&gt;
							data.msgCount = msgCount&lt;br /&gt;
							--data.lastMsgDate = lastMsgDate&lt;br /&gt;
							data.lastMsgDateString = lastMsgDateString&lt;br /&gt;
							data.lastMsgDateTimestamp = os.time({year = lastMsgDate.y, month = lastMsgDate.m, day = lastMsgDate.d, hour = lastMsgDate.h, min = lastMsgDate.i})&lt;br /&gt;
							data.lastMsgAuthor = lastMsgAuthor&lt;br /&gt;
							data.lastMsgAnchor = string.format(&#039;%.4d%.2d%.2d%.2d%.2d_%s&#039;, lastMsgDate.y, lastMsgDate.m, lastMsgDate.d, lastMsgDate.h, lastMsgDate.i, lastMsgAuthor)&lt;br /&gt;
							data.authors = authors&lt;br /&gt;
						end&lt;br /&gt;
						if showStatsLine then&lt;br /&gt;
							sectionContent = &#039;\&#039;\&#039;Последнее сообщение: &#039; .. lastMsgDateString .. &#039; от &#039; .. lastMsgAuthor .. &#039;. Всего &#039; .. msgCount .. &#039; {{plural: &#039; .. msgCount .. &#039;|сообщение|сообщения|сообщений}} от &#039; .. #authors .. &#039; {{plural: &#039; .. #authors .. &#039;|автора|авторов}}.\&#039;\&#039;\n&#039; .. sectionContent&lt;br /&gt;
						end&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
				&lt;br /&gt;
				-- ...для ярлыков&lt;br /&gt;
				local preclosureHeading, challengedClosureHeading, partialClosureHeading, warningHeading&lt;br /&gt;
				if afdMode then&lt;br /&gt;
					closureHeading = mw.ustring.match(match, &#039;^&amp;lt;s&amp;gt;.*&#039;)&lt;br /&gt;
				elseif pageListMode then&lt;br /&gt;
					warningHeading =&lt;br /&gt;
						   mw.ustring.match(match, &#039;^Предупреждение.*&#039;)&lt;br /&gt;
						or mw.ustring.match(match, &#039;^Блокировка.*&#039;)&lt;br /&gt;
						or mw.ustring.match(match, &#039;^Нарушение авторских прав.*&#039;)&lt;br /&gt;
						or mw.ustring.match(match, &#039;^Нарушение АП.*&#039;)&lt;br /&gt;
				end&lt;br /&gt;
				&lt;br /&gt;
				-- экономим ресурсы и совершаем максимум два действия за один обход регуляркой:&lt;br /&gt;
				-- извлечение данных для ярлыков и формирование заголовков с корректной ссылкой на правку&lt;br /&gt;
				local i = 0&lt;br /&gt;
				local emptyClosure&lt;br /&gt;
				sectionContent = mw.ustring.gsub(&#039;\n&#039; .. sectionContent, &#039;\n((=+)([^\n]-)%2)&#039;, function (fullMatch2, equalSigns2, match2)&lt;br /&gt;
					i = i + 1&lt;br /&gt;
					match2 = mw.text.trim(match2)&lt;br /&gt;
					&lt;br /&gt;
					if returnAsData and not resultMode and not emptyClosure then&lt;br /&gt;
						if not closureHeading and #equalSigns2 == #equalSigns + 1 then&lt;br /&gt;
							closureHeading =&lt;br /&gt;
								   mw.ustring.match(match2, &#039;^Итог.*&#039;)&lt;br /&gt;
								or mw.ustring.match(match2, &#039;^Окончательный итог.*&#039;)&lt;br /&gt;
								or mw.ustring.match(match2, &#039;^Автоитог.*&#039;)&lt;br /&gt;
								--or mw.ustring.match(match2, &#039;^Автоматический итог.*&#039;)&lt;br /&gt;
							&lt;br /&gt;
							if closureHeading then&lt;br /&gt;
								-- проверяем, не пустая ли секция итога&lt;br /&gt;
								local closureContent = mw.ustring.match(sectionContent .. &#039;\n= technical heading =\n&#039;, &#039;\n===+[ \t\f\v]*Итог[^\n]-[ \t\f\v]*=+[ \t\f\v]*\n+(.-)\n=+[^\n]-=+[ \t\f\v]*\n&#039;)&lt;br /&gt;
								emptyClosure = isEmptyClosure(closureContent);&lt;br /&gt;
								if emptyClosure then&lt;br /&gt;
									closureHeading = nil&lt;br /&gt;
									challengedClosureHeading = nil&lt;br /&gt;
									preclosureHeading = nil&lt;br /&gt;
									partialClosureHeading = nil&lt;br /&gt;
								end&lt;br /&gt;
							end&lt;br /&gt;
						end&lt;br /&gt;
						if not closureHeading then  -- not closureHeading and additionalLabels&lt;br /&gt;
							if afdMode and not partialClosureHeading and #equalSigns2 == #equalSigns + 2 then&lt;br /&gt;
								partialClosureHeading =&lt;br /&gt;
									   mw.ustring.match(match2, &#039;^Итог.*&#039;)&lt;br /&gt;
								 	or mw.ustring.match(match2, &#039;^Окончательный итог.*&#039;)&lt;br /&gt;
								 	or mw.ustring.match(match2, &#039;^Автоитог.*&#039;)&lt;br /&gt;
									or mw.ustring.match(match2, &#039;^Автоматический итог.*&#039;)&lt;br /&gt;
							end&lt;br /&gt;
							if not challengedClosureHeading and #equalSigns2 == #equalSigns + 1 then&lt;br /&gt;
								challengedClosureHeading =&lt;br /&gt;
									   mw.ustring.match(match2, &#039;^Оспоренный [иИ]тог.*&#039;)&lt;br /&gt;
									or mw.ustring.match(match2, &#039;^Опротестованный [иИ]тог.*&#039;)&lt;br /&gt;
								 --or mw.ustring.match(match2, &#039;^Не [иИ]тог.*&#039;)&lt;br /&gt;
								if challengedClosureHeading then&lt;br /&gt;
									preclosureHeading = nil&lt;br /&gt;
									partialClosureHeading = nil&lt;br /&gt;
								end&lt;br /&gt;
							end&lt;br /&gt;
							if not challengedClosureHeading and #equalSigns2 == #equalSigns + 1 then&lt;br /&gt;
								preclosureHeading =&lt;br /&gt;
									   mw.ustring.match(match2, &#039;^Предварительный итог.*&#039;)&lt;br /&gt;
									or mw.ustring.match(match2, &#039;^Пред[иы]тог.*&#039;)&lt;br /&gt;
							end&lt;br /&gt;
						end&lt;br /&gt;
						if closureHeading and #equalSigns2 == #equalSigns + 1 then&lt;br /&gt;
							challengedClosureHeading =&lt;br /&gt;
								mw.ustring.match(match2, &#039;^Оспаривание [иИтога]*&#039;)&lt;br /&gt;
							if challengedClosureHeading then&lt;br /&gt;
								closureHeading = nil&lt;br /&gt;
							end&lt;br /&gt;
						end&lt;br /&gt;
					end&lt;br /&gt;
					&lt;br /&gt;
					local editLink2&lt;br /&gt;
					if showEditLink then&lt;br /&gt;
						editLink2 = pageTitle:fullUrl(&#039;action=edit&amp;amp;section=&#039; ..&lt;br /&gt;
							(talkpageMode and rootSectionID[headingNum] + i or headingNum - 1 + i)&lt;br /&gt;
						  + (not withoutHeading and -1 or 0)&lt;br /&gt;
						  + (resultMode_closureHeadingNum and resultMode_closureHeadingNum or 0)&lt;br /&gt;
						  + (subsectionHeadingNum and subsectionHeadingNum or 0)&lt;br /&gt;
						) -- «- 1», так как, за исключением talkpageMode, мы вставляем искусственную первую секцию&lt;br /&gt;
					end&lt;br /&gt;
					return &#039;\n&#039; .. expandTemplate(&#039;fake heading&#039;, {&lt;br /&gt;
						[&#039;sub&#039;] = #equalSigns2 + level - 2,&lt;br /&gt;
						renameHeading or match2,&lt;br /&gt;
						[&#039;real heading&#039;] = showInTOC and additionalEqualSigns .. &#039;== &#039; .. (renameHeading or match2) .. &#039; ==&#039; .. additionalEqualSigns or &#039;&#039;,&lt;br /&gt;
						[&#039;edit link&#039;] = showEditLink and editLink2 or &#039;&#039;,&lt;br /&gt;
						[&#039;in frame&#039;] = (showFrame and (not withoutHeading or standardHeading) and i == 1 and &#039;1&#039; or &#039;&#039;)&lt;br /&gt;
					})&lt;br /&gt;
				end)&lt;br /&gt;
				&lt;br /&gt;
				if returnAsData then&lt;br /&gt;
					data.closureHeading = closureHeading&lt;br /&gt;
					data.preclosureHeading = preclosureHeading&lt;br /&gt;
					data.challengedClosureHeading = challengedClosureHeading&lt;br /&gt;
					data.partialClosureHeading = partialClosureHeading&lt;br /&gt;
					data.warningHeading = warningHeading&lt;br /&gt;
				end&lt;br /&gt;
				&lt;br /&gt;
				local thisHeadingLink = sectionHeadingLink and sectionHeadingLink or sectionHeadingToLink(thisHeading)&lt;br /&gt;
				if returnAsData then&lt;br /&gt;
					data.sectionHeadingLink = thisHeadingLink&lt;br /&gt;
				end&lt;br /&gt;
				&lt;br /&gt;
				local editLink&lt;br /&gt;
				editLink = pageTitle:fullUrl(&#039;action=edit&amp;amp;section=&#039; .. (talkpageMode and rootSectionID[headingNum] or headingNum - 1))&lt;br /&gt;
				if returnAsData then&lt;br /&gt;
					data.sectionEditLink = editLink&lt;br /&gt;
				end&lt;br /&gt;
				&lt;br /&gt;
				-- формируем заголовок&lt;br /&gt;
				if not returnAsData_onlyStats and standardHeading then&lt;br /&gt;
					if talkpageMode then&lt;br /&gt;
						if shortHeadings then&lt;br /&gt;
							standardSectionHeading = &#039;[[&#039; .. pageTitleText .. thisHeadingLink .. &#039;|&#039; .. thisHeading .. &#039;]]&#039;&lt;br /&gt;
						else&lt;br /&gt;
							standardSectionHeading = &#039;[[&#039; .. pageTitleText .. thisHeadingLink .. &#039;|&#039; .. thisHeading .. &#039;]] &amp;lt;span style=&amp;quot;font-size:80%;&amp;quot;&amp;gt;← &#039; .. pageTitleText .. &#039;&amp;lt;/span&amp;gt;&#039;&lt;br /&gt;
						end&lt;br /&gt;
					elseif afdMode then&lt;br /&gt;
						standardSectionHeading = match .. &#039; &amp;lt;span style=&amp;quot;font-size:80%;&amp;quot;&amp;gt;← [[&#039; .. pageTitleText .. thisHeadingLink .. &#039;|&#039; .. pageTitleText .. &#039;]]&amp;lt;/span&amp;gt;&#039;&lt;br /&gt;
					end&lt;br /&gt;
					&lt;br /&gt;
					sectionContent = expandTemplate(&#039;fake heading&#039;, {&lt;br /&gt;
						[&#039;sub&#039;] = 2 + level - 2,&lt;br /&gt;
						renameHeading or standardSectionHeading,&lt;br /&gt;
						[&#039;real heading&#039;] = showInTOC and additionalEqualSigns .. &#039;== &#039; .. (renameHeading or standardSectionHeading) .. &#039; ==&#039; .. additionalEqualSigns or &#039;&#039;,&lt;br /&gt;
						[&#039;edit link&#039;] = showEditLink and editLink or &#039;&#039;&lt;br /&gt;
					}) .. &#039;\n&#039; .. sectionContent&lt;br /&gt;
				end&lt;br /&gt;
				&lt;br /&gt;
				sectionContent = trim(sectionContent)&lt;br /&gt;
				&lt;br /&gt;
				if talkpageMode then&lt;br /&gt;
					data.sectionHeading = thisHeading&lt;br /&gt;
					if not returnAsData_onlyStats then&lt;br /&gt;
						data.sectionContent = sectionContent&lt;br /&gt;
					end&lt;br /&gt;
				else&lt;br /&gt;
					break&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			if talkpageMode and data.sectionHeading then&lt;br /&gt;
				table.insert(allData, data)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		if not talkpageMode and (returnAsData or not returnAsData_onlyStats) then&lt;br /&gt;
			if sectionContent == &#039;&#039; then&lt;br /&gt;
				if subsectionHeading then&lt;br /&gt;
					local sectionNotExistMessage = &#039;На странице [[&#039; .. pageTitleText .. &#039;]] в разделе «&#039; .. sectionHeading .. &#039;» не найден подраздел «&#039; .. subsectionHeading .. &#039;». Возможно, тема была заархивирована.&#039;&lt;br /&gt;
					if returnAsData then&lt;br /&gt;
						data.sectionNotExistMessage = sectionNotExistMessage&lt;br /&gt;
					end&lt;br /&gt;
					if not returnAsData_onlyStats then&lt;br /&gt;
						sectionContent = &#039;== &#039; .. (renameHeading or standardSectionHeading) .. &amp;quot; ==\n&#039;&#039;&amp;quot; .. sectionNotExistMessage .. &amp;quot;&#039;&#039;&amp;quot;&lt;br /&gt;
					end&lt;br /&gt;
				elseif not returnAsData_onlyStats then&lt;br /&gt;
					sectionContent = &#039;== &#039; .. (renameHeading or standardSectionHeading) .. &amp;quot; ==\n&#039;&#039;&amp;lt;span class=\&amp;quot;error\&amp;quot;&amp;gt;Не удалось получить содержимое раздела «&#039; .. sectionHeading .. &#039;» на странице [[&#039; .. pageTitleText .. &#039;]] (хотя он был найден).&amp;lt;/span&amp;gt;&#039;&#039;&amp;quot;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			if not sectionContent then&lt;br /&gt;
				local sectionNotExistMessage = &#039;На странице [[&#039; .. pageTitleText .. &#039;]] не найден раздел «&#039; .. sectionHeading .. &#039;».&#039;&lt;br /&gt;
				if not (&lt;br /&gt;
					   mw.ustring.find(pageTitleText, &#039;^Тептар:К удалению/&#039;)&lt;br /&gt;
					or mw.ustring.find(pageTitleText, &#039;^Тептар:К восстановлению/&#039;)&lt;br /&gt;
					or mw.ustring.find(pageTitleText, &#039;^Тептар:К переименованию/&#039;)&lt;br /&gt;
					or mw.ustring.find(pageTitleText, &#039;^Тептар:К объединению/&#039;)&lt;br /&gt;
					or mw.ustring.find(pageTitleText, &#039;^Тептар:К разделению/&#039;)&lt;br /&gt;
					or mw.ustring.find(pageTitleText, &#039;^Тептар:К улучшению/&#039;)&lt;br /&gt;
				) then&lt;br /&gt;
					sectionNotExistMessage = sectionNotExistMessage .. &#039; Возможно, он был заархивирован.&#039;&lt;br /&gt;
				end&lt;br /&gt;
				&lt;br /&gt;
				if returnAsData then&lt;br /&gt;
					data.sectionNotExistMessage = sectionNotExistMessage&lt;br /&gt;
				end&lt;br /&gt;
				if not returnAsData_onlyStats then&lt;br /&gt;
					sectionContent = (standardHeading and &#039;== &#039; .. (renameHeading or standardSectionHeading) .. &#039; ==\n&#039; or &#039;&#039;) .. &amp;quot;&#039;&#039;&amp;quot; .. sectionNotExistMessage .. &amp;quot;&#039;&#039;&amp;quot;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		local pageNotExistMessage = &#039;Страницы [[&#039; .. pageTitleText .. &#039;]] не существует.&#039;&lt;br /&gt;
		if not talkpageMode and not returnAsData_onlyStats then&lt;br /&gt;
			sectionContent = (standardHeading and &#039;== &#039; .. (renameHeading or standardSectionHeading) .. &#039; ==\n&#039; or &#039;&#039;) .. &amp;quot;&#039;&#039;&amp;quot; .. pageNotExistMessage .. &amp;quot;&#039;&#039;&amp;quot;&lt;br /&gt;
		end&lt;br /&gt;
		if returnAsData then&lt;br /&gt;
			if talkpageMode then&lt;br /&gt;
				allData.pageNotExistMessage = pageNotExistMessage&lt;br /&gt;
			else&lt;br /&gt;
				data.pageNotExistMessage = pageNotExistMessage&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if returnAsData then&lt;br /&gt;
		if talkpageMode then&lt;br /&gt;
			return allData&lt;br /&gt;
		else&lt;br /&gt;
			if not returnAsData_onlyStats then&lt;br /&gt;
				data.sectionContent = sectionContent&lt;br /&gt;
			end&lt;br /&gt;
			return data&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		if collapsed then&lt;br /&gt;
			sectionContent =&lt;br /&gt;
			   	   &#039;&amp;lt;blockquote style=&amp;quot;margin:0; padding:0; background:transparent; overflow:visible; font-weight:bold; text-align:center; margin:0 5em;&amp;quot;&amp;gt;Содержимое раздела «[[&#039; .. pageTitleText .. sectionHeadingLink .. &#039;|&#039; .. sectionHeading .. &#039;]]» на странице «&#039; .. pageTitleText .. &#039;»&amp;lt;/div&amp;gt;&#039;&lt;br /&gt;
			   	.. &#039;&amp;lt;table class=&amp;quot;collapsible collapsed&amp;quot; style=&amp;quot;width:100%; border-collapse:collapse;&amp;quot; role=&amp;quot;presentation&amp;quot;&amp;gt;&#039;&lt;br /&gt;
			   	.. &#039;&amp;lt;tr&amp;gt;&#039;&lt;br /&gt;
				.. &#039;&amp;lt;td style=&amp;quot;padding:0;text-align:center;font-weight:bold&amp;quot;&amp;gt;&amp;lt;/td&amp;gt;&#039;&lt;br /&gt;
				.. &#039;&amp;lt;/tr&amp;gt;&#039;&lt;br /&gt;
				.. &#039;&amp;lt;tr&amp;gt;&#039;&lt;br /&gt;
				.. &#039;&amp;lt;td style=&amp;quot;padding:0; padding-top:1em;&amp;quot;&amp;gt;&#039;&lt;br /&gt;
				.. &#039;&amp;lt;div style=&amp;quot;border-left:2px solid #a2a9b1; padding-left:0.75em;&amp;quot;&amp;gt;&#039; .. sectionContent .. &#039;&amp;lt;/div&amp;gt;&#039;&lt;br /&gt;
				.. &#039;&amp;lt;/td&amp;gt;&#039;&lt;br /&gt;
				.. &#039;&amp;lt;/tr&amp;gt;&#039;&lt;br /&gt;
				.. &#039;&amp;lt;/table&amp;gt;&#039;&lt;br /&gt;
		elseif showFrame then&lt;br /&gt;
			sectionContent =&lt;br /&gt;
			      &#039;\&#039;\&#039;Ниже приведено содержимое раздела «[[&#039; .. pageTitleText .. sectionHeadingLink .. &#039;|&#039; .. sectionHeading .. &#039;]]» на странице «&#039; .. pageTitleText .. &#039;»:\&#039;\&#039;&#039;&lt;br /&gt;
			   .. &#039;&amp;lt;blockquote style=&amp;quot;margin:0; padding:0; background:transparent; overflow:visible; border-left:2px solid #a2a9b1; padding-left:0.75em;&amp;quot;&amp;gt;&#039; .. sectionContent .. &#039;&amp;lt;/div&amp;gt;&#039;&lt;br /&gt;
		end&lt;br /&gt;
		return sectionContent&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._parse_section_content(args)&lt;br /&gt;
	if not args[1] then return &#039;&#039; end&lt;br /&gt;
	if type(args[1]) ~= &#039;table&#039; and args[1]:find(&#039;#&#039;) then&lt;br /&gt;
		pageTitle, sectionHeading = args[1]:match(&#039;(.-)#(.+)&#039;)&lt;br /&gt;
		if pageTitle then&lt;br /&gt;
			pageTitle = mw.title.new(pageTitle)&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		pageTitle = type(args[1]) == &#039;table&#039; and args[1] or mw.title.new(args[1])&lt;br /&gt;
		sectionHeading = args[2]&lt;br /&gt;
	end&lt;br /&gt;
	if pageTitle then&lt;br /&gt;
		pageTitle.fragment = &#039;&#039;&lt;br /&gt;
		pageTitleText = pageTitle.prefixedText&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if not pageTitle or not sectionHeading then return &#039;&#039; end&lt;br /&gt;
	&lt;br /&gt;
	return parsePage(args, false)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._parse_talkpage_content(args)&lt;br /&gt;
	pageTitle = type(args[1]) == &#039;table&#039; and args[1] or mw.title.new(args[1])&lt;br /&gt;
	if pageTitle then&lt;br /&gt;
		pageTitle.fragment = &#039;&#039;&lt;br /&gt;
		pageTitleText = pageTitle.prefixedText&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if not pageTitle then return &#039;&#039; end&lt;br /&gt;
	&lt;br /&gt;
	return parsePage(args, true)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.parse_section_content(frame)&lt;br /&gt;
	_frame = frame&lt;br /&gt;
	local args = getArgs(frame)&lt;br /&gt;
	return killHeadingMarkers(frame:preprocess(p._parse_section_content(args)))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.parse_raw_section_content(frame)&lt;br /&gt;
	_frame = frame&lt;br /&gt;
	local args = getArgs(frame)&lt;br /&gt;
	return killHeadingMarkers(p._parse_section_content(args))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[function p.parse_talkpage_content(frame)&lt;br /&gt;
	_frame = frame&lt;br /&gt;
	local args = getArgs(frame)&lt;br /&gt;
	return killHeadingMarkers(frame:preprocess(p._parse_talkpage_content(args)))&lt;br /&gt;
end]]&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Buto</name></author>
	</entry>
	<entry>
		<id>https://massarn.com/w/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:%D0%92%D1%81%D1%82%D0%B0%D0%B2%D0%B8%D1%82%D1%8C_%D1%80%D0%B0%D0%B7%D0%B4%D0%B5%D0%BB&amp;diff=2491</id>
		<title>Шаблон:Вставить раздел</title>
		<link rel="alternate" type="text/html" href="https://massarn.com/w/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:%D0%92%D1%81%D1%82%D0%B0%D0%B2%D0%B8%D1%82%D1%8C_%D1%80%D0%B0%D0%B7%D0%B4%D0%B5%D0%BB&amp;diff=2491"/>
		<updated>2026-10-22T18:49:30Z</updated>

		<summary type="html">&lt;p&gt;Buto: Новая страница: «{| role=&amp;quot;presentation&amp;quot; | {{#invoke:Get page content|parse_section_content|из шаблона=1}} |}&amp;lt;noinclude&amp;gt;{{doc}}&amp;lt;/noinclude&amp;gt;»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| role=&amp;quot;presentation&amp;quot;&lt;br /&gt;
| {{#invoke:Get page content|parse_section_content|из шаблона=1}}&lt;br /&gt;
|}&amp;lt;noinclude&amp;gt;{{doc}}&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Buto</name></author>
	</entry>
	<entry>
		<id>https://massarn.com/w/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Fake_heading/doc&amp;diff=2490</id>
		<title>Шаблон:Fake heading/doc</title>
		<link rel="alternate" type="text/html" href="https://massarn.com/w/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Fake_heading/doc&amp;diff=2490"/>
		<updated>2026-10-22T18:48:36Z</updated>

		<summary type="html">&lt;p&gt;Buto: Новая страница: «{{docpage}} {{OnTS}} Шаблон, заимствованный из английского {{ent|Fake heading}}, адаптированный для нужд шаблона {{t|вставить раздел}} и модуля Get page content. Не предназначен для использования в статьях, а потому выдаёт в них ошибку.  Использование: {{tpre||&amp;#039;&amp;#039;Текс...»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{docpage}}&lt;br /&gt;
{{OnTS}}&lt;br /&gt;
Шаблон, заимствованный из английского {{ent|Fake heading}}, адаптированный для нужд шаблона {{t|вставить раздел}} и модуля [[Модуль:Get page content|Get page content]]. Не предназначен для использования в статьях, а потому выдаёт в них ошибку.&lt;br /&gt;
&lt;br /&gt;
Использование: {{tpre||&#039;&#039;Текст заголовка&#039;&#039;|level{{=}}|edit link{{=}}|supsection{{=}}|in frame{{=}}|style{{=}}|real heading{{=}}}}&lt;br /&gt;
Все параметры необязательны&lt;br /&gt;
* Текст заголовка — по умолчанию &amp;quot;Раздел&amp;quot;&lt;br /&gt;
* level — по умолчанию 2&lt;br /&gt;
* edit link — ссылка на редактирование раздела&lt;br /&gt;
* В style не нужны &amp;lt;code&amp;gt;&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Примеры ==&lt;br /&gt;
{{demo|br=|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
{{fake heading|level=1|Заголовок 1}}&lt;br /&gt;
{{fake heading|level=2|Заголовок 2}}&lt;br /&gt;
{{fake heading|level=3|Заголовок 3}}&lt;br /&gt;
{{fake heading|level=4|Заголовок 4}}&lt;br /&gt;
{{fake heading|level=5|Заголовок 5}}&lt;br /&gt;
{{fake heading|level=6|Заголовок 6}}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;includeonly&amp;gt;&lt;br /&gt;
[[Категория:Шаблоны:Оформление]]&lt;br /&gt;
&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>Buto</name></author>
	</entry>
	<entry>
		<id>https://massarn.com/w/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Yesno/doc&amp;diff=2489</id>
		<title>Шаблон:Yesno/doc</title>
		<link rel="alternate" type="text/html" href="https://massarn.com/w/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Yesno/doc&amp;diff=2489"/>
		<updated>2026-10-22T18:43:57Z</updated>

		<summary type="html">&lt;p&gt;Buto: Новая страница: «{{docpage}} {{СИШ}} Шаблон предназначен для унифицированной обработки параметров, которые могут принимать значения «истина» и «ложь». Он не предназначен для использования в статьях напрямую, но для других шаблонов.  == Использование== Шаблон...»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{docpage}}&lt;br /&gt;
{{СИШ}}&lt;br /&gt;
Шаблон предназначен для унифицированной обработки параметров, которые могут принимать значения [[Булева функция|«истина» и «ложь»]]. Он не предназначен для использования в статьях напрямую, но для других шаблонов.&lt;br /&gt;
&lt;br /&gt;
== Использование==&lt;br /&gt;
Шаблон различает пять разных типов первого неименованного входного параметра:&lt;br /&gt;
# &#039;&#039;&#039;Yes&#039;&#039;&#039;: [[регистрозависимость|Регистронезависимая]] форма ввода истинного значения. Поддерживаются значения &amp;lt;code&amp;gt;yes&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;y&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;да&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;. Возвращаемое значение по умолчанию — «{{yesno|yes}}», может быть переопределено.&lt;br /&gt;
# &#039;&#039;&#039;No&#039;&#039;&#039;: Регистронезависимая форма ложного значения. Поддерживаются значения &amp;lt;code&amp;gt;no&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;нет&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;. Возвращаемое значение по умолчанию — пустая строка, может быть переопределено.&lt;br /&gt;
# &#039;&#039;&#039;Пустота&#039;&#039;&#039;: Состоящий только из [[пробел]]ов параметр. Возвращаемое значение по умолчанию — пустая строка, может быть переопределено.&lt;br /&gt;
# &#039;&#039;&#039;Отрицание&#039;&#039;&#039;: Когда параметр представляет собой только символ &amp;lt;code&amp;gt;¬&amp;lt;/code&amp;gt; или отсутствует вообще. Возвращаемое значение по умолчанию совпадает со значением &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{yesno|no}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;, может быть переопределено.&lt;br /&gt;
# &#039;&#039;&#039;Всё остальное&#039;&#039;&#039;: Любой текст, не попадающий в предыдущие группы. Возвращаемое значение по умолчанию совпадает со значением &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{yesno|yes}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;, может быть переопределено.&lt;br /&gt;
Все возвращаемые значения могут быть переопределены (см. ниже).&lt;br /&gt;
&lt;br /&gt;
== Параметры ==&lt;br /&gt;
&amp;lt;pre&amp;gt;{{yesno&lt;br /&gt;
|&lt;br /&gt;
| yes   =&lt;br /&gt;
| no    =&lt;br /&gt;
| blank =&lt;br /&gt;
| ¬     =&lt;br /&gt;
| def   =&lt;br /&gt;
}}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Примеры ==&lt;br /&gt;
&amp;lt;!-- {{таблица примеров}} --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Код !! Результат&lt;br /&gt;
|-&lt;br /&gt;
| {{пример||1|_style=wikitable}}&lt;br /&gt;
|-&lt;br /&gt;
| {{пример||yes|_style=wikitable}}&lt;br /&gt;
|-&lt;br /&gt;
| {{пример||y|_style=wikitable}}&lt;br /&gt;
|-&lt;br /&gt;
| {{пример||Yes|_style=wikitable}}&lt;br /&gt;
|-&lt;br /&gt;
| {{пример||да|_style=wikitable}}&lt;br /&gt;
|-&lt;br /&gt;
| {{пример||TRUE|_style=wikitable}}&lt;br /&gt;
|-&lt;br /&gt;
| {{пример||yes|yes=ИСТИНА|_style=wikitable}}&lt;br /&gt;
|-&lt;br /&gt;
| {{пример||0|_style=wikitable}}&lt;br /&gt;
|-&lt;br /&gt;
| {{пример||no|_style=wikitable}}&lt;br /&gt;
|-&lt;br /&gt;
| {{пример||n|_style=wikitable}}&lt;br /&gt;
|-&lt;br /&gt;
| {{пример||нет||_style=wikitable}}&lt;br /&gt;
|-&lt;br /&gt;
| {{пример||нет|no=NO|_style=wikitable}}&lt;br /&gt;
|-&lt;br /&gt;
| {{пример||false|_style=wikitable}}&lt;br /&gt;
|-&lt;br /&gt;
| {{пример||FALSE|no=ЛОЖЬ|_style=wikitable}}&lt;br /&gt;
|-&lt;br /&gt;
| {{пример|_style=wikitable}}&lt;br /&gt;
|-&lt;br /&gt;
| {{пример||¬|¬=ОТРИЦАНИЕ|_style=wikitable}}&lt;br /&gt;
|-&lt;br /&gt;
| {{пример|¬=ОТРИЦАНИЕ|_style=wikitable}}&lt;br /&gt;
|-&lt;br /&gt;
| {{пример||no=ЛОЖЬ|_style=wikitable}}&lt;br /&gt;
|-&lt;br /&gt;
| {{пример||¬=ОТРИЦАНИЕ|no=ЛОЖЬ|_style=wikitable}}&lt;br /&gt;
|-&lt;br /&gt;
| {{пример||blank=ПУСТО|_style=wikitable}}&lt;br /&gt;
|-&lt;br /&gt;
| {{пример|||_style=wikitable}}&lt;br /&gt;
|-&lt;br /&gt;
| {{пример|||¬=ОТРИЦАНИЕ|_style=wikitable}}&lt;br /&gt;
|-&lt;br /&gt;
| {{пример|||blank=ПУСТО|_style=wikitable}}&lt;br /&gt;
|-&lt;br /&gt;
| {{пример||¬|blank=ПУСТО|_style=wikitable}}&lt;br /&gt;
|-&lt;br /&gt;
| {{пример|||no=ЛОЖЬ|_style=wikitable}}&lt;br /&gt;
|-&lt;br /&gt;
| {{пример|||blank=ПУСТО|no=ЛОЖЬ|_style=wikitable}}&lt;br /&gt;
|-&lt;br /&gt;
|{{пример||что угодно|_style=wikitable}}&lt;br /&gt;
|-&lt;br /&gt;
|{{пример||что угодно|yes=ИСТИНА|_style=wikitable}}&lt;br /&gt;
|-&lt;br /&gt;
|{{пример||что угодно|def=ЗНАЧЕНИЕ|_style=wikitable}}&lt;br /&gt;
|-&lt;br /&gt;
|{{пример||что угодно|def=ЗНАЧЕНИЕ|yes=ИСТИНА|_style=wikitable}}&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;4&amp;quot; style=&amp;quot;background:#d0d0d0;&amp;quot; | Сравнение связанных шаблонов&lt;br /&gt;
|- style=&amp;quot;text-align:left; vertical-align:top; font-weight:bold; background:#e8e8e8;&amp;quot;&lt;br /&gt;
| Параметр 1 ({{code|1=1=}})&lt;br /&gt;
| {{tl|yesno}}&lt;br /&gt;
| {{tl|yesno-yes}}&lt;br /&gt;
| {{tl|yesno-no}}&lt;br /&gt;
|-&lt;br /&gt;
| yes, y, true, 1*&lt;br /&gt;
| &amp;quot;{{yesno|yes}}&amp;quot;&lt;br /&gt;
| &amp;quot;{{yesno-yes|yes}}&amp;quot;&lt;br /&gt;
| &amp;quot;{{yesno-no|yes}}&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| {{nowrap|Some Text}}&lt;br /&gt;
| &amp;quot;{{yesno|Some Text}}&amp;quot;&lt;br /&gt;
| &amp;quot;{{yesno-yes|Some Text}}&amp;quot;&lt;br /&gt;
| &amp;quot;{{yesno-no|Some Text}}&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| no, n, false, 0*&lt;br /&gt;
| &amp;quot;{{yesno|no}}&amp;quot; {{var|[blank]}}&lt;br /&gt;
| &amp;quot;{{yesno-yes|no}}&amp;quot;&lt;br /&gt;
| &amp;quot;{{yesno-no|no}}&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| {{var|[blank]}}&lt;br /&gt;
| &amp;quot;{{yesno|1=}}&amp;quot; {{var|[blank]}}&lt;br /&gt;
| &amp;quot;{{yesno-yes|1=}}&amp;quot;&lt;br /&gt;
| &amp;quot;{{yesno-no|1=}}&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 1={{var|[blank]}}&lt;br /&gt;
| &amp;quot;{{yesno|1=}}&amp;quot; {{var|[blank]}}&lt;br /&gt;
| &amp;quot;{{yesno-yes|1=}}&amp;quot;&lt;br /&gt;
| &amp;quot;{{yesno-no|1=}}&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| ¬&lt;br /&gt;
| &amp;quot;{{yesno|¬}}&amp;quot; {{var|[blank]}}&lt;br /&gt;
| &amp;quot;{{yesno-yes|¬}}&amp;quot;&lt;br /&gt;
| &amp;quot;{{yesno-no|¬}}&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| {{var|[опущено]}}&lt;br /&gt;
| &amp;quot;{{yesno}}&amp;quot; {{var|[blank]}}&lt;br /&gt;
| &amp;quot;{{yesno-yes}}&amp;quot;&lt;br /&gt;
| &amp;quot;{{yesno-no}}&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
* {{t|yesno-yes}}&lt;br /&gt;
* {{t|yesno-no}}&lt;br /&gt;
* [[Модуль:Yesno]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;includeonly&amp;gt;&lt;br /&gt;
[[Категория:Шаблоны:Условные]]&lt;br /&gt;
&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>Buto</name></author>
	</entry>
</feed>