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

Материал из Posmotrelisu
Перейти к навигации Перейти к поиску
(Новый тест)
 
(не показано 27 промежуточных версий этого же участника)
Строка 1: Строка 1:
-- формат данных
local p = {}
-- { head_v style_h list_v style_l n } - tr
--


local header_text="заголовок"
p.sortlist = function (frame)
local list_text="список"
local args = require('Module:Arguments').getArgs(frame)
 
 
local pos=1 -- итерируемая позиция в разбираемом шаблоне
local args = {} -- элементы шаблона
local span_im = 2 -- корректировка для вставки изображения
 
local style_l ='width:100%;'
local style_h ='white-space:nowrap;'
 
-- эти 2 переменные можно всунуть внутрь функций
local t = {} -- таблица данных для создания шаблона навигации
local row = {} -- разбираемая строка шаблона навигации
 
function list ()
if args[pos+1] == nil then pos=pos+1 return end
row["list_v"]=args[pos+1]
row["style_l"]=style_l
row["n"]=1
pos=pos+2
 
table.insert (t, row)
row={}
 
end 
 
function header ( )
if args[pos+1] == nil then pos=pos+1 return end
row["head_v"]=args[pos+1]
row["style_h"]=style_h
pos=pos+2
if args[pos] == list_text then
list ()
t[#t]["n"]=2
return
end
row["n"]=1
table.insert (t, row)
row={}
 
end
 
function style_upd ( t )
local s1=""
local s2=""
 
if args["стиль_нечетных"]== nil and args["стиль_четных"]== nil then return end
 
if args["стиль_нечетных"]~= nil then s1=args["стиль_нечетных"] end
if args["стиль_четных"]~= nil then s2=args["стиль_четных"] end
 
for i in ipairs (t) do
 
if t[i]["list_v"] ~= nil then
if i%2 == 0 then
t[i]["style_l"]=t[i]["style_l"]..s2
else
t[i]["style_l"]=t[i]["style_l"]..s1
end
end
end
 
end
 
function image ()
if args["изображение"]== nil then return "" end
 
local style_im=""
if args['imagestyle'] ~= nil then style_im=args['imagestyle'] end
 
return '<td rowspan="'..tostring(#t)..'" style="vertical-align:middle; padding-left:7px; width:0%;'..style_im..'">'..args["изображение"]..'</td>'
 
end
 
 
-- преобразует разобранное тело в html-код
function bilding ( t )
local result=""
for i in ipairs (t) do
 
if t[i]["n"]==2 then
-- result=result..'<tr><th style="'..t[i]["style_h"]..'" >'..t[i]["head_v"]..'</th><td style="'..t[i]["style_l"]..'" >'..t[i]["list_v"]..'</td>'
result=table.concat(
{
result,
'<tr><th style="',
t[i]["style_h"],
'" >',
t[i]["head_v"],
'</th><td style="',
t[i]["style_l"],
'" >',
t[i]["list_v"],
'</td>'
}
)
 
else
if t[i]["head_v"] ~= nil then
result=result..'<tr><th colspan="2" style="text-align:center;'..t[i]["style_h"]..'">'..t[i]["head_v"]..'</th>'
else
result=result..'<tr><td colspan="2">'..t[i]["list_v"]..'</td>'
end
end
if i==1 then result=result..image () end -- колхоз
result=result..'</tr>'
end
 
return result
 
end
 
-- совместимость со старым кодом
function prepareN ()
local i=1
local n=1
local rown = {}
while i<25 do
 
if
args['заголовок'..tostring(i)] ~= nil
and
args['список'..tostring(i)] ~= nil
then
n=2
end
 
if
args['заголовок'..tostring(i)] ~= nil
or
args['список'..tostring(i)] ~= nil
then
rown["head_v"]=args['заголовок'..tostring(i)]
rown["style_h"]=style_h
 
rown["list_v"]=args['список'..tostring(i)]
rown["style_l"]=style_l
rown["n"]=n
table.insert(t, rown )
end


rown={}
local otstup= ' • '
n=1
local list_end= ' … '
i=i+1


end
if args['отступ'] ~= nil then otstup=args['отступ'] end


end
local res_t = {}
local res=""


 
for i in ipairs(args) do
function ignor_empty ()  
table.insert (res_t, args[i])
pos=pos+1
end
end


-- разбирает тело нав.таблицы
table.sort (
function prepare ()
res_t,
row={}
function (a, b) return a < b end
 
while true do
if args[pos] == nil then break end
if args[pos] == header_text then
header()
end
if args[pos] == list_text then
list()
end
if
args[pos] ~= list_text
and
args[pos] ~= header_text
then
ignor_empty ()
end
end
 
end
 
-- выдать заголовок таблицы
function nav_head ()
local z="Пропущен заголовок"
if args["заголовок"] ~= nil then z=args["заголовок"] end
    local redact='<font color="red">Нет имени шаблона для редактирования</font>'
local style_s = ""
if args["стиль_основного_заголовка"] ~= nil then style_s=args["стиль_основного_заголовка"] end
 
if args["имя"] ~= nil then
redact=tostring(mw.uri.fullUrl('Шаблон:'..args["имя"], "action=edit"))
redact='['..redact..' [изменить&#93;]'
 
end
 
return '<tr><th colspan="'..span_im..'" style="text-align:center;width:100%;'..style_s..'"><div style="float:left; width:6em; text-align:left; font-size: smaller; font-weight: normal;" class="plainlinks">'..redact..'</div><span style="font-size:110%;">'..z..'</span></th></tr>'
 
 
end
 
function nav_footer ()
if args["внизу"] == nil then return "" end
local style_s = ""
if args["стиль_внизу"] ~= nil then style_s=args["стиль_внизу"] end
 
return table.concat(
{'<tr><td style="text-align:center; ',
style_s,
'" colspan="',
span_im,
'" >',
args["внизу"],
'</td></tr>'
}
)
)
end
function nav_subhead ()
if args["вверху"] == nil then return "" end
local style_s = ""
if args["стиль_вверху"] ~= nil then style_s=args["стиль_вверху"] end
return '<tr><td style="text-align:center; '..style_s..'" colspan="'..span_im..'" >'..args["вверху"]..'</td></tr>'
end
function nav_table_start ()
-- общие стили нав. таблицы
local style=""
if args["стиль"]~= nil then style=style..args["стиль"] end
if args["стиль_тела"]~= nil then style=style..args["стиль_тела"] end
local state=""
if args["state"] ==''
then
state="yes"
else
if args["state"] == nil then state="autocollapse" else state= args["state"] end
end
return '<table class="navbox collapsible '..state..' nowraplinks" style="margin:auto; '..style..' " >'


for i in ipairs(res_t) do
res=res..res_t[i]..otstup
end
end


 
return res..list_end
 
local p = {}
 
p.nav = function ( frame)
args = require('Module:Arguments').getArgs(frame, {trim = false, removeBlanks = false})
if args["стиль_заголовков"]~= nil then style_h=style_h..args["стиль_заголовков"] end
if args["стиль_списков"]~= nil then style_l=style_l..args["стиль_списков"] end
 
if args["изображение"]~= nil then span_im=3 end
 
if args["заголовок1"] ~= nil or args["список1"] ~= nil then prepareN() else prepare() end
style_upd (t)
 
return table.concat({nav_table_start(),nav_head(),nav_subhead(),bilding(t),nav_footer(),'</table>'})
 
end
 
function subnav_table_start ()
local style=""
if args["стиль"]~= nil then style=style..args["стиль"] end
if args["стиль_тела"]~= nil then style=style..args["стиль_тела"] end
return '<table style="margin:auto; '..style..' " >'
end
 
p.subnav = function (frame)
args = require('Module:Arguments').getArgs(frame, {trim = false, removeBlanks = false})
if args["стиль_заголовков"]~= nil then style_h=style_h..args["стиль_заголовков"] end
if args["стиль_списков"]~= nil then style_l=style_l..args["стиль_списков"] end
prepare()
style_upd (t)
return subnav_table_start()..bilding ( t )..'</table></th>'
end
 
p.val = ""
p.init = function (frame)
p.val=frame.args[1]
end
 
p.get = function ()
return val
end
 
 
p.sortlist = function (frame)
local args = require('Module:Arguments').getArgs(frame)
return table.sort (args)
 
end
end


return p
return p

Текущая версия на 15:06, 11 февраля 2025

Для документации этого модуля может быть создана страница Модуль:Тест/doc

local p = {}

p.sortlist = function (frame)
local args = require('Module:Arguments').getArgs(frame)

local otstup= ' • '
local list_end= ' … '

if args['отступ'] ~= nil then otstup=args['отступ'] end

local res_t = {}
local res=""

for i in ipairs(args) do
table.insert (res_t, args[i])
end

table.sort (
res_t,
function (a, b) return a < b end
)

for i in ipairs(res_t) do
res=res..res_t[i]..otstup
end

return res..list_end
end

return p