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

Материал из Викиновостей, свободного источника новостей
↱ ВН:МОД
ВН: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.