<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>http://digida.mgpu.ru/index.php?action=history&amp;feed=atom&amp;title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD%3ALua_clue</id>
	<title>Шаблон:Lua clue - История изменений</title>
	<link rel="self" type="application/atom+xml" href="http://digida.mgpu.ru/index.php?action=history&amp;feed=atom&amp;title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD%3ALua_clue"/>
	<link rel="alternate" type="text/html" href="http://digida.mgpu.ru/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Lua_clue&amp;action=history"/>
	<updated>2026-07-28T12:47:08Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.44.0</generator>
	<entry>
		<id>http://digida.mgpu.ru/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Lua_clue&amp;diff=46262&amp;oldid=prev</id>
		<title>Patarakin в 17:17, 16 апреля 2026</title>
		<link rel="alternate" type="text/html" href="http://digida.mgpu.ru/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Lua_clue&amp;diff=46262&amp;oldid=prev"/>
		<updated>2026-04-16T17:17:51Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Предыдущая версия&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Версия от 20:17, 16 апреля 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l64&quot;&gt;Строка 64:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 64:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Нужно программно прочитать значение семантического свойства, записанного на странице.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Нужно программно прочитать значение семантического свойства, записанного на странице.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&#039;&#039;Требует Extension:Semantic Scribunto&#039;&#039;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| style=&amp;quot;vertical-align:top&amp;quot; |&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| style=&amp;quot;vertical-align:top&amp;quot; |&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot; line&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot; line&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l85&quot;&gt;Строка 85:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 84:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Нужно получить список страниц по SMW-запросу и обработать результаты программно.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Нужно получить список страниц по SMW-запросу и обработать результаты программно.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&#039;&#039;Требует Extension:Semantic Scribunto&#039;&#039;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| style=&amp;quot;vertical-align:top&amp;quot; |&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| style=&amp;quot;vertical-align:top&amp;quot; |&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot; line&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot; line&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l108&quot;&gt;Строка 108:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 106:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Нужно программно задать семантическое свойство страницы — например, при создании карточки.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Нужно программно задать семантическое свойство страницы — например, при создании карточки.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&#039;&#039;Требует Extension:Semantic Scribunto&#039;&#039;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| style=&amp;quot;vertical-align:top&amp;quot; |&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| style=&amp;quot;vertical-align:top&amp;quot; |&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot; line&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot; line&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l149&quot;&gt;Строка 149:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 146:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;8. Загрузить внешний CSV и посчитать строки&amp;#039;&amp;#039;&amp;#039;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;8. Загрузить внешний CSV и посчитать строки&amp;#039;&amp;#039;&amp;#039;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Нужно прочитать данные с GitHub или другого URL и агрегировать их.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Нужно прочитать данные с &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[&lt;/ins&gt;GitHub&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;]] &lt;/ins&gt;или другого URL и агрегировать их.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&#039;&#039;Требует Extension:External Data&#039;&#039;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| style=&amp;quot;vertical-align:top&amp;quot; |&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| style=&amp;quot;vertical-align:top&amp;quot; |&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot; line&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot; line&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Patarakin</name></author>
	</entry>
	<entry>
		<id>http://digida.mgpu.ru/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Lua_clue&amp;diff=46261&amp;oldid=prev</id>
		<title>Patarakin в 17:15, 16 апреля 2026</title>
		<link rel="alternate" type="text/html" href="http://digida.mgpu.ru/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Lua_clue&amp;diff=46261&amp;oldid=prev"/>
		<updated>2026-04-16T17:15:07Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Предыдущая версия&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Версия от 20:15, 16 апреля 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l7&quot;&gt;Строка 7:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 7:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;1. Принять параметры из вики-страницы&amp;#039;&amp;#039;&amp;#039;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;1. Принять параметры из вики-страницы&amp;#039;&amp;#039;&amp;#039;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Студент хочет передать аргументы в модуль через &amp;lt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;code&lt;/del&gt;&amp;gt;{{#invoke:}}&amp;lt;/&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;code&lt;/del&gt;&amp;gt; и получить что-то назад.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Студент хочет передать аргументы в модуль через &amp;lt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;nowiki&lt;/ins&gt;&amp;gt;{{#invoke:}}&amp;lt;/&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;nowiki&lt;/ins&gt;&amp;gt; и получить что-то назад.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| style=&amp;quot;vertical-align:top&amp;quot; |&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| style=&amp;quot;vertical-align:top&amp;quot; |&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot; line&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot; line&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Patarakin</name></author>
	</entry>
	<entry>
		<id>http://digida.mgpu.ru/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Lua_clue&amp;diff=46260&amp;oldid=prev</id>
		<title>Patarakin: Новая страница: «{| class=&quot;wikitable&quot; style=&quot;width:100%&quot; |+ &#039;&#039;&#039;Lua в MediaWiki: аффордансы и решения (Scribunto + SMW)&#039;&#039;&#039; ! style=&quot;width:30%&quot; | Аффорданс / проблема ! style=&quot;width:70%&quot; | Решение (фрагмент кода Lua) |- | style=&quot;vertical-align:top; font-weight:bold&quot; | &#039;&#039;&#039;1. Принять параметры из вики-страницы&#039;&#039;&#039;  Студент хочет передать аргументы в модуль че...»</title>
		<link rel="alternate" type="text/html" href="http://digida.mgpu.ru/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Lua_clue&amp;diff=46260&amp;oldid=prev"/>
		<updated>2026-04-16T17:13:42Z</updated>

		<summary type="html">&lt;p&gt;Новая страница: «{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:100%&amp;quot; |+ &amp;#039;&amp;#039;&amp;#039;Lua в MediaWiki: аффордансы и решения (Scribunto + SMW)&amp;#039;&amp;#039;&amp;#039; ! style=&amp;quot;width:30%&amp;quot; | Аффорданс / проблема ! style=&amp;quot;width:70%&amp;quot; | Решение (фрагмент кода Lua) |- | style=&amp;quot;vertical-align:top; font-weight:bold&amp;quot; | &amp;#039;&amp;#039;&amp;#039;1. Принять параметры из вики-страницы&amp;#039;&amp;#039;&amp;#039;  Студент хочет передать аргументы в модуль че...»&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:100%&amp;quot;&lt;br /&gt;
|+ &amp;#039;&amp;#039;&amp;#039;Lua в MediaWiki: аффордансы и решения (Scribunto + SMW)&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
! style=&amp;quot;width:30%&amp;quot; | Аффорданс / проблема&lt;br /&gt;
! style=&amp;quot;width:70%&amp;quot; | Решение (фрагмент кода Lua)&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;vertical-align:top; font-weight:bold&amp;quot; |&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;1. Принять параметры из вики-страницы&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Студент хочет передать аргументы в модуль через &amp;lt;code&amp;gt;{{#invoke:}}&amp;lt;/code&amp;gt; и получить что-то назад.&lt;br /&gt;
| style=&amp;quot;vertical-align:top&amp;quot; |&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot; line&amp;gt;&lt;br /&gt;
local p = {}&lt;br /&gt;
function p.hello(frame)&lt;br /&gt;
  local name = frame.args.name or &amp;quot;мир&amp;quot;&lt;br /&gt;
  return &amp;quot;Привет, &amp;quot; .. name .. &amp;quot;!&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
return p&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Вызов: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{#invoke:MyModule|hello|name=Иван}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;vertical-align:top; font-weight:bold&amp;quot; |&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;2. Построить wikitable из аргументов&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Вывести список данных в виде красивой таблицы прямо на странице.&lt;br /&gt;
| style=&amp;quot;vertical-align:top&amp;quot; |&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot; line&amp;gt;&lt;br /&gt;
local p = {}&lt;br /&gt;
function p.table(frame)&lt;br /&gt;
  local out = &amp;#039;{| class=&amp;quot;wikitable&amp;quot;\n! №\n! Значение\n&amp;#039;&lt;br /&gt;
  local i = 1&lt;br /&gt;
  while frame.args[i] do&lt;br /&gt;
    out = out .. &amp;quot;|-\n| &amp;quot; .. i .. &amp;quot; || &amp;quot; .. frame.args[i] .. &amp;quot;\n&amp;quot;&lt;br /&gt;
    i = i + 1&lt;br /&gt;
  end&lt;br /&gt;
  return out .. &amp;quot;|}&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
return p&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Вызов: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{#invoke:MyModule|table|Lua|SMW|NetLogo}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;vertical-align:top; font-weight:bold&amp;quot; |&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;3. Прочитать содержимое wiki-страницы&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Нужно проанализировать текст другой страницы — посчитать слова, ссылки, заголовки.&lt;br /&gt;
| style=&amp;quot;vertical-align:top&amp;quot; |&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot; line&amp;gt;&lt;br /&gt;
local p = {}&lt;br /&gt;
function p.words(frame)&lt;br /&gt;
  local titleObj = mw.title.new(frame.args.title or &amp;quot;&amp;quot;)&lt;br /&gt;
  if not titleObj then return &amp;quot;Страница не найдена&amp;quot; end&lt;br /&gt;
  local content = titleObj:getContent()&lt;br /&gt;
  if not content then return &amp;quot;Нет содержимого&amp;quot; end&lt;br /&gt;
  local n = 0&lt;br /&gt;
  for _ in mw.ustring.gmatch(content, &amp;quot;%S+&amp;quot;) do n = n + 1 end&lt;br /&gt;
  return &amp;quot;Слов в исходном тексте: &amp;quot; .. n&lt;br /&gt;
end&lt;br /&gt;
return p&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Вызов: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{#invoke:MyModule|words|title=Lua/Tutorial}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;vertical-align:top; font-weight:bold&amp;quot; |&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;4. Получить SMW-свойство страницы&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Нужно программно прочитать значение семантического свойства, записанного на странице.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;Требует Extension:Semantic Scribunto&amp;#039;&amp;#039;&lt;br /&gt;
| style=&amp;quot;vertical-align:top&amp;quot; |&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot; line&amp;gt;&lt;br /&gt;
local p = {}&lt;br /&gt;
function p.getprop(frame)&lt;br /&gt;
  if not mw.smw then return &amp;quot;mw.smw недоступен&amp;quot; end&lt;br /&gt;
  local val = mw.smw.getPropertyValue(&lt;br /&gt;
    frame.args.property or &amp;quot;Modification date&amp;quot;&lt;br /&gt;
  )&lt;br /&gt;
  if val == nil then return &amp;quot;(нет значения)&amp;quot; end&lt;br /&gt;
  return tostring(val)&lt;br /&gt;
end&lt;br /&gt;
return p&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Вызов: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{#invoke:MyModule|getprop|property=Дата создания}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;vertical-align:top; font-weight:bold&amp;quot; |&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;5. Выполнить #ask-запрос из Lua&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Нужно получить список страниц по SMW-запросу и обработать результаты программно.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;Требует Extension:Semantic Scribunto&amp;#039;&amp;#039;&lt;br /&gt;
| style=&amp;quot;vertical-align:top&amp;quot; |&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot; line&amp;gt;&lt;br /&gt;
local p = {}&lt;br /&gt;
function p.ask(frame)&lt;br /&gt;
  if not mw.smw then return &amp;quot;mw.smw недоступен&amp;quot; end&lt;br /&gt;
  local results = mw.smw.ask(&amp;quot;[[Категория:Модули]]|?#-=page|limit=5&amp;quot;)&lt;br /&gt;
  if not results then return &amp;quot;Нет результатов&amp;quot; end&lt;br /&gt;
  local out = &amp;#039;{| class=&amp;quot;wikitable&amp;quot;\n! Страница\n&amp;#039;&lt;br /&gt;
  for _, row in ipairs(results) do&lt;br /&gt;
    out = out .. &amp;quot;|-\n| &amp;quot; .. (row.page or &amp;quot;?&amp;quot;) .. &amp;quot;\n&amp;quot;&lt;br /&gt;
  end&lt;br /&gt;
  return out .. &amp;quot;|}&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
return p&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Вызов: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{#invoke:MyModule|ask}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;vertical-align:top; font-weight:bold&amp;quot; |&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;6. Записать SMW-свойство из Lua&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Нужно программно задать семантическое свойство страницы — например, при создании карточки.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;Требует Extension:Semantic Scribunto&amp;#039;&amp;#039;&lt;br /&gt;
| style=&amp;quot;vertical-align:top&amp;quot; |&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot; line&amp;gt;&lt;br /&gt;
local p = {}&lt;br /&gt;
function p.setprop(frame)&lt;br /&gt;
  if not mw.smw then return &amp;quot;mw.smw недоступен&amp;quot; end&lt;br /&gt;
  local data = {&lt;br /&gt;
    [&amp;quot;Автор модуля&amp;quot;] = frame.args.author or &amp;quot;&amp;quot;,&lt;br /&gt;
    [&amp;quot;Тип модуля&amp;quot;]   = frame.args.type   or &amp;quot;remix&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
  local result = mw.smw.set(data)&lt;br /&gt;
  if result == true then&lt;br /&gt;
    return &amp;quot;Свойства сохранены&amp;quot;&lt;br /&gt;
  else&lt;br /&gt;
    return &amp;quot;Ошибка: &amp;quot; .. (result.error or &amp;quot;неизвестная&amp;quot;)&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
return p&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Вызов: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{#invoke:MyModule|setprop|author=Иванов|type=remix}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;vertical-align:top; font-weight:bold&amp;quot; |&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;7. Вызвать парсер-функцию из Lua&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Нужно использовать &amp;lt;code&amp;gt;#time&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;#if&amp;lt;/code&amp;gt; или другую parser function прямо внутри модуля.&lt;br /&gt;
| style=&amp;quot;vertical-align:top&amp;quot; |&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot; line&amp;gt;&lt;br /&gt;
local p = {}&lt;br /&gt;
function p.today(frame)&lt;br /&gt;
  local date = frame:callParserFunction(&lt;br /&gt;
    &amp;quot;#time&amp;quot;, {&amp;quot;d F Y&amp;quot;}&lt;br /&gt;
  )&lt;br /&gt;
  return &amp;quot;Сегодня: &amp;quot; .. date&lt;br /&gt;
end&lt;br /&gt;
return p&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Вызов: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{#invoke:MyModule|today}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;vertical-align:top; font-weight:bold&amp;quot; |&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;8. Загрузить внешний CSV и посчитать строки&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Нужно прочитать данные с GitHub или другого URL и агрегировать их.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;Требует Extension:External Data&amp;#039;&amp;#039;&lt;br /&gt;
| style=&amp;quot;vertical-align:top&amp;quot; |&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot; line&amp;gt;&lt;br /&gt;
local p = {}&lt;br /&gt;
function p.rows(frame)&lt;br /&gt;
  if not (mw.ext and mw.ext.externalData) then&lt;br /&gt;
    return &amp;quot;Extension:External Data недоступен&amp;quot;&lt;br /&gt;
  end&lt;br /&gt;
  local url = frame.args.url or &amp;quot;&amp;quot;&lt;br /&gt;
  if url == &amp;quot;&amp;quot; then return &amp;quot;Укажите url=&amp;quot; end&lt;br /&gt;
  local data, errors = mw.ext.externalData.getExternalData{&lt;br /&gt;
    source = url,&lt;br /&gt;
    format = &amp;quot;csv with header&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
  if not data then return &amp;quot;Ошибка загрузки&amp;quot; end&lt;br /&gt;
  return &amp;quot;Строк в CSV: &amp;quot; .. #data&lt;br /&gt;
end&lt;br /&gt;
return p&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Вызов: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{#invoke:DatasetAggregator|rows|url=https://raw.githubusercontent.com/…/data.csv}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;vertical-align:top; font-weight:bold&amp;quot; |&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;9. Строка с Юникодом: считать буквы, не байты&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
При подсчёте символов русского/японского текста стандартный &amp;lt;code&amp;gt;#&amp;lt;/code&amp;gt; считает байты, а не символы.&lt;br /&gt;
| style=&amp;quot;vertical-align:top&amp;quot; |&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot; line&amp;gt;&lt;br /&gt;
local p = {}&lt;br /&gt;
function p.ulen(frame)&lt;br /&gt;
  local text = frame.args.text or &amp;quot;&amp;quot;&lt;br /&gt;
  local bytes  = #text&lt;br /&gt;
  local chars  = mw.ustring.len(text)&lt;br /&gt;
  return &amp;quot;Байт: &amp;quot; .. bytes .. &amp;quot; / Символов Unicode: &amp;quot; .. chars&lt;br /&gt;
end&lt;br /&gt;
return p&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Вызов: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{#invoke:MyModule|ulen|text=Привет}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;vertical-align:top; font-weight:bold&amp;quot; |&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;10. Отдать HTML через mw.html&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Нужно сгенерировать сложный HTML-элемент (прогресс-бар, карточку) без конкатенации строк.&lt;br /&gt;
| style=&amp;quot;vertical-align:top&amp;quot; |&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot; line&amp;gt;&lt;br /&gt;
local p = {}&lt;br /&gt;
function p.bar(frame)&lt;br /&gt;
  local val = tonumber(frame.args[1]) or 0&lt;br /&gt;
  val = math.max(0, math.min(100, val))&lt;br /&gt;
  local wrap = mw.html.create(&amp;quot;div&amp;quot;)&lt;br /&gt;
    :css(&amp;quot;background&amp;quot;, &amp;quot;#eee&amp;quot;)&lt;br /&gt;
    :css(&amp;quot;border-radius&amp;quot;, &amp;quot;4px&amp;quot;)&lt;br /&gt;
    :css(&amp;quot;width&amp;quot;, &amp;quot;200px&amp;quot;)&lt;br /&gt;
  wrap:tag(&amp;quot;div&amp;quot;)&lt;br /&gt;
    :css(&amp;quot;background&amp;quot;, &amp;quot;#4caf50&amp;quot;)&lt;br /&gt;
    :css(&amp;quot;width&amp;quot;, val .. &amp;quot;%&amp;quot;)&lt;br /&gt;
    :css(&amp;quot;padding&amp;quot;, &amp;quot;3px 6px&amp;quot;)&lt;br /&gt;
    :css(&amp;quot;color&amp;quot;, &amp;quot;white&amp;quot;)&lt;br /&gt;
    :wikitext(val .. &amp;quot;%&amp;quot;)&lt;br /&gt;
  return tostring(wrap)&lt;br /&gt;
end&lt;br /&gt;
return p&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Вызов: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{#invoke:MyModule|bar|75}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Patarakin</name></author>
	</entry>
</feed>