Jump to content

Module:Update history navbox: Difference between revisions

From Bconomy Wiki
Render large year headers with month rows and inline release links
Match the Main Page navigation style sitewide and keep update navigation expanded
Line 15: Line 15:


     local root = mw.html.create('table'):addClass('bc-navbox-table bc-navbox-years')
     local root = mw.html.create('table'):addClass('bc-navbox-table bc-navbox-years')
     local latestYear, year, month, monthTable, list
     local year, month, monthTable, list
     for y, m, link in region:gmatch('| data%-sort%-value="(%d%d%d%d)%-(%d%d)%-%d%d"[^\n]*\n| (%[%[[^\n]+%]%])\n') do
     for y, m, link in region:gmatch('| data%-sort%-value="(%d%d%d%d)%-(%d%d)%-%d%d"[^\n]*\n| (%[%[[^\n]+%]%])\n') do
        if not latestYear then
            latestYear = y
        end
         if year ~= y then
         if year ~= y then
             year, month = y, nil
             year, month = y, nil
             local row = root:tag('tr')
             local row = root:tag('tr')
             row:tag('th'):attr('scope', 'row'):addClass('bc-navbox-year'):wikitext(y)
             row:tag('th'):attr('scope', 'row'):addClass('bc-navbox-year'):wikitext(y)
             local panel = row:tag('td'):addClass('bc-navbox-year-body')
             monthTable = row:tag('td'):addClass('bc-navbox-year-body')
                :tag('div'):addClass('bc-navbox-year-details mw-collapsible')
                :attr('data-expandtext', 'Show months')
                :attr('data-collapsetext', 'Hide months')
            if y ~= latestYear then
                panel:addClass('mw-collapsed')
            end
            panel:tag('div'):addClass('bc-navbox-month-heading'):wikitext('Updates by month')
            monthTable = panel:tag('div'):addClass('mw-collapsible-content')
                 :tag('table'):addClass('bc-navbox-months')
                 :tag('table'):addClass('bc-navbox-months')
         end
         end
Line 47: Line 36:
         end
         end
     end
     end
     if not latestYear then
     if not year then
         return '[[Version history|Browse the chronological index]]'
         return '[[Version history|Browse the chronological index]]'
     end
     end

Revision as of 23:33, 3 November 2026

Documentation for this module may be created at Module:Update history navbox/doc

local p = {}

local months = {
    'January', 'February', 'March', 'April', 'May', 'June',
    'July', 'August', 'September', 'October', 'November', 'December'
}


function p.render()
    local index = mw.title.new('Version history'):getContent() or ''
    local region = index:match('<!%-%- bconomy:begin version%-index %-%->(.-)<!%-%- bconomy:end version%-index %-%->')
    if not region then
        return '[[Version history|Browse the chronological index]]'
    end

    local root = mw.html.create('table'):addClass('bc-navbox-table bc-navbox-years')
    local year, month, monthTable, list
    for y, m, link in region:gmatch('| data%-sort%-value="(%d%d%d%d)%-(%d%d)%-%d%d"[^\n]*\n| (%[%[[^\n]+%]%])\n') do
        if year ~= y then
            year, month = y, nil
            local row = root:tag('tr')
            row:tag('th'):attr('scope', 'row'):addClass('bc-navbox-year'):wikitext(y)
            monthTable = row:tag('td'):addClass('bc-navbox-year-body')
                :tag('table'):addClass('bc-navbox-months')
        end
        if month ~= m then
            month = m
            local monthRow = monthTable:tag('tr')
            monthRow:tag('th'):attr('scope', 'row'):wikitext(months[tonumber(m)] or m)
            list = monthRow:tag('td'):tag('ul'):addClass('bc-release-links')
        end
        local target, label = link:match('^%[%[([^|%]]+)|?([^%]]*)%]%]$')
        if target then
            label = (label ~= '' and label or target):gsub('^V(%d)', 'v%1')
            list:tag('li'):wikitext('[[' .. target .. '|' .. label .. ']]')
        end
    end
    if not year then
        return '[[Version history|Browse the chronological index]]'
    end
    return tostring(root)
end

return p