Амодуль:Navbox


---- This module will implement {{Navbox}}-- local p = {} local HtmlBuilder = require('Module:HtmlBuilder')local argslocal framelocal tableRowAdded = falselocal borderlocal listnums = {} function trim(s)    return (mw.ustring.gsub(s, "^%s*(.-)%s*$", "%1"))endfunction addTableRow(tbl)    -- If any other rows have already been added, then we add a 2px gutter row.    if tableRowAdded then        tbl            .tag('tr')                .css('height', '2px')                .tag('td')    end        tableRowAdded = true        return tbl.tag('tr')end----   Title row--function renderTitleRow(tbl)    if not args.title then return end     local titleRow = addTableRow(tbl)         if args.titlegroup then        titleRow            .tag('th')                .attr('scope', 'row')                .addClass('navbox-group')                .addClass(args.titlegroupclass)                .cssText(args.basestyle)                .cssText(args.groupstyle)                .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.imageleft then titleColspan = titleColspan + 1 end    if args.image then titleColspan = titleColspan + 1 end    if args.titlegroup then titleColspan = titleColspan - 1 end        titleCell        .cssText(args.basestyle)        .cssText(args.titlestyle)        .addClass('navbox-title')        .attr('colspan', titleColspan)      renderNavBar(titleCell)      titleCell         .tag('div')             .addClass(args.titleclass)             .css('font-size', '110%')             .newline()             .wikitext(args.title)endfunction renderNavBar(titleCell)    -- Depending on the presence of the navbar and/or show/hide link, we may need to add a spacer div on the left    -- or right to keep the title centered.    local spacerSide = nil    if args.navbar == 'off' then        -- No navbar, and client wants no spacer, i.e. wants the title to be shifted to the left. If there's        -- also no show/hide link, then we need a spacer on the right to achieve the left shift.        if args.state == 'plain' then spacerSide = 'right' end    elseif args.navbar == 'plain' or args.navbar == 'off' or (not args.name and (border == 'subgroup' or border == 'child' or border == 'none')) then        -- No navbar. Need a spacer on the left to balance out the width of the show/hide link.        if args.state ~= 'plain' then spacerSide = 'left' end    else        -- Will render navbar (or error message). If there's no show/hide link, need a spacer on the right        -- to balance out the width of the navbar.        if args.state == 'plain' then spacerSide = 'right' end        local Navbar = require('Module:Navbar')        titleCell.wikitext(Navbar.navbar({             args.name,             mini = 1,             fontstyle = (args.basestyle or '') .. ';' .. (args.titlestyle or '') ..  ';background:none transparent;border:none;'        }))    end        -- Render the spacer div.    if spacerSide then        titleCell            .tag('span')                .css('float', spacerSide)                .css('width', '6em')                .wikitext('&nbsp;')    endend----   Above/Below rows--function renderAboveRow(tbl)    if not args.above then return end     addTableRow(tbl)        .tag('td')            .addClass('navbox-abovebelow')            .addClass(args.aboveclass)            .cssText(args.basestyle)            .cssText(args.abovestyle)            .attr('colspan', getAboveBelowColspan())            .tag('div')                .newline()                .wikitext(args.above)endfunction renderBelowRow(tbl)    if not args.below then return end        addTableRow(tbl)        .tag('td')            .addClass('navbox-abovebelow')            .addClass(args.belowclass)            .cssText(args.basestyle)            .cssText(args.belowstyle)            .attr('colspan', getAboveBelowColspan())            .tag('div')                .newline()                .wikitext(args.below)endfunction getAboveBelowColspan()    local ret = 2    if args.imageleft then ret = ret + 1 end    if args.image then ret = ret + 1 end    return retend  ----   List rows--function renderListRow(tbl, listnum)    local row = addTableRow(tbl)        if listnum == 1 and args.imageleft then        row            .tag('td')                .addClass('navbox-image')                .addClass(args.imageclass)                .css('width', '0%')                .css('padding', '0px 2px 0px 0px')                .cssText(args.imageleftstyle)                .attr('rowspan', 2 * #listnums - 1)                .tag('div')                    .newline()                    .wikitext(args.imageleft)    end     if args['group' .. listnum] then        local groupCell = row.tag('th')                groupCell               .attr('scope', 'row')               .addClass('navbox-group')               .addClass(args.groupclass)               .cssText(args.basestyle)                       if args.groupwidth then            groupCell.css('width', args.groupwidth)        end                   groupCell            .cssText(args.groupstyle)            .cssText(args['group' .. listnum .. 'style'])            .wikitext(args['group' .. listnum])    end        local listCell = row.tag('td')    if args['group' .. 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.groupwidth then         listCell.css('width', '100%')    end        local isOdd = (listnum % 2) == 1    local rowstyle = args.evenstyle    if isOdd then rowstyle = args.oddstyle end     local evenOdd    if args.evenodd == 'swap' then        if isOdd then evenOdd = 'even' else evenOdd = 'odd' end    else        if isOdd then evenOdd = args.evenodd or 'odd' else evenOdd = args.evenodd or 'even' end    end        listCell        .css('padding', '0px')        .cssText(args.liststyle)        .cssText(rowstyle)        .cssText(args['list' .. listnum .. 'style'])        .addClass('navbox-list')        .addClass('navbox-' .. evenOdd)        .addClass(args.listclass)        .tag('div')            .css('padding', (listnum == 1 and args.list1padding) or args.listpadding or '0em 0.25em')            .newline()            .wikitext(args['list' .. listnum])    if listnum == 1 and args.image then        row            .tag('td')                .addClass('navbox-image')                .addClass(args.imageclass)                .css('width', '0%')                .css('padding', '0px 0px 0px 2px')                .cssText(args.imagestyle)                .attr('rowspan', 2 * #listnums - 1)                .tag('div')                    .newline()                    .wikitext(args.image)    endend----   Tracking categories--function renderTrackingCategories(builder)    local frame = mw.getCurrentFrame()        if not frame then return end        local s = frame:preprocess('{{#ifeq:{{NAMESPACE}}|{{ns:10}}|1|0}}{{SUBPAGENAME}}')    if mw.ustring.sub(s, 1, 1) == '0' then return end -- not in template space    local subpage = mw.ustring.lower(mw.ustring.sub(s, 2))    if subpage == 'doc' or subpage == 'sandbox' or subpage == 'testcases' then return end        for i, cat in ipairs(getTrackingCategories()) do        builder.wikitext('[[Category:' .. cat .. ']]')     endendfunction getTrackingCategories()    local cats = {}    if needsHorizontalLists() then table.insert(cats, 'Navigational boxes without horizontal lists') end    if hasBackgroundColors() then table.insert(cats, 'Шаблоны, использующие фоновые цвета') end    return catsendfunction needsHorizontalLists()    if border == 'child' or border == 'subgroup'  or args.tracking == 'no' then return false end        local listClasses = {'plainlist', 'hlist', 'hlist hnum', 'hlist hwrap', 'hlist vcard', 'vcard hlist', 'hlist vevent'}    for i, cls in ipairs(listClasses) do        if args.listclass == cls or args.bodyclass == cls then            return false        end    end    return trueendfunction hasBackgroundColors()    return args.titlestyle or args.groupstyleend----   Main navbox tables--function renderMainTable()    local tbl = HtmlBuilder.create('table')        .attr('cellspacing', 0)        .addClass('nowraplinks')        .addClass(args.bodyclass)                 if args.title and (args.state ~= 'plain' and args.state ~= 'off') then        tbl            .addClass('collapsible')            .addClass(args.state or 'autocollapse')    end     tbl.css('border-spacing', 0)    if border == 'subgroup' or border == 'child' or border == 'none' then        tbl            .addClass('navbox-subgroup')            .cssText(args.bodystyle)            .cssText(args.style)    else -- regular navobx - 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, listnum)     end    renderBelowRow(tbl)        return tblendfunction p._navbox(navboxArgs)    args = navboxArgs        for k, v in pairs(args) do        local listnum = ('' .. k):match('^list(%d+)$')        if listnum then table.insert(listnums, tonumber(listnum)) end    end    table.sort(listnums)     border = trim(args.border or args[1] or '')    -- render the main body of the navbox    local tbl = renderMainTable()    -- render the appropriate wrapper around the navbox, depending on the border param    local res = HtmlBuilder.create()    if border == 'none' then        res.node(tbl)    elseif border == 'subgroup' or border == 'child' 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 </div> to avoid the        -- padding being applied, and at the end add a <div> to balance out the parent's </div>        res            .tag('/div', {unclosed = true})                .done()            .node(tbl)            .tag('div', {unclosed = true})    else        res            .tag('table')                .attr('cellspacing', 0)                .addClass(args.navboxclass or 'navbox')                .css('border-spacing', 0)                .cssText(args.bodystyle)                .cssText(args.style)                .tag('tr')                    .tag('td')                        .css('padding', '2px')                        .node(tbl)    end     renderTrackingCategories(res)     return tostring(res)end function p.navbox(frame)    -- ParserFunctions considers the empty string to be false, so to preserve the previous     -- behavior of {{navbox}}, change any empty arguments to nil, so Lua will consider    -- them false too.    local args = {}    local parent_args = frame:getParent().args;    -- Out of order parsing bug.    local temp;    temp = parent_args.title;    temp = parent_args.above;    for i = 1, 20 do        temp = parent_args["group" .. tostring(i)];        temp = parent_args["list" .. tostring(i)];    end        temp = parent_args.below;        for k, v in pairs(parent_args) do        if v ~= '' then            args[k] = v        end    end    return p._navbox(args)end return p
🔥 Top keywords: Ихадоу адаҟьаАвикипедиа:АфорумАвикипедиа:Бзиала шәаабеитАвикипедиа:Описание194629Амодуль:Wikidata/numberАмодуль:WikidataCoordsАмодуль:RomanАлахәыла:თეკა/lexiconАвикипедиа:Афорум/Архив 546Цастәи:Аԥшаара411960Амодуль:Time40Аболгар бызшәаАвикипедиаАмодуль:Namespace detect/config1074232005Амодуль:SourcesАвикипедиа:Портал сообществаУкраинаАмодуль:Infobox mapframeАвикипедиа:АцҳаражəҳəарҭаАмодуль:Navbar1995Амодуль:Languages/dataАмодуль:FunctionsКуритибаАлахәыла:WikiDreamer BotАмодуль:Math42Амодуль:Type in locationАҩнуҵҟатәи ҚарҭлиЕиду Америкатәи АштатқәаЕвропа ақалақьтә трамваитә системақәа рсиаЦастәи:АрҽеираҾыцқәаАшаблон:Бӷажәба Аурыс-аԥсуатә жәар (1964)ТҟәарчалАмодуль:LangИталиа22Амодуль:NavboxАмодуль:PagetypeМаиҟәаԥИспаниаАжьырныҳәамза 25ҚырҭтәылаАвикипедиа:Aкатегориақәа алԥшаара1996Амодуль:Pagetype/configАхашаАмодуль:GlobeCoordinateАмодуль:Coordinates validateАмодуль:Wikidata/Formatters/wikibase-entityidАбҵарамза 2267Индиа20031992Авикипедиа:Алфавиттә арбагаАмодуль:CoordinatesАҷартәылатәи Автономтә РеспубликаАнглыз бызшәа13641213Алахәыла:NikkisҚарҭАмодуль:WikidataSelectorsАԥсны АҳәынҭқарраАкатегориа:User skИмереҭи19681911Кипр1991Очамчыра38Арӡынба, Владислав Григори-иԥаУрыстәылаЦандрыԥшьАмодуль:Wikidata/i18nАбҵарамза 27Ԥхынҷкәынмза 30Аҟәа1804Алахәыла:Илья Драконов6Лаҵарамза 18Амодуль:Wikidata1264Ажьырныҳәамза 7Акатегориа:АԥсныРаҷа-Лечхумии Аладатәи Шәантәылеи56