Этот модуль реализует шаблон {{ category handler }}. Шаблон обработчика категорий помогает другим шаблонам автоматизировать как категоризацию, так и подавление категорий . Информацию об использовании шаблона обработчика категорий в других шаблонах см. В документации по шаблону . Продолжайте читать, чтобы узнать об использовании модуля обработчика категорий в других модулях Lua или об экспорте этого модуля в другие вики.
Использование из других модулей Lua
Когда не использовать этот модуль
В случаях, когда модулю нужно только категоризировать одно из основных пространств имен (статьи), файла (изображения) или категории, использование этого модуля является излишним. Вместо этого вы можете просто получить титровальный объект с помощью mw.title.getCurrentTitle и проверить nsText
поле. Например:
местное название = mw . название . getCurrentTitle () если заголовок . nsText == 'File' затем - сделать что-нибудь конец
Однако, если вашему модулю необходимо категоризировать в любом другом пространстве имен, мы рекомендуем вам использовать этот модуль, поскольку он обеспечивает надлежащее подавление категорий и упрощает выбор способа категоризации в различных пространствах имен.
Пространства имён
Этот модуль обнаруживает и группирует все различные пространства имен, используемые в Википедии, по нескольким типам. Эти типы используются в качестве имен параметров в этом модуле.
- main = Main / article space, как в обычных статьях Википедии.
- talk = Любое пространство для разговоров, например, названия страниц, начинающиеся с «Обсуждение:», «Обсуждение пользователя:», «Обсуждение файла:» и т. д.
- user, wikipedia, file ... = Другие пространства имен, кроме страниц обсуждения. Также принимаются псевдонимы пространств имен. См. Полный список в таблице ниже.
- other = Любые пространства имен, которые не были указаны в качестве параметра для шаблона. См. Примеры ниже.
- Список возможных параметров пространства имен
(за исключением talk
и other
)
Пространство имен | Псевдонимы |
---|---|
main | |
user | |
wikipedia | project , wp |
file | image |
mediawiki | |
template | |
help | |
category | |
portal | |
book | |
draft | |
education program | |
timedtext | |
module | |
gadget | |
gadget definition |
Основное использование
Этот модуль принимает два или более параметра. Вот пример использования программы hello world:
p = {} local categoryHandler = require ( 'Модуль: обработчик категории' ). основной функция p . main ( frame ) local result = 'Привет, мир!' local category = categoryHandler { '[[Категория: Somecat]]' , nocat = frame . аргументы . nocat - Итак, "nocat = true / false" работает } category = category или '' - Убедитесь, что у нас нет нулевого значения для переменной категории. вернуть результат .. конец категории вернуть p
В приведенном выше примере используются настройки по умолчанию для модуля обработчика категорий. Это означает, что модуль примера будет классифицировать страницы в следующих пространствах имен:
- основной , файл , справка , категория , портал и книга
Но он не будет классифицироваться ни в каких других пространствах имен, например:
- разговор , пользователь , википедия , медиа-вики , шаблон ...
И он не будет классифицироваться на страницах в черном списке. (См. Раздел черный список ниже.)
Причина, по которой модуль обработчика категорий не классифицируется в некоторых пространствах имен, заключается в том, что в этих пространствах имен большинство модулей и шаблонов просто демонстрируются или перечисляются, а не используются. Таким образом, большинство модулей и шаблонов не следует категоризировать в этих пространствах имен.
Любой модуль или шаблон, предназначенный для одного или нескольких пространств имен, в которых этот модуль классифицируется, может использовать базовый синтаксис, как показано выше.
Расширенное использование
Этот модуль принимает один или несколько параметров, названных в честь разных типов страниц, перечисленных в пространствах имен разделов выше. Используя эти параметры, вы можете точно указать, в какие пространства имен должен классифицироваться ваш шаблон. Как это:
p = {} local categoryHandler = require ( 'Модуль: обработчик категории' ). основной функция p . main ( frame ) local result = 'Это модуль, предназначенный для статей и страниц обсуждения.' local category = categoryHandler { main = '[[Категория: Somecat1]]' , - Категоризация в главном (статья) пространстве talk = '[[Категория: Somecat2]]' , - Категоризация в разговоре nocat = frame . аргументы . nocat - Итак, "nocat = true / false" работает } category = category или '' - Убедитесь, что у нас нет нулевого значения для переменной категории. вернуть результат .. конец категории вернуть p
Вышеупомянутый модуль будет классифицироваться только в основном и переговорном пространстве. Но он не будет классифицировать страницы / архивировать, так как они занесены в черный список. (См. Раздел « черный список» ниже.) И если вам нужно продемонстрировать (обсудить) модуль на странице обсуждения, то вы можете использовать « nocat='true'
», чтобы предотвратить категоризацию этого шаблона. (См. Раздел nocat ниже.) Вот так:
== Мой новый модуль ==Привет, ребята, вы не видели мой новый модуль?{{#invoke: mymodule | main | nocat = true}}Красиво, не правда ли?- ~~~~
Иногда мы хотим использовать одну и ту же категорию в нескольких пространствах имен, а затем делаем следующее:
p = {} local categoryHandler = require ( 'Модуль: обработчик категории' ). основной функция p . main ( frame ) local result = 'Это модуль, используемый в нескольких пространствах имен.' local category = categoryHandler { main = '[[Category: Somecat1]]' , [ 1 ] = '[[Category: Somecat2]]' , - Для справки и помощи в пространстве пользователя = 1 , user = 1 , talk = '' , - Нет категорий на страницах обсуждения other = '[[Category: Somecat3]]' , - Для всех других пространств имен nocat = frame . аргументы . nocat - Итак, "nocat = true / false" работает } category = category или '' - Убедитесь, что у нас нет нулевого значения для переменной категории. вернуть результат .. конец категории вернуть p
В приведенном выше примере мы используем нумерованный параметр для подачи одной из категорий, а затем говорим этому модулю использовать этот нумерованный параметр как для справки, так и для пользовательского пространства.
Модуль обработчика категорий понимает неограниченное количество пронумерованных параметров.
В других определяет параметр , что следует использовать в остальных пространствах имен , которые явно не кормили данных.
Обратите внимание на пустой, но определенный параметр разговора . Это мешает этому модулю показывать, что было передано другому параметру, когда он находится в режиме разговора.
В модуле обработчика категорий также есть параметр all . Работает это так:
p = {} local categoryHandler = require ( 'Модуль: обработчик категории' ). основной функция p . main ( frame ) local result = 'Это модуль, используемый во всех пространствах имен.' local category = categoryHandler { all = '[[Category: Somecat1]]' , - Категоризация во всех пространствах имен nocat = frame . аргументы . nocat - Итак, "nocat = true / false" работает } category = category или '' - Убедитесь, что у нас нет нулевого значения для переменной категории. вернуть результат .. конец категории вернуть p
В приведенном выше примере будут категоризированы все пространства имен, но не страницы из черного списка. Если вы хотите продемонстрировать этот модуль на странице, используйте " nocat=true
", чтобы предотвратить категоризацию шаблона.
Мы предлагаем избегать использования параметра all , поскольку модули и шаблоны предпочтительно должны категоризироваться только в тех пространствах имен, которые им необходимы.
Параметр all также можно комбинировать с остальными параметрами. Как это:
p = {} local categoryHandler = require ( 'Модуль: обработчик категории' ). основной функция p . main ( frame ) local result = 'Это модуль, используемый во всех пространствах имен.' local category = categoryHandler { all = '[[Категория: Somecat1]]' , - Назначьте категорию во всех пространствах имен main = '[[Категория: Somecat2]]' , - И добавьте это в основное пространство other = '[[Категория: Somecat3]] ' , - И добавьте это во все другие пространства имен nocat = frame . аргументы . nocat - Итак, "nocat = true / false" работает } category = category или '' - Убедитесь, что у нас нет нулевого значения для переменной категории. вернуть результат .. конец категории вернуть p
Если указанный выше модуль размещен в статье, он добавит категории «Somecat1» и «Somecat2». Но на всех других типах страниц вместо этого добавляются «Somecat1» и «Somecat3». Как показывает пример, параметр all работает независимо от остальных параметров.
Подстраницы
Модуль обработчика категорий понимает параметр подстраницы . Как это:
p = {} local categoryHandler = require ( 'Модуль: обработчик категории' ). основной функция p . main ( frame ) local result = 'Это модуль, используемый во всех пространствах имен.' local category = categoryHandler { subpage = 'no' - не категоризируйте подстраницы wikipedia = '[[Категория: Somecat]]' , nocat = frame . аргументы . nocat - Итак, "nocat = true / false" работает } category = category или '' - Убедитесь, что у нас нет нулевого значения для переменной категории. вернуть результат .. конец категории вернуть p
Если " subpage='no'
", то этот шаблон не будет категоризировать подстраницы. Для тех редких случаев , вы только хотите , чтобы классифицировать на подстраницах, а затем использовать « subpage='only'
». Если подстраница пуста или не определена, то в этом шаблоне подразделяются как на базовые, так и на подстраницы.
Черный список
В этом модуле есть черный список страниц и типов страниц, для которых не следует автоматически категоризировать шаблоны. Таким образом, модули, использующие этот мета-шаблон, например, не будут классифицировать страницы / архивировать и подстраницы сообщений Wikipedia: Template .
Если вы хотите, чтобы шаблон классифицировался на странице, занесенной в черный список, подайте " nocat = false
" в модуль, когда вы размещаете его на странице, пропуская проверку черного списка. Обратите внимание, что этот модуль классифицирует, только если у него есть данные для пространства имен. Например, если используется базовый синтаксис (см. Базовое использование выше), то даже если вы установите " nocat = false
", шаблон не будет категоризировать страницу обсуждения, поскольку у него нет данных для страниц обсуждения. Но у него есть данные для справочного пространства, поэтому на странице справки, занесенной в черный список, он будет классифицирован.
Черный список находится в таблице конфигурации cfg.blacklist
в верхней части кода модуля.
Параметр "nocat"
Этот модуль понимает параметр nocat :
- Если "
nocat = true
", то этот шаблон не классифицирует. - Если значение nocat ,
nil
то этот шаблон классифицируется как обычно. - Если "
nocat = false
" этот шаблон классифицируется даже на страницах из черного списка. (См. Раздел черный список выше.) - Параметр nocat также принимает псевдонимы для
true
иfalse
как определено модулем: Yesno , например, «yes», «y», «true» и 1 дляtrue
, и «no», «n», «false» и 0 дляfalse
.
Модули и шаблоны, использующие {{category handler}}, должны пересылать nocat , чтобы они тоже понимали nocat . Код " nocat = frame.args.nocat
", показанный в примерах на этой странице, делает это.
Параметр "категории"
Для обратной совместимости этот модуль также понимает параметр категорий . Работает так же, как nocat . Как это:
- Если "
categories = false
", то этот шаблон не классифицирует. - Если категории пусты или не определены, этот шаблон классифицируется как обычно.
- Если "
categories = true
" этот шаблон классифицируется даже на страницах из черного списка. - Параметр категорий также принимает псевдонимы для
true
иfalse
как определено модулем: Yesno , например, «yes», «y», «true» и 1 дляtrue
, и «no», «n», «false» и 0 дляfalse
.
Параметр "категория2"
Для обратной совместимости этот тип шаблона поддерживает старый параметр «category =». Но имя параметра «категория» уже используется в этом модуле для передачи данных категории, когда она находится в пространстве категорий. Поэтому вместо этого в этом шаблоне используется категория 2, аналогичная nocat . Как это:
- Если "
category2 = "
" (пусто, но определено), или "category2 = 'no'
", или если в категорию 2 передаются какие-либо другие данные (кроме описанных в следующих двух пунктах), то этот шаблон не классифицирует. - Если category2 не определен или если "
category2 = '¬'
", то этот шаблон классифицирует как обычно. - Если "
category2 = 'yes'
" этот шаблон классифицируется даже на страницах из черного списка.
Категории и текст
Помимо категорий, вы можете скормить этому модулю что угодно, например текст. Как это:
p = {} local categoryHandler = require ( 'Модуль: обработчик категории' ). основнойфункция p . main ( frame ) local result = 'Это модуль, используемый на страницах обсуждения.' local category = categoryHandler { talk = '[[Category: Somecat]]' , other = ' Этот модуль следует использовать только на страницах обсуждения.
' , nocat = frame . аргументы . nocat - Итак, "nocat = true / false" работает } category = category или '' - Убедитесь, что у нас нет нулевого значения для переменной категории. вернуть результат .. конец категориивернуть p
Когда приведенный выше код модуля используется не на странице обсуждения, он будет выглядеть так:
- Этот модуль используется на страницах обсуждения.
Этот модуль следует использовать только на страницах обсуждения.
Этот текст не будет отображаться на страницах в черном списке, поэтому не используйте этот метод для отображения какой-либо важной информации. При вводе " nocat = 'true'
" в шаблон текст скрывается, как и любые категории.
Параметр "страница"
В целях тестирования и демонстрации этот модуль может принимать параметр с именем page . Как это:
p = {} local categoryHandler = require ( 'Модуль: обработчик категории' ). основной функция p . main ( frame ) local category = categoryHandler { main = 'Категория: Какой-то кот' , talk = 'Категория: Обсуждение кота' , nocat = frame . аргументы . nocat , - Итак, "nocat = true / false" работает page = 'User talk: Example' } return category end вернуть p
В приведенном выше коде мы специально опустили скобки вокруг названий категорий, чтобы увидеть результат на странице. Независимо от того, на какой странице используется приведенный выше код, он вернет следующее:
- Категория: Обсуждение кота
Параметр страницы заставляет этот модуль вести себя точно так же, как если бы на этой странице. Даже черный список работает. Имя страницы не обязательно должно быть существующей страницей.
Если параметр страницы пуст или не определен, имя текущей страницы определяет результат.
Вы можете сделать так, чтобы ваш модуль также понимал параметр страницы . Это означает, что вы можете проверить, как ваш шаблон будет классифицироваться на разных страницах, без фактического редактирования этих страниц. Тогда сделайте так:
p = {} local categoryHandler = require ( 'Модуль: обработчик категории' ). основнойфункция p . main ( frame ) local category = categoryHandler { main = 'Категория: Какой-то кот' , talk = 'Категория: Обсуждение кота' , nocat = frame . аргументы . nocat , - Итак, "nocat = true / false" работает page = frame . аргументы . страница - Для тестирования } конец категории возврата вернуть p
Параметры
Список всех параметров:
- Первый позиционный параметр - для настроек по умолчанию
- subpage = 'нет' / 'только'
- 1, 2, 3 ...
- all = '[[Категория: Somecat]]' / 'Текст'
- main = 1, 2, 3 ... / '[[Категория: Somecat]]' / 'Текст'
- ...
- другое = 1, 2, 3 ... / '[[Категория: Somecat]]' / 'Текст'
- nocat = frame.args.nocat / true / false / 'да' / 'нет' / 'y' / 'n' / 'true' / 'false' / 1/0
- категории = frame.args.categories / false / true / 'no' / 'yes' / 'n' / 'y' / 'false' / 'true' / 0/1
- category2 = frame.args.category или '¬' / 'no' / 'not defined' / '¬' / 'yes'
- page = frame.args.page / 'Пользователь: Пример'
Обратите внимание, что пустые значения для параметров "main" ... "other" имеют особое значение (см. Примеры выше). Параметр "all" не поддерживает нумерованные параметры, так как в этом не должно быть необходимости.
Экспорт в другие вики
Этот модуль можно экспортировать в другие вики, изменив значения конфигурации в cfg
таблице. Все значения переменных настраиваются, поэтому после установки значений конфигурации нет необходимости изменять основной код модуля. Подробная информация о каждом значении конфигурации включена в комментарии к коду модуля. Кроме того, этот модуль требует, чтобы Module: Namespace detect был доступен в локальной вики.
Смотрите также
- {{ Category handler }} - для использования этого модуля с шаблонами, а не с модулями Lua.
- Википедия: Подавление категорий - Практическое руководство.
- Википедия: Подавление категорий WikiProject - WikiProject.
- Википедия: Пространство имен - список всех пространств имен.
-------------------------------------------------- ------------------------------- -- ОБРАБОТКА КАТЕГОРИИ -- -- Этот модуль реализует шаблон {{category handler}} в Lua, -- с некоторыми улучшениями: все пространства имен и все псевдонимы пространств имен -- поддерживаются, а имена пространств имен определяются автоматически для -- местная вики. Для этого модуля требуется [[Модуль: обнаружение пространства имен]] -- и [[Module: Yesno]], чтобы быть доступными в локальной вики. Это может быть --- настроен для разных вики путем изменения значений в -- [[Модуль: обработчик категории / конфигурация]], и страницы могут быть занесены в черный список -- из категоризации с помощью [[Модуль: Обработчик категории / черный список]]. -- --------------------------------------------------- ------------------------------- Загрузить необходимые модулиlocal yesno = require ( 'Модуль: Да нет' )- Лениво загружать вещи, которые нам не всегда нужнылокальный mShared , сопоставленияместный p = {}-------------------------------------------------- ------------------------------- Вспомогательные функции-------------------------------------------------- ------------------------------локальная функция trimWhitespace ( s , removeBlanks )если type ( s ) ~ = 'string', товернуть sконецs = s : match ( '^% s * (.-)% s * $' )если removeBlanks, тоесли s ~ = '', товернуть sещевернуть нольконецещевернуть sконецконец-------------------------------------------------- ------------------------------- Класс CategoryHandler-------------------------------------------------- ------------------------------local CategoryHandler = {}CategoryHandler . __index = CategoryHandlerфункция CategoryHandler . новый ( данные , аргументы )local obj = setmetatable ({ _data = data , _args = args }, CategoryHandler )- Установить титровальный объектделатьlocal pagename = obj : parameter ( 'demopage' )локальный успех , titleObjесли имя страницы, тоуспех , titleObj = pcall ( mw . title . new , pagename )конецесли успех и titleObj, тоOBJ . title = titleObjесли titleObj == mw . название . getCurrentTitle (), затемOBJ . _usesCurrentTitle = trueконецещеOBJ . название = mw . название . getCurrentTitle ()OBJ . _usesCurrentTitle = trueконецконец- Установить значения параметров подавлениядля _ , ключ в ipairs { 'nocat' , 'категории' } делатьлокальное значение = объект : параметр ( ключ )значение = trimWhitespace ( значение , истина )obj [ '_' .. ключ ] = да нет ( значение )конецделатьлокальная подстраница = объект : параметр ( 'подстраница' )локальная категория2 = объект : параметр ( 'категория2' )если type ( subpage ) == 'string', топодстраница = mw . ustring . нижняя (дополнительная страница )конецесли type ( category2 ) == 'string', топодстраница = mw . ustring . ниже ( категория 2 )конецOBJ . _subpage = trimWhitespace ( подстраницы , правда )OBJ . _category2 = trimWhitespace ( category2 ) - не удалять пустые значенияконецвернуть объектконецфункция CategoryHandler : параметр ( ключ )локальный параметрNames = self . _data . параметры [ ключ ]локальный тип = тип ( имена параметров )если pntype == 'string' или pntype == 'number', тогдавернуть себя . _args [ parameterNames ]elseif pntype == 'table' тогдадля _ , имя в ipairs ( parameterNames ) делатьместное значение = self . _args [ имя ]если значение ~ = nil, товозвращаемое значениеконецконецвернуть нольещеошибка ( string.format ('неверный ключ конфигурации "% s"' ,tostring ( ключ )), 2 )конецконецфункция CategoryHandler : isSuppressedByArguments ()возвращаться- Посмотрите, был ли установлен аргумент подавления категории.я . _nocat == trueили себя . _categories == falseили (я . _category2и себя . _category2 ~ = себя . _data . category2Даи себя . _category2 ~ = себя . _data . category2Negative)- Проверить, находимся ли мы на подстранице, и посмотреть, есть ли категории- подавлено в зависимости от статуса нашей подстраницы.или себя . _subpage == self . _data . subpageNo и self . название . isSubpageили себя . _subpage == self . _data . subpageOnly, а не self . название . isSubpageконецфункция CategoryHandler : shouldSkipBlacklistCheck ()- Проверьте, указывают ли аргументы подавления категорий, что мы- следует пропустить проверку черного списка.вернуть себя . _nocat == ложьили себя . _categories == trueили себя . _category2 == self . _data . category2Даконецфункция CategoryHandler : matchBlacklist ()если сам . _usesCurrentTitle тогдавернуть себя . _data . currentTitleMatchesBlacklistещеmShared = mShared или require ( 'Модуль: обработчик категории / общий доступ ' )вернуть mShared . matchesBlacklist (я . название . prefixedText ,мв . loadData ( 'Модуль: обработчик категорий / черный список' ))конецконецфункция CategoryHandler : isSuppressed ()- Найдите, подавляются ли категории аргументами или- соответствие черному списку.вернуть себя : isSuppressedByArguments ()или не self : shouldSkipBlacklistCheck () и self : matchBlacklist ()конецфункция CategoryHandler : getNamespaceParameters ()если сам . _usesCurrentTitle тогдавернуть себя . _data . currentTitleNamespaceParametersещеесли не сопоставления, тоmShared = mShared или require ( 'Модуль: обработчик категории / общий доступ ' )mappings = mShared . getParamMappings ( true ) - получает сопоставления с mw.loadDataконецвернуть mShared . getNamespaceParameters (я . название ,сопоставления)конецконецфункция CategoryHandler : namespaceParametersExist ()- Найдите, были ли указаны какие-либо параметры пространства имен.- Мы используем порядок «все» -> параметры пространства имен -> «другое», так как это то, что- делал старый шаблон.если self : параметр ( 'all' ), товернуть истинуконецесли не сопоставления, тоmShared = mShared или require ( 'Модуль: обработчик категории / общий доступ ' )mappings = mShared . getParamMappings ( true ) - получает сопоставления с mw.loadDataконецдля россиян , Титулы в пар ( отображений ) делатьдля i , param в ipairs ( params ) делатьесли сам . _args [ param ], затемвернуть истинуконецконецконецесли self : параметр ( 'другое' ), товернуть истинуконецвернуть ложьконецфункция CategoryHandler : getCategories ()локальные параметры = self : getNamespaceParameters ()местный nsCategoryдля i , param в ipairs ( params ) делатьместное значение = self . _args [ параметр ]если значение ~ = nil, тоnsCategory = значениеперерывконецконецесли nsCategory ~ = nil или self : namespaceParametersExist (), то- Параметры пространства имен существуют - расширенное использование.если nsCategory == nil, тоnsCategory = self : параметр ( 'другое' )конецlocal ret = { self : параметр ( 'все' )}local numParam = tonumber ( nsCategory )если numParam и numParam > = 1 и math.floor ( numParam ) == numParam, тогда- nsCategory - целое числоret [ # ret + 1 ] = себя . _args [ numParam ]ещеret [ # ret + 1 ] = nsCategoryконецесли # ret < 1, товернуть нольещевернуть table.concat ( ret )конецelseif self . _data . defaultNamespaces [ self . название . пространство имен ] тогда- Параметры пространства имен не существуют, простое использование.вернуть себя . _args [ 1 ]конецвернуть нольконец-------------------------------------------------- ------------------------------- Экспорт-------------------------------------------------- ------------------------------местный p = {}функция p . _exportClasses ()- Используется для тестирования.return {CategoryHandler = CategoryHandler}конецфункция p . _main ( аргументы , данные )data = data или mw . loadData ( 'Модуль: обработчик категории / данные' )локальный обработчик = CategoryHandler . новый ( данные , аргументы )если обработчик : isSuppressed (), товернуть нольконец обработчик возврата : getCategories ()конецфункция p . основной ( кадр , данные )data = data или mw . loadData ( 'Модуль: обработчик категории / данные' )local args = require ( 'Модуль: аргументы' ). getArgs ( frame , {обертки = данные . обертки ,valueFunc = функция ( k , v )v = trimWhitespace ( v )если type ( k ) == 'number', тоесли v ~ = '', товернуть vещевернуть нольконецещевернуть vконецконец})возврат п . _main ( аргументы , данные )конецвернуть p