Модуль:FormatRow

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
Документация

Модуль обработки строк.

Функции

AsRows

Функция принимает неограниченное количество неименованных параметров вызывающего шаблона {{Чередующиеся строки таблицы}} считая их строками таблицы. Переданные параметры выводятся последовательно с новой строки и перед каждой строкой добавляются символы вики-разметки начала строки таблицы |-.

Шаблон вызова:

{{#invoke:FormatRow|AsRows}}

Дополнительные именованные параметры задают стиль строки:

  • odd= или нс= — CSS стиль для нечётных строк
  • even= или чс= — CSS стиль для чётных строк
  • each= или кс= — дополнительный CSS стиль для каждой строки

Пример

Код Результат
{| class="wikitable"
 ! Место !! Результат
 {{#invoke:FormatRow|AsRows|чс=background:#CCCCFF|кс=text-align:center
 | {{!}} Первое {{!!}} 100
 | {{!}} Второе {{!!}} 95
 | <!-- пусто! -->
 | {{!}} Третье {{!!}} 87
 | <!-- пусто! -->
 | {{!}} Четвёртое {{!!}} 65
 | {{!}} Пятое {{!!}} 58
 }}
|}
Место Результат
Первое 100
Второе 95
Третье 87
Четвёртое 65
Пятое 58


local p = {}

--[[
  Функция выводит каждый неименованный параметр как строку таблицы в вики-разметке
  Именованные параметры:
    odd  - стиль для нечётных строк
    even - стиль для чётных строк
    each - дополнительный стиль для каждой строки
]]
function p.AsRows(frame)
	local args = frame.args;
	if args[1] == nil then
		args = frame:getParent().args;
	end
	local params = {
		even = args['even'] or args['нс'], 
		odd  = args['odd']  or args['чс'],
		each = args['each'] or args['кс']
	}
	local rows = {}
	local num = 1;
	local cnt = 1;
	value = args[num];
    while value ~= nil do
    	value = mw.text.trim(value)
    	if value ~= '' then
	    	local style = '';
	    	if (cnt % 2) == 0 then
	    	  style = params.even or '';
	    	else
	    	  style = params.odd or '';
	    	end
	    	if params.each ~= nil then
	    		style = params.each .. '; ' .. style;
	    	end
	    	local row = '|-'
	    	if style ~= '' then
	    		row = row .. ' style ="' .. style .. '"';
	    	end
	    	row = row .. '\n';
	  		table.insert(rows, row .. value);
	  		cnt = cnt+1
  		end
    	num = num+1;
        value = args[num]
    end
 	return table.concat(rows, '\n');
end

return p