Модуль:Тест: различия между версиями
Перейти к навигации
Перейти к поиску
ЗаяцВолк (обсуждение | вклад) |
ЗаяцВолк (обсуждение | вклад) |
||
Строка 75: | Строка 75: | ||
-- Создать строку в таблице | |||
-- ktable это таблица ключей | |||
-- row это таблица переданных значений | |||
-- empty это элемент, который подставляется в строку, если не было переданного значения | |||
function create_row ( ktable, row, empty ) | function create_row ( ktable, row, empty ) | ||
local row_str="" | local row_str="" | ||
Строка 88: | Строка 92: | ||
end | end | ||
-- Сгенерировать таблицу с использованием ключей | |||
-- | |||
p.tablekey = function ( frame ) | p.tablekey = function ( frame ) | ||
local args = require('Module:Arguments').getArgs(frame) | local args = require('Module:Arguments').getArgs(frame) | ||
if args["ключи"] == nil then | if args["ключи"] == nil then -- обязательный параметр | ||
return "Не заданы ключи для таблицы" | return "Не заданы ключи для таблицы" | ||
end | end | ||
local result="" | |||
if args["атрибуты"] ~= nil then | |||
result="<table "..args["атрибуты"].." >" | |||
else | |||
result="<table " | |||
if args["класс"] ~= nil then result=result..'class="'..args["класс"]..'" ' end | |||
if args["стиль"] ~= nil then result=result..'style="'..args["класс"]..'" ' end | |||
result=result..' >' | |||
end | |||
local empty="" | local empty="" | ||
Строка 100: | Строка 116: | ||
keys = mw.text.split (args["ключи"], "%s") | keys = mw.text.split (args["ключи"], "%s") | ||
local row={} -- сюда записываются пары ключ=значение | |||
local row={} | |||
local i=1 | local i=1 | ||
while true do | while true do | ||
if args[i] == nil then | if args[i] == nil then | ||
if next(row) == nil then break end | if next(row) == nil then break end -- если пусто, то уходим | ||
result=result..'<tr>'..create_row( keys, row, empty )..'</tr>' | result=result..'<tr>'..create_row( keys, row, empty )..'</tr>' -- на случай, если что-то осталось | ||
break | break | ||
end | end |
Версия 08:03, 13 июля 2024
Для документации этого модуля может быть создана страница Модуль:Тест/doc
local p = {}; p.test = function ( frame ) return "Ad Victoriam!" end p.randElem = function ( frame ) local cnt=0 -- Код курильщика for i, val in ipairs(frame.args) do cnt=i end local time=os.time() return time.." "..cnt.." "..frame.args[time%cnt+1] end p.iter_test = function ( frame ) local base="" for name, val in pairs(frame.args) do base=base..'<br> key: '..name..' zn: '..val end return base end local subfun = {} local text="" local pos=1 -- итерируемая позиция в разбираемом шаблоне local result = {} -- массив частей html-кода для последующей склейки local args={} function header () if args[pos+1] == nil then text=text..'</tr>' return end text = "<tr><td>"..args[pos+1].."</td>" pos=pos+2 if subfun[args[pos]] ~= nil then subfun[args[pos]]() end text=text..'</tr>' end function list () if args[pos+1] == nil then text=text..'</td>' return end text=text.."<td>"..args[pos+1].."</td>" pos=pos+2 end subfun["заголовок"]=header subfun["список"]=list --[[ Формат использования ... |Заголовок|Ими гордится школа |Список|Вася Петя Маша Вовочка |Заголовок|Ими гордится город |Подзаголовок|Пожарные|Список|Горюч Фаер Агни |Подзаголовок|Врачи|Список|Лечил Оживил |Подзаголовок|Ученые|Список|Знаток Эксперт Вовочка |Заголовок|Ими не гордится город |Заголовок|Вовочка!!! ]] -- Создать строку в таблице -- ktable это таблица ключей -- row это таблица переданных значений -- empty это элемент, который подставляется в строку, если не было переданного значения function create_row ( ktable, row, empty ) local row_str="" for j in ipairs(ktable) do if row[ktable[j]] ~= nil then row_str=row_str..'<td>'..row[ktable[j]]..'</td>' else row_str=row_str..'<td>'..empty..'</td>' end end return row_str end -- Сгенерировать таблицу с использованием ключей -- p.tablekey = function ( frame ) local args = require('Module:Arguments').getArgs(frame) if args["ключи"] == nil then -- обязательный параметр return "Не заданы ключи для таблицы" end local result="" if args["атрибуты"] ~= nil then result="<table "..args["атрибуты"].." >" else result="<table " if args["класс"] ~= nil then result=result..'class="'..args["класс"]..'" ' end if args["стиль"] ~= nil then result=result..'style="'..args["класс"]..'" ' end result=result..' >' end local empty="" if args["пусто"] ~= nil then empty=args["пусто"] end local keys = {} keys = mw.text.split (args["ключи"], "%s") local row={} -- сюда записываются пары ключ=значение local i=1 while true do if args[i] == nil then if next(row) == nil then break end -- если пусто, то уходим result=result..'<tr>'..create_row( keys, row, empty )..'</tr>' -- на случай, если что-то осталось break end if args[i]=="конец строки" then result=result..'<tr>'..create_row( keys, row, empty )..'</tr>' i=i+1 row={} else -- table.insert (row, args[i], args[i+1]) row[args[i]]=args[i+1] i=i+2 end end return result..'</table>' end return p