Модуль:Навигация: различия между версиями
Перейти к навигации
Перейти к поиску
ЗаяцВолк (обсуждение | вклад) |
ЗаяцВолк (обсуждение | вклад) |
||
Строка 68: | Строка 68: | ||
if args['imagestyle'] ~= nil then style_im=args['imagestyle'] end | if args['imagestyle'] ~= nil then style_im=args['imagestyle'] end | ||
return '<td rowspan="'..#t..'style="vertical-align:middle; padding-left:7px; width:0%;'..style_im..'">'..args["изображение"]..'</td></tr>' | return '<td rowspan="'..tostring(#t)..'style="vertical-align:middle; padding-left:7px; width:0%;'..style_im..'">'..args["изображение"]..'</td></tr>' | ||
end | end |
Версия 12:08, 27 июля 2024
Для документации этого модуля может быть создана страница Модуль:Навигация/doc
-- формат данных -- { head_v style_h list_v style_l n } - tr -- 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 return end row["list_v"]=args[pos+1] row["style_l"]=style_l row["n"]=1 pos=pos+2 end function header ( ) if args[pos+1] == nil then return end row["head_v"]=args[pos+1] row["style_h"]=style_h pos=pos+2 if args[pos] == "list" then list () row["n"]=2 else if args[pos] == "subh" then subheader ( ) end end 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></tr>' end -- преобразует разобранное тело в html-код function bilding ( t ) local result="" for i in ipairs (t) do if i==2 then result=result..image () end -- колхоз 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></tr>' else if t[i]["head_v"] ~= nil then result=result..'<tr><th colspan="2">'..t[i]["head_v"]..'</th></tr>' else result=result..'<tr><td colspan="2">'..t[i]["list_v"]..'</td></tr>' end end end return result end -- разбирает тело нав.таблицы function prepare () row={} while true do if args[pos] == nil then break end if args[pos] == "header" then header() table.insert(t, row ) row={} end if args[pos] == "list" then list() table.insert(t, row ) row={} end end end -- выдать заголовок таблицы function nav_head () local z="Пропущен заголовок" if args["заголовок"] ~= nil then z=args["заголовок"] end local redact='<font color="red">Нет имени шаблона для редактирования</font>' if args["имя"] ~= nil then redact=tostring(mw.uri.fullUrl('Шаблон:'..args["имя"], "action=edit")) redact='['..redact..' <изменить>]' end return '<tr><th colspan="'..span_im..'" style="text-align:center;width:100%;"><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 '<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="autocollapse" if args["state"]~= nil then state= args["state"] end return '<table class="navbox collapsible '..state..' nowraplinks" style="margin:auto; '..style..' " >' end local p = {} p.nav = function ( frame) args = require('Module:Arguments').getArgs(frame) 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 prepare () style_upd (t) return nav_table_start()..nav_head()..nav_subhead ()..bilding(t)..nav_footer()..'</table>' end return p