навігацыйная Табліца

Дакумэнтацыю да гэтага модуля можна стварыць у Модуль:Навігацыйная табліца/Дакумэнтацыя

-- -- Гэты модуль выкарыстоўваецца ў {{Навігацыйная табліца2}} --  local p = {}  local navbar = require('Модуль:Спасылкі шаблёну')._navbar local getArgs -- lazily initialized  local args local border local listnums local ODD_EVEN_MARKER = '\127_ODDEVEN_\127' local RESTART_MARKER = '\127_ODDEVEN0_\127' local REGEX_MARKER = '\127_ODDEVEN(%d?)_\127'  local function striped(wikitext) -- Return wikitext with markers replaced for odd/even striping. -- Child (subgroup) navboxes are flagged with a category that is removed -- by parent navboxes. The result is that the category shows all pages -- where a child navbox is not contained in a parent navbox. local orphanCat = '[[Катэгорыя:Вікіпэдыя:Самотныя навігацыйныя табліцы]]' if border == 'subgroup' and args.orphan ~= 'yes' then -- No change; striping occurs in outermost navbox. return wikitext .. orphanCat end local first, second = 'odd', 'even' if args.evenodd then if args.evenodd == 'swap' then first, second = second, first else first = args.evenodd second = first end end local changer if first == second then changer = first else local index = 0 changer = function (code) if code == '0' then -- Current occurrence is for a group before a nested table. -- Set it to first as a valid although pointless class. -- The next occurrence will be the first row after a title -- in a subgroup and will also be first. index = 0 return first end index = index + 1 return index % 2 == 1 and first or second end end local regex = orphanCat:gsub('([%[%]])', '%%%1') return (wikitext:gsub(regex, ''):gsub(REGEX_MARKER, changer))  -- () omits gsub count end  local function processItem(item, nowrapitems) if item:sub(1, 2) == '{|' then -- Applying nowrap to lines in a table does not make sense. -- Add newlines to compensate for trim of x in |parm=x in a template. return '\n' .. item ..'\n' end if nowrapitems == 'yes' then local lines = {} for line in (item .. '\n'):gmatch('([^\n]*)\n') do local prefix, content = line:match('^([*:;#]+)%s*(.*)') if prefix and not content:match('^') then line = prefix .. '' .. content .. '' end table.insert(lines, line) end item = table.concat(lines, '\n') end if item:match('^[*:;#]') then return '\n' .. item ..'\n' end return item end  local function renderNavBar(titleCell)  if args['спасылкі'] ~= 'схаваць' and args['спасылкі'] ~= 'plain' and not (not args['назва_шаблёну'] and mw.getCurrentFrame():getParent():getTitle():gsub('/sandbox$', '') == 'Шаблён:Навігацыйная табліца') then titleCell:wikitext(navbar{ args['назва_шаблёну'], mini = 1, fontstyle = (args['базавы_стыль'] or '') .. ';' .. (args['стыль_загалоўка'] or '') .. ';background:none transparent;border:none;box-shadow:none; padding:0;' }) end  end  -- --   Title row -- local function renderTitleRow(tbl) if not args['назва'] then return end  local titleRow = tbl:tag('tr')  if args.titlegroup then titleRow :tag('th') :attr('scope', 'row') :addClass('navbox-group') :addClass(args.titlegroupclass) :cssText(args['базавы_стыль']) :cssText(args['стыль_групаў']) :cssText(args.titlegroupstyle) :wikitext(args.titlegroup) end  local titleCell = titleRow:tag('th'):attr('scope', 'col')  if args.titlegroup then titleCell :css('border-left', '2px solid #fdfdfd') :css('width', '100%') end  local titleColspan = 2 if args['выява_зьлева'] then titleColspan = titleColspan + 1 end if args['выява'] then titleColspan = titleColspan + 1 end if args.titlegroup then titleColspan = titleColspan - 1 end  titleCell :cssText(args['базавы_стыль']) :cssText(args['стыль_загалоўка']) :addClass('navbox-title') :attr('colspan', titleColspan)  renderNavBar(titleCell)  titleCell :tag('div') -- id for aria-labelledby attribute :attr('id', mw.uri.anchorEncode(args['назва'])) :addClass(args.titleclass) :css('font-size', '110%') :css('margin', '0 4em') :wikitext(processItem(args['назва'])) end  -- --   Above/Below rows --  local function getAboveBelowColspan() local ret = 2 if args['выява_зьлева'] then ret = ret + 1 end if args['выява'] then ret = ret + 1 end return ret end  local function renderAboveRow(tbl) if not args['верх'] then return end  tbl:tag('tr') :tag('td') :addClass('navbox-abovebelow') :addClass(args['кляса_верху']) :cssText(args['базавы_стыль']) :cssText(args['стыль_верх']) :attr('colspan', getAboveBelowColspan()) :tag('div') -- id for aria-labelledby attribute, if no title :attr('id', args['назва'] and nil or mw.uri.anchorEncode(args['верх'])) :wikitext(processItem(args['верх'], args.nowrapitems)) end  local function renderBelowRow(tbl) if not args['ніз'] then return end  tbl:tag('tr') :tag('td') :addClass('navbox-abovebelow') :addClass(args['кляса_ніз']) :cssText(args['базавы_стыль']) :cssText(args['стыль_ніз']) :attr('colspan', getAboveBelowColspan()) :tag('div') :wikitext(processItem(args['ніз'], args.nowrapitems)) end  -- --   List rows -- local function renderListRow(tbl, index, listnum) local row = tbl:tag('tr')  if index == 1 and args['выява_зьлева'] then row :tag('td')     :addClass('noviewer') :addClass('navbox-image') :addClass(args.imageclass) :css('width', '1px')               -- Minimize width :css('padding', '0px 2px 0px 0px') :cssText(args['стыль_выява_зьлева']) :attr('rowspan', #listnums) :tag('div') :wikitext(processItem(args['выява_зьлева'])) end  if args['група_інфармацыі' .. listnum] then local groupCell = row:tag('th')  -- id for aria-labelledby attribute, if lone group with no title or above if listnum == 1 and not (args['назва'] or args['верх'] or args['група_інфармацыі2']) then groupCell :attr('id', mw.uri.anchorEncode(args['група_інфармацыі1'])) end  groupCell :attr('scope', 'row') :addClass('navbox-group') :addClass(args['кляса_групаў']) :cssText(args['базавы_стыль']) :css('width', args['шырыня_групы'] or '1%') -- If groupwidth not specified, minimize width  groupCell :cssText(args['стыль_групаў']) :cssText(args['група_інфармацыі' .. listnum .. '_стыль']) :wikitext(args['група_інфармацыі' .. listnum]) end  local listCell = row:tag('td')  if args['група_інфармацыі' .. listnum] then listCell :css('text-align', 'left') :css('border-left-width', '2px') :css('border-left-style', 'solid') else listCell:attr('colspan', 2) end  if not args['шырыня_групы'] then listCell:css('width', '100%') end  local rowstyle  -- usually nil so cssText(rowstyle) usually adds nothing if index % 2 == 1 then rowstyle = args.oddstyle else rowstyle = args.evenstyle end  local listText = args['сьпіс' .. listnum] local oddEven = ODD_EVEN_MARKER if listText:sub(1, 12) == '
then -- Assume list text is for a subgroup navbox so no automatic striping for this row. oddEven = listText:find(']*"navbox%-title"') and RESTART_MARKER or 'odd' end listCell :css('padding', '0px') :cssText(args['стыль_сьпісаў']) :cssText(rowstyle) :cssText(args['сьпіс' .. listnum .. '_стыль']) :addClass('navbox-list') :addClass('navbox-' .. oddEven) :addClass(args['кляса_сьпісаў']) :addClass(args['сьпіс' .. listnum .. '_кляса']) :tag('div') :css('padding', (index == 1 and args.list1padding) or args.listpadding or '0em 0.25em') :wikitext(processItem(listText, args.nowrapitems)) if index == 1 and args['выява'] then row :tag('td') :addClass('noviewer') :addClass('navbox-image') :addClass(args.imageclass) :css('width', '1px') -- Minimize width :css('padding', '0px 0px 0px 2px') :cssText(args.imagestyle) :attr('rowspan', #listnums) :tag('div') :wikitext(processItem(args['выява'])) end end -- -- Tracking categories -- local function needsHorizontalLists() if border == 'subgroup' or args.tracking == 'no' then return false end local listClasses = { ['plainlist'] = true, ['hlist'] = true, ['hlist hnum'] = true, ['hlist hwrap'] = true, ['hlist '] = true, [' hlist'] = true, ['hlist '] = true, } return not (listClasses[args['кляса_сьпісаў']] or listClasses[args['кляса_карткі']]) end local function hasBackgroundColors() for _, key in ipairs({'стыль_загалоўка', 'стыль_групаў', 'базавы_стыль', 'стыль_верх', 'стыль_ніз'}) do if tostring(args[key]):find('background', 1, true) then return true end end end local function hasBorders() for _, key in ipairs({'стыль_групаў', 'базавы_стыль', 'стыль_верх', 'стыль_ніз'}) do if tostring(args[key]):find('border', 1, true) then return true end end end local function isIllegible() local styleratio = require('Модуль:Кантраст колераў')._styleratio for key, style in pairs(args) do if tostring(key):match("style$") then if styleratio{mw.text.unstripNoWiki(style)} < 4.5 then return true end end end return false end local function getTrackingCategories() local cats = {} if needsHorizontalLists() then table.insert(cats, 'Вікіпэдыя:Навігацыйныя шаблёны без гарызантальных сьпісаў') end --if hasBackgroundColors() then table.insert(cats, 'Вікіпэдыя:Навігацыйныя шаблёны з фонавымі колерамі') end if isIllegible() then table.insert(cats, 'Вікіпэдыя:Патэнцыйна нечытэльныя навігацыйныя шаблёны') end if hasBorders() then table.insert(cats, 'Вікіпэдыя:Навігацыйныя шаблёны з рамкамі') end return cats end local function renderTrackingCategories(builder) local title = mw.title.getCurrentTitle() if title.namespace ~= 10 then return end -- not in template space local subpage = title.subpageText if subpage == 'doc' or subpage == 'sandbox' or subpage == 'testcases' then return end for _, cat in ipairs(getTrackingCategories()) do builder:wikitext('[[Катэгорыя:' .. cat .. ']]') end end -- -- Main navbox tables -- local function renderMainTable() local tbl = mw.html.create('table') :addClass('nowraplinks') :addClass(args['кляса_карткі']) if args['назва'] and (args.state ~= 'plain' and args.state ~= 'off') then if args.state == 'collapsed' then args.state = 'mw-collapsed' end tbl :addClass('mw-collapsible') :addClass(args.state or 'autocollapse') end tbl:css('border-spacing', 0) if border == 'subgroup' or border == 'none' then tbl :addClass('navbox-subgroup') :cssText(args['кляса_карткі']) :cssText(args['стыль']) else -- regular navbox - bodystyle and style will be applied to the wrapper table tbl :addClass('navbox-inner') :css('background', 'transparent') :css('color', 'inherit') end tbl:cssText(args.innerstyle) renderTitleRow(tbl) renderAboveRow(tbl) for i, listnum in ipairs(listnums) do renderListRow(tbl, i, listnum) end renderBelowRow(tbl) return tbl end function p._navbox(navboxArgs) args = navboxArgs listnums = {} for k, _ in pairs(args) do if type(k) == 'string' then local listnum = k:match('^сьпіс(%d+)$') if listnum then table.insert(listnums, tonumber(listnum)) end end end table.sort(listnums) border = mw.text.trim(args['рамка'] or args[1] or '') if border == 'нашчадак' then border = 'subgroup' end -- render the main body of the navbox local tbl = renderMainTable() -- render the appropriate wrapper around the navbox, depending on the border param local res = mw.html.create() if border == 'none' then local nav = res:tag('div') :attr('role', 'navigation') :node(tbl) -- aria-labelledby title, otherwise above, otherwise lone group if args['назва'] or args['верх'] or (args['група_інфармацыі1'] and not args['група_інфармацыі2']) then nav:attr('aria-labelledby', mw.uri.anchorEncode(args['назва'] or args['верх'] or args['група_інфармацыі1'])) else nav:attr('aria-label', 'Navbox') end elseif border == 'subgroup' then -- We assume that this navbox is being rendered in a list cell of a parent navbox, and is -- therefore inside a div with padding:0em 0.25em. We start with a
to avoid the -- padding being applied, and at the end add a
to balance out the parent's
res :wikitext('
') :node(tbl) :wikitext('
') else local nav = res:tag('div') :attr('role', 'navigation') :addClass('navbox') :addClass(args.navboxclass) :cssText(args['кляса_карткі']) :cssText(args['стыль']) :css('padding', '3px') :node(tbl) -- aria-labelledby title, otherwise above, otherwise lone group if args['назва'] or args['верх'] or (args['група_інфармацыі1'] and not args['група_інфармацыі2']) then nav:attr('aria-labelledby', mw.uri.anchorEncode(args['назва'] or args['верх'] or args['група_інфармацыі1'])) else nav:attr('aria-label', 'Navbox') end end if (args.nocat or 'false'):lower() == 'false' then renderTrackingCategories(res) end return striped(tostring(res)) end function p.navbox(frame) if not getArgs then getArgs = require('Модуль:Аргумэнты').getArgs end args = getArgs(frame, {wrappers = {'Шаблён:Навігацыйная табліца', 'Шаблён:Навігацыйная табліца2', 'Шаблён:Навігацыйная падтабліца', 'Шаблён:Навігацыйная падтабліца2'}}) -- Read the arguments in the order they'll be output in, to make references number in the right order. local _ _ = args['назва'] _ = args['верх'] for i = 1, 20 do _ = args['група_інфармацыі' .. tostring(i)] _ = args['сьпіс' .. tostring(i)] end _ = args['ніз'] return p._navbox(args) end return p

Tags:

🔥 Trending searches on Wiki Беларуская (тарашкевіца):

Максім БагдановічАнатоль ІвашчанкаВасіль БыкаўГерэйка26 красавікаАдам МіцкевічСупольны парад Вэрмахту і Чырвонай арміі ў Берасьці (1939)ЛіцьвіныІван ЮрынГорадняЗянон ПазьнякППрыметнікОйча нашНавум ГальпяровічМікола МятліцкіГерэльЭлектронная поштаКурапатыJavaСмаленскЛюдвік Нарбут2019ЧарнобыльЛіга чэмпіёнаў ЭГФ 2023—2024 гадоўУніяцтваПадлетакBet365Вагінальны сэксРэжым ЛукашэнкіРамяствоПацукАсьміна (імя)Крыстыян ГюйгэнсЗьміцер ХведарукЛюдміла РублеўскаяГаяна-ЭсэкібаПаўднёвыя славянеВадзім СаранчукоўМенскБеларускі нацыянальны стройНовая зямляСаюзная дзяржава Беларусі і РасеіАлесь СавіцкіДзейнікНясьвіжЛазэрКінатэатар2003ФарбаСусьветная арганізацыя здароўяAizoaceaeТарас ШаўчэнкаЎВоршаУсебеларускі народны сходБеларуская дыяспараЭўрапейскі ЗьвязПошасьцьПарнаграфія ў ЧэхііПаблё ПікасаРаман СкірмунтІван Чыгрынаў1705Беларуская моваСамасей🡆 More