Модули
— это специальные страницы Википедии, содержащие код на языке
Lua
, который может быть запущен для генерации содержимого других страниц. Назначение модулей — расширение функций
движка Википедии
за счёт относительно сложных функций, написанных пользователями. Модули размещаются в
пространстве имён
«
Модуль
» (
{{
:828
}}
). Кроме них, в данном пространстве размещаются документация модулей на подстраницах вида
Module:$1/doc
, страницы JSON-данных и
стилей шаблонов
. На текущий момент все незаблокированные участники русской Википедии имеют возможность создавать и редактировать модули, кроме
защищённых
.
Технические особенности
Страницы с исполнимым кодом на Lua — это страницы в пространстве имён модулей, кроме тех, название которых соответствует шаблону документации модуля. Технически нельзя
переименовать
в модуль страницу, содержащую вики-код, и наоборот.
На страницах модулей не действуют никакие конструкции
вики-кода
, включая тэги категоризации, включения шаблонов, комментарии. Перед кодом модуля автоматически
включается
страница документации (или выводится приглашение создать её, если её нет), на которой могут быть все подобные элементы.
Вызов модуля с других страниц может осуществляться:
Непосредственным использованием конструкции
{{
:Имя модуля
|
функция
|
…
}}
;
Включением данной конструкции через
шаблон
(любую включаемую страницу), при этом модулю доступны параметры непосредственно вызывающего
#invoke
шаблона;
Вызовом из другого модуля (см.
).
Во всех случаях результат аналогичен появлению в статье на месте раскрытия
#invoke
некоторого вики-кода.
Страницы модулей для пользователей, у которых включён в браузере
JavaScript
, открываются для редактирования в специальном удобном редакторе. Редактор включает в себя средства для отладки модуля без сохранения. Также по умолчанию движок не даёт сохранить модуль с синтаксической ошибкой.
Обычно модуль вычисляется в каждой конструкции
#invoke
, которая его вызывает; его значением должна быть
, содержащая функции. Есть
вычислять некоторые данные, вызывая модуль однократно при обновлении страницы.
Для кода на Lua действуют определённые
технические
ограничения
, при превышении которых возникают ошибки.
Организационные особенности
Модули, их документация и обсуждения являются страницами
Википедии
. Все базовые
правила Википедии
(например,
ВП:АП
,
ВП:НТЗ
,
ВП:СОВР
) должны соблюдаться также и в них. Содержимое, генерируемое модулем при корректном использовании, также должно удовлетворять всем правилам для содержимого соответствующих страниц (например,
ВП:КДИ
).
Модули во многом аналогичны
шаблонам
, и в большинстве случаев положения правил для шаблонов автоматически распространяются на них (например,
ВП:ПАТ
,
ВП:ЗС
).
Не следует использовать конструкцию
{{
}}
непосредственно
, категорий, документации проекта и т. п. Сколько-нибудь широко применяемые модули следует использовать через специальные
шаблоны
.
Для модулей, как правило, обязательно наличие страниц документации, содержащих, как минимум, категорию
Категория:Википедия:Модули
или одну из её подкатегорий (иначе модуль не может быть
категоризован
). Крайне желательно также объяснить там, где, как и для чего должен применяться модуль и его отдельные функции.
Настоятельно рекомендуется отлаживать модуль сперва в консоли, а после сохранения и перед практическим применением за пределами личного пространства — с помощью
Модуль:UnitTests
(см. документацию). При отладке новых функций в уже используемых модулях рекомендуется создавать для экспериментов временную версию (например,
Модуль:Math/песочница
). В особенности эти положения относятся к
активно используемым
и близким к пределам ограничений модулям.
В пространстве модулей размещаются страницы
пользователей
,
проектов
,
порталов
и т. п., для которых необходимо исполнение кода. Они должны иметь псевдопрефикс вида
Участник:
,
Проект:
(например,
) либо располагаться на подстраницах
Модуль:Песочница
(
,
). Содержимое таких страниц должно отвечать критериям для данного пространства имён.
Код модулей желательно
комментировать
, чтобы другим участникам проще было вносить в него изменения.