-- Этот модуль реализует {{Infobox3cols}}-- Первоначальная версия была создана путем изменения [[Module: Infobox]]- местный p = {}local navbar = require ( 'Модуль: Navbar' ). _navbarместные аргументы = {}местное происхождениелокальный кореньлокальная функция 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 ( '^' .. префикс .. '([0-9]% d *)' .. суффикс .. '$' ) если Num затем table.insert ( НУМС , ToNumber ( Num )) конец конец table.sort ( НУМС ) возвращение НУМСконецлокальная функция addRow ( rowArgs ) - Добавляет строку в информационное окно с ячейкой заголовка. - или комбинация метка / ячейка данных. если rowArgs . заголовок тогда корень : tag ( 'tr' ) : addClass ( rowArgs . rowclass ) : cssText ( rowArgs . стиль строки ) : Атр ( 'ID' , rowArgs . ROWID ) : tag ( 'th' ) : attr ( 'colspan' , 4 ) : attr ( 'идентификатор' , rowArgs . headerid ) : addClass ( rowArgs . класс ) : addClass ( args . headerclass ) : css ( 'выравнивание текста' , 'центр' ) : CssText ( арг . Headerstyle ) : cssText ( rowArgs . rowcellstyle ) : wikitext ( заголовок rowArgs . ) elseif rowArgs . тогда лейбл если rowArgs . данные тогда локальная строка = корень : тег ( 'тр' ) строка : addClass ( rowArgs . rowclass ) строка : cssText ( rowArgs . rowstyle ) строка : Attr ( 'ID' , rowArgs . ROWID ) строка : tag ( 'th' ) : attr ( 'область' , 'строка' ) : attr ( 'идентификатор' , rowArgs . labelid ) : cssText ( аргумент . стиль метки ) : cssText ( rowArgs . rowcellstyle ) : Вики - текст ( rowArgs . Этикетка ) : сделано () локальные данныеCell = row : tag ( 'td' ) dataCell : attr ( 'colspan' , 3 ) : attr ( 'идентификатор' , rowArgs . dataid ) : addClass ( rowArgs . класс ) : CssText ( rowArgs . Datastyle ) : cssText ( rowArgs . rowcellstyle ) : новая строка () : wikitext ( данные rowArgs . ) elseif rowArgs . dataa или rowArgs . datab затем локальная строка = корень : тег ( 'тр' ) строка : addClass ( rowArgs . rowclass ) строка : cssText ( rowArgs . rowstyle ) строка : Attr ( 'ID' , rowArgs . ROWID ) строка : tag ( 'th' ) : attr ( 'область' , 'строка' ) : attr ( 'идентификатор' , rowArgs . labelid ) : cssText ( аргумент . стиль метки ) : cssText ( rowArgs . rowcellstyle ) : Вики - текст ( rowArgs . Этикетка ) : сделано () локальные данныеCella = row : tag ( 'td' ) dataCella : attr ( 'идентификатор' , rowArgs . dataaid ) : AddClass ( rowArgs . ClassA ) : cssText ( rowArgs . dataastyle ) : cssText ( rowArgs . rowcellstyle ) : новая строка () : wikitext ( rowArgs . dataa ) если rowArgs . renderb тогда локальные данныеCellb = row : tag ( 'td' ) dataCellb : attr ( 'идентификатор' , rowArgs . идентификатор данных ) : addClass ( rowArgs . classb ) : CssText ( rowArgs . Databstyle ) : cssText ( rowArgs . rowcellstyle ) : новая строка () : wikitext ( rowArgs . данные ) конец если rowArgs . renderc тогда локальные данныеCellc = row : tag ( 'td' ) dataCellc : attr ( 'идентификатор' , rowArgs . datacid ) : addClass ( rowArgs . classc ) : cssText ( rowArgs . стиль данных ) : cssText ( rowArgs . rowcellstyle ) : новая строка () : Вики - текст ( rowArgs . DATAC ) конец конец elseif rowArgs . данные тогда локальная строка = корень : тег ( 'тр' ) строка : addClass ( rowArgs . rowclass ) строка : cssText ( rowArgs . rowstyle ) строка : Attr ( 'ID' , rowArgs . ROWID ) локальные данныеCell = row : tag ( 'td' ) dataCell : attr ( 'colspan' , 4 ) : attr ( 'идентификатор' , rowArgs . dataid ) : addClass ( rowArgs . класс ) : css ( 'выравнивание текста' , 'центр' ) : CssText ( rowArgs . Datastyle ) : cssText ( rowArgs . rowcellstyle ) : новая строка () : wikitext ( данные rowArgs . ) конецконецлокальная функция renderTitle () если не аргументы . название, затем верните конец корень : tag ( 'подпись' ) : addClass ( аргумент . titleclass ) : cssText ( аргумент . стиль заголовка ) : wikitext ( аргумент . название )конецлокальная функция renderAboveRow () если не аргументы . выше, затем верните конец корень : tag ( 'tr' ) : tag ( 'th' ) : attr ( 'colspan' , 4 ) : AddClass ( арг . Aboveclass ) : css ( 'выравнивание текста' , 'центр' ) : css ( 'размер шрифта' ; '125%' ) : css ( 'начертание шрифта' , 'полужирный' ) : CssText ( арг . Abovestyle ) : Вики - текст ( арг . Выше )конецлокальная функция renderBelowRow () если не аргументы . ниже, затем вернуться в конец корень : tag ( 'tr' ) : tag ( 'td' ) : attr ( 'colspan' , 4 ) : AddClass ( арг . Belowclass ) : css ( 'выравнивание текста' , 'центр' ) : CssText ( арг . Belowstyle ) : новая строка () : Вики - текст ( арг . Ниже )конецлокальная функция renderSubheaders () если аргументы . тогда подзаголовок аргументы . subheader1 = аргументы . подзаголовок конец если аргументы . subheaderrowclass тогда аргументы . subheaderrowclass1 = аргументы . подзаголовок конец локальные подзаголовки = getArgNums ( 'подзаголовок' , '' ) для k , число в ipairs ( subheadernums ) сделать addRow ({ data = args [ 'subheader' .. tostring ( num )], datastyle = args . subheaderstyle или args [ 'subheaderstyle' .. tostring ( num )], класс = аргументы . subheaderclass , rowclass = args [ 'subheaderrowclass' .. tostring ( число )] }) конецконецлокальная функция renderImages () если аргументы . изображение тогда аргументы . изображение1 = аргументы . изображение конец если аргументы . подпись тогда аргументы . 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 , класс = аргументы . imageclass , rowclass = args [ 'imagerowclass' .. tostring ( число )] }) конецконецлокальная функция renderRows () - Получает объединение номеров аргументов заголовка и данных, - и рендерит их все по порядку с помощью addRow. local rownums = union ( getArgNums ( 'заголовок' , '' ), getArgNums ( 'данные' , '[ab]?' )) local datab_count = # ( getArgNums ( 'данные' , 'b' )) local datac_count = # ( getArgNums ( 'данные' , 'c' )) table.sort ( rownums ) для k , число в ipairs ( rownums ) сделать addRow ({ renderb = datab_count > 0 , renderc = datac_count > 0 , header = args [ 'header' .. tostring ( num )], label = args [ 'label' .. tostring ( num )], data = args [ 'данные' .. tostring ( num )], datastyle = args . datastyle , class = args [ 'class' .. tostring ( num )], dataa = args [ 'данные' .. tostring ( число ) .. 'a' ], dataastyle = args . datastylea , classa = args [ 'class' .. tostring ( num ) .. 'a' ], datab = args [ 'данные' .. tostring ( число ) .. 'b' ], стиль данных = аргументы . datastyleb , classb = args [ 'class' .. tostring ( num ) .. 'b' ], datac = args [ 'данные' .. tostring ( число ) .. 'c' ], datacstyle = args . datastylec , classc = args [ 'class' .. tostring ( num ) .. 'c' ], rowclass = args [ 'rowclass' .. tostring ( число )], rowstyle = args [ 'rowstyle' .. tostring ( num )], rowcellstyle = args [ 'rowcellstyle' .. tostring ( num )], dataid = args [ 'dataid' .. tostring ( num )], dataaid = args [ 'dataid' .. tostring ( num ) .. 'a' ], dataaib = args [ 'dataid' .. tostring ( num ) .. 'b' ], dataaic = args [ 'dataid' .. tostring ( num ) .. 'c' ], labelid = args [ 'labelid' .. tostring ( num )], headerid = args [ 'headerid' .. tostring ( число )], rowid = args [ 'rowid' .. tostring ( число )] }) конецконецлокальная функция renderNavBar () если не аргументы . имя, затем верни конец корень : tag ( 'tr' ) : tag ( 'td' ) : attr ( 'colspan' , '4' ) : 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 () если аргументы . decat ~ = 'да' тогда if # ( getArgNums ( 'data' , '[abc]?' )) == 0 и mw . название . getCurrentTitle (). namespace == 0, тогда root : wikitext ( '[[Категория: статьи, в которых используются шаблоны инфобоксов без строк данных]]' ) конец конецконецлокальная функция _infobox () - Укажите общий вид информационного окна со специальными настройками - если информационное окно используется как «дочерний» внутри другого информационного окна. корень = mw . html . создать ( 'таблица' ) корень : addClass ( 'информационное окно ' ) : addClass ( аргумент . bodyclass ) если аргументы . child == 'yes' или аргументы . subbox == 'да' тогда корень : css ( 'заполнение' , '0' ) : css ( 'граница' , 'нет' ) : css ( 'margin' , ( args . subbox == 'yes' ) и '-3px' или 'auto' ) : css ( 'ширина' , 'авто' ) : css ( 'минимальная ширина' ; '100%' ) : css ( 'размер шрифта' ; '100%' ) : css ( 'ясно' , 'нет' ) : css ( 'float' , 'нет' ) : css ( 'цвет фона' , 'прозрачный' ) еще корень : css ( 'ширина' , '22em' ) конец корень : cssText ( арг . стиль тела ) renderTitle () renderAboveRow () renderSubheaders () renderImages () 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 = 0 - переменная счетчика. местный moreArgumentsExist = true в то время как moreArgumentsExist == true делать moreArgumentsExist = false для i = a , a + step - 1 do для j , v в ipairs ( prefixTable ) сделайте локальный prefixArgName = v . префикс .. tostring ( i ) .. ( v . суффикс или '' ) если origArgs [ prefixArgName ], то moreArgumentsExist = true - Выполнить еще один цикл, если найдены какие-либо аргументы, даже пустые. preprocessSingleArg ( prefixArgName ) конец - Обработать зависимую таблицу, если аргумент префикса присутствует и не пуст, или - мы обрабатываем «префикс1» и «префикс» присутствует, а не пусто, и - если присутствует таблица зависимостей. если v . зависимости и ( args [ prefixArgName ] или ( i == 1 и args [ v . prefix ])), то для j , укажите значение в ipairs ( v . зависеть ) сделайте локальное имя_поддержки = значение_в зависимости .. tostring ( я ) .. ( v . зависит от факта или "" ) preprocessSingleArg ( имя_ зависимой ) конец конец конец конец а = а + шаг конецконец функция p . информационное окно ( фрейм ) - Если вызывается через #invoke, используйте аргументы, переданные в вызывающий шаблон. - В противном случае в целях тестирования предположим, что аргументы передаются напрямую. если frame == mw . getCurrentFrame (), затем origArgs = кадр : getParent (). аргументы еще origArgs = frame конец - Проанализируйте параметры данных в том же порядке, что и старый {{infobox}}, чтобы - ссылки и т. д. будут отображаться в ожидаемых местах. Параметры, зависящие от - другой параметр обрабатывается, только если этот параметр присутствует, чтобы избежать - фантомные ссылки, появляющиеся в списках литературы. preprocessSingleArg ( 'ребенок' ) preprocessSingleArg ( 'bodyclass' ) preprocessSingleArg ( 'вложенный блок' ) preprocessSingleArg ( 'стиль тела' ) preprocessSingleArg ( 'название' ) preprocessSingleArg ( 'titleclass' ) preprocessSingleArg ( 'стиль заголовка' ) preprocessSingleArg ( 'выше' ) preprocessSingleArg ( 'надкласс' ) preprocessSingleArg ( 'выше стиля' ) preprocessArgs ({ { префикс = 'подзаголовок' , зависимость = { 'стиль подзаголовка' , 'subheaderrowclass' }} }, 10 ) preprocessSingleArg ( 'стиль подзаголовка' ) preprocessSingleArg ( 'подкласс' ) preprocessSingleArg ( 'изображение' ) preprocessSingleArg ( 'подпись' ) preprocessArgs ({ { префикс = 'изображение' , зависимость = { 'подпись' , 'imagerowclass' }} }, 10 ) preprocessSingleArg ( 'стиль заголовка' ) preprocessSingleArg ( 'образный стиль' ) preprocessSingleArg ( 'класс изображений' ) preprocessArgs ({ { prefix = 'header' }, { префикс = 'данные' , зависимость = { 'ярлык' }}, { префикс = 'данные' , суффикс = 'а' , зависимость = { 'метка' }}, { префикс = 'данные' , суффикс = 'а' , зависимость = { 'данные' }, зависимость = 'с' }, { префикс = 'данные' , суффикс = 'b' , зависимость = { 'метка' }}, { префикс = 'данные' , суффикс = 'б' , зависимость = { 'данные' }, зависимость = 'с' }, { prefix = 'rowclass' }, { prefix = 'rowstyle' }, { prefix = 'rowcellstyle' }, { prefix = 'class' }, { prefix = 'dataid' }, { prefix = 'labelid' }, { prefix = 'headerid' }, { префикс = 'rowid' } }, 50 ) preprocessSingleArg ( 'заголовочный класс' ) preprocessSingleArg ( 'стиль заголовка' ) preprocessSingleArg ( 'стиль метки' ) preprocessSingleArg ( 'стиль данных' ) preprocessSingleArg ( 'datastylea' ) preprocessSingleArg ( 'datastyleb' ) preprocessSingleArg ( 'datastylec' ) preprocessSingleArg ( 'ниже' ) preprocessSingleArg ( 'нижний класс' ) preprocessSingleArg ( 'нижний стиль' ) preprocessSingleArg ( 'имя' ) args [ 'italic title' ] = origArgs [ 'italic title' ] - другое поведение, если пусто или отсутствует preprocessSingleArg ( 'декат' ) вернуть _infobox ()конец вернуть p