Jump to content

Module:Update history navbox: Difference between revisions

From Bconomy Wiki
Render large year headers with month rows and inline release links
Update archive and navigation references after the page moves
 
(2 intermediate revisions by the same user not shown)
Line 8: Line 8:


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


     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 '[[Update history|Browse the chronological index]]'
     end
     end
     return tostring(root)
     return tostring(root)

Latest revision as of 23:57, 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('Update history'):getContent() or ''
    local region = index:match('<!%-%- bconomy:begin version%-index %-%->(.-)<!%-%- bconomy:end version%-index %-%->')
    if not region then
        return '[[Update 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 '[[Update history|Browse the chronological index]]'
    end
    return tostring(root)
end

return p