Перейти к навигации Перейти к поиску
Документация по модулю [ просмотреть ] [ изменить ] [ историю ] [ очистить ]
Этот модуль Lua используется примерно на 3 690 000 страницах, или примерно на 7% всех страниц . Чтобы избежать серьезных сбоев и нагрузки на сервер, любые изменения следует тестировать на подстраницах модуля / sandbox или / testcases . Протестированные изменения могут быть добавлены на эту страницу одним редактированием. Обсудите изменения на странице обсуждения, прежде чем внедрять их. Счетчик включений обновляется автоматически ( см. Документацию ). |
Этот модуль подлежит защите страницы . Это хорошо заметный модуль, который используется на очень большом количестве страниц или очень часто заменяется . Поскольку вандализм или ошибки могут повлиять на многие страницы, и даже простое редактирование может вызвать значительную нагрузку на серверы, они защищены от редактирования. |
Этот модуль зависит от следующих других модулей: |
Модуль: Infobox - это модуль , реализующий шаблон {{ Infobox }}. Пожалуйста, ознакомьтесь с инструкциями по использованию на странице шаблона.
Категории отслеживания
-- Этот модуль реализует {{Infobox}}-местный p = {}local navbar = require ( 'Модуль: Navbar' ). _navbarместные аргументы = {}local origArgs = {}локальный кореньлокальная функция notempty ( s ) return s и s : match ( '% S' ) endлокальная функция fixChildBoxes ( sval , tt )если notempty ( sval ), тоlocal marker = '<span class = special_infobox_marker>'местный s = svals = mw . ustring . gsub ( s , '(<% s * [Tt] [Rr])' , маркер .. '% 1' )s = mw . ustring . gsub ( s , '(</ [Tt] [Rr]% s *>)' , '% 1' .. маркер )если s : match ( маркер ), тоs = mw . ustring . gsub ( s , marker .. '% s *' .. marker , '' )s = mw . ustring . gsub ( s , '([ \ r \ n ] | - [^ \ r \ n ] * [ \ r \ n ])% s *' .. маркер , '% 1' )s = mw . ustring . gsub ( s , маркер .. '% s * ([ \ r \ n ] | -)' , '% 1' )s = mw . ustring . gsub ( s , '(</ [Cc] [Aa] [Pp] [Tt] [Ii] [Oo] [Nn]% s *>% s *)' .. marker , '% 1' )s = mw . ustring . gsub ( s , '(<% s * [Tt] [Aa] [Bb] [Ll] [Ee] [^ <>] *>% s *)' .. marker , '% 1' )s = mw . ustring . gsub ( s , '^ (% {| [^ \ r \ n ] * [ \ r \ n ]% s *)' .. маркер , '% 1' )s = mw . ustring . gsub ( s , '([ \ r \ n ]% {| [^ \ r \ n ] * [ \ r \ n ]% s *)' .. маркер , '% 1' )s = mw . ustring . gsub ( s , marker .. '(% s * </ [Tt] [Aa] [Bb] [Ll] [Ee]% s *>)' , '% 1' )s = mw . ustring . gsub ( s , маркер .. '(% s * \ n |%})' , '% 1' )конецесли s : match ( маркер ), толокальные подъячейки = mw . текст . split ( s , маркер )s = ''для k = 1 , # подъячейки делаютесли k == 1, тоs = s .. subcells [ k ] .. '</' .. tt .. '> </tr>'elseif k == # подъячейки, тоlocal rowstyle = 'style = "display: none"'если notempty ( subcells [ k ]), то rowstyle = '' ends = s .. '<tr' .. rowstyle .. '> <' .. tt .. 'colspan = 2> \ n ' .. подъячейки [ k ]elseif notempty ( subcells [ k ]), тоесли ( k % 2 ) == 0, тоs = s .. подъячейки [ k ]ещеs = s .. '<tr> <' .. tt .. 'colspan = 2> \ n ' .. subcells [ k ] .. '</' .. tt .. '> </tr>'конецконецконецконец- следующие две строки добавляют новую строку в конец списков для парсера PHP- https://en.wikipedia.org/w/index.php?title=Template_talk:Infobox_musical_artist&oldid=849054481- удалить, когда [[: phab: T191516]] исправлен или OBEs = mw . ustring . gsub ( s , '([ \ r \ n ] [% * # ;:] [^ \ r \ n ] *) $' , '% 1 \ n ' )s = mw . ustring . gsub ( s , '^ ([% * # ;:] [^ \ r \ n ] *) $' , '% 1 \ n ' )s = mw . ustring . gsub ( s , '^ ([% * # ;:])' , ' \ n % 1' )s = mw . ustring . gsub ( s , '^ (% {% |)' , ' \ n % 1' )вернуть sещевернуть свалконецконецлокальная функция union ( t1 , t2 )- Возвращает объединение значений двух таблиц в виде последовательности.местные валс = {}для к , V в паре ( t1 ) делаетvals [ v ] = правдаконецдля к , V в паре ( t2 ) делаетvals [ v ] = правдаконецместное ret = {}для k , v в парах ( валсах ) делаемtable.insert ( ret , k )конецвозвращение в отставкеконецлокальная функция getArgNums ( префикс )- Возвращает таблицу, содержащую номера существующих аргументов- для указанного префикса. Например, если префикс был «данные» и- существуют 'data1', 'data2' и 'data5', он вернет {1, 2, 5}.местный НУМС = {}для k , v в парах ( args ) делаемlocal num = tostring ( k ): match ( '^' .. prefix .. '([1-9]% d *) $' )если Num затем table.insert ( НУМС , ToNumber ( Num )) конецконецtable.sort ( НУМС )возвращение НУМСконецлокальная функция addRow ( rowArgs )- Добавляет строку в информационное окно с ячейкой заголовка.- или комбинация метка / ячейка данных.если rowArgs . заголовок и rowArgs . header ~ = '_BLANK_', затемкорень: tag ( 'tr' ): addClass ( rowArgs . rowclass ): cssText ( rowArgs . стиль строки ): Атр ( 'ID' , rowArgs . ROWID ): tag ( 'th' ): attr ( 'colspan' , 2 ): attr ( 'идентификатор' , rowArgs . headerid ): addClass ( rowArgs . класс ): addClass ( args . headerclass ): css ( 'выравнивание текста' , 'центр' ): CssText ( арг . Headerstyle ): cssText ( rowArgs . rowcellstyle ): wikitext ( fixChildBoxes ( rowArgs . header , 'th' ))если rowArgs . данные тогдаroot : wikitext ( '[[Категория: Страницы, использующие шаблоны инфобоксов с игнорируемыми ячейками данных]]' )конецelseif rowArgs . данные тогдаесли не rowArgs . data : gsub ( '% [% [% s * [Cc] [Aa] [Tt] [Ee] [Gg] [Oo] [Rr] [Yy]% s *: [^]] *]]' , ' ' ): совпадение ( ' ^% S ' ), затемrowArgs . rowstyle = 'дисплей: нет'конецлокальная строка = корень : тег ( 'тр' )строка : addClass ( rowArgs . rowclass )строка : cssText ( rowArgs . rowstyle )строка : Attr ( 'ID' , rowArgs . ROWID )если rowArgs . тогда лейбл ряд: tag ( 'th' ): attr ( 'область' , 'строка' ): attr ( 'идентификатор' , rowArgs . labelid ): cssText ( аргумент . стиль метки ): cssText ( rowArgs . rowcellstyle ): Вики - текст ( rowArgs . Этикетка ): сделано ()конецлокальные данныеCell = row : tag ( 'td' )если не rowArgs . тогда лейбл dataCell: attr ( 'colspan' , 2 ): css ( 'выравнивание текста' , 'центр' )конецdataCell: attr ( 'идентификатор' , rowArgs . dataid ): addClass ( rowArgs . класс ): CssText ( rowArgs . Datastyle ): cssText ( rowArgs . rowcellstyle ): wikitext ( fixChildBoxes ( rowArgs . data , 'td' ))конецконецлокальная функция renderTitle ()если не аргументы . название, затем верните конецкорень: tag ( 'подпись' ): addClass ( аргумент . titleclass ): cssText ( аргумент . стиль заголовка ): wikitext ( аргумент . название )конецлокальная функция renderAboveRow ()если не аргументы . выше, затем верните конецкорень: tag ( 'tr' ): tag ( 'th' ): attr ( 'colspan' , 2 ): AddClass ( арг . Aboveclass ): css ( 'выравнивание текста' , 'центр' ): css ( 'размер шрифта' ; '125%' ): css ( 'начертание шрифта' , 'полужирный' ): CssText ( арг . Abovestyle ): Вики - текст ( fixChildBoxes ( арг . Выше , 'й' ))конецлокальная функция renderBelowRow ()если не аргументы . ниже, затем вернуться в конецкорень: tag ( 'tr' ): tag ( 'td' ): attr ( 'colspan' , '2' ): AddClass ( арг . Belowclass ): css ( 'выравнивание текста' , 'центр' ): CssText ( арг . Belowstyle ): Вики - текст ( fixChildBoxes ( арг . Ниже , 'тд' ))конецлокальная функция renderSubheaders ()если args . тогда подзаголовок аргументы . subheader1 = аргументы . подзаголовокконецесли args . subheaderrowclass тогдааргументы . subheaderrowclass1 = аргументы . подзаголовокконецлокальные подзаголовки = getArgNums ( 'подзаголовок' )для k , число в ipairs ( subheadernums ) сделатьaddRow ({data = args [ 'subheader' .. tostring ( num )],datastyle = args . subheaderstyle ,rowcellstyle = args [ 'subheaderstyle' .. tostring ( num )],class = args . subheaderclass ,rowclass = args [ 'subheaderrowclass' .. tostring ( число )]})конецконецлокальная функция renderImages ()если args . изображение тогдааргументы . изображение1 = аргументы . изображениеконецесли args . подпись тогдааргументы . caption1 = аргументы . подписьконецлокальные изображения = getArgNums ( 'изображение' )для k , число в ipairs ( images ) сделатьlocal caption = args [ 'подпись' .. tostring ( число )]локальные данные = mw . html . create (): wikitext ( args [ 'изображение' .. tostring ( число )])если подпись, тоданные: tag ( 'div' ): cssText ( args . captionstyle ): wikitext ( подпись )конецaddRow ({data = tostring ( данные ),datastyle = args . imagestyle ,class = args . imageclass ,rowclass = args [ 'imagerowclass' .. tostring ( число )]})конецконецлокальная функция preprocessRows ()- Получает объединение номеров аргументов заголовка и данных,- и рендерит их все по порядку с помощью addRow.local rownums = union ( getArgNums ( 'заголовок' ), getArgNums ( 'данные' ))table.sort ( rownums )местный последний заголовокдля k , число в ipairs ( rownums ) сделатьесли args [ 'header' .. tostring ( num )], тоесли последний заголовок, тоargs [ 'header' .. tostring ( lastheader )] = нольконецlastheader = числоelseif args [ 'data' .. tostring ( num )] и args [ 'data' .. tostring ( num )]: gsub ( '% [% [% s * [Cc] [Aa] [Tt] [Ee] [ Gg] [Oo] [Rr] [Yy]% s *: [^]] *]] ' , ' ' ): match ( ' ^% S ' ) затемлокальные данные = аргументы [ 'данные' .. строка ( число )]if data : gsub ( '% [% [% s * [Cc] [Aa] [Tt] [Ee] [Gg] [Oo] [Rr] [Yy]% s *: [^]] *]]' , '' ): совпадение ( '% S' ), затемlastheader = nilконецконецконецесли последний заголовок, тоargs [ 'header' .. tostring ( lastheader )] = нольконецконецлокальная функция renderRows ()- Получает объединение номеров аргументов заголовка и данных,- и рендерит их все по порядку с помощью addRow.local rownums = union ( getArgNums ( 'заголовок' ), getArgNums ( 'данные' ))table.sort ( rownums )для k , число в ipairs ( rownums ) сделатьaddRow ({header = args [ 'header' .. tostring ( num )],label = args [ 'label' .. tostring ( num )],data = args [ 'данные' .. tostring ( num )],datastyle = args . datastyle ,class = args [ 'class' .. tostring ( num )],rowclass = args [ 'rowclass' .. tostring ( число )],rowstyle = args [ 'rowstyle' .. tostring ( num )],rowcellstyle = args [ 'rowcellstyle' .. tostring ( num )],dataid = args [ 'dataid' .. tostring ( num )],labelid = args [ 'labelid' .. tostring ( num )],headerid = args [ 'headerid' .. tostring ( число )],rowid = args [ 'rowid' .. tostring ( число )]})конецконецлокальная функция renderNavBar ()если не аргументы . имя, затем верни конецкорень: tag ( 'tr' ): tag ( 'td' ): attr ( 'colspan' , '2' ): css ( 'выравнивание текста' , 'вправо' ): wikitext ( navbar {аргументы . имя ,mini = 1 ,})конецлокальная функция renderItalicTitle ()local italicTitle = args [ 'курсивный заголовок' ] и mw . ustring . нижний ( args [ 'курсивное название' ])если italicTitle == '' или italicTitle == 'force' или italicTitle == 'yes', тогдакорень : wikitext ( mw . getCurrentFrame (): expandTemplate ({ title = 'italic title' }))конецконецлокальная функция renderTrackingCategories ()если args . decat ~ = 'да' тогдаесли args . ребенок == 'да' тогдаесли args . название тогдаroot : wikitext ( '[[Категория: страницы, на которых используются встроенные шаблоны инфобоксов с параметром заголовка]]' )конецelseif # ( getArgNums ( 'data' )) == 0 и mw . название . getCurrentTitle (). namespace == 0, тогдаroot : wikitext ( '[[Категория: статьи, в которых используются шаблоны инфобоксов без строк данных]]' )конецконецконецлокальная функция _infobox ()- Укажите общий вид информационного окна со специальными настройками- если информационное окно используется как «дочерний» внутри другого информационного окна.если args . ребенок ~ = 'да' тогдакорень = mw . html . создать ( 'таблица' )корень: addClass (( args . subbox ~ = 'yes' ) и 'infobox' или nil ): addClass ( аргумент . bodyclass )если args . subbox == 'да' тогдакорень: css ( 'отступ' , '0' ): css ( 'граница' , 'нет' ): css ( 'маржа' , '-3px' ): css ( 'ширина' , 'авто' ): css ( 'минимальная ширина' ; '100%' ): css ( 'размер шрифта' ; '100%' ): css ( 'ясно' , 'нет' ): css ( 'float' , 'нет' ): css ( 'цвет фона' , 'прозрачный' )ещекорень: css ( 'ширина' , '22em' )конецкорень: cssText ( аргумент . стиль тела )renderTitle ()renderAboveRow ()ещекорень = mw . html . создать ()корень: wikitext ( аргумент . название )конецrenderSubheaders ()renderImages ()если args . автозаголовки тогдаpreprocessRows ()конецrenderRows ()renderBelowRow ()renderNavBar ()renderItalicTitle ()renderTrackingCategories ()вернуться в строку ( корень )конецлокальная функция preprocessSingleArg ( имя_аргумента )- Если аргумент существует и не пустой, добавьте его в таблицу аргументов.- Пустые аргументы обрабатываются как nil, чтобы соответствовать поведению ParserFunctions.если origArgs [ argName ] и origArgs [ argName ] ~ = '', тоargs [ argName ] = origArgs [ argName ]конецконецлокальная функция preprocessArgs ( prefixTable , step )- Назначьте параметры с заданными префиксами в таблицу args, по порядку, партиями- указанного размера шага. Это сделано для того, чтобы ссылки и т. Д. Не появлялись в-- неправильный порядок. PrefixTable должен быть массивом, содержащим таблицы, каждая из которых имеет- два возможных поля, строка «префикса» и таблица «зависимостей». Функция всегда разбирает- параметры, содержащие строку «префикс», но анализируют только параметры в «зависимости»- таблица, если параметр префикса присутствует и не пуст.если type ( prefixTable ) ~ = 'table', тоerror ( "Для таблицы префиксов обнаружено не табличное значение" , 2 )конецесли type ( step ) ~ = 'number', тоerror ( «Обнаружено недопустимое значение шага» , 2 )конец- Получите аргументы без суффикса числа и проверьте правильность ввода.для i , v в ipairs ( prefixTable ) сделайтеif type ( v ) ~ = 'table' или type ( v . prefix ) ~ = "string" или ( v . завис. и type ( v . зависим. ) ~ = 'table' ) тогдаerror ( 'В таблице префиксов preprocessArgs обнаружен недопустимый ввод' , 2 )конецpreprocessSingleArg ( v . префикс )- Разбирать зависимый параметр только в том случае, если параметр префикса присутствует, а не пуст.если args [ v . префикс ] и v . зависеть тогдадля j , укажите значение в ipairs ( v . зависеть ) сделайтеесли type ( dependsValue ) ~ = 'string', тоerror ( 'В preprocessArgs обнаружено недопустимое "зависимое" значение параметра )конецpreprocessSingleArg ( зависимое значение )конецконецконец- Получить аргументы с суффиксами числа.local a = 1 - переменная счетчика.местный moreArgumentsExist = trueв то время как moreArgumentsExist == true делатьmoreArgumentsExist = falseдля i = a , a + step - 1 doдля j , v в ipairs ( prefixTable ) сделайтелокальный prefixArgName = v . префикс .. tostring ( i )если origArgs [ prefixArgName ], тоmoreArgumentsExist = true - Выполнить еще один цикл, если найдены какие-либо аргументы, даже пустые.preprocessSingleArg ( prefixArgName )конец- Обработать зависимую таблицу, если аргумент префикса присутствует и не пуст, или- мы обрабатываем «префикс1» и «префикс» присутствует, а не пусто, и- если присутствует таблица зависимостей.если v . зависимости и ( args [ prefixArgName ] или ( i == 1 и args [ v . prefix ])), тодля j , укажите значение в ipairs ( v . зависеть ) сделайтелокальное имя зависимости = значение зависимости .. tostring ( i )preprocessSingleArg ( имя_ зависимой )конецконецконецконеца = а + шагконецконецлокальная функция parseDataParameters ()- Проанализируйте параметры данных в том же порядке, что и старый {{infobox}}, чтобы- ссылки и т. д. будут отображаться в ожидаемых местах. Параметры, зависящие от- другой параметр обрабатывается, только если этот параметр присутствует, чтобы избежать- фантомные ссылки, появляющиеся в списках литературы.preprocessSingleArg ( 'автозаголовки' )preprocessSingleArg ( 'ребенок' )preprocessSingleArg ( 'bodyclass' )preprocessSingleArg ( 'вложенный блок' )preprocessSingleArg ( 'стиль тела' )preprocessSingleArg ( 'название' )preprocessSingleArg ( 'titleclass' )preprocessSingleArg ( 'стиль заголовка' )preprocessSingleArg ( 'выше' )preprocessSingleArg ( 'надкласс' )preprocessSingleArg ( 'выше стиля' )preprocessArgs ({{ префикс = 'подзаголовок' , зависимость = { 'стиль подзаголовка' , 'subheaderrowclass' }}}, 10 )preprocessSingleArg ( 'стиль подзаголовка' )preprocessSingleArg ( 'подкласс' )preprocessArgs ({{ префикс = 'изображение' , зависимость = { 'подпись' , 'imagerowclass' }}}, 10 )preprocessSingleArg ( 'стиль заголовка' )preprocessSingleArg ( 'образный стиль' )preprocessSingleArg ( 'класс изображений' )preprocessArgs ({{ prefix = 'header' },{ префикс = 'данные' , зависимость = { 'ярлык' }},{ prefix = 'rowclass' },{ prefix = 'rowstyle' },{ prefix = 'rowcellstyle' },{ prefix = 'class' },{ prefix = 'dataid' },{ prefix = 'labelid' },{ prefix = 'headerid' },{ префикс = 'rowid' }}, 50 )preprocessSingleArg ( 'заголовочный класс' )preprocessSingleArg ( 'стиль заголовка' )preprocessSingleArg ( 'стиль метки' )preprocessSingleArg ( 'стиль данных' )preprocessSingleArg ( 'ниже' )preprocessSingleArg ( 'нижний класс' )preprocessSingleArg ( 'нижний стиль' )preprocessSingleArg ( 'имя' )args [ 'italic title' ] = origArgs [ 'italic title' ] - другое поведение, если пусто или отсутствуетpreprocessSingleArg ( 'декат' )конецфункция p . информационное окно ( фрейм )- Если вызывается через #invoke, используйте аргументы, переданные в вызывающий шаблон.- В противном случае в целях тестирования предположим, что аргументы передаются напрямую.если frame == mw . getCurrentFrame (), затемorigArgs = кадр : getParent (). аргументыещеorigArgs = frameконецparseDataParameters ()вернуть _infobox ()конецфункция p . infoboxTemplate ( фрейм )- Для вызова через #invoke в шаблонеorigArgs = {}для к , v в парах ( кадр . арг ) делают origArgs [ K ] = мВт . текст . обрезать ( v ) конецparseDataParameters ()вернуть _infobox ()конецвернуть p