Этот модуль генерирует ссылки о данном пользователе. Он используется для создания шаблонов, таких как {{ user }}, {{ user5 }} и {{ admin }}, обычно через его шаблон оболочки {{ user-multi }}.
Функции
Основной
main
Функция реализует {{ пользователем мульти }} шаблон. Он генерирует список ссылок о данном пользователе. См. Страницу с шаблоном для документации.
Одинокий
single
Функция генерирует одну ссылки о данном пользователе. См. Документацию в {{ user-multi / link }}.
Таблица ссылок
linktable
Функция генерирует таблицу , содержащую вики - текста возможных коды ссылок , которые могут быть использованы с main
и single
функциями, например , наряду с выходом для каждого кода. Он используется на страницах документации в Template: User-multi / doc и Template: User-multi / link / doc .
Он отображается со следующим кодом:
{{#invoke: UserLinks | linktable}}
Перенос на другие вики
Если вы хотите использовать этот модуль в другой вики, есть несколько модулей, которые вы также должны скопировать, а некоторые можно использовать, но они не являются необходимыми.
Необходимые модули:
- Модуль: UserLinks
- Модуль: UserLinks / общий
- Модуль: UserLinks / config
- Модуль: Аргументы
- Модуль: Да, нет
- Модуль: Панель инструментов
- Модуль: InterwikiTable
- Модуль: TableTools (необязательно в модуле: UserLinks , но требуется для модуля: панель инструментов )
Дополнительные модули:
- Модуль: UserLinks / extra - используется для тестирования новых функций ссылок перед их перемещением в основной модуль.
- Модуль: Обработчик категории - если возникает ошибка и этот модуль присутствует, страницы не классифицируются, если они соответствуют черному списку модуля.
После того, как вы скопировали необходимые модули, вам следует настроить параметры конфигурации в Module: UserLinks / config для вашего языка и настроек вашей вики.
-------------------------------------------------- ------------------------------- Ссылки на пользователя -- Этот модуль создает список ссылок о данном пользователе. Его можно использовать на -- самостоятельно или по шаблону. См. Дополнительную документацию на странице / doc. --------------------------------------------------- ------------------------------- Требуются необходимые модулиlocal yesno = require ( 'Модуль: Да нет' )- Ленивая инициализация модулей, которые могут нам понадобиться, а могут и не понадобитьсяlocal mExtra - [[Модуль: UserLinks / extra]]локальные аргументы - [[Модуль: аргументы]]local mToolbar - [[Модуль: панель инструментов]]local mCategoryHandler - [[Модуль: обработчик категории]]local mTableTools - [[Модуль: TableTools]]local interwikiTable - [[Модуль: InterwikiTable]], загруженный с помощью mw.loadData- Загрузить общие вспомогательные функцииlocal mShared = require ( 'Модуль: UserLinks / shared' )локальный raiseError = mShared . RaiseErrorместный возможноLoadModule = mShared . возможноLoadModuleлокальный makeWikitextError = mShared . makeWikitextErrorместный makeWikilink = mShared . makeWikilinkлокальный makeUrlLink = mShared . makeUrlLinkлокальный makeFullUrlLink = mShared . makeFullUrlLinkлокальное сообщение = mShared . сообщениеместный p = {}-------------------------------------------------- ------------------------------- Таблица ссылок-------------------------------------------------- ------------------------------функция p . getLinks ( фрагменты )знак равно- Получите таблицу ссылок, которую можно проиндексировать с помощью кодов ссылок. Стол - возвращается пустое, но ссылки добавляются к нему по запросу, когда он- проиндексировано. Это стало возможным благодаря метатаблице и различным ссылкам - функции, некоторые из которых определены здесь, а некоторые определены - в [[Module: UserLinks / extra]]. знак равнолокальные ссылки , linkFunctions = {}, {}-------------------------------------------------- --------------------------- Функции ссылок-- Следующие функции делают ссылки из кодов ссылок и пользователя- фрагменты данных. Новые функции ссылок должны быть добавлены под существующими- функции.-------------------------------------------------- --------------------------Функция linkFunctions . ты ( фрагменты )- Страница пользователявернуть makeWikilink (фрагменты . интервики ,2 ,фрагменты . имя пользователя ,фрагменты . имя пользователя)конецФункция linkFunctions . t ( фрагменты )- Страница обсуждения пользователейвернуть makeWikilink (фрагменты . интервики ,3 ,фрагменты . имя пользователя ,сообщение ( 'дисплей-разговор' ))конецФункция linkFunctions . c ( фрагменты )- Взносывернуть makeWikilink (фрагменты . интервики ,- 1 ,'Contribs /' .. фрагменты . имя пользователя ,сообщение ( 'отображение вкладов' ))конецФункция linkFunctions . c64 ( фрагменты )- Взносыlocal first64 = фрагменты . имя пользователя : match ( '^% x +:% x +:% x +:% x +:' )или фрагменты . имя пользователя : совпадение ( '^% x +:% x +:% x +:' )или фрагменты . имя пользователя : совпадение ( '^% x +:% x +:' )или фрагменты . имя пользователя : совпадение ( '^% x +:' )верните first64 и сделайте Wikilink (фрагменты . интервики ,- 1 ,'Contribs /' .. first64 .. ': / 64' ,'(/ 64)') или ''конецФункция linkFunctions . ct ( фрагменты )- Изменить количествовернуть makeUrlLink ({host = 'xtools.wmflabs.org' ,путь = '/ ec /' ,query = {имя пользователя = фрагменты . имя пользователя ,проект = сниппеты . toolLang .. '.' .. фрагменты . projectLong .. '.org'}},сообщение ( 'display-count' ))конецФункция linkFunctions . м ( фрагменты )- Страница перемещаетсявернуть makeWikilink (фрагменты . интервики ,- 1 ,'Log / move /' .. фрагменты . имя пользователя ,сообщение ( 'дисплей движется' ))конецФункция linkFunctions . l ( фрагменты )- Журналывернуть makeWikilink (фрагменты . интервики ,- 1 ,'Журнал /' .. фрагменты . имя пользователя ,сообщение ( 'display-logs' ))конецФункция linkFunctions . ae ( фрагменты )- Автоматическое редактирование (и неавтоматический вклад).вернуть makeUrlLink ({host = 'xtools.wmflabs.org' ,путь = '/ autoedits /' ,query = {имя пользователя = фрагменты . имя пользователя ,проект = сниппеты . toolLang .. '.' .. фрагменты . projectLong .. '.org'}},сообщение ( 'display-autoedits' ))конецФункция linkFunctions . bl ( фрагменты )- Блокировка журналавернуть makeFullUrlLink (фрагменты . интервики ,- 1 ,'Журнал / блок' ,{ page = 'User:' .. фрагменты . имя пользователя },сообщение ( 'display-blocklog' ))конецФункция linkFunctions . bls ( фрагменты )- блокивернуть makeWikilink (фрагменты . интервики ,- 1 ,'Журнал / блок /' .. фрагменты . имя пользователя ,сообщение ( 'дисплей-блоки' ))конецФункция linkFunctions . bu ( фрагменты )-- Блокировать пользователявернуть makeWikilink (фрагменты . интервики ,- 1 ,'Block /' .. фрагменты . имя пользователя ,сообщение ( 'display-blockuser' ))конецФункция linkFunctions . ca ( фрагменты )- Центральная авторизациявернуть makeWikilink (фрагменты . интервики ,- 1 ,'CentralAuth /' .. фрагменты . имя пользователя ,сообщение ( 'display-centralauth' ))конецФункция linkFunctions . dc ( фрагменты )- Удаленные вкладывернуть makeWikilink (фрагменты . интервики ,- 1 ,'DeletedContributions /' .. фрагменты . имя пользователя ,сообщение ( 'отображать удаленные материалы' ))конецФункция linkFunctions . е ( фрагменты )-- Электронное письмовернуть makeWikilink (фрагменты . интервики ,- 1 ,'EmailUser /' .. фрагменты . имя пользователя ,сообщение ( 'дисплей-электронная почта' ))конецФункция linkFunctions . es ( фрагменты )- Редактировать сводкивернуть makeUrlLink ({host = 'xtools.wmflabs.org' ,путь = '/ editsummary /' ,query = {имя пользователя = фрагменты . имя пользователя ,проект = сниппеты . toolLang .. '.' .. фрагменты . projectLong .. '.org'}},сообщение ( 'display-editsummaries' ))конецФункция linkFunctions . дель ( фрагменты )- Удалениявернуть makeWikilink (фрагменты . интервики ,- 1 ,'Log / delete /' .. фрагменты . имя пользователя ,сообщение ( 'отображение-удаления' ))конецФункция linkFunctions . lu ( фрагменты )- Список пользователейвернуть makeFullUrlLink (фрагменты . интервики ,- 1 ,'ListUsers' ,{ limit = 1 , username = snippets . имя пользователя },сообщение ( 'display-listuser' ))конецФункция linkFunctions . сул ( фрагменты )- SULвернуть makeWikilink (ноль ,ноль ,'sulutil:' .. фрагменты . имя пользователя ,сообщение ( 'display-sul' ))конецФункция linkFunctions . tl ( фрагменты )- Целевые журналывернуть makeFullUrlLink (фрагменты . интервики ,- 1 ,"Журнал" ,{ page = mw . сайт . пространства имен [ 2 ]. name .. ':' .. фрагменты . имя пользователя },сообщение ( 'display-targetlogs' ))конецФункция linkFunctions . efl ( фрагменты )- Редактировать журнал фильтроввернуть makeFullUrlLink (фрагменты . интервики ,- 1 ,"AbuseLog" ,{ wpSearchUser = сниппеты . имя пользователя },сообщение ( 'display-abuselog' ))конецФункция linkFunctions . пр ( фрагменты )- Защитывернуть makeWikilink (фрагменты . интервики ,- 1 ,'Журнал / защита /' .. фрагменты . имя пользователя ,сообщение ( 'защита дисплея' ))конецФункция linkFunctions . rl ( фрагменты )- Права пользователявернуть makeWikilink (фрагменты . интервики ,- 1 ,'Журнал / права /' .. фрагменты . имя пользователя ,сообщение ( 'права на отображение' ))конецФункция linkFunctions . ren ( фрагменты )- переименовываетвернуть makeWikilink (фрагменты . интервики ,- 1 ,'Log / renameuser /' .. фрагменты . имя пользователя ,сообщение ( 'display-renames' ))конецФункция linkFunctions . rfa ( фрагменты )- Запросы на админкувернуть makeWikilink (ноль ,- 1 ,'PrefixIndex /' .. message ( 'page-rfa' ) .. '/' .. фрагменты . имя пользователя ,сообщение ( 'display-rfa' ))конецФункция linkFunctions . api ( фрагменты )- данные пользователя APIвернуть makeUrlLink ({host = snippets . fullDomain ,путь = '/w/api.php' ,query = {действие = 'запрос' ,list = 'пользователи' ,usprop = 'группы | editcount' ,ususers = сниппеты . имя пользователя}},сообщение ( 'display-api' ))конецФункция linkFunctions . вверх ( фрагменты )- Загрузкивернуть makeWikilink (фрагменты . интервики ,- 1 ,'ListFiles /' .. фрагменты . имя пользователя ,сообщение ( 'display-uploads' ))конец-------------------------------------------------- --------------------------- Конец ссылки функции-------------------------------------------------- --------------------------- Определите метатаблицу, которая запоминает функции ссылки и извлекает ссылку- функции из [[Module: UserLinks / extra]] при необходимости.- Лениво инициализировать таблицу extraLinkFunctions. Мы хотим только загрузить- [[Module: UserLinks / extra]] по мере необходимости, чтобы у него было низкое включение-- считать.местные extraLinkFunctions- Определите функции для общего кода в метатаблице.локальная функция validateCode ( код )- Проверяет, является ли код действительным кодом ссылки, т. Е. Проверяет, что это- строка и что это не пустая строка. Возвращает код, если- проверка проходит, в противном случае - ноль.если тип ( код ) == 'строка' и код ~ = '', то код возвратаещевернуть нольконецконецлокальная функция getExtraLinkFunctions ()- Загружает таблицу дополнительных функций ссылок из / extra модуля.- Если возникла проблема с загрузкой, вернуть false. Мы используем- различие между false и nil, чтобы указать, есть ли уже- попробовал загрузить.если extraLinkFunctions ~ = nil, товернуть extraLinkFunctionsконецесли mExtra == nil, то- Если загрузка модуля не удалась, возможноLoadModule вернет false.- Здесь мы используем различие между false и nil для записи- пытались ли мы загрузить модуль / extra.mExtra = возможноLoadModule ( 'Модуль: UserLinks / extra' )конецесли type ( mExtra ) == 'table'и введите ( mExtra . linkFunctions ) == 'table'тогдаextraLinkFunctions = mExtra . ссылкаФункцииещеextraLinkFunctions = falseконецвернуть extraLinkFunctionsконецлокальная функция memoizeExtraLink ( код , FUNC )локальный успех , ссылка = pcall ( func , snippets )если успех и введите ( ссылка ) == 'строка', тогдассылки [ код ] = ссылкаобратная ссылкаконецвернуть нольконец- Определите метатаблицу.setmetatable ( ссылки , {__index = функция ( t , ключ )местный код = validateCode ( ключ )если не код, тоRaiseError (message ( 'error-malformedlinkcode' ),сообщение ( 'error-malformedlinkcode-section' ))конецlocal linkFunction = linkFunctions [ код ]местная ссылкаесли linkFunction, тоlink = linkFunction ( фрагменты )ссылки [ код ] = ссылкаещеextraLinkFunctions = getExtraLinkFunctions ()если extraLinkFunctions, тоlocal extraLinkFunction = extraLinkFunctions [ код ]если type ( extraLinkFunction ) == 'function', тоссылка = memoizeExtraLink ( код , extraLinkFunction )конецконецконецесли ссылка тообратная ссылкаещеRaiseError (сообщение ( 'error-invalidlinkcode' , код ),сообщение ( 'ошибка-недействительный код ссылки' ))конецконец ,__pairs = функция ()extraLinkFunctions = getExtraLinkFunctions ()если extraLinkFunctions, тодля кода , FUNC в паре ( extraLinkFunctions ) делатьесли validateCode ( code ) и type ( func ) == 'function', тоmemoizeExtraLink ( код , функция )конецконецконец- Разрешить встроенным функциям перезаписывать дополнительные функции.для кода , FUNC в паре ( linkFunctions ) делатьлокальная ссылка = func ( фрагменты )ссылки [ код ] = ссылкаконец функция возврата ( t , ключ )вернуться далее ( ссылки , ключ )конецконец})обратные ссылкиконец-------------------------------------------------- ------------------------------- Фрагменты пользовательских данных-------------------------------------------------- ------------------------------функция p . getSnippets ( аргументы )знак равно - Эта функция получает фрагменты пользовательских данных из аргументов и из- [[Модуль: InterwikiTable]]. Данные загружаются по мере необходимости и запоминаются. - в таблице сниппетов по производительности. - - По умолчанию для фрагментов используется пустая строка '', поэтому их можно использовать в - операции конкатенации без необходимости беспокоиться кодировщиками о повышении- ошибки. Из-за этого локальные функции snippetExists и- getSnippet были написаны, чтобы помочь людям писать новые сниппеты. Эти- функции обрабатывают пустую строку как ложную. Не нужно возвращать - пустая строка из функции сниппета, так как значения nil и false - автоматически конвертируется в пустую строку метатаблицей. - - Если вы добавляете новый фрагмент, пожалуйста, задокументируйте его на - [[Модуль: UserLinks # Добавление новых ссылок]]. знак равноместные фрагменты , snippetFunctions = {}, {}setmetatable ( сниппеты , {__index = функция ( t , ключ )local snippetFunction = snippetFunctions [ ключ ]если snippetFunction, тоsnippets [ key ] = snippetFunction () или ""возврат фрагментов [ ключ ]ещеRaiseError (сообщение ( 'error-nosnippet' , ключ ),сообщение ( 'error-nosnippet-section' ))конецконец})- Определите вспомогательные функции для написания функций сниппета.местные функции snippetExists ( ключ )- Мы настроили метатаблицу, чтобы фрагменты по умолчанию были "", поэтому мы- не нужно проверять ложь или ноль.возвратные фрагменты [ ключ ] ~ = ''конецлокальная функция getSnippet ( ключ )local ret = snippets [ ключ ]если ret == '' товернуть нольещевозвращение в отставкеконецконец- Запуск функций сниппета.Функция snippetFunctions . имя пользователя ()-- Имя пользователя.локальное имя пользователя = args . пользователь или аргументы . Пользовательвернуть имя пользователя или raiseError (сообщение ( 'error-nousername' ),сообщение ( 'error-nousername-section' ))конецФункция snippetFunctions . usernameHtml ()- Имя пользователя в кодировке html. Пробелы кодируются как плюсы.вернуть мв . uri . кодировать ( сниппеты . имя пользователя )конецФункция snippetFunctions . проект ()- Название проекта.- Также работает с snippetFunctions.interwikiTableKey и добавляет- значение проекта для snippets.lang, если это допустимый языковой код.локальный проект = args . Project или args . проектесли не проект, товернуть нольконецlocal projectValidated , interwikiTableKey = p . validateProjectCode ( проект )если не projectValidated, тоесли мв . язык . isKnownLanguageTag ( проект ), затемесли не snippetExists ( 'lang' ), тофрагменты . lang = проектконецещеRaiseError (сообщение ( 'ошибка-недействительный проект ' , проект ),сообщение ( 'ошибка-недействительный-раздел-проект' ))конецконецфрагменты . interwikiTableKey = interwikiTableKeyвернуть проектконецФункция snippetFunctions . interwikiTableKey ()- Ключ к проекту в модуле: InterwikiTable.- Полагается на snippetFunctions.project для выполнения реальной работы.local temp = snippets . проект - обязательно; помещает ключ в таблицу сниппетоввернуть rawget ( фрагменты , 'interwikiTableKey' )конецФункция snippetFunctions . toolProject ()- Короткий код проекта для использования с сервером инструментов или лабораториями. Это всегда- присутствует, даже если аргумент «проект» отсутствует. Значение по умолчанию- это сообщение "snippet-project-default".локальный проект = getSnippet ( 'проект' )если не проект, тоответное сообщение ( 'сниппет-проект-по умолчанию' )ещевернуть проектконецконецФункция snippetFunctions . projectLong ()- Длинная форма названия проекта, например «википедия» или «викиучебники».локальный ключ = getSnippet ( 'interwikiTableKey' )если не ключ, тоответное сообщение ( 'snippet-projectlong-default' )конецinterwikiTable = interwikiTable или mw . loadData ( 'Модуль: InterwikiTable' )локальные префиксы = interwikiTable [ ключ ]. iw_prefix- Использование префиксов [2] - это немного хитрость, но вы должны найти длинное имя-- большую часть времени.вернуть префиксы [ 2 ] или префиксы [ 1 ] конецФункция snippetFunctions . lang ()- Код языка.локальный lang = args . lang или args . Langесли не языки , товернуть нольконецесли мв . язык . isKnownLanguageTag ( lang ), затемвозвращение языкиещеRaiseError (сообщение ( 'ошибка-invalidlanguage' , языки ),сообщение ( 'ошибка-недопустимый-язык-раздел' ))конецконецФункция snippetFunctions . toolLang ()- Код языка для использования с инструментами Toolserver или лабораториями. Это всегда- присутствует, даже если аргумент "язык" отсутствует. Значение по умолчанию -- сообщение "snippet-lang-default". вернуть getSnippet ( 'lang' ) или сообщение ( 'snippet-lang-default' )конецФункция snippetFunctions . интервики ()- префикс интервики, состоящий из значений проекта и языка,- через двоеточие, например ": wikt: es:".локальный проект = getSnippet ( 'проект' )местные языки = getSnippet ( 'языки' )если не проецировать и не Ланг тогдавернуть нольконецместное ret = {}ret [ # ret + 1 ] = проектret [ # ret + 1 ] = langвернуть table.concat ( ret , ':' )конецФункция snippetFunctions . fullDomain ()- Полное доменное имя сайта, например www.mediawiki.org,- en.wikpedia.org или ja.wikibooks.org.локальный fullDomainместные языки = getSnippet ( 'toolLang' )локальный ключ = getSnippet ( 'interwikiTableKey' )если ключ, тоinterwikiTable = interwikiTable или mw . loadData ( 'Модуль: InterwikiTable' )локальный домен = interwikiTable [ ключ ]. доменlocal takeLangPrefix = interwikiTable [ ключ ]. take_lang_prefixесли принимает LangPrefix, тоfullDomain = lang .. '.' .. доменещеfullDomain = доменконецещеfullDomain = lang .. '.wikipedia.org'конецвернуть fullDomainконец- Конец функций сниппета. Если вы добавите новую функцию сниппета, пожалуйста- задокументируйте его в [[Module: UserLinks # Добавление новых ссылок]].возвращать фрагментыконец функция p . validateProjectCode ( s )- Проверяет код проекта, проверяя, присутствует ли он в- [[Модуль: InterwikiTable]]. Если он присутствует, возвращает код и- Ключ InterwikiTable для соответствующего сайта. Если нет,- возвращает ноль для обоих.interwikiTable = interwikiTable или mw . loadData ( 'Модуль: InterwikiTable' )для ключа , т в парах ( interwikiTable ) делатьдля I , префикс в ipairs ( т . iw_prefix ) делатьесли префикс s ==, то return s , ключконецконецконецвернуть ноль , нольконец-------------------------------------------------- -------------------------------- Основные функции-------------------------------------------------- ------------------------------локальная функция makeInvokeFunction ( funcName )- Создает функцию, к которой можно получить доступ из #invoke. Это только требуется- для функций, которым нужен доступ к аргументам. функция возврата ( фрейм )mArguments = require ( 'Модуль: аргументы' )локальные аргументы = аргументы . getArgs ( кадр )return p [ funcName ] ( аргументы )конецконецстр . main = makeInvokeFunction ( '_main' )функция p . _main ( аргументы )- Основная функция. Это тот, который вызывается из [[Template: User-multi]],- через p.main.местные параметры = стр . getOptions ( аргументы )local snippets = p . getSnippets ( аргументы )местные коды = стр . getCodes ( аргументы )локальные ссылки = стр . getLinks ( фрагменты )- Перегрузите встроенную функцию ошибок Lua для генерации ошибок вики-текста.- предназначен для просмотра конечными пользователями. Это затрудняет отладку, когда- возникают настоящие ошибки, но это единственный реальный способ показать вики-текст- ошибки и все еще есть нормальный код при использовании метатаблиц и т. д.локальный успех , результат = pcall ( стр . экспорт , коды , ссылки , параметры )если успех, товернуть результатещевернуть makeWikitextError ( результат , параметры . isDemo )конецконецфункция p . getOptions ( аргументы )- Получает параметры из таблицы args, поэтому нам не нужно передавать- все время вокруг всей таблицы аргументов.местные параметры = {}варианты . isDemo = yesno ( аргумент . демонстрация ) или falseварианты . toolbarStyle = yesno ( args . small ) и 'font-size: 90%;' или нольварианты . SUP = YESNO ( арг . SUP , правда )варианты . разделитель = аргументы . разделительварианты . span = args . охватывать варианты возвратаконецфункция p . getCodes ( аргументы )- Получает коды ссылок из аргументов. Коды не проверены-- с этой точки зрения.mTableTools = возможноLoadModule ( 'Модуль: TableTools' )местные кодыесли mTableTools, токоды = mTableTools . compressSparseArray ( аргументы )ещекоды = {}для I , код в ipairs ( арг ) делатькоды [ i ] = кодконецконец коды возвратаконецфункция p . экспорт ( коды , ссылки , опции )- Сделайте ссылку на пользователя.local userLink = ссылки . ты- Если нам не были переданы коды ссылок, просто верните ссылку пользователя.если # кодов < 1, товернуть userLinkконец- Сделайте панель инструментов.mToolbar = require ( 'Модуль: панель инструментов' )local toolbarArgs = {}для i , код в ipairs ( коды ) делатьлокальная ссылка = ссылки [ код ]toolbarArgs [ # toolbarArgs + 1 ] = ссылкаконецtoolbarArgs . style = options . toolbarStyletoolbarArgs . разделитель = параметры . разделитель или точкаtoolbarArgs . span = параметры . охватыватьлокальная панель инструментов = mToolbar . главная ( toolbarArgs )- Примените опцию sup.если варианты . давай тогдаtoolbar = '' .. toolbar .. ''конец- Если мы включаем, добавляем неразрывный пробел, но если мы выполняем подстановку- просто используйте обычное пространстволокальное пространство = mw . isSubsting () и '' или '& nbsp;'вернуть userLink .. пробел .. панель инструментовконец-------------------------------------------------- ------------------------------- Функция единой ссылки-------------------------------------------------- ------------------------------стр . single = makeInvokeFunction ( '_single' )функция p . _single ( аргументы )- Выбирает одну ссылку из таблицы ссылок.местные параметры = стр . getOptions ( аргументы )local snippets = p . getSnippets ( аргументы )локальные ссылки = стр . getLinks ( фрагменты )местный код = args [ 1 ]локальный успех , ссылка = pcall ( стр . exportSingle , ссылки , код )если успех, тообратная ссылкаещевернуть makeWikitextError ( ссылка , параметры . isDemo )конецконецфункция p . exportSingle ( ссылки , код )- Если возникнут какие-то ошибки, они наверняка возникнут здесь Эта функция- существует исключительно для того, чтобы все ошибки, которые будут возникать в p._single, могут- обрабатываться с помощью одного pcall.если не код, тоRaiseError (сообщение ( 'error-nolinkcode' ),сообщение ( 'error-nolinkcode-section' ))конецвозвратные ссылки [ код ]конец-------------------------------------------------- ------------------------------- Таблица ссылок-------------------------------------------------- ------------------------------функция p . linktable ()- Возвращает вики-текстовую таблицу кодов ссылок с примером ссылки для каждой-- один. Эта функция не принимает никаких аргументов, поэтому к ней можно получить доступ.- прямо со страниц вики без использования makeInvokeFunction.local args = { user = 'Example' }local snippets = p . getSnippets ( аргументы )локальные ссылки = стр . getLinks ( фрагменты )- Соберите коды и ссылки по порядкуlocal firstCodes = { 'u' , 't' , 'c' }местные firstLinks , firstCodesKeys = {}, {}для i , код в ipairs ( firstCodes ) делаетfirstCodesKeys [ код ] = истинаfirstLinks [ # firstLinks + 1 ] = { код , ссылки [ код ]}конецlocal secondLinks = {}для кода , ссылка в пар ( ссылки ) делатьесли не firstCodesKeys [ код ], тоsecondLinks [ # secondLinks + 1 ] = { код , ссылка }конецконецtable.sort ( secondLinks , функция ( t1 , t2 )вернуть t1 [ 1 ] < t2 [ 1 ]конец )местные ссылки = {}для i , t в ipairs ( firstLinks ) делаемссылки [ # ссылки + 1 ] = tконецдля i , t в ipairs ( secondLinks ) делаемссылки [ # ссылки + 1 ] = tконец- Вывести кодовую таблицу в виде таблицыместное ret = {}ret [ # ret + 1 ] = '{| class = "wikitable plainlinks sortable" 'ret [ # ret + 1 ] = '| -'ret [ # ret + 1 ] = '! ' .. сообщение ( ' таблица-код-заголовок ' )ret [ # ret + 1 ] = '! ' .. сообщение ( ' linktable-previewheader ' )для i , t в ipairs ( ссылки ) делаемместный код = t [ 1 ]локальная ссылка = t [ 2 ]ret [ # ret + 1 ] = '| -'ret [ # ret + 1 ] = "| '' '" .. код .. "' ''" ret [ # ret + 1 ] = '| ' .. ссылкаконецret [ # ret + 1 ] = '|}'вернуть table.concat ( ret , ' \ n ' )конец вернуть p