Модуль:Тест: различия между версиями

Материал из Posmotrelisu
Перейти к навигации Перейти к поиску
Строка 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 result="<table>"
local row={} -- сюда записываются пары ключ=значение
 
local row={}
 
local row_str=""
 
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