Jump to content

Module:Navbox: Difference between revisions

From Logic World Wiki
Created page with "local p = {} p.navbox = function(frame, args) local args = args or frame:getParent().args local title = args.title or "Title" local above = args.above or "Above" local below = args.below or "Below" args[1] = "Group 1" args[2] = "+ Item 1" args[3] = "+ Item 2" local html = ([[<nowiki> <div class="navbox"> <table class="navbox-inner"> <tr> <th class="navbox-title" scope="col" colspan="3"> <div>%s</div> </th> </tr..."
 
fix white border on dark mode
 
(2 intermediate revisions by the same user not shown)
Line 1: Line 1:
local p = {}
local p = {}


p.navbox = function(frame, args)
local args, groups
    local args = args or frame:getParent().args
    local title = args.title or "Title"
    local above = args.above or "Above"
    local below = args.below or "Below"
    args[1] = "Group 1"
    args[2] = "+ Item 1"
    args[3] = "+ Item 2"


local html = ([[<nowiki>
local function parseGroups()
<div class="navbox">
     local groups = {}
  <table class="navbox-inner">
     local currentGroup = nil
    <tr>
      <th class="navbox-title" scope="col" colspan="3">
        <div>%s</div>
      </th>
    </tr>
]]):format(title)
 
     if above ~= "" then
        html = html..([[
    <tr>
      <td class="navbox-abovebelow" colspan="3">
        <div>%s</div>
      </td>
    </tr>
]]):format(above)
    end
 
     local groupEnd = [[<!-- End group -->
            </div>
      </td>
    </tr>
]]


     local i = 1
     local i = 1
    local inGroup = false
     while args[i] ~= nil do
     while args[i] ~= nil do
         local arg = args[i]
         local arg = args[i]
         i = i + 1
         i = i + 1
        mw.log(arg)


         if arg:sub(1, 2) == "+ " then
         if arg:sub(1, 2) == "+ " then
             html = html..mw.text.trim(arg:sub(3)).." "
             table.insert(currentGroup.items, mw.text.trim(arg:sub(3)))
         else
         else
             if inGroup then
             currentGroup = { title = arg, items = {} }
                html = html..groupEnd
            table.insert(groups, currentGroup)
            end
        end
    end


            html = html..([[
    return groups
     <tr>
end
         <th scope="row" class="navbox-group">%s</th>
 
         <td class="navbox-list1 navbox-list navbox-odd" style="width:100%%;padding:0px;margin:0px">
local function renderTitleRow(tbl)
            <div><!-- Start group -->
     tbl:tag('tr')
]]):format(arg)
         :tag('th')
            inGroup = true
            :attr('class', 'navbox-title')
        end
            :attr('scope', 'col')
            :attr('colspan', '3')
            :tag('div')
                :wikitext(args.title)
end
 
local function renderAboveRow(tbl)
    if args.above and args.above ~= "" then
         tbl:tag('tr')
            :tag('td')
                :attr('class', 'navbox-abovebelow')
                :attr('colspan', '3')
                :tag('div')
                    :wikitext(args.above)
     end
     end
end


     if inGroup then
local function renderBelowRow(tbl)
         html = html..groupEnd
     if args.below and args.below ~= "" then
         tbl:tag('tr')
            :tag('td')
                :attr('class', 'navbox-abovebelow')
                :attr('colspan', '3')
                :tag('div')
                    :wikitext(args.below)
     end
     end
end
local function renderListRow(tbl, group, isOdd)
    local listClass = "navbox-list1 navbox-list"
listClass = listClass..(isOdd and "navbox-odd" or "navbox-even")
    local row = tbl:tag('tr')
    row:tag('th')
        :attr('scope', 'row')
        :addClass('navbox-group')
        :wikitext(group.title)
    local listContent = table.concat(group.items, " ")
   
    mw.log(listContent)
    row:tag('td')
        :addClass(listClass)
        :cssText('width:100%; padding:0 0 0 0.3rem; margin:0px; border-left-width:0;')
        :tag('div')
            :wikitext(listContent)
end
p.navbox = function(frame)
    args = frame:getParent().args
    groups = parseGroups()
    local navbox = mw.html.create('div')
        :addClass('navbox')
    local tbl = navbox:tag('table')
:addClass('nowraplinks')
:addClass("navbox-inner")
:addClass(args.bodyclass)
    renderTitleRow(tbl)
    renderAboveRow(tbl)


     if below ~= nil then
     for i, group in ipairs(groups) do
         html = html..([[
         renderListRow(tbl, group, i % 2 == 1)
    <tr>
      <td class="navbox-abovebelow" colspan="3">
        <div>%s</div>
      </td>
    </tr>
]]):format(below)
     end
     end


     html = html..[[
     renderBelowRow(tbl)
  </table>
</div>
</nowiki>
]]


     return html
     return tostring(navbox)
end
end


return p
return p

Latest revision as of 11:20, 8 September 2025

Documentation for this module may be created at Module:Navbox/doc

local p = {}

local args, groups

local function parseGroups()
    local groups = {}
    local currentGroup = nil

    local i = 1
    while args[i] ~= nil do
        local arg = args[i]
        i = i + 1

        if arg:sub(1, 2) == "+ " then
            table.insert(currentGroup.items, mw.text.trim(arg:sub(3)))
        else
            currentGroup = { title = arg, items = {} }
            table.insert(groups, currentGroup)
        end
    end

    return groups
end

local function renderTitleRow(tbl)
    tbl:tag('tr')
        :tag('th')
            :attr('class', 'navbox-title')
            :attr('scope', 'col')
            :attr('colspan', '3')
            :tag('div')
                :wikitext(args.title)
end

local function renderAboveRow(tbl)
    if args.above and args.above ~= "" then
        tbl:tag('tr')
            :tag('td')
                :attr('class', 'navbox-abovebelow')
                :attr('colspan', '3')
                :tag('div')
                    :wikitext(args.above)
    end
end

local function renderBelowRow(tbl)
    if args.below and args.below ~= "" then
        tbl:tag('tr')
            :tag('td')
                :attr('class', 'navbox-abovebelow')
                :attr('colspan', '3')
                :tag('div')
                    :wikitext(args.below)
    end
end

local function renderListRow(tbl, group, isOdd)
    local listClass = "navbox-list1 navbox-list"
	listClass = listClass..(isOdd and "navbox-odd" or "navbox-even")

    local row = tbl:tag('tr')
    row:tag('th')
        :attr('scope', 'row')
        :addClass('navbox-group')
        :wikitext(group.title)

    local listContent = table.concat(group.items, " ")
    
    mw.log(listContent)

    row:tag('td')
        :addClass(listClass)
        :cssText('width:100%; padding:0 0 0 0.3rem; margin:0px; border-left-width:0;')
        :tag('div')
            :wikitext(listContent)
end

p.navbox = function(frame)
    args = frame:getParent().args

    groups = parseGroups()

    local navbox = mw.html.create('div')
        :addClass('navbox')

    local tbl = navbox:tag('table')
		:addClass('nowraplinks')
		:addClass("navbox-inner")
		:addClass(args.bodyclass)

    renderTitleRow(tbl)
    renderAboveRow(tbl)

    for i, group in ipairs(groups) do
        renderListRow(tbl, group, i % 2 == 1)
    end

    renderBelowRow(tbl)

    return tostring(navbox)
end

return p