Викиновости:Модули

↱ ВН:МОД
ВН:LUA

Модули — это специальные страницы Викиновостей, содержащие код на языке Lua, который может быть запущен для генерации содержимого других страниц. Назначение модулей — расширение функций движка Википедии за счёт относительно сложных функций, написанных пользователями. Модули размещаются в пространстве имён «Модуль» ({{ns:828}}). Кроме них, в данном пространстве размещается документация модулей на подстраницах вида Module:$1/doc. На текущий момент все незаблокированные участники Русских Викиновостей имеют возможность создавать и редактировать модули.

История править

13 марта 2013 года во всех проектах фонда Викимедиа было внедрено расширение Scribunto, позволяющие писать так называемые модули на языке Lua. Использование модулей позволяет расширить функционал шаблонов, а также значительно ускорив их работу в некоторых случаях.

Использование править

Все модули располагаются в специальном пространстве имён «Module:» (например, Module:Weather).

Все модули должны быть категоризованы в категории Модули на языке Lua, что можно сделать создав для модуля подстраницу doc (например, Module:Weather/doc) и разместив на ней конструкцию вида

<includeonly>[[Категория:Модули на языке Lua]]</includeonly>

где названием категории можно выбрать и одну из подкатегорий категории Модули на языке Lua.

Приветствуется также наличие для каждого модуля на подстранице doc подробной документации, описываюшей принцип работы модуля.

Технические особенности править

  • Страницы с исполнимым кодом на Lua — это страницы в пространстве имён модулей, кроме тех, название которых соответствует шаблону документации модуля. Технически нельзя переименовать в модуль страницу, содержащую вики-код, и наоборот.
  • На страницах модулей не действуют никакие конструкции вики-кода, включая тэги категоризации, включения шаблонов, комментарии. Перед кодом модуля автоматически включается страница документации (или выводится приглашение создать её, если её нет), на которой могут быть все подобные элементы.
  • Вызов модуля с других страниц может осуществляться:
    • Непосредственным использованием конструкции {{#invoke:Имя модуля|функция|}};
    • Включением данной конструкции через шаблон (любую включаемую страницу), при этом модулю доступны параметры непосредственно вызывающего #invoke шаблона;
    • Вызовом из другого модуля (см. документацию Lua).
Во всех случаях результат аналогичен появлению в статье на месте раскрытия #invoke некоторого вики-кода.
  • Страницы модулей для пользователей, у которых включён в браузере JavaScript, открываются для редактирования в специальном удобном редакторе. Редактор включает в себя средства для отладки модуля без сохранения. Также по умолчанию движок не даёт сохранить модуль с синтаксической ошибкой.
  • Обычно модуль вычисляется в каждой конструкции #invoke, которая его вызывает; его значением должна быть таблица, содержащая функции. Есть возможность вычислять некоторые данные, вызывая модуль однократно при обновлении страницы.
  • Для кода на Lua действуют определённые технические ограничения, при превышении которых возникают ошибки.

Организационные особенности править

  1. Модули во многом аналогичны шаблонам, и в большинстве случаев положения правил для шаблонов автоматически рапространяются на них
  2. Не следует использовать конструкцию {{#invoke}} непосредственно на страницах основного пространства имён, категорий, документации проекта и т. п. Сколько-нибудь широко применяемые модули следует использовать через специальные шаблоны.
  3. Для модулей, как правило, обязательно наличие страниц документации, содержащих, как минимум, категорию Категория:Викиновости:Модули или одну из её подкатегорий (иначе модуль не может быть категоризован). Крайне желательно также объяснить там, где, как и для чего должен применяться модуль и его отдельные функции.
  4. Настоятельно рекомендуется отлаживать модуль сперва в консоли, а после сохранения и перед практическим применением за пределами личного пространства — с помощью Модуль:UnitTests (см. документацию). При отладке новых функций в уже используемых модулях рекомендуется создавать для экспериментов временную версию (например, Модуль:Math/username). В особенности эти положения относятся к активно используемым и близким к пределам ограничений модулям.
  5. В пространстве модулей размещаются страницы пользователей, проектов, порталов и т. п., для которых необходимо исполнение кода. Они должны иметь псевдопрефикс вида Участник:, Проект: (например, Модуль:Участник:%username%/песочница) либо располагаться на подстраницах Модуль:Песочница (Модуль:Песочница/%username%, Модуль:Песочница/%username%/какая-то заготовка). Содержимое таких страниц должно отвечать критериям для данного пространства имён.
  6. Код модулей желательно комментировать, чтобы другим участникам проще было вносить в него изменения.

См. также править

Технические детали и более подробную информацию о модулях можно узнать на следующих страницах:

Страница для изучения языка Lua и тестирования модулей: Модуль:Sandbox.