Постоянно защищенный модуль
Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску
Документация по модулю [ просмотреть ] [ изменить ] [ историю ] [ очистить ]

Модуль: 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